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, " " ) );
}