refactor: Remove role editor old code and replace usages new one
This commit is contained in:
parent
d625631b32
commit
ff1946aa75
4 changed files with 25 additions and 228 deletions
|
|
@ -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 = $('<div style="min-height: 300px">')
|
||||
.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");
|
||||
|
|
|
|||
|
|
@ -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 = $('<div style="min-height: 300px">')
|
||||
.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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = $('<div>')
|
||||
if (frm.can_edit_roles && !frm.is_new()) {
|
||||
if (!frm.roles_editor) {
|
||||
const role_area = $('<div class="role-editor">')
|
||||
.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 = $('<div style="min-height: 300px">')
|
||||
.appendTo(frm.fields_dict.modules_html.wrapper);
|
||||
|
|
|
|||
|
|
@ -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('<div class="help">' + __("Loading") + '...</div>');
|
||||
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 = $('<p><button class="btn btn-default btn-add btn-sm" style="margin-right: 5px;"></button>\
|
||||
<button class="btn btn-sm btn-default btn-remove"></button></p>').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('<div class="user-role col-md-4" \
|
||||
data-user-role="%(role_value)s">\
|
||||
<input type="checkbox" style="margin-top:0px;" class="box"> \
|
||||
<a href="#" class="grey role">%(role_display)s</a>\
|
||||
</div>', {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('<table class="user-perm"><thead><tr>'
|
||||
+ '<th style="text-align: left">' + __('Document Type') + '</th>'
|
||||
+ '<th>' + __('Level') + '</th>'
|
||||
+ '<th>' + __('Read') + '</th>'
|
||||
+ '<th>' + __('Write') + '</th>'
|
||||
+ '<th>' + __('Create') + '</th>'
|
||||
+ '<th>' + __('Delete') + '</th>'
|
||||
+ '<th>' + __('Submit') + '</th>'
|
||||
+ '<th>' + __('Cancel') + '</th>'
|
||||
+ '<th>' + __('Amend') + '</th>'
|
||||
+ '<th>' + __('Set User Permissions') + '</th>'
|
||||
+ '</tr></thead><tbody></tbody></table>');
|
||||
|
||||
for(var i=0, l=r.message.length; i<l; i++) {
|
||||
var perm = r.message[i];
|
||||
|
||||
// if permission -> icon
|
||||
for(var key in perm) {
|
||||
if(key!='parent' && key!='permlevel') {
|
||||
if(perm[key]) {
|
||||
perm[key] = '<i class="fa fa-check"></i>';
|
||||
} else {
|
||||
perm[key] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$body.find('tbody').append(repl('<tr>\
|
||||
<td style="text-align: left">%(parent)s</td>\
|
||||
<td>%(permlevel)s</td>\
|
||||
<td>%(read)s</td>\
|
||||
<td>%(write)s</td>\
|
||||
<td>%(create)s</td>\
|
||||
<td>%(delete)s</td>\
|
||||
<td>%(submit)s</td>\
|
||||
<td>%(cancel)s</td>\
|
||||
<td>%(amend)s</td>\
|
||||
<td>%(set_user_permissions)s</td>\
|
||||
</tr>', 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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue