diff --git a/frappe/core/page/usage_info/usage_info.js b/frappe/core/page/usage_info/usage_info.js
deleted file mode 100644
index eec5411ca4..0000000000
--- a/frappe/core/page/usage_info/usage_info.js
+++ /dev/null
@@ -1,53 +0,0 @@
-frappe.pages['usage-info'].on_page_load = function(wrapper) {
- var page = frappe.ui.make_app_page({
- parent: wrapper,
- title: 'Usage Info',
- single_column: true
- });
-
- frappe.call({
- method: "frappe.limits.get_usage_info",
- callback: function(r) {
- var usage_info = r.message;
- if (!usage_info) {
- // nothing to show
- // TODO improve this
- return;
- }
-
- let limits = usage_info.limits;
- let database_percent = (limits.space_usage.database_size / limits.space) * 100;
- let files_percent = (limits.space_usage.files_size / limits.space) * 100;
- let backup_percent = (limits.space_usage.backup_size / limits.space) * 100;
-
- let total_consumed = database_percent + files_percent + backup_percent;
-
- let last_part = backup_percent;
- if (total_consumed > 100) {
- last_part = backup_percent - (total_consumed - 100);
- }
- backup_percent = last_part;
-
- let usage_message = '';
- if (limits.space_usage.total > limits.space) {
- usage_message = __('You have used up all of the space allotted to you. Please buy more space in your subscription.');
- } else {
- let available = flt(limits.space - limits.space_usage.total, 2);
- usage_message = __('{0} available out of {1}', [(available + ' MB').bold(), (limits.space + ' MB').bold()]);
- }
-
- $(frappe.render_template("usage_info", Object.assign(usage_info, {
- database_percent,
- files_percent,
- backup_percent,
- usage_message
- }))).appendTo(page.main);
-
- var btn_text = usage_info.limits.users == 1 ? __("Upgrade") : __("Renew / Upgrade");
- $(page.main).find('.btn-primary').html(btn_text).on('click', () => {
- window.open(usage_info.upgrade_url);
- });
- }
- });
-
-}
diff --git a/frappe/core/page/usage_info/usage_info.json b/frappe/core/page/usage_info/usage_info.json
deleted file mode 100644
index 37f8c71e15..0000000000
--- a/frappe/core/page/usage_info/usage_info.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "content": null,
- "creation": "2016-06-02 18:14:53.475842",
- "docstatus": 0,
- "doctype": "Page",
- "idx": 0,
- "modified": "2016-06-02 18:14:53.475842",
- "modified_by": "Administrator",
- "module": "Core",
- "name": "usage-info",
- "owner": "Administrator",
- "page_name": "usage-info",
- "roles": [
- {
- "role": "System Manager"
- }
- ],
- "script": null,
- "standard": "Yes",
- "style": null,
- "title": "Usage Info"
-}
\ No newline at end of file
diff --git a/frappe/email/doctype/email_group/email_group.py b/frappe/email/doctype/email_group/email_group.py
index 25c383dc97..70210faf37 100755
--- a/frappe/email/doctype/email_group/email_group.py
+++ b/frappe/email/doctype/email_group/email_group.py
@@ -13,13 +13,13 @@ class EmailGroup(Document):
def onload(self):
singles = [d.name for d in frappe.db.get_all("DocType", "name", {"issingle": 1})]
self.get("__onload").import_types = [{"value": d.parent, "label": "{0} ({1})".format(d.parent, d.label)} \
- for d in frappe.db.get_all("DocField", ("parent", "label"), {"options": "Email"})
+ for d in frappe.db.get_all("DocField", ("parent", "label"), {"options": "Email"})
if d.parent not in singles]
def import_from(self, doctype):
"""Extract Email Addresses from given doctype and add them to the current list"""
meta = frappe.get_meta(doctype)
- email_field = [d.fieldname for d in meta.fields
+ email_field = [d.fieldname for d in meta.fields
if d.fieldtype in ("Data", "Small Text", "Text", "Code") and d.options=="Email"][0]
unsubscribed_field = "unsubscribed" if meta.get_field("unsubscribed") else None
added = 0
@@ -90,13 +90,3 @@ def add_subscribers(name, email_list):
return frappe.get_doc("Email Group", name).update_total_subscribers()
-def restrict_email_group(doc, method):
- from frappe.limits import get_limits
-
- email_group_limit = get_limits().get('email_group')
- if not email_group_limit:
- return
-
- email_group = frappe.get_doc("Email Group", doc.email_group)
- if email_group.get_total_subscribers() >= email_group_limit:
- frappe.throw(_("Please Upgrade to add more than {0} subscribers").format(email_group_limit))
diff --git a/frappe/email/doctype/email_queue/email_queue.py b/frappe/email/doctype/email_queue/email_queue.py
index edbf6879c8..bed0118c58 100644
--- a/frappe/email/doctype/email_queue/email_queue.py
+++ b/frappe/email/doctype/email_queue/email_queue.py
@@ -7,7 +7,6 @@ import frappe
from frappe import _
from frappe.model.document import Document
from frappe.email.queue import send_one
-from frappe.limits import get_limits
from frappe.utils import now_datetime
@@ -17,13 +16,6 @@ class EmailQueue(Document):
for r in recipients:
self.append("recipients", {"recipient":r, "status":"Not Sent"})
- def on_trash(self):
- self.prevent_email_queue_delete()
-
- def prevent_email_queue_delete(self):
- '''If email limit is set, don't allow users to delete Email Queue record'''
- if get_limits().emails and frappe.session.user != 'Administrator':
- frappe.throw(_('Only Administrator can delete Email Queue'))
def get_duplicate(self, recipients):
values = self.as_dict()
diff --git a/frappe/hooks.py b/frappe/hooks.py
index 545ac8c3e8..446b38464c 100644
--- a/frappe/hooks.py
+++ b/frappe/hooks.py
@@ -36,7 +36,6 @@ app_include_js = [
"assets/js/form.min.js",
"assets/js/control.min.js",
"assets/js/report.min.js",
- "assets/frappe/js/frappe/toolbar.js"
]
app_include_css = [
"assets/css/desk.min.css",
@@ -76,7 +75,6 @@ calendars = ["Event"]
on_session_creation = [
"frappe.core.doctype.activity_log.feed.login_feed",
"frappe.core.doctype.user.user.notify_admin_access_to_system_manager",
- "frappe.limits.check_if_expired",
"frappe.utils.scheduler.reset_enabled_scheduler_events",
]
@@ -138,9 +136,6 @@ doc_events = {
"on_change": [
"frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points"
],
- },
- "Email Group Member": {
- "validate": "frappe.email.doctype.email_group.email_group.restrict_email_group"
}
}
@@ -161,8 +156,7 @@ scheduler_events = {
'frappe.model.utils.user_settings.sync_user_settings',
"frappe.utils.error.collect_error_snapshots",
"frappe.desk.page.backups.backups.delete_downloadable_backups",
- "frappe.limits.update_space_usage",
- "frappe.limits.update_site_usage",
+ "frappe.desk.doctype.auto_repeat.auto_repeat.make_auto_repeat_entry",
"frappe.deferred_insert.save_to_db",
"frappe.desk.form.document_follow.send_hourly_updates",
],
@@ -174,7 +168,6 @@ scheduler_events = {
"frappe.sessions.clear_expired_sessions",
"frappe.email.doctype.notification.notification.trigger_daily_alerts",
"frappe.realtime.remove_old_task_logs",
- "frappe.utils.scheduler.disable_scheduler_on_expiry",
"frappe.utils.scheduler.restrict_scheduler_events_if_dormant",
"frappe.email.doctype.auto_email_report.auto_email_report.send_daily",
"frappe.core.doctype.activity_log.activity_log.clear_authentication_logs",
@@ -236,7 +229,6 @@ bot_parsers = [
]
setup_wizard_exception = "frappe.desk.page.setup_wizard.setup_wizard.email_setup_wizard_exception"
-before_write_file = "frappe.limits.validate_space_limit"
before_migrate = ['frappe.patches.v11_0.sync_user_permission_doctype_before_migrate.execute']
after_migrate = ['frappe.website.doctype.website_theme.website_theme.generate_theme_files_if_not_exist']
diff --git a/frappe/limits.py b/frappe/limits.py
deleted file mode 100755
index 8295de5a34..0000000000
--- a/frappe/limits.py
+++ /dev/null
@@ -1,233 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.utils import now_datetime, getdate, flt, cint, get_fullname
-from frappe.installer import update_site_config
-from frappe.utils.data import formatdate
-from frappe.utils.user import get_enabled_system_users, disable_users
-from frappe.utils.__init__ import get_site_info
-import os, subprocess, json
-from six.moves.urllib.parse import parse_qsl, urlsplit, urlunsplit, urlencode
-from six import string_types
-
-class SiteExpiredError(frappe.ValidationError):
- http_status_code = 417
-
-EXPIRY_WARNING_DAYS = 10
-
-def check_if_expired():
- """check if account is expired. If expired, do not allow login"""
- if not has_expired():
- return
-
- limits = get_limits()
- expiry = limits.get("expiry")
-
- if not expiry:
- return
-
- expires_on = formatdate(limits.get("expiry"))
- support_email = limits.get("support_email")
-
- if limits.upgrade_url:
- message = _("""Your subscription expired on {0}. To renew, {1}.""").format(expires_on, get_upgrade_link(limits.upgrade_url))
-
- elif support_email:
- message = _("""Your subscription expired on {0}. To renew, please send an email to {1}.""").format(expires_on, support_email)
-
- else:
- # no recourse just quit
- return
-
- frappe.throw(message, SiteExpiredError)
-
-def has_expired():
- if frappe.session.user=="Administrator":
- return False
-
- expires_on = get_limits().expiry
- if not expires_on:
- return False
-
- if now_datetime().date() <= getdate(expires_on):
- return False
-
- return True
-
-def get_expiry_message():
- if "System Manager" not in frappe.get_roles():
- return ""
-
- limits = get_limits()
- if not limits.expiry:
- return ""
-
- expires_on = getdate(get_limits().get("expiry"))
- today = now_datetime().date()
-
- message = ""
- if today > expires_on:
- message = _("Your subscription has expired.")
- else:
- days_to_expiry = (expires_on - today).days
-
- if days_to_expiry == 0:
- message = _("Your subscription will expire today.")
-
- elif days_to_expiry == 1:
- message = _("Your subscription will expire tomorrow.")
-
- elif days_to_expiry <= EXPIRY_WARNING_DAYS:
- message = _("Your subscription will expire on {0}.").format(formatdate(expires_on))
-
- if message and limits.upgrade_url:
- upgrade_link = get_upgrade_link(limits.upgrade_url)
- message += ' ' + _('To renew, {0}.').format(upgrade_link)
-
- return message
-
-@frappe.whitelist()
-def get_usage_info():
- '''Get data to show for Usage Info'''
- # imported here to prevent circular import
- from frappe.email.queue import get_emails_sent_this_month
-
- limits = get_limits()
- if not (limits and any([limits.users, limits.space, limits.emails, limits.expiry])):
- # no limits!
- return
-
- limits.space = (limits.space or 0) * 1024.0 # to MB
- if not limits.space_usage:
- # hack! to show some progress
- limits.space_usage = {
- 'database_size': 26,
- 'files_size': 1,
- 'backup_size': 1,
- 'total': 28
- }
-
- usage_info = frappe._dict({
- 'limits': limits,
- 'enabled_users': len(get_enabled_system_users()),
- 'emails_sent': get_emails_sent_this_month(),
- 'space_usage': limits.space_usage['total'],
- })
-
- if limits.expiry:
- usage_info['expires_on'] = formatdate(limits.expiry)
- usage_info['days_to_expiry'] = (getdate(limits.expiry) - getdate()).days
-
- if limits.upgrade_url:
- usage_info['upgrade_url'] = get_upgrade_url(limits.upgrade_url)
-
- return usage_info
-
-def get_upgrade_url(upgrade_url):
- parts = urlsplit(upgrade_url)
- params = dict(parse_qsl(parts.query))
- params.update({
- 'site': frappe.local.site,
- 'email': frappe.session.user,
- 'full_name': get_fullname(),
- 'country': frappe.db.get_value("System Settings", "System Settings", 'country')
- })
-
- query = urlencode(params, doseq=True)
- url = urlunsplit((parts.scheme, parts.netloc, parts.path, query, parts.fragment))
- return url
-
-def get_upgrade_link(upgrade_url, label=None):
- upgrade_url = get_upgrade_url(upgrade_url)
- upgrade_link = '{click_here}'.format(upgrade_url=upgrade_url, click_here=label or _('click here'))
- return upgrade_link
-
-def get_limits():
- '''
- "limits": {
- "users": 1,
- "space": 0.5, # in GB
- "emails": 1000 # per month
- "expiry": "2099-12-31"
- }
- '''
- return frappe._dict(frappe.local.conf.limits or {})
-
-def update_limits(limits_dict):
- '''Add/Update limit in site_config'''
- limits = get_limits()
- limits.update(limits_dict)
- update_site_config("limits", limits, validate=False)
- disable_users(limits)
- frappe.local.conf.limits = limits
-
-def clear_limit(key):
- '''Remove a limit option from site_config'''
- limits = get_limits()
- to_clear = [key] if isinstance(key, string_types) else key
- for key in to_clear:
- if key in limits:
- del limits[key]
-
- update_site_config("limits", limits, validate=False)
- frappe.conf.limits = limits
-
-def validate_space_limit(file_size):
- """Stop from writing file if max space limit is reached"""
- from frappe.core.doctype.file.file import MaxFileSizeReachedError
-
- limits = get_limits()
- if not limits.space:
- return
-
- # to MB
- space_limit = flt(limits.space * 1024.0, 2)
-
- # in MB
- usage = frappe._dict(limits.space_usage or {})
- if not usage:
- # first time
- usage = frappe._dict(update_space_usage())
-
- file_size = file_size / (1024.0 ** 2)
-
- if flt(flt(usage.total) + file_size, 2) > space_limit:
- # Stop from attaching file
- frappe.throw(_("You have exceeded the max space of {0} for your plan. {1}.").format(
- "{0}MB".format(cint(space_limit)) if (space_limit < 1024) else "{0}GB".format(limits.space),
- '{0}'.format(_("Click here to check your usage or upgrade to a higher plan"))),
- MaxFileSizeReachedError)
-
- # update files size in frappe subscription
- usage.files_size = flt(usage.files_size) + file_size
- update_limits({ 'space_usage': usage })
-
-def update_space_usage():
- # public and private files
- files_size = get_folder_size(frappe.get_site_path("public", "files"))
- files_size += get_folder_size(frappe.get_site_path("private", "files"))
-
- backup_size = get_folder_size(frappe.get_site_path("private", "backups"))
- database_size = frappe.db.get_database_size()
-
- usage = {
- 'files_size': flt(files_size, 2),
- 'backup_size': flt(backup_size, 2),
- 'database_size': flt(database_size, 2),
- 'total': flt(flt(files_size) + flt(backup_size) + flt(database_size), 2)
- }
-
- update_limits({ 'space_usage': usage })
-
- return usage
-
-def get_folder_size(path):
- '''Returns folder size in MB if it exists'''
- if os.path.exists(path):
- return flt(subprocess.check_output(['du', '-ms', path]).split()[0], 2)
-
-def update_site_usage():
- data = get_site_info()
- with open(os.path.join(frappe.get_site_path(), 'site_data.json'), 'w') as outfile:
- json.dump(data, outfile)
- outfile.close()
diff --git a/frappe/patches.txt b/frappe/patches.txt
index bb73330f51..b3da5a6067 100644
--- a/frappe/patches.txt
+++ b/frappe/patches.txt
@@ -156,7 +156,6 @@ frappe.patches.v7_0.update_send_after_in_bulk_email
execute:frappe.db.sql('''delete from `tabSingles` where doctype="Email Settings"''') # 2016-06-13
execute:frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''")
frappe.patches.v7_0.rename_newsletter_list_to_email_group
-frappe.patches.v7_0.replace_upgrade_link_limit
frappe.patches.v7_0.set_email_group
frappe.patches.v7_1.setup_integration_services #2016-10-27
frappe.patches.v7_1.rename_chinese_language_codes
diff --git a/frappe/patches/v7_0/replace_upgrade_link_limit.py b/frappe/patches/v7_0/replace_upgrade_link_limit.py
deleted file mode 100644
index c178a87466..0000000000
--- a/frappe/patches/v7_0/replace_upgrade_link_limit.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.limits import get_limits, clear_limit, update_limits
-
-def execute():
- limits = get_limits()
- if limits and limits.upgrade_link:
- upgrade_url = limits.upgrade_link
- clear_limit('upgrade_link')
- update_limits({'upgrade_url': upgrade_url})
diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js
index fbfcd68fee..45f23611b4 100644
--- a/frappe/public/js/frappe/list/list_sidebar.js
+++ b/frappe/public/js/frappe/list/list_sidebar.js
@@ -32,11 +32,9 @@ frappe.views.ListSidebar = class ListSidebar {
this.setup_keyboard_shortcuts();
this.setup_list_group_by();
- let limits = frappe.boot.limits;
-
- if (limits.upgrade_url && limits.expiry && !frappe.flags.upgrade_dismissed) {
- this.setup_upgrade_box();
- }
+ // do not remove
+ // used to trigger custom scripts
+ $(document).trigger('list_sidebar_setup');
if (this.list_view.list_view_settings && this.list_view.list_view_settings.disable_sidebar_stats) {
this.sidebar.find('.sidebar-stat').remove();
@@ -274,35 +272,6 @@ frappe.views.ListSidebar = class ListSidebar {
});
}
- setup_upgrade_box() {
- let upgrade_list = $(`
`).appendTo(this.sidebar);
-
- // Show Renew/Upgrade button,
- // if account is holding one user free plan or
- // if account's expiry date within range of 30 days from today's date
-
- let upgrade_date = frappe.datetime.add_days(frappe.datetime.get_today(), 30);
- if (frappe.boot.limits.users === 1 || upgrade_date >= frappe.boot.limits.expiry) {
- let upgrade_box = $(`
-
-
Go Premium
-
Upgrade to a premium plan with more users, storage and priority support.
-
-
`).appendTo(upgrade_list);
-
- upgrade_box.find('.btn-upgrade').on('click', () => {
- frappe.set_route('usage-info');
- });
-
- upgrade_box.find('.close').on('click', () => {
- upgrade_list.remove();
- frappe.flags.upgrade_dismissed = 1;
- });
- }
- }
get_cat_tags() {
return this.cat_tags;
diff --git a/frappe/public/js/frappe/toolbar.js b/frappe/public/js/frappe/toolbar.js
deleted file mode 100755
index ce208d566a..0000000000
--- a/frappe/public/js/frappe/toolbar.js
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd.
-// For license information, please see license.txt
-
-$(document).on("toolbar_setup", function() {
- var help_links = [];
- var limits = frappe.boot.limits;
-
- if(frappe.boot.expiry_message) {
- var expiry_message_shown = localStorage.expiry_message_shown;
-
- // if message is more than a day old, show message again
- if (!(expiry_message_shown
- && (new Date() - new Date(expiry_message_shown) < 86400000))) {
-
- localStorage.expiry_message_shown = new Date();
- frappe.msgprint(frappe.boot.expiry_message);
- }
- }
-
- $(help_links.join("\n")).insertBefore($("#toolbar-user").find(".divider:last"));
-
- if(limits.space || limits.users || limits.expiry || limits.emails) {
- help_links = [];
- help_links.push('