var wppb_re_capabilities_group = []; var wppb_re_new_capabilities = {}; var wppb_re_current_role_capabilities = jQuery.extend( {}, wppb_roles_editor_data.current_role_capabilities ); var wppb_re_unsaved_capabilities = {}; var wppb_re_capabilities_to_delete = {}; jQuery( document ).ready( function() { // Disable Enter key jQuery( window ).keydown( function( e ) { if( e.keyCode == 13 ) { event.preventDefault(); return false; } } ); // Disable the role title field when editing a role if( wppb_roles_editor_data.current_screen_action != 'add' ) { jQuery( '.post-type-wppb-roles-editor input#title' ).attr( 'disabled', 'disabled' ); } var table_roles = jQuery( '.post-type-wppb-roles-editor .wp-list-table.posts tr .row-actions' ); if( jQuery( table_roles ).find( '.default_role' ) ) { jQuery( ' — ' + wppb_roles_editor_data.default_role_text + '' ).insertAfter( jQuery( table_roles ).find( '.default_role' ).parent().parent().find( 'strong .row-title' ) ); } if( jQuery( table_roles ).find( '.delete_notify.your_role' ) ) { jQuery( ' — ' + wppb_roles_editor_data.your_role_text + '' ).insertAfter( jQuery( table_roles ).find( '.delete_notify.your_role' ).parent().parent().find( 'strong .row-title' ) ); } // Dynamically change value of the Role Slug field jQuery( '.post-type-wppb-roles-editor #titlewrap' ).find( '#title' ).change( function() { if( ! jQuery( '.post-type-wppb-roles-editor #wppb-role-slug' ).val() ) { jQuery( '.post-type-wppb-roles-editor #wppb-role-slug' ).val( jQuery( this ).val().toLowerCase() ); } } ); // Create an object with grouped capabilities for the Add Capability select2 var counter = 1; jQuery.each( wppb_roles_editor_data.capabilities, function( key, value ) { var capabilities_single_group = {}; if( key != 'post_types' ) { capabilities_single_group = wppb_re_create_capabilities_group( key, value, counter ); wppb_re_capabilities_group.push( capabilities_single_group ); counter++; } else if( key == 'post_types' ) { jQuery.each( value, function( key, value ) { capabilities_single_group = wppb_re_create_capabilities_group( key, value, counter ); wppb_re_capabilities_group.push( capabilities_single_group ); counter++; } ); } } ); // Display the current role capabilities (on single role page) wppb_re_display_capabilities( 'all' ); // Check for already added capabilities and disable them before select2 initialization wppb_re_disable_select_capabilities( wppb_re_capabilities_group, wppb_roles_editor_data.current_role_capabilities, 'add' ); if( wppb_re_getParameterByName( 'wppb_re_clone' ) ) { var data = { 'action' : 'get_role_capabilities', 'security' : jQuery( '.post-type-wppb-roles-editor #wppb-re-ajax-nonce' ).val(), 'role' : wppb_re_getParameterByName( 'wppb_re_clone' ) }; jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-no-cap' ).remove(); jQuery.post( wppb_roles_editor_data.ajaxUrl, data, function( response ) { if( response != 'no_caps' ) { jQuery( '.post-type-wppb-roles-editor .wppb-re-spinner-container' ).hide(); wppb_re_current_role_capabilities = jQuery.extend( wppb_re_current_role_capabilities, JSON.parse( response ) ); wppb_re_display_capabilities( 'all' ); wppb_re_disable_select_capabilities( wppb_re_capabilities_group, wppb_re_current_role_capabilities, 'add' ); } else { jQuery( '.wppb-re-spinner-container' ).hide(); wppb_re_no_capabilities_found(); } } ); } // Delete a capability jQuery( '.post-type-wppb-roles-editor #wppb-role-edit-table' ).on( 'click', 'a.wppb-delete-capability-link', function() { if( ( wppb_roles_editor_data.current_user_role && jQuery.inArray( jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text(), wppb_roles_editor_data.admin_capabilities ) === -1 ) || ! wppb_roles_editor_data.current_user_role ) { jQuery( this ).closest( 'div.wppb-role-edit-table-entry' ).remove(); var deleted_capability = {}; deleted_capability[jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text()] = jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text(); wppb_re_capabilities_to_delete[jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text()] = jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text(); delete wppb_re_current_role_capabilities[jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text()]; delete wppb_re_new_capabilities[jQuery( this ).closest( 'span.wppb-delete-capability' ).siblings( 'span.wppb-capability' ).text()]; if( jQuery( '.wppb-add-new-cap-input' ).is( ':visible' ) ) { wppb_re_change_select_to_input(); } wppb_re_disable_select_capabilities( wppb_re_capabilities_group, deleted_capability, 'delete' ); if( jQuery( '.wppb-role-edit-table-entry' ).length < 1 ) { wppb_re_no_capabilities_found(); } wppb_re_number_of_capabilities(); } } ); // Change between select2 with all existing capabilities and input to add a new capability jQuery( '.post-type-wppb-roles-editor a.wppb-add-new-cap-link' ).click( function() { wppb_re_change_select_to_input(); } ); jQuery( '.post-type-wppb-roles-editor .wppb-role-editor-tab' ).click( function() { wppb_re_tabs_handler( jQuery( this ) ); } ); wppb_re_form_submit(); wppb_re_number_of_capabilities(); // Display number of users for current role if( wppb_roles_editor_data.current_role_users_count !== null ) { jQuery( '.post-type-wppb-roles-editor .misc-pub-section.misc-pub-section-users span' ).find( 'strong' ).text( wppb_roles_editor_data.current_role_users_count ); } // Check if role has a title or return an error if not jQuery( 'body' ).on( 'submit.edit-post', '#post', function() { if( jQuery( '.post-type-wppb-roles-editor #title' ).val().replace( / /g, '' ).length === 0 ) { window.alert( wppb_roles_editor_data.role_name_required_error_text ); jQuery( '.post-type-wppb-roles-editor #major-publishing-actions .spinner' ).hide(); jQuery( '.post-type-wppb-roles-editor #major-publishing-actions' ).find( ':button, :submit, a.submitdelete, #post-preview' ).removeClass( 'disabled' ); jQuery( '.post-type-wppb-roles-editor #title' ).focus(); wppb_re_form_submit(); return false; } else { jQuery( '.post-type-wppb-roles-editor #major-publishing-actions .spinner' ).show(); } } ); } ); function wppb_re_form_submit() { jQuery( '.post-type-wppb-roles-editor #publishing-action #publish' ).unbind( 'click' ).one( 'click', function( e ) { e.preventDefault(); jQuery( this ).addClass( 'disabled' ); jQuery( this ).siblings( '.spinner' ).addClass( 'is-active' ); wppb_re_update_role_capabilities(); } ); } function wppb_re_no_capabilities_found() { jQuery( '.post-type-wppb-roles-editor #wppb-role-edit-table' ).find( '#wppb-role-edit-caps-clear' ).after( '
' + '' + wppb_roles_editor_data.no_capabilities_found_text + '' + '
' ); } function wppb_re_number_of_capabilities() { var count = 0; var i; for( i in wppb_re_current_role_capabilities ) { if( wppb_re_current_role_capabilities.hasOwnProperty( i ) ) { count++; } } jQuery( '.post-type-wppb-roles-editor .misc-pub-section.misc-pub-section-capabilities span' ).find( 'strong' ).text( count ); } function wppb_re_tabs_handler( tab ) { wppb_re_display_capabilities( jQuery( tab ).data( 'wppb-re-tab' ) ); jQuery( '.post-type-wppb-roles-editor .wppb-role-editor-tab-title.wppb-role-editor-tab-active' ).removeClass( 'wppb-role-editor-tab-active' ); jQuery( tab ).closest( '.wppb-role-editor-tab-title' ).addClass( 'wppb-role-editor-tab-active' ); } function wppb_re_disable_select_capabilities( wppb_re_capabilities_group, capabilities, action ) { if( capabilities != null ) { jQuery.each( wppb_re_capabilities_group, function( key, value ) { jQuery.each( value['children'], function( key, value ) { if( value['text'] in capabilities ) { if( action == 'add' ) { value['disabled'] = true; } else if( action == 'delete' ) { value['disabled'] = false; } } } ); } ); } wppb_re_initialize_select2( wppb_re_capabilities_group ); } function wppb_re_initialize_select2( wppb_re_capabilities_group ) { var capabilities_select = jQuery( '.wppb-capabilities-select' ); capabilities_select.empty(); capabilities_select.select2( { placeholder: wppb_roles_editor_data.select2_placeholder_text, allowClear: true, data: wppb_re_capabilities_group, templateResult: function( data ) { if( data.id == null || jQuery.inArray( data.text, wppb_roles_editor_data.capabilities['custom']['capabilities'] ) === -1 ) { return data.text; } var option = jQuery( '' ); var delete_cap = jQuery( '' + wppb_roles_editor_data.delete_permanently_text + '' ); delete_cap.on( 'mouseup', function( event ) { event.stopPropagation(); } ); delete_cap.on( 'click', function( event ) { if( confirm( wppb_roles_editor_data.capability_text + ': ' + jQuery( this ).siblings( 'span' ).text() + '\n\n' + wppb_roles_editor_data.capability_perm_delete_text ) ) { wppb_re_delete_capability_permanently( jQuery( this ).siblings( 'span' ).text() ); } } ); option.text( data.text ); option = option.add( delete_cap ); return option; } } ); } function wppb_re_delete_capability_permanently( capability ) { var data = { 'action' : 'delete_capability_permanently', 'security' : jQuery( '.post-type-wppb-roles-editor #wppb-re-ajax-nonce' ).val(), 'capability' : capability }; jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-table-entry' ).remove(); jQuery( '.post-type-wppb-roles-editor .wppb-re-spinner-container' ).show(); jQuery.post( wppb_roles_editor_data.ajaxUrl, data, function( response ) { window.location.reload(); } ); } function wppb_re_create_capabilities_group( key, value, counter ) { var capabilities_single_group_caps = {}; var capabilities_single_group_caps_array = []; jQuery.each( value['capabilities'], function( key, value ) { capabilities_single_group_caps = { id: value + '_' + counter, text: value }; capabilities_single_group_caps_array.push( capabilities_single_group_caps ); } ); return { category: key, text: value['label'], children: capabilities_single_group_caps_array }; } function wppb_re_display_capabilities( action ) { jQuery( '.post-type-wppb-roles-editor .wppb-re-spinner-container' ).hide(); jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-table-entry' ).remove(); var capabilities; if( action == 'all' ) { capabilities = wppb_re_current_role_capabilities; } else { capabilities = wppb_re_capabilities_group; } jQuery.each( capabilities, function( key, value ) { var table = jQuery( '#wppb-role-edit-table' ); if( action == 'all' ) { wppb_re_display_capability( key ); } else { if( value['category'] == action ) { jQuery.each( value['children'], function( key, value ) { if( wppb_re_current_role_capabilities != null && value['text'] in wppb_re_current_role_capabilities ) { wppb_re_display_capability( value['text'] ); } } ); } if( value['category'] == action && action == 'custom' ) { if( ! jQuery.isEmptyObject( wppb_re_new_capabilities ) ) { jQuery.each( wppb_re_new_capabilities, function( key, value ) { if( ! ( value in wppb_roles_editor_data.all_capabilities ) ) { var new_capability_check = 0; jQuery.each( wppb_roles_editor_data.capabilities, function( key2, value2 ) { if( value2['label'] && value2['label'] != 'Custom' && jQuery.inArray( value, value2['capabilities'] ) !== -1 ) { new_capability_check++; } } ); if( new_capability_check == 0 ) { wppb_re_display_capability( value ); } } } ); } } } } ); if( jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-table-entry' ).length ) { jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-no-cap' ).remove(); } else { wppb_re_no_capabilities_found(); } } function wppb_re_display_capability( capability ) { var title = ''; var wppb_capability_class = 'wppb-capability'; if( ! wppb_roles_editor_data.current_role_capabilities || ( wppb_roles_editor_data.current_role_capabilities && ! ( capability in wppb_roles_editor_data.current_role_capabilities ) ) ) { wppb_capability_class = wppb_capability_class + ' wppb-new-capability'; title = 'title = "' + wppb_roles_editor_data.new_cap_update_title_text + '"'; } else if( wppb_re_getParameterByName( 'wppb_re_clone' ) && ! wppb_roles_editor_data.current_role_capabilities ) { wppb_capability_class = wppb_capability_class + ' wppb-new-capability'; title = 'title = "' + wppb_roles_editor_data.new_cap_publish_title_text + '"'; } var delete_link = 'Delete'; if( wppb_roles_editor_data.current_user_role && jQuery.inArray( capability, wppb_roles_editor_data.admin_capabilities ) !== -1 ) { delete_link = '' + wppb_roles_editor_data.delete_text + ''; } jQuery( '.post-type-wppb-roles-editor #wppb-role-edit-table' ).find( '#wppb-role-edit-caps-clear' ).after( '
' + '' + capability + '' + '' + delete_link + '' + '
' ); } function wppb_re_add_capability() { var capabilities_select = jQuery( '.post-type-wppb-roles-editor .wppb-capabilities-select' ); var new_capability_input = jQuery( '.post-type-wppb-roles-editor .wppb-add-new-cap-input' ); var table = jQuery( '.post-type-wppb-roles-editor #wppb-role-edit-table' ); var capabilities = {}; var no_duplicates = {}; if( jQuery( '.post-type-wppb-roles-editor .select2.select2-container' ).is( ':visible' ) && jQuery( capabilities_select ).val() != null ) { jQuery( capabilities_select ).find( 'option:selected' ).each( function() { if( ! no_duplicates[jQuery( this ).text()] ) { if( ! jQuery( '.post-type-wppb-roles-editor .wppb-role-editor-tab.wppb-role-editor-all' ).closest( 'li.wppb-role-editor-tab-title' ).hasClass( 'wppb-role-editor-tab-active' ) ) { wppb_re_tabs_handler( jQuery( '.post-type-wppb-roles-editor .wppb-role-editor-tab.wppb-role-editor-all' ) ); } var title = ''; var wppb_capability_class = 'wppb-capability'; if( ! wppb_roles_editor_data.current_role_capabilities || ( wppb_roles_editor_data.current_role_capabilities && ! ( jQuery( this ).text() in wppb_roles_editor_data.current_role_capabilities ) ) ) { wppb_capability_class = wppb_capability_class + ' wppb-new-capability'; wppb_re_unsaved_capabilities[jQuery( this ).text()] = jQuery( this ).text(); title = 'title = "' + wppb_roles_editor_data.new_cap_update_title_text + '"'; } else if( wppb_re_getParameterByName( 'wppb_re_clone' ) && ! wppb_roles_editor_data.current_role_capabilities ) { wppb_capability_class = wppb_capability_class + ' wppb-new-capability'; title = 'title = "' + wppb_roles_editor_data.new_cap_publish_title_text + '"'; } jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-no-cap' ).remove(); jQuery( table ).find( '#wppb-role-edit-caps-clear' ).after( '
' + '' + jQuery( this ).text() + '' + '' + wppb_roles_editor_data.delete_text + '' + '
' ); capabilities[jQuery( this ).text()] = jQuery( this ).text(); no_duplicates[jQuery( this ).text()] = jQuery( this ).text(); delete wppb_re_capabilities_to_delete[jQuery( this ).text()]; } } ); wppb_re_new_capability( capabilities ); wppb_re_disable_select_capabilities( wppb_re_capabilities_group, capabilities, 'add' ); jQuery( capabilities_select ).val( null ).trigger( 'change' ); wppb_re_number_of_capabilities(); setTimeout( function() { jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-table-entry' ).removeClass( 'wppb-new-capability-highlight' ); }, 500 ); } else if( jQuery( new_capability_input ).is( ':visible' ) && jQuery( new_capability_input ).val().length != 0 ) { var new_capability_value = jQuery( new_capability_input ).val(); new_capability_value = new_capability_value.trim().replace( /<.*?>/g, '' ).replace( /\s/g, '_' ).replace( /[^a-zA-Z0-9_]/g, '' ); if( new_capability_value && ( ! wppb_roles_editor_data.hidden_capabilities || ! ( new_capability_value in wppb_roles_editor_data.hidden_capabilities ) ) ) { if( ! ( new_capability_value in wppb_re_current_role_capabilities ) && ! ( new_capability_value in wppb_re_new_capabilities ) ) { wppb_re_tabs_handler( jQuery( '.post-type-wppb-roles-editor .wppb-role-editor-tab.wppb-role-editor-all' ) ); var title = ''; var wppb_capability_class = 'wppb-capability'; if( ! wppb_roles_editor_data.current_role_capabilities || ( wppb_roles_editor_data.current_role_capabilities && ! ( new_capability_value in wppb_roles_editor_data.current_role_capabilities ) ) ) { wppb_capability_class = wppb_capability_class + ' wppb-new-capability'; wppb_re_unsaved_capabilities[new_capability_value] = new_capability_value; title = 'title = "' + wppb_roles_editor_data.new_cap_update_title_text + '"'; } else if( wppb_re_getParameterByName( 'wppb_re_clone' ) && ! wppb_roles_editor_data.current_role_capabilities ) { wppb_capability_class = wppb_capability_class + ' wppb-new-capability'; title = 'title = "' + wppb_roles_editor_data.new_cap_publish_title_text + '"'; } jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-no-cap' ).remove(); jQuery( table ).find( '#wppb-role-edit-caps-clear' ).after( '
' + '' + new_capability_value + '' + '' + wppb_roles_editor_data.delete_text + '' + '
' ); capabilities[new_capability_value] = new_capability_value; delete wppb_re_capabilities_to_delete[new_capability_value]; wppb_re_change_select_to_input(); wppb_re_new_capability( capabilities ); wppb_re_disable_select_capabilities( wppb_re_capabilities_group, capabilities, 'add' ); jQuery( new_capability_input ).val( '' ); wppb_re_number_of_capabilities(); setTimeout( function() { jQuery( '.post-type-wppb-roles-editor .wppb-role-edit-table-entry' ).removeClass( 'wppb-new-capability-highlight' ); }, 500 ); } else { jQuery( new_capability_input ).val( '' ); jQuery( '.post-type-wppb-roles-editor #wppb-duplicate-capability-error' ).show().delay( 3000 ).fadeOut(); } } else if( wppb_roles_editor_data.hidden_capabilities && new_capability_value in wppb_roles_editor_data.hidden_capabilities ) { jQuery( '.post-type-wppb-roles-editor #wppb-hidden-capability-error' ).show().delay( 3000 ).fadeOut(); } else { jQuery( '.post-type-wppb-roles-editor #wppb-add-capability-error' ).show().delay( 3000 ).fadeOut(); } } else { jQuery( '.post-type-wppb-roles-editor #wppb-add-capability-error' ).show().delay( 3000 ).fadeOut(); } } function wppb_re_new_capability( capabilities ) { jQuery.each( capabilities, function( key, value ) { if( ! ( value in wppb_roles_editor_data.all_capabilities ) || ! ( value in wppb_re_current_role_capabilities ) ) { wppb_re_new_capabilities[value] = value; } } ); jQuery.extend( wppb_re_current_role_capabilities, wppb_re_new_capabilities ); } function wppb_re_update_role_capabilities() { jQuery( '.post-type-wppb-roles-editor #wppb-role-slug-hidden' ).val( jQuery( '#wppb-role-slug' ).val() ); var data = { 'action' : 'update_role_capabilities', 'security' : jQuery( '.post-type-wppb-roles-editor #wppb-re-ajax-nonce' ).val(), 'role_display_name' : jQuery( '.post-type-wppb-roles-editor #titlediv' ).find( '#title' ).val(), 'role' : jQuery( '.post-type-wppb-roles-editor #wppb-role-slug' ).val(), 'new_capabilities' : wppb_re_unsaved_capabilities, 'all_capabilities' : wppb_re_current_role_capabilities, 'capabilities_to_delete' : wppb_re_capabilities_to_delete }; jQuery.post( wppb_roles_editor_data.ajaxUrl, data, function( response ) { jQuery( '.post-type-wppb-roles-editor #publishing-action #publish' ).removeClass( 'disabled' ).trigger( 'click' ); } ); } function wppb_re_change_select_to_input() { if( jQuery( '.post-type-wppb-roles-editor .select2.select2-container' ).is( ':visible' ) ) { jQuery( '.post-type-wppb-roles-editor .select2.select2-container' ).hide(); jQuery( '.post-type-wppb-roles-editor .wppb-add-new-cap-input' ).show(); jQuery( '.post-type-wppb-roles-editor a.wppb-add-new-cap-link' ).text( wppb_roles_editor_data.cancel_text ); } else { jQuery( '.post-type-wppb-roles-editor .select2.select2-container' ).show(); jQuery( '.post-type-wppb-roles-editor .wppb-add-new-cap-input' ).hide(); jQuery( '.post-type-wppb-roles-editor a.wppb-add-new-cap-link' ).text( wppb_roles_editor_data.add_new_capability_text ); } } function wppb_re_getParameterByName( name, url ) { if( ! url ) { url = window.location.href; } name = name.replace( /[\[\]]/g, "\\$&" ); var regex = new RegExp( "[?&]" + name + "(=([^&#]*)|&|#|$)" ), results = regex.exec( url ); if( ! results ) { return null; } if( ! results[2] ) { return ''; } return decodeURIComponent( results[2].replace( /\+/g, " " ) ); }