/** * MainWP_User.page */ var userCountSent = 0; var userCountReceived = 0; jQuery( document ).ready( function () { // Fetch users jQuery( document ).on( 'click', '#mainwp_show_users', function () { mainwp_fetch_users(); } ); // Delete single user jQuery( document ).on( 'click', '.user_submitdelete', function () { var confirmation = confirm( 'Are you sure you want to proceed?' ); if ( confirmation == true ) { mainwpuser_postAction( jQuery( this ), 'delete' ); return; } return false; } ); // Edit single user jQuery( document ).on( 'click', '.user_getedit', function () { jQuery( 'td.check-column input[type="checkbox"]' ).each( function () { this.checked = false; } ); mainwp_edit_users_box_init(); jQuery( '#mainwp-edit-users-modal' ).modal( 'setting', 'closable', false ).modal('show'); mainwpuser_postAction( jQuery( this ), 'edit' ); return false; } ); // Trigger Manage Users bulk actions jQuery( document ).on( 'click', '#mainwp-do-users-bulk-actions', function () { var action = jQuery( '#mainwp-bulk-actions' ).val(); if ( action == 'none' ) return false; var tmp = jQuery( "input[name='user[]']:checked" ); userCountSent = tmp.length; if ( userCountSent == 0 ) return false; var _callback = function() { if ( action == 'edit' ) { jQuery( '#mainwp-edit-users-modal' ).modal( 'setting', 'closable', false ).modal('show'); mainwp_edit_users_box_init(); return; } jQuery( '#mainwp-do-users-bulk-actions' ).attr( 'disabled', 'true' ); tmp.each( function ( index, elem ) { mainwpuser_postAction( elem, action ); } ); }; if ( action == 'delete' ) { var msg = __( 'You are about to delete %1 user(s). Are you sure you want to proceed?', userCountSent ); mainwp_confirm( msg, _callback ); return false; } _callback(); return false; } ); jQuery( document ).on( 'click', '#mainwp_btn_update_user', function () { var errors = [ ]; var tmp = jQuery( "input[name='user[]']:checked" ); userCountSent = tmp.length; if ( userCountSent == 0 ) { errors.push( __( 'Please search and select users.' ) ); } if ( errors.length > 0 ) { jQuery( '#mainwp_update_password_error' ).html( errors.join( '
' ) ); jQuery( '#mainwp_update_password_error' ).show(); return false; } jQuery( '#mainwp_update_password_error' ).hide(); jQuery( '#mainwp_users_updating' ).show(); jQuery( '#mainwp-do-users-bulk-actions' ).attr( 'disabled', 'true' ); jQuery( '#mainwp_btn_update_user' ).attr( 'disabled', 'true' ); tmp.each( function ( index, elem ) { mainwpuser_postAction( elem, 'update_user' ); } ); return false; } ); } ); mainwp_edit_users_box_init = function () { jQuery( 'form#update_user_profile select#role option[value="donotupdate"]' ).prop( 'selected', true ); jQuery( 'form#update_user_profile select#role' ).prop("disabled", false); jQuery( 'form#update_user_profile input#first_name' ).val( '' ); jQuery( 'form#update_user_profile input#last_name' ).val( '' ); jQuery( 'form#update_user_profile input#nickname' ).val( '' ); jQuery( 'form#update_user_profile input#email' ).val( '' ); jQuery( 'form#update_user_profile input#url' ).val( '' ); jQuery( 'form#update_user_profile select#display_name' ).empty().attr( 'disabled', 'disabled' ); jQuery( 'form#update_user_profile #description' ).val( '' ); jQuery( 'form#update_user_profile input#password' ).val( '' ); }; mainwpuser_postAction = function ( elem, what ) { var rowElement = jQuery( elem ).parents( 'tr' ); var userId = rowElement.find( '.userId' ).val(); var userName = rowElement.find( '.userName' ).val(); var websiteId = rowElement.find( '.websiteId' ).val(); var data = mainwp_secure_data( { action: 'mainwp_user_' + what, userId: userId, userName: userName, websiteId: websiteId, update_password: encodeURIComponent( jQuery('#password').val() ) // to fix } ); if ( what == 'update_user' ) { data['user_data'] = jQuery( 'form#update_user_profile' ).serialize(); } rowElement.find( '.row-actions' ).hide(); rowElement.find( '.row-actions-working' ).show(); jQuery.post( ajaxurl, data, function ( response ) { if ( what == 'edit' && response && response.user_data ) { var roles_filter = [ 'administrator', 'subscriber', 'contributor', 'author', 'editor' ]; var disabled_change_role = false; if ( response.user_data.role == '' || jQuery.inArray( response.user_data.role, roles_filter ) === -1 ) { jQuery( 'form#update_user_profile select#role option[value="donotupdate"]' ).prop( 'selected', true ); disabled_change_role = true; } else { jQuery( 'form#update_user_profile select#role option[value="' + response.user_data.role + '"]' ).prop( 'selected', true ); if ( response.is_secure_admin ) { disabled_change_role = true; } } if ( disabled_change_role ) { jQuery( 'form#update_user_profile select#role' ).attr( 'disabled', 'disabled' ); } else { jQuery( 'form#update_user_profile select#role' ).prop("disabled", false); } jQuery( 'form#update_user_profile input#first_name' ).val( response.user_data.first_name ); jQuery( 'form#update_user_profile input#last_name' ).val( response.user_data.last_name ); jQuery( 'form#update_user_profile input#nickname' ).val( response.user_data.nickname ); jQuery( 'form#update_user_profile input#email' ).val( response.user_data.user_email ); jQuery( 'form#update_user_profile input#url' ).val( response.user_data.user_url ); jQuery( 'form#update_user_profile select#display_name' ).empty(); jQuery( 'form#update_user_profile select#display_name' ).prop("disabled", false); if ( response.user_data.public_display ) { jQuery.each( response.user_data.public_display, function ( index, value ) { var o = new Option( value ); if ( value == response.user_data.display_name ) { o.selected = true; } jQuery( 'form#update_user_profile select#display_name' ).append( o ); } ); jQuery( 'form#update_user_profile select#display_name option[value="' + response.user_data.display_name + '"]' ).prop( 'selected', true ); } jQuery( 'form#update_user_profile #description' ).val( response.user_data.description ); rowElement.find( 'td.check-column input[type="checkbox"]' )[0].checked = true; rowElement.find( '.row-actions-working' ).hide(); return; } if ( response.result ) { rowElement.html( ' ' + response.result + '' ); } else { rowElement.find( '.row-actions-working' ).hide(); } userCountReceived++; if ( userCountReceived == userCountSent ) { userCountReceived = 0; userCountSent = 0; jQuery( '#mainwp-do-users-bulk-actions' ).prop("disabled", false); jQuery( '#mainwp_btn_update_user' ).prop("disabled", false); jQuery( '#mainwp_users_updating' ).hide(); if ( what == 'update_user' || what == 'delete' ) { jQuery( '#mainwp_users_loading_info' ).show(); //jQuery( '#mainwp-update-users-box' ).hide(); jQuery( '#mainwp-edit-users-modal' ).modal('hide'); mainwp_fetch_users(); } } }, 'json' ); return false; }; // Fetch users from child sites mainwp_fetch_users = function () { var errors = [ ]; var selected_sites = [ ]; var selected_groups = [ ]; var selected_clients = []; if ( jQuery( '#select_by' ).val() == 'site' ) { jQuery( "input[name='selected_sites[]']:checked" ).each( function () { selected_sites.push( jQuery( this ).val() ); } ); if ( selected_sites.length == 0 ) { errors.push( __( 'Please select at least one website or group or clients.' ) ); } } else if ( jQuery( '#select_by' ).val() == 'client' ) { jQuery( "input[name='selected_clients[]']:checked" ).each( function () { selected_clients.push( jQuery( this ).val() ); } ); if ( selected_clients.length == 0 ) { errors.push( __( 'Please select at least one website or group or clients.' ) ); } } else{ jQuery( "input[name='selected_groups[]']:checked" ).each( function () { selected_groups.push( jQuery( this ).val() ); } ); if ( selected_groups.length == 0 ) { errors.push( __( 'Please select at least one website or group or clients.' ) ); } } var role = ""; var roles = jQuery("#mainwp_user_roles").dropdown("get value"); if (roles !== null) { role = roles.join(','); } if ( errors.length > 0 ) { jQuery( '#mainwp-message-zone' ).html( errors.join( '
' ) ); jQuery( '#mainwp-message-zone' ).show(); jQuery( '#mainwp-message-zone' ).addClass( 'yellow '); jQuery( '#mainwp_users_loading_info' ).hide(); return; } else { jQuery( '#mainwp-message-zone' ).html( "" ); jQuery( '#mainwp-message-zone' ).removeClass( 'yellow '); jQuery( '#mainwp-message-zone' ).hide(); } var name = jQuery( '#mainwp_search_users' ).val(); var data = mainwp_secure_data( { action: 'mainwp_users_search', role: role, search: name, 'groups[]': selected_groups, 'sites[]': selected_sites, 'clients[]': selected_clients } ); jQuery( '#mainwp-loading-users-row' ).show(); jQuery.post( ajaxurl, data, function ( response ) { response = response.trim(); jQuery( '#mainwp-loading-users-row' ).hide(); jQuery( '#mainwp_users_loading_info' ).hide(); jQuery( '#mainwp_users_main' ).show(); // var matches = ( response == null ? null : response.match( /user\[\]/g ) ); // jQuery( '#mainwp_users_total' ).html( matches == null ? 0 : matches.length ); jQuery( '#mainwp_users_wrap_table' ).html( response ); // re-initialize datatable jQuery("#mainwp-users-table").DataTable().destroy(); jQuery('#mainwp-users-table').DataTable( { "responsive" : true, "colReorder": { fixedColumnsLeft: 1, fixedColumnsRight: 1 }, "stateSave": true, "pagingType": "full_numbers", "order": [], "scrollX" : true, "lengthMenu": [ [10, 25, 50, 100, -1], [10, 25, 50, 100, "All"] ], "columnDefs": [ { "targets": 'no-sort', "orderable": false } ], "preDrawCallback": function() { jQuery( '#mainwp_users_wrap_table table .ui.dropdown' ).dropdown(); jQuery( '#mainwp_users_wrap_table table .ui.checkbox' ).checkbox(); mainwp_datatable_fix_menu_overflow(); mainwp_table_check_columns_init(); // ajax: to fix checkbox all. } } ); } ); }; /** * Bulk upload new user */ var import_user_stop_by_user = false; var import_user_current_line_number = 0; var import_user_total_import = 0; var import_user_count_created_users = 0; var import_user_count_create_fails = 0; jQuery( document ).ready( function () { import_user_total_import = jQuery( '#import_user_total_import' ).val(); jQuery( '#import_user_btn_import' ).on( 'click', function () { if ( import_user_stop_by_user == false ) { import_user_stop_by_user = true; jQuery( '#import_user_import_logging .log' ).append( _( 'Paused import by user.' ) + "\n" ); jQuery( '#import_user_btn_import' ).val( __( 'Continue' ) ); jQuery( '#MainWPBulkUploadUserLoading' ).hide(); jQuery( '#import_user_btn_save_csv' ).prop("disabled", false); //Enable } else { import_user_stop_by_user = false; jQuery( '#import_user_import_logging .log' ).append( __( 'Continue import.' ) + "\n" ); jQuery( '#import_user_btn_import' ).val( __( 'Pause' ) ); jQuery( '#MainWPBulkUploadUserLoading' ).show(); jQuery( '#import_user_btn_save_csv' ).attr( 'disabled', 'true' ); // Disable mainwp_import_users_next(); } } ); jQuery( '#import_user_btn_save_csv' ).on( 'click', function () { var fail_data = ''; jQuery( '#import_user_import_failed_rows span' ).each(function(){ fail_data += jQuery(this).html() + "\r\n"; }); var blob = new Blob( [ fail_data ], { type: "text/plain;charset=utf-8" } ); saveAs( blob, "import_users_fails.csv" ); } ); if ( jQuery( '#import_user_do_import' ).val() == 1 ) { jQuery( '#MainWPBulkUploadUserLoading' ).show(); mainwp_import_users_next(); } } ); mainwp_bulkupload_users = function () { if ( jQuery( '#import_user_file_bulkupload' ).val() == '' ) { feedback( 'mainwp-message-zone', __( 'Please enter CSV file for upload.' ), 'yellow' ); jQuery( '#import_user_file_bulkupload' ).parent().parent().addClass( 'form-invalid' ); } else { jQuery( '#createuser' ).submit(); } }; mainwp_import_users_next = function () { if ( import_user_stop_by_user == true ) return; import_user_current_line_number++; if ( import_user_current_line_number > import_user_total_import ) { mainwp_import_users_finished(); return; } var import_data = jQuery( '#user_import_csv_line_' + import_user_current_line_number ).attr('encoded-data'); var original_line = jQuery( '#user_import_csv_line_' + import_user_current_line_number ).attr('original-line'); var decoded_data = false; var pos_data = [ ]; var errors = [ ]; try { decoded_data = JSON.parse( import_data ); } catch(e) { decoded_data = false; errors.push( __( 'Invalid import data.' ) ); } if ( false != decoded_data ) { jQuery( '#import_user_import_logging .log' ).append( '[' + import_user_current_line_number + '] ' + original_line + '\n'); var valid = mainwp_import_users_valid_data( decoded_data ); pos_data = valid.data; errors = valid.errors; } if ( errors.length > 0 ) { jQuery( '#import_user_import_failed_rows' ).append( '' + original_line + '' ); jQuery( '#import_user_import_logging .log' ).append( '[' + import_user_current_line_number + ']>> Error - ' + errors.join( " " ) + '\n' ); import_user_count_create_fails++; mainwp_import_users_next(); return; } if ( 0 == pos_data.length ) { console.log( 'Error: import user data!' ); return; } pos_data.action = 'mainwp_importuser'; pos_data.line_number = import_user_current_line_number; var data = mainwp_secure_data( pos_data ); //Add user via ajax!! jQuery.post( ajaxurl, data, function ( response_data ) { if ( response_data.error != undefined ) return; mainwp_import_users_response( response_data ); mainwp_import_users_next(); }, 'json' ); }; /* eslint-disable complexity */ mainwp_import_users_valid_data = function( decoded_data ) { var errors = []; // array. var val_data = {}; // object. val_data.user_login = decoded_data.user_login == undefined ? '' : decoded_data.user_login; val_data.email = decoded_data.email == undefined ? '' : decoded_data.email; val_data.first_name = decoded_data.first_name == undefined ? '' : decoded_data.first_name; val_data.last_name = decoded_data.last_name == undefined ? '' : decoded_data.last_name ; val_data.url = decoded_data.url == undefined ? '' : decoded_data.url; val_data.pass1 = decoded_data.pass1 == undefined ? '' : decoded_data.pass1; val_data.send_password = decoded_data.send_password == undefined ? '' : decoded_data.send_password; val_data.role = decoded_data.role == undefined ? '' : decoded_data.role; val_data.select_sites = decoded_data.select_sites == undefined ? '' : decoded_data.select_sites; val_data.select_groups = decoded_data.select_groups == undefined ? '' : decoded_data.select_groups; val_data.select_by = ''; if ( val_data.user_login == '' ) { errors.push( __( 'Please enter a username.' ) ); } if ( val_data.email == '' ) { errors.push( __( 'Please enter an email.' ) ); } if ( val_data.pass1 == '' ) { errors.push( __( 'Please enter a password.' ) ); } var allowed_roles = [ 'subscriber', 'administrator', 'editor', 'author', 'contributor' ]; if ( jQuery.inArray( val_data.role, allowed_roles ) == -1 ) { errors.push( __( 'Please select a data role.' ) ); } if ( val_data.select_sites != '' ) { var selected_sites = val_data.select_sites.split( ';' ); if ( selected_sites.length == 0 ) { errors.push( __( 'Please select websites or groups to add a user.' ) ); } else { val_data.select_sites = selected_sites; val_data.select_by = 'site'; } } else { var selected_groups = val_data.select_groups.split( ';' ); if ( selected_groups.length == 0 ) { errors.push( __( 'Please select websites or groups to add a user.' ) ); } else { val_data.select_groups = selected_groups; val_data.select_by = 'group'; } } return { errors: errors, data: val_data }; }; /* eslint-enable complexity */ mainwp_import_users_response = function( response_data ) { var line_num = response_data.line_number; var okList = response_data.ok_list; var errorList = response_data.error_list; if ( okList != undefined ) for ( var i = 0; i < okList.length; i++ ) { import_user_count_created_users++; jQuery( '#import_user_import_logging .log' ).append( '[' + line_num + ']>> ' + okList[i] + '\n' ); } if ( errorList != undefined ) for ( var i = 0; i < errorList.length; i++ ) { import_user_count_create_fails++; jQuery( '#import_user_import_logging .log' ).append( '[' + line_num + ']>> ' + errorList[i] + '\n' ); } if ( response_data.failed_logging != '' && response_data.failed_logging != undefined ) { jQuery( '#import_user_import_failed_rows' ).append( '' + response_data.failed_logging + '' ); } jQuery( '#import_user_import_logging' ).scrollTop( jQuery( '#import_user_import_logging .log' ).height() ); }; mainwp_import_users_finished = function() { jQuery( '#import_user_btn_import' ).val( 'Finished' ).attr( 'disabled', 'true' ); jQuery( '#MainWPBulkUploadUserLoading' ).hide(); jQuery( '#import_user_import_logging .log' ).append( '\n' + __( 'Number of users to import: %1 Created users: %2 Failed: %3', import_user_total_import, import_user_count_created_users, import_user_count_create_fails ) + '\n' ); if ( import_user_count_create_fails > 0 ) { jQuery( '#import_user_btn_save_csv' ).prop("disabled", false); //Enable } jQuery( '#import_user_import_logging' ).scrollTop( jQuery( '#import_user_import_logging .log' ).height() ); }