From ff1946aa7565bd3821bc4cb172cd2c0c64d20a0d Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Sun, 23 Aug 2020 11:03:06 +0530 Subject: [PATCH] refactor: Remove role editor old code and replace usages new one --- .../role_permission_for_page_and_report.js | 28 +-- .../core/doctype/role_profile/role_profile.js | 14 +- frappe/core/doctype/user/user.js | 8 +- frappe/public/js/frappe/roles_editor.js | 203 +----------------- 4 files changed, 25 insertions(+), 228 deletions(-) diff --git a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js index 8a121f31ae..5048d24077 100644 --- a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js +++ b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.js @@ -3,32 +3,32 @@ frappe.ui.form.on('Role Permission for Page and Report', { setup: function(frm) { - frm.trigger("set_queries") + frm.trigger("set_queries"); }, refresh: function(frm) { frm.disable_save(); frm.role_area.hide(); - frm.events.add_custom_buttons(frm); + frm.events.setup_buttons(frm); }, - add_custom_buttons: function(frm) { + setup_buttons: function(frm) { frm.clear_custom_buttons(); - if(frm.doc.set_role_for && frm.doc[frappe.model.scrub(frm.doc.set_role_for)]) { + frm.page.clear_actions(); + if (frm.doc.set_role_for && frm.doc[frappe.model.scrub(frm.doc.set_role_for)]) { frm.add_custom_button(__("Reset to defaults"), function() { frm.trigger("reset_roles"); }); - frm.add_custom_button(__("Update"), function() { + frm.page.set_primary_action(__("Update"), () => { frm.trigger("update_report_page_data"); - }).addClass('btn-primary'); + }); } }, onload: function(frm) { - if(!frm.roles_editor) { - frm.role_area = $('
') - .appendTo(frm.fields_dict.roles_html.wrapper); + if (!frm.roles_editor) { + frm.role_area = $(frm.fields_dict.roles_html.wrapper); frm.roles_editor = new frappe.RoleEditor(frm.role_area, frm); } }, @@ -54,17 +54,17 @@ frappe.ui.form.on('Role Permission for Page and Report', { }, page: function(frm) { - frm.events.add_custom_buttons(frm); - if(frm.doc.page) { + frm.events.setup_buttons(frm); + if (frm.doc.page) { frm.trigger("set_report_page_data"); } else { frm.trigger("set_role_for"); } }, - report: function(frm){ - frm.events.add_custom_buttons(frm); - if(frm.doc.report) { + report: function(frm) { + frm.events.setup_buttons(frm); + if (frm.doc.report) { frm.trigger("set_report_page_data"); } else { frm.trigger("set_role_for"); diff --git a/frappe/core/doctype/role_profile/role_profile.js b/frappe/core/doctype/role_profile/role_profile.js index d31618cc4a..e43980770a 100644 --- a/frappe/core/doctype/role_profile/role_profile.js +++ b/frappe/core/doctype/role_profile/role_profile.js @@ -3,20 +3,18 @@ frappe.ui.form.on('Role Profile', { refresh: function(frm) { - if(has_common(frappe.user_roles, ["Administrator", "System Manager"])) { - if(!frm.roles_editor) { - var role_area = $('
') - .appendTo(frm.fields_dict.roles_html.wrapper); + if (has_common(frappe.user_roles, ["Administrator", "System Manager"])) { + if (!frm.roles_editor) { + const role_area = $(frm.fields_dict.roles_html.wrapper); frm.roles_editor = new frappe.RoleEditor(role_area, frm); - frm.roles_editor.show(); - } else { - frm.roles_editor.show(); } + frm.roles_editor.show(); + } }, validate: function(frm) { - if(frm.roles_editor) { + if (frm.roles_editor) { frm.roles_editor.set_roles_in_table(); } } diff --git a/frappe/core/doctype/user/user.js b/frappe/core/doctype/user/user.js index 95f148f871..277c17e67f 100644 --- a/frappe/core/doctype/user/user.js +++ b/frappe/core/doctype/user/user.js @@ -40,11 +40,11 @@ frappe.ui.form.on('User', { onload: function(frm) { frm.can_edit_roles = has_access_to_edit_user(); - if(frm.can_edit_roles && !frm.is_new()) { - if(!frm.roles_editor) { - var role_area = $('
') + if (frm.can_edit_roles && !frm.is_new()) { + if (!frm.roles_editor) { + const role_area = $('
') .appendTo(frm.fields_dict.roles_html.wrapper); - frm.roles_editor = new frappe.RoleEditor2(role_area, frm, frm.doc.role_profile_name ? 1 : 0); + frm.roles_editor = new frappe.RoleEditor(role_area, frm, frm.doc.role_profile_name ? 1 : 0); var module_area = $('
') .appendTo(frm.fields_dict.modules_html.wrapper); diff --git a/frappe/public/js/frappe/roles_editor.js b/frappe/public/js/frappe/roles_editor.js index 9ede4aac85..52172faae8 100644 --- a/frappe/public/js/frappe/roles_editor.js +++ b/frappe/public/js/frappe/roles_editor.js @@ -1,205 +1,4 @@ -// TODO: Refactor - use multicheck control -frappe.RoleEditor = Class.extend({ - init: function(wrapper, frm, disable) { - var me = this; - this.frm = frm; - this.wrapper = wrapper; - this.disable = disable; - $(wrapper).html('
' + __("Loading") + '...
'); - frappe.call({ - method: 'frappe.core.doctype.user.user.get_all_roles', - callback: function(r) { - me.roles = r.message; - me.show_roles(); - - // refresh call could've already happened - // when all role checkboxes weren't created - if(me.frm.doc) { - me.frm.roles_editor.show(); - } - } - }); - }, - show_roles: function() { - var me = this; - $(this.wrapper).empty(); - if(me.frm.doctype != 'User') { - var role_toolbar = $('

\ -

').appendTo($(this.wrapper)); - - role_toolbar.find(".btn-add") - .html(__('Add all roles')) - .on("click", function() { - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if (!$(check).is(":checked")) { - check.checked = true; - } - }); - }); - - role_toolbar.find(".btn-remove") - .html(__('Clear all roles')) - .on("click", function() { - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if($(check).is(":checked")) { - check.checked = false; - } - }); - }); - } - - $.each(this.roles, function(i, role) { - $(me.wrapper).append(repl('
\ - \ - %(role_display)s\ -
', {role_value: role,role_display:__(role)})); - }); - - $(this.wrapper).find('input[type="checkbox"]').change(function() { - me.set_roles_in_table(); - me.frm.dirty(); - }); - $(this.wrapper).find('.user-role a').click(function() { - me.show_permissions($(this).parent().attr('data-user-role')); - return false; - }); - }, - show: function() { - var me = this; - $('.box').attr('disabled', this.disable); - - // uncheck all roles - $(this.wrapper).find('input[type="checkbox"]') - .each(function(i, checkbox) { - checkbox.checked = false; - }); - - // set user roles as checked - $.each((me.frm.doc.roles || []), function(i, user_role) { - var checkbox = $(me.wrapper) - .find('[data-user-role="'+user_role.role+'"] input[type="checkbox"]').get(0); - if(checkbox) checkbox.checked = true; - }); - - this.set_enable_disable(); - }, - set_enable_disable: function() { - $('.box').attr('disabled', this.disable ? true : false); - }, - set_roles_in_table: function() { - var opts = this.get_roles(); - var existing_roles_map = {}; - var existing_roles_list = []; - var me = this; - - $.each((me.frm.doc.roles || []), function(i, user_role) { - existing_roles_map[user_role.role] = user_role.name; - existing_roles_list.push(user_role.role); - }); - - // remove unchecked roles - $.each(opts.unchecked_roles, function(i, role) { - if(existing_roles_list.indexOf(role)!=-1) { - frappe.model.clear_doc("Has Role", existing_roles_map[role]); - } - }); - - // add new roles that are checked - $.each(opts.checked_roles, function(i, role) { - if(existing_roles_list.indexOf(role)==-1) { - var user_role = frappe.model.add_child(me.frm.doc, "Has Role", "roles"); - user_role.role = role; - } - }); - - refresh_field("roles"); - }, - get_roles: function() { - var checked_roles = []; - var unchecked_roles = []; - $(this.wrapper).find('[data-user-role]').each(function() { - if($(this).find('input[type="checkbox"]:checked').length) { - checked_roles.push($(this).attr('data-user-role')); - } else { - unchecked_roles.push($(this).attr('data-user-role')); - } - }); - - return { - checked_roles: checked_roles, - unchecked_roles: unchecked_roles - }; - }, - show_permissions: function(role) { - // show permissions for a role - var me = this; - if(!this.perm_dialog) - this.make_perm_dialog(); - $(this.perm_dialog.body).empty(); - return frappe.call({ - method: 'frappe.core.doctype.user.user.get_perm_info', - args: {role: role}, - callback: function(r) { - var $body = $(me.perm_dialog.body); - // TODO fix the overflow issue and also display perms like report, import, etc. - - $body.append('' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '
' + __('Document Type') + '' + __('Level') + '' + __('Read') + '' + __('Write') + '' + __('Create') + '' + __('Delete') + '' + __('Submit') + '' + __('Cancel') + '' + __('Amend') + '' + __('Set User Permissions') + '
'); - - for(var i=0, l=r.message.length; i icon - for(var key in perm) { - if(key!='parent' && key!='permlevel') { - if(perm[key]) { - perm[key] = ''; - } else { - perm[key] = ''; - } - } - } - - $body.find('tbody').append(repl('\ - %(parent)s\ - %(permlevel)s\ - %(read)s\ - %(write)s\ - %(create)s\ - %(delete)s\ - %(submit)s\ - %(cancel)s\ - %(amend)s\ - %(set_user_permissions)s\ - ', perm)); - } - me.perm_dialog.set_title(role); - me.perm_dialog.show(); - } - }); - - }, - make_perm_dialog: function() { - this.perm_dialog = new frappe.ui.Dialog({ - title: __('Role Permissions') - }); - - this.perm_dialog.$wrapper.find('.modal-dialog').css("width", "800px"); - } -}); - -frappe.RoleEditor2 = class { +frappe.RoleEditor = class { constructor(wrapper, frm, disable) { this.frm = frm; this.wrapper = wrapper;