diff --git a/frappe/__init__.py b/frappe/__init__.py index 18122677b8..fecde0e9c3 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = '7.1.14' +__version__ = '7.1.15' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index e8170074e6..69673e945d 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -193,6 +193,10 @@ def set_desktop_icons(visible_list, ignore_duplicate=True): except frappe.UniqueValidationError, e: if not ignore_duplicate: raise e + else: + visible_list.remove(module_name) + if frappe.message_log: + frappe.message_log.pop() # set the order set_order(visible_list) diff --git a/frappe/desk/page/backups/backups.py b/frappe/desk/page/backups/backups.py index a0a29f6b2f..145693972c 100644 --- a/frappe/desk/page/backups/backups.py +++ b/frappe/desk/page/backups/backups.py @@ -25,7 +25,7 @@ def get_context(context): files = [('/backups/' + _file, get_time(os.path.join(path, _file)), - get_size(os.path.join(path, _file))) for _file in files] + get_size(os.path.join(path, _file))) for _file in files if _file.endswith('sql.gz')] files.sort(key=lambda x: x[1], reverse=True) return {"files": files} @@ -37,8 +37,9 @@ def get_scheduled_backup_limit(): def cleanup_old_backups(site_path, files, limit): backup_paths = [] for f in files: - _path = os.path.abspath(os.path.join(site_path, f)) - backup_paths.append(_path) + if f.endswith('sql.gz'): + _path = os.path.abspath(os.path.join(site_path, f)) + backup_paths.append(_path) backup_paths = sorted(backup_paths, key=os.path.getctime) files_to_delete = len(backup_paths) - limit diff --git a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py index c02bbf4a8f..1def02b826 100644 --- a/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py +++ b/frappe/integrations/doctype/dropbox_settings/dropbox_settings.py @@ -198,7 +198,7 @@ def send_email(success, service_name, error_status=None): if not frappe.db: frappe.connect() - recipients = split_emails(frappe.db.get_value("Dropbox Backup", None, "send_notifications_to")) + recipients = split_emails(frappe.db.get_value("Dropbox Settings", None, "send_notifications_to")) frappe.sendmail(recipients=recipients, subject=subject, message=message) def backup_to_dropbox(): diff --git a/frappe/print/page/print_format_builder/print_format_builder.js b/frappe/print/page/print_format_builder/print_format_builder.js index 0feb21bfac..fac5e38589 100644 --- a/frappe/print/page/print_format_builder/print_format_builder.js +++ b/frappe/print/page/print_format_builder/print_format_builder.js @@ -198,10 +198,12 @@ frappe.PrintFormatBuilder = Class.extend({ this.setup_add_section(); this.setup_edit_heading(); this.setup_field_settings(); + this.setup_html_data(); }, prepare_data: function() { this.print_heading_template = null; this.data = JSON.parse(this.print_format.format_data || "[]"); + this.fields_dict = {}; if(!this.data.length) { // new layout this.data = this.meta.fields; @@ -212,6 +214,15 @@ frappe.PrintFormatBuilder = Class.extend({ this.data = this.data.splice(1); } } + + if(!this.print_heading_template) { + // default print heading template + this.print_heading_template = ''; + } + this.layout_data = []; var section = null, column = null, me = this; @@ -234,6 +245,7 @@ frappe.PrintFormatBuilder = Class.extend({ // break the layout into sections and columns // so that it is easier to render in a template $.each(this.data, function(i, f) { + me.fields_dict[f.fieldname] = f; if(!f.name && f.fieldname) { // from format_data (designed format) // print_hide should always be false @@ -467,6 +479,14 @@ frappe.PrintFormatBuilder = Class.extend({ return false; }); }, + setup_html_data: function() { + // set `data` for Custom HTML fields + var me = this; + this.page.main.find('[data-fieldtype="Custom HTML"]').each(function() { + $(this).find('.html-content') + .data('content', me.fields_dict[$(this).attr('data-fieldname')].options); + }) + }, update_columns_in_section: function(section, no_of_columns, new_no_of_columns) { var col_size = 12 / new_no_of_columns, me = this, @@ -527,12 +547,12 @@ frappe.PrintFormatBuilder = Class.extend({ }, setup_edit_heading: function() { var me = this; - if (!me.print_heading_template) { - $(this.page.main.find(".print-heading")).html('

'+me.print_format.doc_type+'
{{ doc.name }}

') - } + var $heading = this.page.main.find(".print-format-builder-print-heading"); + + // set content property + $heading.data('content', this.print_heading_template); + this.page.main.find(".edit-heading").on("click", function() { - var $heading = $(this).parents(".print-format-builder-header:first") - .find(".print-format-builder-print-heading"); var d = me.get_edit_html_dialog(__("Edit Heading"), __("Heading"), $heading); }) }, @@ -657,12 +677,12 @@ frappe.PrintFormatBuilder = Class.extend({ }); // set existing content in input - content = $content.attr('data-html-content'); + content = $content.data('content') || ""; if(content.indexOf(me.get_no_content())!==-1) content = ""; d.set_input("content", content); d.set_primary_action(__("Update"), function() { - $content.attr('data-html-content', d.get_value("content")); + $content.data('content', d.get_value("content")); $content.html(d.get_value("content")); d.hide(); }); @@ -678,9 +698,11 @@ frappe.PrintFormatBuilder = Class.extend({ // add print heading as the first field // this will be removed and set as a doc property // before rendering - data.push({"fieldname": "print_heading_template", - fieldtype:"HTML", - options: this.page.main.find(".print-format-builder-print-heading").html()}); + data.push({ + fieldname: "print_heading_template", + fieldtype:"Custom HTML", + options: this.page.main.find(".print-format-builder-print-heading").data('content') + }); // add pages this.page.main.find(".print-format-builder-section").each(function() { @@ -722,7 +744,7 @@ frappe.PrintFormatBuilder = Class.extend({ if(fieldtype==="Custom HTML") { // custom html as HTML field df.fieldtype = "HTML"; - df.options = $this.find(".html-content").attr('data-html-content'); + df.options = $this.find(".html-content").data('content'); } data.push(df); }); diff --git a/frappe/print/page/print_format_builder/print_format_builder_field.html b/frappe/print/page/print_format_builder/print_format_builder_field.html index 89bc0b2d3a..33bfd0a9c6 100644 --- a/frappe/print/page/print_format_builder/print_format_builder_field.html +++ b/frappe/print/page/print_format_builder/print_format_builder_field.html @@ -20,8 +20,7 @@ {%= __("Edit HTML") %} -
+
{{ field.options || me.get_no_content() }}
{% } else { %} {{ field.label }} diff --git a/frappe/print/page/print_format_builder/print_format_builder_layout.html b/frappe/print/page/print_format_builder/print_format_builder_layout.html index 0d9c9293a7..6c6d567b56 100644 --- a/frappe/print/page/print_format_builder/print_format_builder_layout.html +++ b/frappe/print/page/print_format_builder/print_format_builder_layout.html @@ -1,28 +1,24 @@
-
- {%= __("Drag elements from the sidebar to add. Drag them back to trash.") %}

-
- - - +
+ {%= __("Drag elements from the sidebar to add. Drag them back to trash.") %}

+
+ + +