diff --git a/frappe/boot.py b/frappe/boot.py index 9f36718997..c9ced30606 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -99,35 +99,46 @@ def get_allowed_reports(): def get_user_page_or_report(parent): roles = frappe.get_roles() has_role = {} - field = "title" if parent == 'Page' else "name" + column = get_column(parent) # get pages or reports set on custom role - for p in frappe.db.sql("""select `tabCustom Role`.{field} as name, `tabCustom Role`.modified + for p in frappe.db.sql("""select `tabCustom Role`.{field} as name, `tabCustom Role`.modified, `tabCustom Role`.ref_doctype from `tabCustom Role`, `tabHas Role` where `tabHas Role`.parent = `tabCustom Role`.name and `tabCustom Role`.{field} is not null and `tabHas Role`.role in ({roles}) """.format(field=parent.lower(), roles = ', '.join(['%s']*len(roles))), roles, as_dict=1): - has_role[p.name] = {"modified":p.modified, "title": p.name} + has_role[p.name] = {"modified":p.modified, "title": p.name, "ref_doctype": p.ref_doctype} for p in frappe.db.sql("""select distinct - tab{parent}.name, tab{parent}.modified, tab{parent}.{field} as title + tab{parent}.name, tab{parent}.modified, {column} from `tabHas Role`, `tab{parent}` where `tabHas Role`.role in ({roles}) and `tabHas Role`.parent = `tab{parent}`.name - """.format(parent=parent, field=field, roles = ', '.join(['%s']*len(roles))), roles, as_dict=True): + """.format(parent=parent, column=column, roles = ', '.join(['%s']*len(roles))), roles, as_dict=True): if p.name not in has_role: has_role[p.name] = {"modified":p.modified, "title": p.title} + if parent == "Report": + has_role[p.name].update({'ref_doctype': p.ref_doctype}) # pages or reports where role is not set are also allowed - for p in frappe.db.sql("""select name, modified, {field} as title + for p in frappe.db.sql("""select `tab{parent}`.name, `tab{parent}`.modified, {column} from `tab{parent}` where (select count(*) from `tabHas Role` - where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1): + where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, column=column), as_dict=1): if p.name not in has_role: has_role[p.name] = {"modified":p.modified, "title": p.title} + if parent == "Report": + has_role[p.name].update({'ref_doctype': p.ref_doctype}) return has_role + +def get_column(doctype): + column = "`tabPage`.title as title" + if doctype == "Report": + column = "`tabReport`.name as name, `tabReport`.ref_doctype" + + return column def load_translations(bootinfo): messages = frappe.get_lang_dict("boot") diff --git a/frappe/core/doctype/custom_role/custom_role.json b/frappe/core/doctype/custom_role/custom_role.json index 9990633d95..48a2276577 100644 --- a/frappe/core/doctype/custom_role/custom_role.json +++ b/frappe/core/doctype/custom_role/custom_role.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, "autoname": "hash", @@ -159,19 +160,48 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "ref_doctype", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reference Doctype", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-02-20 13:59:35.882885", + "modified": "2017-03-20 12:56:09.164494", "modified_by": "Administrator", "module": "Core", "name": "Custom Role", diff --git a/frappe/patches.txt b/frappe/patches.txt index 35e8e4491a..3d9a65432f 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -17,7 +17,7 @@ execute:frappe.reload_doc('core', 'doctype', 'custom_docperm') execute:frappe.reload_doc('core', 'doctype', 'deleted_document') frappe.patches.v8_0.rename_page_role_to_has_role #2017-03-16 frappe.patches.v7_2.setup_custom_perms #2017-01-19 -frappe.patches.v8_0.set_user_permission_for_page_and_report +frappe.patches.v8_0.set_user_permission_for_page_and_report #2017-03-20 execute:frappe.reload_doc('core', 'doctype', 'role') execute:frappe.reload_doc('core', 'doctype', 'user') execute:frappe.reload_doc('custom', 'doctype', 'custom_field') #2015-10-19 diff --git a/frappe/patches/v8_0/set_user_permission_for_page_and_report.py b/frappe/patches/v8_0/set_user_permission_for_page_and_report.py index 8012368fe5..560ea46db2 100644 --- a/frappe/patches/v8_0/set_user_permission_for_page_and_report.py +++ b/frappe/patches/v8_0/set_user_permission_for_page_and_report.py @@ -9,6 +9,15 @@ def execute(): frappe.reload_doc("core", 'doctype', "custom_role") set_user_permission_for_page_and_report() + update_ref_doctype_in_custom_role() + +def update_ref_doctype_in_custom_role(): + frappe.reload_doc("core", 'doctype', "custom_role") + frappe.db.sql("""update `tabCustom Role` + set + ref_doctype = (select ref_doctype from tabReport where name = `tabCustom Role`.report) + where report is not null""") + def set_user_permission_for_page_and_report(): make_custom_roles_for_page_and_report() diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js index 55641c4f7f..2749af0b94 100644 --- a/frappe/public/js/frappe/list/list_sidebar.js +++ b/frappe/public/js/frappe/list/list_sidebar.js @@ -90,7 +90,7 @@ frappe.views.ListSidebar = Class.extend({ if(!r.ref_doctype || r.ref_doctype==me.doctype) { var report_type = r.report_type==='Report Builder' ? 'Report/' + r.ref_doctype : 'query-report'; - var route = r.route || report_type + '/' + r.name; + var route = r.route || report_type + '/' + r.title; if(added.indexOf(route)===-1) { // don't repeat @@ -102,7 +102,7 @@ frappe.views.ListSidebar = Class.extend({ } $('
  • ' - + __(r.name)+'
  • ').appendTo(dropdown); + + __(r.title)+'').appendTo(dropdown); } } });