// get/post via jQuery (function ($) { $.extend({ ure_getGo: function (url, params) { document.location = url + '?' + $.param(params); }, ure_postGo: function (url, params) { var $form = $('
') .attr('method', 'post') .attr('action', url); $.each(params, function (name, value) { $("") .attr('name', name) .attr('value', value) .appendTo($form); }); $form.appendTo('body'); $form.submit(); } }); })(jQuery); jQuery(function() { jQuery( '#ure_add_role' ).button({ label: ure_data.add_role }).on('click', (function ( event ) { event.preventDefault(); ure_main.show_add_role_dialog(); })); jQuery( '#ure_add_capability' ).button({ label: ure_data.add_capability }).on('click', ( function ( event ) { event.preventDefault(); ure_main.show_add_capability_dialog(); })); var del_cap = jQuery( '#ure_delete_capability' ); if ( del_cap.length > 0 ) { del_cap.button({ label: ure_data.delete_capability }).on('click', (function ( event ) { event.preventDefault(); jQuery.ajax( ure_main.get_caps_to_remove ); })); } var del_role = jQuery( '#ure_delete_role' ); if ( del_role.length>0 ) { del_role.button({ label: ure_data.delete_role }).on('click', (function ( event ) { event.preventDefault(); ure_main.show_delete_role_dialog(); })); } jQuery('#ure_rename_role').button({ label: ure_data.rename_role }).on('click', (function (event) { event.preventDefault(); ure_main.show_rename_role_dialog(); })); if ( jQuery('#ure_select_all_caps').length>0 ) { jQuery('#ure_select_all_caps').on('click', ( ure_main.auto_select_caps ) ); } ure_main.count_caps_in_groups(); ure_main.sizes_update(); jQuery('#ure_caps_groups_list').selectable({ selected: function( event, ui ) { // do not allow multiple selection jQuery(ui.selected).siblings().removeClass('ui-selected'); ure_main.caps_refresh( ui.selected.id ); } }); ure_main.select_selectable_element( jQuery('#ure_caps_groups_list'), jQuery('#ure_caps_group_all') ); jQuery('#granted_only').on('click', ( ure_main.show_granted_caps_only ) ); // We have to move notifyjs div on the top manually, as #wpadminbar z-index is 99999 jQuery("head").append(''); var new_css_element = jQuery("head").children(':last'); new_css_element.html('.notifyjs-corner {z-index:1000000;}'); }); if (typeof ure_current_role==='undefined') { var ure_current_role = ''; } if (typeof ure_current_role_name==='undefined') { var ure_current_role_name = ''; } // Main User Role Editor object var ure_main = { selected_group: 'all', caps_counter: null, class_prefix: 'ure-', ajax_error: function ( jqXHR, textStatus, errorThrown) { jQuery('#ure_task_status').hide(); jQuery.notify( textStatus, 'error'); }, // change color of apply to all check box - for multi-site setup only apply_to_all_on_click: function (cb) { el = document.getElementById('ure_apply_to_all_div'); if (cb.checked) { el.style.color = '#FF0000'; } else { el.style.color = '#000000'; } }, apply_selection: function (cb_id) { var qfilter = jQuery('#quick_filter').val(); var parent_div = jQuery('#ure_cap_div_'+ cb_id); var disabled = jQuery('#'+ cb_id).attr('disabled'); var result = false; if ( parent_div.hasClass( ure_main.class_prefix + ure_main.selected_group ) && // make selection inside currently selected group of capabilities only !parent_div.hasClass('hidden') && disabled!=='disabled' ) { // select not hidden and not disabled checkboxes (capabilities) only // if quick filter is not empty, then apply selection to the tagged element only if ( qfilter==='' || parent_div.hasClass('ure_tag') ) { result = true; } } return result; }, auto_select_caps: function (event) { if ( event.shiftKey ) { if ( 'administrator'===ure_current_role ) { // do not uncheck any capability for administrator role return; } jQuery('.ure-cap-cb').each(function () { // reverse selection if ( ure_main.apply_selection( this.id ) ) { jQuery(this).prop('checked', !jQuery(this).prop('checked')); } }); } else { jQuery('.ure-cap-cb').each(function () { // switch On/Off all checkboxes if ( ure_main.apply_selection( this.id ) ) { if ( 'administrator'===ure_current_role ) { // do not uncheck any capability for administrator role if ( jQuery('#ure_select_all_caps').prop('checked') ) { jQuery(this).prop('checked', jQuery('#ure_select_all_caps').prop('checked')); } } else { jQuery(this).prop('checked', jQuery('#ure_select_all_caps').prop('checked')); } } }); } }, caps_refresh_all: function () { jQuery('.ure-cap-div').each(function () { if (jQuery(this).hasClass('hidden')) { if ( !jQuery(this).hasClass(ure_main.class_prefix + 'deprecated') ) { jQuery(this).removeClass('hidden'); } } }); }, caps_refresh_for_group: function (group_id) { var show_deprecated = jQuery('#ure_show_deprecated_caps').prop('checked'); jQuery('.ure-cap-div').each(function () { var el = jQuery(this); if (el.hasClass(ure_main.class_prefix + group_id)) { if (el.hasClass('hidden')) { if (el.hasClass('blocked')) { return; } if (el.hasClass(ure_main.class_prefix + 'deprecated')) { if (group_id==='deprecated' || show_deprecated) { el.removeClass('hidden'); } } else { el.removeClass('hidden'); } } else { if (el.hasClass(ure_main.class_prefix + 'deprecated')) { if (!show_deprecated) { el.addClass('hidden'); } } } } else { if (!el.hasClass('hidden')) { el.addClass('hidden'); } } }); }, change_caps_columns_quant: function () { var selected_index = parseInt( jQuery('#caps_columns_quant').val() ); var columns = ure_main.validate_columns( selected_index ); var el = jQuery('#ure_caps_list'); el.css('-moz-column-count', String( columns ) ); el.css('-webkit-column-count', String( columns ) ); el.css('column-count', String( columns ) ); }, caps_refresh: function ( group ) { var group_id = group.substr(15); ure_main.selected_group = group_id; if (group_id === 'all') { ure_main.caps_refresh_all(); } else { ure_main.caps_refresh_for_group( group_id ); } ure_main.change_caps_columns_quant(); jQuery('#granted_only').prop('checked', false); }, hide_notice: function(el) { if ( el.parentNode!==null) { el.parentNode.removeChild(el); } }, show_granted_caps_only: function () { var show_deprecated = jQuery('#ure_show_deprecated_caps').prop('checked'); var hide_flag = jQuery('#granted_only').prop('checked'); jQuery('.ure-cap-div').each(function () { var cap_div = jQuery(this); if ( !cap_div.hasClass(ure_main.class_prefix + ure_main.selected_group ) ) { // apply to the currently selected group only return; } var cap_id = cap_div.attr('id').substr( 12 ); var granted = jQuery('#'+ cap_id).prop('checked'); if ( granted ) { return; } if ( hide_flag ) { if ( !cap_div.hasClass('hidden') ) { cap_div.addClass('hidden'); } } else { if ( cap_div.hasClass('ure-deprecated') && !show_deprecated ) { return; } if ( cap_div.hasClass('hidden') ) { cap_div.removeClass('hidden'); } } }); }, sizes_update: function () { var width = jQuery('#ure_caps_td').css('width'); var el = jQuery('#ure_caps_list_container'); el.css('width', width); var height = jQuery('#ure_caps_td').css('height'); el.css('max-height', height); }, ui_button_text: function(caption) { var wrapper = '' + caption + ''; return wrapper; }, validate_columns: function (columns) { if ( columns==1 || ure_main.selected_group==='all' ) { return columns; } // Do not split list on columns in case it contains less then < 25 capabilities for (var i=0; i0 ) { old_text = old_text.substr( 0, key_pos - 1 ); } var value = old_text +' ('+ ure_main.caps_counter[i].total +'/'+ ure_main.caps_counter[i].granted +')'; el.text(value); } }, refresh_role_view: function ( response ) { jQuery('#ure_task_status').hide(); if (response!==null && response.result=='error') { jQuery.notify( response.message, 'error'); return; } // remove "Granted Only" filter if it was set before current role change var granted_only = jQuery('#granted_only').prop('checked'); if (granted_only) { jQuery('#granted_only').prop('checked', false); ure_main.show_granted_caps_only(); } if ( response.hasOwnProperty( 'role_id' ) && response.hasOwnProperty( 'role_name' ) ) { ure_current_role = response.role_id; ure_current_role_name = response.role_name; } // Select capabilities granted to a newly selected role and exclude others jQuery('.ure-cap-cb').each(function () { // go through all capabilities checkboxes if (this.id.length===0) { return; } if ( response.hasOwnProperty( 'caps' ) ) { jQuery(this).prop('checked', response.caps.hasOwnProperty(this.id) && response.caps[this.id]); } if ( ure_data.do_not_revoke_from_admin==1 ) { var el = document.getElementById(this.id); if ( 'administrator'===ure_current_role ) { el.addEventListener( 'click', ure_main.turn_it_back ); } else { el.removeEventListener( 'click', ure_main.turn_it_back ); } } }); // Recalculate granted capabilities for capabilities groups ure_main.count_caps_in_groups(); ure_main.select_selectable_element( jQuery('#ure_caps_groups_list'), jQuery('#ure_caps_group_all') ); if (response.hasOwnProperty( 'options' ) ) { // additional options section jQuery('#additional_options').find(':checkbox').each(function() { // go through all additional options checkboxes jQuery(this).prop('checked', response.options.hasOwnProperty(this.id)); }); } }, role_change: function( role_id ) { jQuery('#ure_task_status').show(); var data = { 'action': 'ure_ajax', 'sub_action':'get_role_caps', 'role': role_id, 'wp_nonce': ure_data.wp_nonce}; jQuery.post( ajaxurl, data, ure_main.refresh_role_view, 'json' ); }, show_add_role_dialog: function() { jQuery('#ure_add_role_dialog').dialog({ dialogClass: 'wp-dialog', modal: true, autoOpen: true, closeOnEscape: true, width: 450, height: 230, resizable: false, title: ure_data.add_new_role_title, 'buttons': { 'Add Role': function () { var role_id = jQuery('#user_role_id').val(); if ( role_id=='' ) { jQuery.notify( ure_data.role_name_required, 'warn'); return false; } if ( !( /^[\w-]*$/.test( role_id ) ) ) { jQuery.notify( ure_data.role_name_valid_chars, 'warn'); return false; } if ( ( /^[0-9]*$/.test( role_id ) ) ) { jQuery.notify( ure_data.numeric_role_name_prohibited, 'warn'); return false; } var role_name = jQuery('#user_role_name').val(); var role_copy_from = jQuery('#user_role_copy_from').val(); jQuery('#ure_task_status').show(); jQuery.ajax( { url: ajaxurl, type: 'POST', dataType: 'json', async: true, data: { action: 'ure_ajax', sub_action: 'add_role', user_role_id: role_id, user_role_name: role_name, user_role_copy_from: role_copy_from, network_admin: ure_data.network_admin, wp_nonce: ure_data.wp_nonce }, success: ure_main.add_role_success, error: ure_main.ajax_error } ); jQuery( this ).dialog('close'); }, CancelAddRole: function () { jQuery(this).dialog('close'); return false; } } }); jQuery( '.ui-dialog-buttonpane button:contains("Add Role")' ).attr( 'id', 'dialog-add-role-button' ); jQuery( '#dialog-add-role-button' ).html( this.ui_button_text( ure_data.add_role ) ); jQuery( '.ui-dialog-buttonpane button:contains("CancelAddRole")' ).attr( 'id', 'dialog-add-role-cancel-button' ); jQuery( '#dialog-add-role-cancel-button' ).html( this.ui_button_text( ure_data.cancel ) ); }, add_role_to_select: function( select_id, role_id, role_name ) { jQuery( '#'+ select_id ) .append( jQuery( '