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.print_format.doc_type)
+ +'
{{ doc.name }}\
+
';
+ }
+
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.") %}
-
-
-
- {% for(var i=0; i < data.length; i++) { %}
- {%= frappe.render_template("print_format_builder_section",
- {section: data[i], me:me}) %}
- {% } %}
-
-
+
+ {%= __("Drag elements from the sidebar to add. Drag them back to trash.") %}
+
+
+
+ {% for(var i=0; i < data.length; i++) { %}
+ {%= frappe.render_template("print_format_builder_section",
+ {section: data[i], me:me}) %}
+ {% } %}
+
+