From 4213bdece62a36dcdc27f06598a852f94726c453 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 23 Mar 2016 13:58:08 +0530 Subject: [PATCH 01/20] [hot-fix] new user --- frappe/core/doctype/user/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/doctype/user/user.js b/frappe/core/doctype/user/user.js index 9bc055836e..707c6f4b32 100644 --- a/frappe/core/doctype/user/user.js +++ b/frappe/core/doctype/user/user.js @@ -20,7 +20,7 @@ frappe.ui.form.on('User', { }, onload: function(frm) { - if(has_common(user_roles, ["Administrator", "System Manager"])) { + if(has_common(user_roles, ["Administrator", "System Manager"]) && !frm.doc.__islocal) { if(!frm.roles_editor) { var role_area = $('
') .appendTo(frm.fields_dict.roles_html.wrapper); From 29d4d7b7580e5354173f8fcdccc1e3da15aedac8 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 23 Mar 2016 14:30:42 +0600 Subject: [PATCH 02/20] bumped to version 6.27.5 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index c28b13d2d8..a8c8c39c72 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "6.27.4" +__version__ = "6.27.5" diff --git a/frappe/hooks.py b/frappe/hooks.py index 33ed55cbba..68460c00e6 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -5,7 +5,7 @@ app_publisher = "Frappe Technologies" app_description = "Full stack web framework with Python, Javascript, MariaDB, Redis, Node" app_icon = "octicon octicon-circuit-board" -app_version = "6.27.4" +app_version = "6.27.5" app_color = "orange" source_link = "https://github.com/frappe/frappe" app_license = "MIT" diff --git a/setup.py b/setup.py index 8cc565fe6e..531925573e 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages from pip.req import parse_requirements -version = "6.27.4" +version = "6.27.5" requirements = parse_requirements("requirements.txt", session="") setup( From 41b8d3916a329a790e4d72ff63108557564e2a06 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 25 Mar 2016 10:47:48 +0530 Subject: [PATCH 03/20] [fix] email alert condition --- .../doctype/email_alert/email_alert.json | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/frappe/email/doctype/email_alert/email_alert.json b/frappe/email/doctype/email_alert/email_alert.json index b329c4ccae..58fe7f19e5 100644 --- a/frappe/email/doctype/email_alert/email_alert.json +++ b/frappe/email/doctype/email_alert/email_alert.json @@ -18,6 +18,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Enabled", @@ -41,6 +42,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Filters", @@ -65,6 +67,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 1, "in_filter": 0, "in_list_view": 1, "label": "Subject", @@ -88,6 +91,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "Document Type", @@ -112,6 +116,7 @@ "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "Send Alert On", @@ -138,6 +143,7 @@ "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Reference Date", @@ -164,6 +170,7 @@ "fieldtype": "Int", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Days Before or After", @@ -189,6 +196,7 @@ "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Value Changed", @@ -204,6 +212,30 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -211,9 +243,10 @@ "depends_on": "", "description": "Optional: The alert will be sent if this expression is true", "fieldname": "condition", - "fieldtype": "Data", + "fieldtype": "Code", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "Condition", @@ -237,6 +270,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -259,11 +293,12 @@ "fieldtype": "HTML", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, "no_copy": 0, - "options": "

Condition Examples:

\n
doc.status==\"Open\"\ndoc.due_date==nowdate()\ndoc.total > 40000\n
\n

Hints:

\n
    \n
  1. To check for an event every day, select \"Date Change\" in Event
  2. \n
  3. To send an alert if a particular value changes, select \"Value Change\"
  4. \n
", + "options": "

Condition Examples:

\n
doc.status==\"Open\"\ndoc.due_date==nowdate()\ndoc.total > 40000\n
\n

Hints:

\n
    \n
  1. To check for an event every day, select \"Date Change\" in Event
  2. \n
  3. To send an alert if a particular value changes, select \"Value Change\"
  4. \n
", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -282,6 +317,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Recipients", @@ -305,6 +341,7 @@ "fieldtype": "Table", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Recipients", @@ -329,6 +366,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Message", @@ -352,6 +390,7 @@ "fieldtype": "Text", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Message", @@ -375,6 +414,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Attach Print", @@ -399,12 +439,13 @@ "fieldtype": "HTML", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Message Examples", "length": 0, "no_copy": 0, - "options": "
Message Example
\n\n
\n<h3>Order Overdue</h3>\n\n<p>Transaction {{ doc.name }} has exceeded Due Date. Please take necessary action.</p>\n\n<!-- show last comment -->\n{% if comments %}\nLast comment: {{ comments[-1].comment }} by {{ comments[-1].by }}\n{% endif %}\n\n<h4>Details</h4>\n\n<ul>\n<li>Customer: {{ doc.customer }}\n<li>Amount: {{ doc.total_amount }}\n</ul>\n
", + "options": "
Message Example
\n\n
<h3>Order Overdue</h3>\n\n<p>Transaction {{ doc.name }} has exceeded Due Date. Please take necessary action.</p>\n\n<!-- show last comment -->\n{% if comments %}\nLast comment: {{ comments[-1].comment }} by {{ comments[-1].by }}\n{% endif %}\n\n<h4>Details</h4>\n\n<ul>\n<li>Customer: {{ doc.customer }}\n<li>Amount: {{ doc.total_amount }}\n</ul>\n
", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -423,6 +464,7 @@ "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "View Properties (via Customize Form)", @@ -451,7 +493,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2015-11-26 02:14:59.637519", + "modified": "2016-03-25 01:17:03.787967", "modified_by": "Administrator", "module": "Email", "name": "Email Alert", From c3689ceda136d13663ec77039122434c008f8d48 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 25 Mar 2016 11:56:19 +0600 Subject: [PATCH 04/20] bumped to version 6.27.5 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index c28b13d2d8..a8c8c39c72 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "6.27.4" +__version__ = "6.27.5" diff --git a/frappe/hooks.py b/frappe/hooks.py index 33ed55cbba..68460c00e6 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -5,7 +5,7 @@ app_publisher = "Frappe Technologies" app_description = "Full stack web framework with Python, Javascript, MariaDB, Redis, Node" app_icon = "octicon octicon-circuit-board" -app_version = "6.27.4" +app_version = "6.27.5" app_color = "orange" source_link = "https://github.com/frappe/frappe" app_license = "MIT" diff --git a/setup.py b/setup.py index 8cc565fe6e..531925573e 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages from pip.req import parse_requirements -version = "6.27.4" +version = "6.27.5" requirements = parse_requirements("requirements.txt", session="") setup( From 8243972abfc43e403ed30d7f895d0c899a4259a0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 25 Mar 2016 11:58:35 +0600 Subject: [PATCH 05/20] bumped to version 6.27.6 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index a8c8c39c72..0be5ee78e0 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "6.27.5" +__version__ = "6.27.6" diff --git a/frappe/hooks.py b/frappe/hooks.py index 68460c00e6..15b0c866ff 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -5,7 +5,7 @@ app_publisher = "Frappe Technologies" app_description = "Full stack web framework with Python, Javascript, MariaDB, Redis, Node" app_icon = "octicon octicon-circuit-board" -app_version = "6.27.5" +app_version = "6.27.6" app_color = "orange" source_link = "https://github.com/frappe/frappe" app_license = "MIT" diff --git a/setup.py b/setup.py index 531925573e..5916dbbdc8 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages from pip.req import parse_requirements -version = "6.27.5" +version = "6.27.6" requirements = parse_requirements("requirements.txt", session="") setup( From ad72da53b06ec25bb6830016788fd074107880f8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 29 Mar 2016 16:18:30 +0530 Subject: [PATCH 06/20] [fix] Email and print permission fixed in case of sharing --- frappe/public/js/frappe/model/perm.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/public/js/frappe/model/perm.js b/frappe/public/js/frappe/model/perm.js index 47fb9703a4..b260c5c549 100644 --- a/frappe/public/js/frappe/model/perm.js +++ b/frappe/public/js/frappe/model/perm.js @@ -86,8 +86,8 @@ $.extend(frappe.perm, { if(s.read) { // also give print, email permissions if read // and these permissions exist at level [0] - perm[0].email = meta.permissions[0].email; - perm[0].print = meta.permissions[0].print; + perm[0].email = frappe.boot.user.can_email.indexOf(doctype)!==-1 ? 1 : 0; + perm[0].print = frappe.boot.user.can_print.indexOf(doctype)!==-1 ? 1 : 0; } } } From c0d01fbd745cef0353f443df11207d349956b5ef Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Fri, 1 Apr 2016 19:21:56 +0530 Subject: [PATCH 07/20] added query-report to desktop icons --- .../doctype/desktop_icon/desktop_icon.json | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.json b/frappe/desk/doctype/desktop_icon/desktop_icon.json index a0ce9d1486..f473b8722f 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.json +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.json @@ -16,6 +16,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Module Name", @@ -40,6 +41,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Label", @@ -64,6 +66,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "Standard", @@ -88,6 +91,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Custom", @@ -112,6 +116,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -135,6 +140,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "App", @@ -159,6 +165,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Hidden", @@ -183,6 +190,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Blocked", @@ -207,6 +215,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Force Show", @@ -231,6 +240,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -254,12 +264,13 @@ "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 1, "label": "Type", "length": 0, "no_copy": 0, - "options": "module\nlist\nlink\npage", + "options": "module\nlist\nlink\npage\nquery-report", "permlevel": 0, "precision": "", "print_hide": 0, @@ -279,6 +290,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "_doctype", @@ -304,6 +316,7 @@ "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Link", @@ -328,6 +341,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -351,6 +365,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Color", @@ -375,6 +390,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Icon", @@ -399,6 +415,7 @@ "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Reverse Icon Color", @@ -423,6 +440,7 @@ "fieldtype": "Int", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Idx", @@ -449,7 +467,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-02-25 07:35:59.898516", + "modified": "2016-04-01 09:50:56.611440", "modified_by": "Administrator", "module": "Desk", "name": "Desktop Icon", From 3c345a6c1de7eed0325afa136fcf4818e2a7c358 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 4 Apr 2016 12:36:21 +0530 Subject: [PATCH 08/20] [travis] --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1c4e8acbc0..42caaacdcf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,9 +21,6 @@ install: script: - cd ~/frappe-bench - bench use test_site - - bench setup redis-cache - - bench setup redis-async-broker - - bench setup procfile --with-celery-broker - bench reinstall - bench build - bench build-website From ea8417acb025d604252dde1bf1e53e8dee86460e Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 4 Apr 2016 13:16:13 +0530 Subject: [PATCH 09/20] [fix] link selector value should allow for double-quotes in data-value --- frappe/public/js/frappe/form/link_selector.js | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/frappe/public/js/frappe/form/link_selector.js b/frappe/public/js/frappe/form/link_selector.js index 07abfeea13..4c4d0aaab3 100644 --- a/frappe/public/js/frappe/form/link_selector.js +++ b/frappe/public/js/frappe/form/link_selector.js @@ -76,7 +76,7 @@ frappe.ui.form.LinkSelector = Class.extend({ $.each(r.values, function(i, v) { var row = $(repl('\
\ %(values)s
\
', { @@ -84,23 +84,25 @@ frappe.ui.form.LinkSelector = Class.extend({ values: v.splice(1).join(", ") })).appendTo(parent); - row.find("a").click(function() { - var value = $(this).attr("data-value"); - var $link = this; - if(me.target.is_grid) { - // set in grid - me.set_in_grid(value); - } else { - if(me.target.doctype) - me.target.parse_validate_and_set_in_model(value); - else { - me.target.set_input(value); - me.target.$input.trigger("change"); + row.find("a") + .attr('data-value', v[0]) + .click(function() { + var value = $(this).attr("data-value"); + var $link = this; + if(me.target.is_grid) { + // set in grid + me.set_in_grid(value); + } else { + if(me.target.doctype) + me.target.parse_validate_and_set_in_model(value); + else { + me.target.set_input(value); + me.target.$input.trigger("change"); + } + me.dialog.hide(); } - me.dialog.hide(); - } - return false; - }) + return false; + }); }) } else { $('
' + __("No Results") From 668831178bcec4594d5a2213c208e489c5ecefc6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 1 Apr 2016 17:44:21 +0530 Subject: [PATCH 10/20] [fix] Route for report builder report from awesome bar --- frappe/public/js/frappe/ui/toolbar/awesome_bar.js | 10 ++++++++-- frappe/utils/user.py | 11 +++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/ui/toolbar/awesome_bar.js b/frappe/public/js/frappe/ui/toolbar/awesome_bar.js index 2be5aac6ab..1d0e7ae130 100644 --- a/frappe/public/js/frappe/ui/toolbar/awesome_bar.js +++ b/frappe/public/js/frappe/ui/toolbar/awesome_bar.js @@ -221,11 +221,17 @@ frappe.search.verbs = [ // reports function(txt) { frappe.search.find(keys(frappe.boot.user.all_reports), txt, function(match) { - var report_type = frappe.boot.user.all_reports[match]; + var report = frappe.boot.user.all_reports[match]; + var route = []; + if(report.report_type == "Report Builder") + route = ["Report", report.ref_doctype, match]; + else + route = ["query-report", match]; + return { label: __("Report {0}", [""+__(match)+""]), value: __("Report {0}", [__(match)]), - route: [report_type=="Report Builder" ? "Report" : "query-report", match] + route: route } }); }, diff --git a/frappe/utils/user.py b/frappe/utils/user.py index 15ef920312..f9169968eb 100644 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -145,9 +145,6 @@ class UserPermissions: self.can_import = frappe.db.sql_list("""select name from `tabDocType` where allow_import = 1""") - self.all_reports = frappe.db.sql("""select name, report_type from tabReport - where ref_doctype in ('{0}')""".format("', '".join(self.can_get_report))) - def get_defaults(self): import frappe.defaults self.defaults = frappe.defaults.get_defaults(self.name) @@ -204,8 +201,14 @@ class UserPermissions: d[key] = list(set(getattr(self, key))) - d.all_reports = dict(self.all_reports) + d.all_reports = self.get_all_reports() return d + + def get_all_reports(self): + reports = frappe.db.sql("""select name, report_type, ref_doctype from tabReport + where ref_doctype in ('{0}')""".format("', '".join(self.can_get_report)), as_dict=1) + + return frappe._dict((d.name, d) for d in reports) def get_user_fullname(user): fullname = frappe.db.sql("SELECT CONCAT_WS(' ', first_name, last_name) FROM `tabUser` WHERE name=%s", (user,)) From f8cfc205ba139d79e1fac71c17a9463fed42b13c Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 4 Apr 2016 18:24:06 +0600 Subject: [PATCH 11/20] bumped to version 6.27.7 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index 0be5ee78e0..16d4525510 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "6.27.6" +__version__ = "6.27.7" diff --git a/frappe/hooks.py b/frappe/hooks.py index 15b0c866ff..34d5e6da45 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -5,7 +5,7 @@ app_publisher = "Frappe Technologies" app_description = "Full stack web framework with Python, Javascript, MariaDB, Redis, Node" app_icon = "octicon octicon-circuit-board" -app_version = "6.27.6" +app_version = "6.27.7" app_color = "orange" source_link = "https://github.com/frappe/frappe" app_license = "MIT" diff --git a/setup.py b/setup.py index 5916dbbdc8..a18f6135e9 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages from pip.req import parse_requirements -version = "6.27.6" +version = "6.27.7" requirements = parse_requirements("requirements.txt", session="") setup( From 71c6d38a9ea37899496385d0558ce46148888c88 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 5 Apr 2016 11:34:05 +0530 Subject: [PATCH 12/20] [hot][fix] ignore_share_permission in user share with self --- frappe/core/doctype/user/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 0358194691..8dda6ec1ef 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -101,7 +101,7 @@ class User(Document): flags={"ignore_share_permission": True}) else: frappe.share.remove(self.doctype, self.name, self.name, - flags={"ignore_share_permission": True}) + flags={"ignore_share_permission": True, "ignore_permissions": True}) def validate_share(self, docshare): if docshare.user == self.name: From 7201b323df37bb9a6bbadc5d7d3f62de89be03e3 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 5 Apr 2016 11:47:40 +0530 Subject: [PATCH 13/20] [fix] communication sender fullname --- frappe/core/doctype/communication/communication.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 9c676ecb76..8f00e253a8 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -99,6 +99,9 @@ class Communication(Document): if self.sender == "Administrator": self.sender_full_name = self.sender self.sender = frappe.db.get_value("User", "Administrator", "email") + elif self.sender == "Guest": + self.sender_full_name = self.sender + self.sender = None else: validate_email_add(self.sender, throw=True) self.sender_full_name = get_fullname(self.sender) From 398235f5c73bf648682f25d11abb6b2a9d15e2d5 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 5 Apr 2016 18:26:47 +0530 Subject: [PATCH 14/20] [fix] don't update name during db_update --- frappe/model/base_document.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index a3b546ea40..af3e5ed8ad 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -309,13 +309,19 @@ class BaseDocument(object): return d = self.get_valid_dict() + + # don't update name, as case might've been changed + name = d['name'] + del d['name'] + columns = d.keys() + try: frappe.db.sql("""update `tab{doctype}` set {values} where name=%s""".format( doctype = self.doctype, values = ", ".join(["`"+c+"`=%s" for c in columns]) - ), d.values() + [d.get("name")]) + ), d.values() + [name]) except Exception, e: if e.args[0]==1062 and "Duplicate" in cstr(e.args[1]): self.show_unique_validation_message(e) From 4c98b4080b0a71a28c2d46b6ca873bf0815bdeb1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 7 Apr 2016 11:40:17 +0530 Subject: [PATCH 15/20] [fix] Hidden columns in report --- .../js/frappe/views/reports/query_report.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 1d1b65d6e0..ec86870e40 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -334,6 +334,7 @@ frappe.views.QueryReport = Class.extend({ this.wrapper.find(".results").toggle(true); this.make_columns(columns); this.make_data(result, columns); + this.filter_hidden_columns(); this.render(result, columns); }, render: function(result, columns) { @@ -389,14 +390,10 @@ frappe.views.QueryReport = Class.extend({ fieldtype: "Data" }; } - + if (!df.fieldtype) df.fieldtype = "Data"; if (!cint(df.width)) df.width = 80; - if (df.hidden) { - return null; - } - var col = $.extend({}, df, { label: df.label || (df.fieldname && __(toTitle(df.fieldname.replace(/_/g, " ")))) || "", sortable: true, @@ -407,11 +404,15 @@ frappe.views.QueryReport = Class.extend({ col.field = df.fieldname || df.label; df.label = __(df.label); col.name = col.id = col.label = df.label; - col.index = i; return col })); }, + filter_hidden_columns: function() { + this.columns = $.map(this.columns, function(c, i) { + return (c.hidden==1 ? null : c); + }); + }, get_query_report_opts: function() { return frappe.query_reports[this.report_name] || {}; }, @@ -448,7 +449,7 @@ frappe.views.QueryReport = Class.extend({ } else { var newrow = {}; for(var i=1, j=this.columns.length; i Date: Thu, 7 Apr 2016 12:38:08 +0530 Subject: [PATCH 16/20] [fix] Explore: hide modules from sidebar if hidden for everyone --- frappe/core/page/modules_setup/modules_setup.js | 7 ++++++- frappe/desk/page/modules/modules_sidebar.html | 2 +- frappe/public/js/frappe/ui/page.js | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/frappe/core/page/modules_setup/modules_setup.js b/frappe/core/page/modules_setup/modules_setup.js index ebe510d462..056c2ecc8a 100644 --- a/frappe/core/page/modules_setup/modules_setup.js +++ b/frappe/core/page/modules_setup/modules_setup.js @@ -51,6 +51,11 @@ frappe.pages['modules_setup'].on_page_load = function(wrapper) { }); }); + // for ctrl+s + wrapper.save_action = function() { + page.btn_primary.trigger('click'); + }; + // application installer if(frappe.boot.user.roles.indexOf('System Manager')!==-1) { page.add_inner_button('Install Apps', function() { @@ -79,7 +84,7 @@ frappe.reload_modules_setup_icons = function(page) { }, freeze: true, callback: function(r) { - page.content.find('.modules-setup-icons').replaceWith(r.message); + page.wrapper.find('.modules-setup-icons').replaceWith(r.message); } }); } diff --git a/frappe/desk/page/modules/modules_sidebar.html b/frappe/desk/page/modules/modules_sidebar.html index 1b4125a4a9..1fdc0d500a 100644 --- a/frappe/desk/page/modules/modules_sidebar.html +++ b/frappe/desk/page/modules/modules_sidebar.html @@ -1,6 +1,6 @@ diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 44e980ab0f..6925f4b7e5 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -132,6 +132,8 @@ frappe.ui.Page = Class.extend({ icon: icon, working_label: working_label }); + + return this.btn_primary; }, set_secondary_action: function(label, click, icon, working_label) { @@ -141,6 +143,8 @@ frappe.ui.Page = Class.extend({ icon: icon, working_label: working_label }); + + return this.btn_secondary; }, clear_action_of: function(btn) { From 72abd6717a36d2f6cc766b32ed1e8dc965568a4b Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 7 Apr 2016 16:31:30 +0530 Subject: [PATCH 17/20] [fix] allow context in frappe.respond_as_web_page --- frappe/__init__.py | 5 ++++- frappe/website/context.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index ddade9062c..20b17a83b3 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -884,7 +884,7 @@ def compare(val1, condition, val2): import frappe.utils return frappe.utils.compare(val1, condition, val2) -def respond_as_web_page(title, html, success=None, http_status_code=None): +def respond_as_web_page(title, html, success=None, http_status_code=None, context=None): """Send response as a web page with a message rather than JSON. Used to show permission errors etc. :param title: Page title and heading. @@ -899,6 +899,9 @@ def respond_as_web_page(title, html, success=None, http_status_code=None): if http_status_code: local.response['http_status_code'] = http_status_code + if context: + local.response['context'] = context + def build_match_conditions(doctype, as_condition=True): """Return match (User permissions) for given doctype as list or SQL.""" import frappe.desk.reportview diff --git a/frappe/website/context.py b/frappe/website/context.py index 16671c176a..a09eb75809 100644 --- a/frappe/website/context.py +++ b/frappe/website/context.py @@ -16,6 +16,10 @@ def get_context(path, args=None): context = build_context(context) context["path"] = path + # set using frappe.respond_as_web_page + if hasattr(frappe.local, 'response') and frappe.local.response.get('context'): + context.update(frappe.local.response.context) + return context def build_context(context): From aa3f42b0324334747d49bf0fba6a1ce4933bd52f Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 7 Apr 2016 16:31:49 +0530 Subject: [PATCH 18/20] [fix] backward compatibilty of module view route --- frappe/public/js/frappe/router.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/frappe/public/js/frappe/router.js b/frappe/public/js/frappe/router.js index d7db4c55de..9261ba63b1 100644 --- a/frappe/public/js/frappe/router.js +++ b/frappe/public/js/frappe/router.js @@ -32,6 +32,10 @@ frappe.route = function() { frappe._cur_route = window.location.hash; route = frappe.get_route(); + if (route === false) { + return; + } + frappe.route_history.push(route); if(route[0] && route[1] && frappe.views[route[0] + "Factory"]) { @@ -61,6 +65,12 @@ frappe.get_route = function(route) { frappe.route_options = $.extend(frappe.route_options || {}, query_params); } + // backward compatibility + if (route && route[0]==='Module') { + frappe.set_route('modules', route[1]); + return false; + } + return route; } From e1b680c7a6717b82ed48a822a1edc26762ffe75d Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 7 Apr 2016 17:04:31 +0530 Subject: [PATCH 19/20] Fixed set_hidden function --- frappe/desk/doctype/desktop_icon/desktop_icon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index 9b23a76067..01a912cefb 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -163,7 +163,7 @@ def set_hidden_list(hidden_list, user=None): else: frappe.clear_cache() -def set_hidden(module_name, user, hidden=1): +def set_hidden(module_name, user=None, hidden=1): '''Set module hidden property for given user. If user is not specified, hide/unhide it globally''' if user: From 81c04d354eb2fc1dcda5a23166fdbe633f6d6033 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 7 Apr 2016 18:03:23 +0600 Subject: [PATCH 20/20] bumped to version 6.27.8 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index 16d4525510..2ff6dbbb54 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "6.27.7" +__version__ = "6.27.8" diff --git a/frappe/hooks.py b/frappe/hooks.py index 34d5e6da45..12722d2420 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -5,7 +5,7 @@ app_publisher = "Frappe Technologies" app_description = "Full stack web framework with Python, Javascript, MariaDB, Redis, Node" app_icon = "octicon octicon-circuit-board" -app_version = "6.27.7" +app_version = "6.27.8" app_color = "orange" source_link = "https://github.com/frappe/frappe" app_license = "MIT" diff --git a/setup.py b/setup.py index a18f6135e9..8aaaa0a12b 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages from pip.req import parse_requirements -version = "6.27.7" +version = "6.27.8" requirements = parse_requirements("requirements.txt", session="") setup(