From 4c357643dbf991bc2529bd8a868bc740194dcd0c Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 6 Mar 2017 14:37:46 +0530 Subject: [PATCH] Fixed patch, travis --- frappe/boot.py | 15 +++---- .../doctype/report/user_activity_report.json | 2 +- .../customize_form/test_customize_form.py | 2 +- frappe/desk/doctype/event/test_records.json | 5 +-- .../v7_3/copy_user_roles_to_has_roles.py | 7 +++- ...set_user_permission_for_page_and_report.py | 39 +++++++++++++++---- frappe/public/js/frappe/list/list_view.js | 6 +-- frappe/tests/test_data_import.py | 2 - frappe/tests/test_document.py | 10 +---- frappe/tests/test_global_search.py | 5 +-- 10 files changed, 52 insertions(+), 41 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index e6b1ac0c8d..cbf8d7ac81 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -99,6 +99,7 @@ def get_allowed_reports(): def get_user_page_or_report(parent): roles = frappe.get_roles() has_role = {} + field = "title" if parent == 'Page' else "name" # get pages or reports set on custom role for p in frappe.db.sql("""select `tabCustom Role`.{field} as name, `tabCustom Role`.modified @@ -107,26 +108,26 @@ def get_user_page_or_report(parent): `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} + has_role[p.name] = {"modified":p.modified, "title": p.name} if not has_role: for p in frappe.db.sql("""select distinct - tab{parent}.name, tab{parent}.modified + tab{parent}.name, tab{parent}.modified, tab{parent}.{field} as title from `tabHas Role`, `tab{parent}` where `tabHas Role`.role in ({roles}) and `tabHas Role`.parent = `tab{parent}`.name - """.format(parent=parent, roles = ', '.join(['%s']*len(roles))), + """.format(parent=parent, field=field, roles = ', '.join(['%s']*len(roles))), roles, as_dict=True): - has_role[p.name] = {"modified":p.modified} + has_role[p.name] = {"modified":p.modified, "title": p.title} # pages or reports where role is not set are also allowed - for p in frappe.db.sql("""select name, modified + for p in frappe.db.sql("""select name, modified, {field} as title from `tab{parent}` where (select count(*) from `tabHas Role` - where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent), as_dict=1): + where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1): - has_role[p.name] = {"modified":p.modified} + has_role[p.name] = {"modified":p.modified, "title": p.title} return has_role diff --git a/frappe/core/doctype/report/user_activity_report.json b/frappe/core/doctype/report/user_activity_report.json index 8202d1727d..5339bbe37d 100644 --- a/frappe/core/doctype/report/user_activity_report.json +++ b/frappe/core/doctype/report/user_activity_report.json @@ -6,7 +6,7 @@ "doctype": "Report", "is_standard": "No", "javascript": null, - "json": "{\"filters\":[],\"columns\":[[\"name\",\"User\"],[\"user_type\",\"User\"],[\"first_name\",\"User\"],[\"last_name\",\"User\"],[\"last_active\",\"User\"],[\"role\",\"UserRole\"]],\"sort_by\":\"User.modified\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", + "json": "{\"filters\":[],\"columns\":[[\"name\",\"User\"],[\"user_type\",\"User\"],[\"first_name\",\"User\"],[\"last_name\",\"User\"],[\"last_active\",\"User\"],[\"role\",\"Has Role\"]],\"sort_by\":\"User.modified\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", "modified": "2016-09-01 02:59:07.728890", "module": "Core", "name": "User Activity Report", diff --git a/frappe/custom/doctype/customize_form/test_customize_form.py b/frappe/custom/doctype/customize_form/test_customize_form.py index 2ce5d5c8fd..197aa99f46 100644 --- a/frappe/custom/doctype/customize_form/test_customize_form.py +++ b/frappe/custom/doctype/customize_form/test_customize_form.py @@ -46,7 +46,7 @@ class TestCustomizeForm(unittest.TestCase): d = self.get_customize_form("Event") self.assertEquals(d.doc_type, "Event") - self.assertEquals(len(d.get("fields")), 28) + self.assertEquals(len(d.get("fields")), 27) d = self.get_customize_form("User") self.assertEquals(d.doc_type, "User") diff --git a/frappe/desk/doctype/event/test_records.json b/frappe/desk/doctype/event/test_records.json index a95e2e8483..aaadc881b8 100644 --- a/frappe/desk/doctype/event/test_records.json +++ b/frappe/desk/doctype/event/test_records.json @@ -15,9 +15,6 @@ "doctype": "Event", "starts_on": "2014-01-01", "subject": "_Test Event 3", - "event_type": "Private", - "roles": [ - {"role": "System Manager"} - ] + "event_type": "Private" } ] diff --git a/frappe/patches/v7_3/copy_user_roles_to_has_roles.py b/frappe/patches/v7_3/copy_user_roles_to_has_roles.py index 2410fd5a84..7767a5e347 100644 --- a/frappe/patches/v7_3/copy_user_roles_to_has_roles.py +++ b/frappe/patches/v7_3/copy_user_roles_to_has_roles.py @@ -8,7 +8,10 @@ def execute(): for data in frappe.get_all('User', fields = ["name"]): doc = frappe.get_doc('User', data.name) doc.set('roles',[]) - roles = [{'role': d.role} for d in doc.user_roles] - doc.set('roles', roles) + for args in frappe.get_all('UserRole', fields = ["role"], + filters = {'parent': data.name, 'parenttype': 'User'}): + doc.append('roles', { + 'role': args.role + }) for role in doc.roles: role.db_update() \ No newline at end of file diff --git a/frappe/patches/v7_3/set_user_permission_for_page_and_report.py b/frappe/patches/v7_3/set_user_permission_for_page_and_report.py index 12b0315f21..4d2dd8f399 100644 --- a/frappe/patches/v7_3/set_user_permission_for_page_and_report.py +++ b/frappe/patches/v7_3/set_user_permission_for_page_and_report.py @@ -5,17 +5,40 @@ from __future__ import unicode_literals import frappe def execute(): - for doctype in ['Page', 'Report']: - for data in frappe.get_all(doctype, fields = ["name"]): - doc = frappe.get_doc(doctype, data.name) - make_custom_roles_for_page_and_report(doc, doctype) + frappe.reload_doc("core", 'doctype', "custom_role") + make_custom_roles_for_page_and_report() -def make_custom_roles_for_page_and_report(doc, doctype): +def make_custom_roles_for_page_and_report(): + for doctype in ['Page', 'Report']: + for data in get_data(doctype): + doc = frappe.get_doc(doctype, data.name) + roles = get_roles(doctype, data, doc) + make_custom_roles(doctype, doc.name, roles) + +def get_data(doctype): + fields = ["name"] if doctype == 'Page' else ["name", "ref_doctype"] + return frappe.get_all(doctype, fields = fields) + +def get_roles(doctype, data, doc): + roles = [] + if doctype == 'Page': + for d in doc.roles: + if frappe.db.exists('Role', d.role): + roles.append({'role': d.role}) + else: + out = frappe.get_all('Custom DocPerm', fields='distinct role', filters=dict(parent = data.ref_doctype)) + if not out: + out = frappe.get_all('DocPerm', fields='distinct role', filters=dict(parent = data.ref_doctype)) + for d in out: + roles.append({'role': d.role}) + return roles + +def make_custom_roles(doctype, name, roles): field = doctype.lower() - roles = [{'role': d.role} for d in doc.roles] + if roles: custom_permission = frappe.get_doc({ 'doctype': 'Custom Role', - field : doc.name, - 'roles': roles + field : name, + 'roles' : roles }).insert() \ No newline at end of file diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 307056d991..104b157a38 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -576,7 +576,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ }); }, true); } - if (user_roles.includes('System Manager')) { + if (roles.includes('System Manager')) { this.page.add_menu_item(__('Role Permissions Manager'), function () { frappe.set_route('permission-manager', { doctype: me.doctype @@ -597,7 +597,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ frappe.add_to_desktop(me.doctype, me.doctype); }, true); - if (user_roles.includes('System Manager') && frappe.boot.developer_mode === 1) { + if (roles.includes('System Manager') && frappe.boot.developer_mode === 1) { // edit doctype this.page.add_menu_item(__('Edit DocType'), function () { frappe.set_route('Form', 'DocType', me.doctype); @@ -653,7 +653,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ return !is_submittable || doc.docstatus === 1 || (allow_print_for_cancelled && doc.docstatus == 2) || (allow_print_for_draft && doc.docstatus == 0) || - user_roles.includes('Administrator') + roles.includes('Administrator') }).map(function (doc) { return doc.name }); diff --git a/frappe/tests/test_data_import.py b/frappe/tests/test_data_import.py index 137c6c0095..c1ec026aa8 100644 --- a/frappe/tests/test_data_import.py +++ b/frappe/tests/test_data_import.py @@ -82,8 +82,6 @@ class TestDataImport(unittest.TestCase): content[-1][2] = "__Test Event with children" content[-1][3] = "Private" content[-1][4] = "2014-01-01 10:00:00.000000" - content[-1][content[15].index("role")] = "System Manager" importer.upload(content) ev = frappe.get_doc("Event", {"subject":"__Test Event with children"}) - self.assertTrue("System Manager" in [d.role for d in ev.roles]) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 042e0b1ebf..40d5108e12 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -45,21 +45,13 @@ class TestDocument(unittest.TestCase): "doctype":"Event", "subject":"test-doc-test-event 2", "starts_on": "2014-01-01", - "event_type": "Public", - "roles": [ - { - "role": "System Manager" - } - ] + "event_type": "Public" }) d.insert() self.assertTrue(d.name.startswith("EV")) self.assertEquals(frappe.db.get_value("Event", d.name, "subject"), "test-doc-test-event 2") - d1 = frappe.get_doc("Event", d.name) - self.assertEquals(d1.roles[0].role, "System Manager") - def test_update(self): d = self.test_insert() d.subject = "subject changed" diff --git a/frappe/tests/test_global_search.py b/frappe/tests/test_global_search.py index e44c3fefd0..44287de37c 100644 --- a/frappe/tests/test_global_search.py +++ b/frappe/tests/test_global_search.py @@ -107,9 +107,6 @@ class TestGlobalSearch(unittest.TestCase): 'subject': text, 'starts_on': frappe.utils.now_datetime() }) - doc.append('roles', dict(role='Administrator')) doc.insert() - frappe.db.commit() - results = global_search.search('Administrator') - self.assertEquals(len(results), 9) + frappe.db.commit() \ No newline at end of file