Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

209 rindas
6.0 KiB

  1. frappe.RoleEditor = Class.extend({
  2. init: function(wrapper, frm, disable) {
  3. var me = this;
  4. this.frm = frm;
  5. this.wrapper = wrapper;
  6. this.disable = disable;
  7. $(wrapper).html('<div class="help">' + __("Loading") + '...</div>')
  8. return frappe.call({
  9. method: 'frappe.core.doctype.user.user.get_all_roles',
  10. callback: function(r) {
  11. me.roles = r.message;
  12. me.show_roles();
  13. // refresh call could've already happened
  14. // when all role checkboxes weren't created
  15. if(me.frm.doc) {
  16. me.frm.roles_editor.show();
  17. }
  18. }
  19. });
  20. },
  21. show_roles: function() {
  22. var me = this;
  23. $(this.wrapper).empty();
  24. if(me.frm.doctype != 'User') {
  25. var role_toolbar = $('<p><button class="btn btn-default btn-add btn-sm" style="margin-right: 5px;"></button>\
  26. <button class="btn btn-sm btn-default btn-remove"></button></p>').appendTo($(this.wrapper));
  27. role_toolbar.find(".btn-add")
  28. .html(__('Add all roles'))
  29. .on("click", function () {
  30. $(me.wrapper).find('input[type="checkbox"]').each(function (i, check) {
  31. if (!$(check).is(":checked")) {
  32. check.checked = true;
  33. }
  34. });
  35. });
  36. role_toolbar.find(".btn-remove")
  37. .html(__('Clear all roles'))
  38. .on("click", function() {
  39. $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
  40. if($(check).is(":checked")) {
  41. check.checked = false;
  42. }
  43. });
  44. });
  45. }
  46. $.each(this.roles, function(i, role) {
  47. $(me.wrapper).append(repl('<div class="user-role" \
  48. data-user-role="%(role_value)s">\
  49. <input type="checkbox" style="margin-top:0px;" class="box"> \
  50. <a href="#" class="grey role">%(role_display)s</a>\
  51. </div>', {role_value: role,role_display:__(role)}));
  52. });
  53. $(this.wrapper).find('input[type="checkbox"]').change(function() {
  54. me.set_roles_in_table();
  55. me.frm.dirty();
  56. });
  57. $(this.wrapper).find('.user-role a').click(function() {
  58. me.show_permissions($(this).parent().attr('data-user-role'))
  59. return false;
  60. });
  61. },
  62. show: function() {
  63. var me = this;
  64. $('.box').attr('disabled', this.disable);
  65. // uncheck all roles
  66. $(this.wrapper).find('input[type="checkbox"]')
  67. .each(function(i, checkbox) { checkbox.checked = false; });
  68. // set user roles as checked
  69. $.each((me.frm.doc.roles || []), function(i, user_role) {
  70. var checkbox = $(me.wrapper)
  71. .find('[data-user-role="'+user_role.role+'"] input[type="checkbox"]').get(0);
  72. if(checkbox) checkbox.checked = true;
  73. });
  74. this.set_enable_disable();
  75. },
  76. set_enable_disable: function() {
  77. $('.box').attr('disabled', this.disable ? true : false);
  78. },
  79. set_roles_in_table: function() {
  80. var opts = this.get_roles();
  81. var existing_roles_map = {};
  82. var existing_roles_list = [];
  83. var me = this;
  84. $.each((me.frm.doc.roles || []), function(i, user_role) {
  85. existing_roles_map[user_role.role] = user_role.name;
  86. existing_roles_list.push(user_role.role);
  87. });
  88. // remove unchecked roles
  89. $.each(opts.unchecked_roles, function(i, role) {
  90. if(existing_roles_list.indexOf(role)!=-1) {
  91. frappe.model.clear_doc("Has Role", existing_roles_map[role]);
  92. }
  93. });
  94. // add new roles that are checked
  95. $.each(opts.checked_roles, function(i, role) {
  96. if(existing_roles_list.indexOf(role)==-1) {
  97. var user_role = frappe.model.add_child(me.frm.doc, "Has Role", "roles");
  98. user_role.role = role;
  99. }
  100. });
  101. refresh_field("roles");
  102. },
  103. get_roles: function() {
  104. var checked_roles = [];
  105. var unchecked_roles = [];
  106. $(this.wrapper).find('[data-user-role]').each(function() {
  107. if($(this).find('input[type="checkbox"]:checked').length) {
  108. checked_roles.push($(this).attr('data-user-role'));
  109. } else {
  110. unchecked_roles.push($(this).attr('data-user-role'));
  111. }
  112. });
  113. return {
  114. checked_roles: checked_roles,
  115. unchecked_roles: unchecked_roles
  116. }
  117. },
  118. show_permissions: function(role) {
  119. // show permissions for a role
  120. var me = this;
  121. if(!this.perm_dialog)
  122. this.make_perm_dialog()
  123. $(this.perm_dialog.body).empty();
  124. return frappe.call({
  125. method: 'frappe.core.doctype.user.user.get_perm_info',
  126. args: {role: role},
  127. callback: function(r) {
  128. var $body = $(me.perm_dialog.body);
  129. // TODO fix the overflow issue and also display perms like report, import, etc.
  130. $body.append('<table class="user-perm"><thead><tr>'
  131. + '<th style="text-align: left">' + __('Document Type') + '</th>'
  132. + '<th>' + __('Level') + '</th>'
  133. + '<th>' + __('Apply User Permissions') + '</th>'
  134. + '<th>' + __('Read') + '</th>'
  135. + '<th>' + __('Write') + '</th>'
  136. + '<th>' + __('Create') + '</th>'
  137. + '<th>' + __('Delete') + '</th>'
  138. + '<th>' + __('Submit') + '</th>'
  139. + '<th>' + __('Cancel') + '</th>'
  140. + '<th>' + __('Amend') + '</th>'
  141. // + '<th>' + __('Report') + '</th>'
  142. // + '<th>' + __('Import') + '</th>'
  143. // + '<th>' + __('Export') + '</th>'
  144. // + '<th>' + __('Print') + '</th>'
  145. // + '<th>' + __('Email') + '</th>'
  146. + '<th>' + __('Set User Permissions') + '</th>'
  147. + '</tr></thead><tbody></tbody></table>');
  148. for(var i=0, l=r.message.length; i<l; i++) {
  149. var perm = r.message[i];
  150. // if permission -> icon
  151. for(var key in perm) {
  152. if(key!='parent' && key!='permlevel') {
  153. if(perm[key]) {
  154. perm[key] = '<i class="fa fa-check"></i>';
  155. } else {
  156. perm[key] = '';
  157. }
  158. }
  159. }
  160. $body.find('tbody').append(repl('<tr>\
  161. <td style="text-align: left">%(parent)s</td>\
  162. <td>%(permlevel)s</td>\
  163. <td>%(apply_user_permissions)s</td>\
  164. <td>%(read)s</td>\
  165. <td>%(write)s</td>\
  166. <td>%(create)s</td>\
  167. <td>%(delete)s</td>\
  168. <td>%(submit)s</td>\
  169. <td>%(cancel)s</td>\
  170. <td>%(amend)s</td>'
  171. // + '<td>%(report)s</td>\
  172. // <td>%(import)s</td>\
  173. // <td>%(export)s</td>\
  174. // <td>%(print)s</td>\
  175. // <td>%(email)s</td>'
  176. + '<td>%(set_user_permissions)s</td>\
  177. </tr>', perm))
  178. }
  179. me.perm_dialog.show();
  180. }
  181. });
  182. },
  183. make_perm_dialog: function() {
  184. this.perm_dialog = new frappe.ui.Dialog({
  185. title:__('Role Permissions')
  186. });
  187. this.perm_dialog.$wrapper.find('.modal-dialog').css("width", "800px");
  188. }
  189. });