PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.0.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.0.2
6.2.3 6.2.2 6.2.1 6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 All 156 releases
mainwp / assets / js / mainwp-users.js

mainwp-users.js in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.0.2, at assets/js/mainwp-users.js

517 lines 19.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * MainWP_User.page
3 */
4 var userCountSent = 0;
5 var userCountReceived = 0;
6 jQuery( document ).ready( function () {
7
8 // Fetch users
9 jQuery( document ).on( 'click', '#mainwp_show_users', function () {
10 mainwp_fetch_users();
11 } );
12
13 // Delete single user
14 jQuery( document ).on( 'click', '.user_submitdelete', function () {
15 var confirmation = confirm( 'Are you sure you want to proceed?' );
16
17 if ( confirmation == true ) {
18 mainwpuser_postAction( jQuery( this ), 'delete' );
19 return;
20 }
21
22 return false;
23 } );
24
25 // Edit single user
26 jQuery( document ).on( 'click', '.user_getedit', function () {
27 jQuery( 'td.check-column input[type="checkbox"]' ).each( function () {
28 this.checked = false;
29 } );
30 mainwp_edit_users_box_init();
31 jQuery( '#mainwp-edit-users-modal' ).modal( 'setting', 'closable', false ).modal('show');
32 mainwpuser_postAction( jQuery( this ), 'edit' );
33 return false;
34 } );
35
36 // Trigger Manage Users bulk actions
37 jQuery( document ).on( 'click', '#mainwp-do-users-bulk-actions', function () {
38 var action = jQuery( '#mainwp-bulk-actions' ).val();
39 if ( action == 'none' )
40 return false;
41
42 var tmp = jQuery( "input[name='user[]']:checked" );
43 userCountSent = tmp.length;
44
45 if ( userCountSent == 0 )
46 return false;
47
48 var _callback = function() {
49
50 if ( action == 'edit' ) {
51 jQuery( '#mainwp-edit-users-modal' ).modal( 'setting', 'closable', false ).modal('show');
52 mainwp_edit_users_box_init();
53 return;
54 }
55
56 jQuery( '#mainwp-do-users-bulk-actions' ).attr( 'disabled', 'true' );
57 tmp.each(
58 function ( index, elem ) {
59 mainwpuser_postAction( elem, action );
60 }
61 );
62 };
63
64 if ( action == 'delete' ) {
65 var msg = __( 'You are about to delete %1 user(s). Are you sure you want to proceed?', userCountSent );
66 mainwp_confirm( msg, _callback );
67 return false;
68 }
69
70 _callback();
71
72 return false;
73 } );
74
75
76 jQuery( document ).on( 'click', '#mainwp_btn_update_user', function () {
77 var errors = [ ];
78 var tmp = jQuery( "input[name='user[]']:checked" );
79 userCountSent = tmp.length;
80
81 if ( userCountSent == 0 ) {
82 errors.push( __( 'Please search and select users.' ) );
83 }
84
85 if ( errors.length > 0 ) {
86 jQuery( '#mainwp_update_password_error' ).html( errors.join( '<br />' ) );
87 jQuery( '#mainwp_update_password_error' ).show();
88 return false;
89 }
90
91 jQuery( '#mainwp_update_password_error' ).hide();
92 jQuery( '#mainwp_users_updating' ).show();
93
94 jQuery( '#mainwp-do-users-bulk-actions' ).attr( 'disabled', 'true' );
95 jQuery( '#mainwp_btn_update_user' ).attr( 'disabled', 'true' );
96
97 tmp.each(
98 function ( index, elem ) {
99 mainwpuser_postAction( elem, 'update_user' );
100 }
101 );
102
103 return false;
104 } );
105 } );
106
107 mainwp_edit_users_box_init = function () {
108
109 jQuery( 'form#update_user_profile select#role option[value="donotupdate"]' ).prop( 'selected', true );
110 jQuery( 'form#update_user_profile select#role' ).prop("disabled", false);
111 jQuery( 'form#update_user_profile input#first_name' ).val( '' );
112 jQuery( 'form#update_user_profile input#last_name' ).val( '' );
113 jQuery( 'form#update_user_profile input#nickname' ).val( '' );
114 jQuery( 'form#update_user_profile input#email' ).val( '' );
115 jQuery( 'form#update_user_profile input#url' ).val( '' );
116 jQuery( 'form#update_user_profile select#display_name' ).empty().attr( 'disabled', 'disabled' );
117 jQuery( 'form#update_user_profile #description' ).val( '' );
118 jQuery( 'form#update_user_profile input#password' ).val( '' );
119 };
120
121 mainwpuser_postAction = function ( elem, what ) {
122 var rowElement = jQuery( elem ).parents( 'tr' );
123 var userId = rowElement.find( '.userId' ).val();
124 var userName = rowElement.find( '.userName' ).val();
125 var websiteId = rowElement.find( '.websiteId' ).val();
126
127 var data = mainwp_secure_data( {
128 action: 'mainwp_user_' + what,
129 userId: userId,
130 userName: userName,
131 websiteId: websiteId,
132 update_password: encodeURIComponent( jQuery('#password').val() ) // to fix
133 } );
134
135 if ( what == 'update_user' ) {
136 data['user_data'] = jQuery( 'form#update_user_profile' ).serialize();
137 }
138
139 rowElement.find( '.row-actions' ).hide();
140 rowElement.find( '.row-actions-working' ).show();
141 jQuery.post( ajaxurl, data, function ( response ) {
142 if ( what == 'edit' && response && response.user_data ) {
143 var roles_filter = [ 'administrator', 'subscriber', 'contributor', 'author', 'editor' ];
144 var disabled_change_role = false;
145 if ( response.user_data.role == '' || jQuery.inArray( response.user_data.role, roles_filter ) === -1 ) {
146 jQuery( 'form#update_user_profile select#role option[value="donotupdate"]' ).prop( 'selected', true );
147 disabled_change_role = true;
148 } else {
149 jQuery( 'form#update_user_profile select#role option[value="' + response.user_data.role + '"]' ).prop( 'selected', true );
150 if ( response.is_secure_admin ) {
151 disabled_change_role = true;
152 }
153 }
154
155 if ( disabled_change_role ) {
156 jQuery( 'form#update_user_profile select#role' ).attr( 'disabled', 'disabled' );
157 } else {
158 jQuery( 'form#update_user_profile select#role' ).prop("disabled", false);
159 }
160
161 jQuery( 'form#update_user_profile input#first_name' ).val( response.user_data.first_name );
162 jQuery( 'form#update_user_profile input#last_name' ).val( response.user_data.last_name );
163 jQuery( 'form#update_user_profile input#nickname' ).val( response.user_data.nickname );
164 jQuery( 'form#update_user_profile input#email' ).val( response.user_data.user_email );
165 jQuery( 'form#update_user_profile input#url' ).val( response.user_data.user_url );
166 jQuery( 'form#update_user_profile select#display_name' ).empty();
167 jQuery( 'form#update_user_profile select#display_name' ).prop("disabled", false);
168 if ( response.user_data.public_display ) {
169 jQuery.each( response.user_data.public_display, function ( index, value ) {
170 var o = new Option( value );
171 if ( value == response.user_data.display_name ) {
172 o.selected = true;
173 }
174 jQuery( 'form#update_user_profile select#display_name' ).append( o );
175 } );
176 jQuery( 'form#update_user_profile select#display_name option[value="' + response.user_data.display_name + '"]' ).prop( 'selected', true );
177 }
178
179 jQuery( 'form#update_user_profile #description' ).val( response.user_data.description );
180 rowElement.find( 'td.check-column input[type="checkbox"]' )[0].checked = true;
181 rowElement.find( '.row-actions-working' ).hide();
182 return;
183 }
184
185 if ( response.result ) {
186 rowElement.html( '<td colspan="8"><i class="check circle icon"></i> ' + response.result + '</td>' );
187 } else {
188 rowElement.find( '.row-actions-working' ).hide();
189 }
190 userCountReceived++;
191 if ( userCountReceived == userCountSent ) {
192 userCountReceived = 0;
193 userCountSent = 0;
194 jQuery( '#mainwp-do-users-bulk-actions' ).prop("disabled", false);
195
196 jQuery( '#mainwp_btn_update_user' ).prop("disabled", false);
197 jQuery( '#mainwp_users_updating' ).hide();
198
199
200 if ( what == 'update_user' || what == 'delete' ) {
201 jQuery( '#mainwp_users_loading_info' ).show();
202 //jQuery( '#mainwp-update-users-box' ).hide();
203 jQuery( '#mainwp-edit-users-modal' ).modal('hide');
204 mainwp_fetch_users();
205 }
206 }
207 }, 'json' );
208
209 return false;
210 };
211
212 // Fetch users from child sites
213 mainwp_fetch_users = function () {
214 var errors = [ ];
215 var selected_sites = [ ];
216 var selected_groups = [ ];
217 var selected_clients = [];
218
219 if ( jQuery( '#select_by' ).val() == 'site' ) {
220 jQuery( "input[name='selected_sites[]']:checked" ).each( function () {
221 selected_sites.push( jQuery( this ).val() );
222 } );
223 if ( selected_sites.length == 0 ) {
224 errors.push( __( 'Please select at least one website or group or clients.' ) );
225 }
226 } else if ( jQuery( '#select_by' ).val() == 'client' ) {
227 jQuery( "input[name='selected_clients[]']:checked" ).each( function () {
228 selected_clients.push( jQuery( this ).val() );
229 } );
230 if ( selected_clients.length == 0 ) {
231 errors.push( __( 'Please select at least one website or group or clients.' ) );
232 }
233 } else{
234 jQuery( "input[name='selected_groups[]']:checked" ).each( function () {
235 selected_groups.push( jQuery( this ).val() );
236 } );
237 if ( selected_groups.length == 0 ) {
238 errors.push( __( 'Please select at least one website or group or clients.' ) );
239 }
240 }
241
242 var role = "";
243 var roles = jQuery("#mainwp_user_roles").dropdown("get value");
244 if (roles !== null) {
245 role = roles.join(',');
246 }
247
248 if ( errors.length > 0 ) {
249 jQuery( '#mainwp-message-zone' ).html( errors.join( '<br />' ) );
250 jQuery( '#mainwp-message-zone' ).show();
251 jQuery( '#mainwp-message-zone' ).addClass( 'yellow ');
252 jQuery( '#mainwp_users_loading_info' ).hide();
253 return;
254 } else {
255 jQuery( '#mainwp-message-zone' ).html( "" );
256 jQuery( '#mainwp-message-zone' ).removeClass( 'yellow ');
257 jQuery( '#mainwp-message-zone' ).hide();
258 }
259
260 var name = jQuery( '#mainwp_search_users' ).val();
261
262 var data = mainwp_secure_data( {
263 action: 'mainwp_users_search',
264 role: role,
265 search: name,
266 'groups[]': selected_groups,
267 'sites[]': selected_sites,
268 'clients[]': selected_clients
269 } );
270
271 jQuery( '#mainwp-loading-users-row' ).show();
272
273 jQuery.post( ajaxurl, data, function ( response ) {
274 response = response.trim();
275 jQuery( '#mainwp-loading-users-row' ).hide();
276 jQuery( '#mainwp_users_loading_info' ).hide();
277 jQuery( '#mainwp_users_main' ).show();
278 // var matches = ( response == null ? null : response.match( /user\[\]/g ) );
279 // jQuery( '#mainwp_users_total' ).html( matches == null ? 0 : matches.length );
280 jQuery( '#mainwp_users_wrap_table' ).html( response );
281 // re-initialize datatable
282 jQuery("#mainwp-users-table").DataTable().destroy();
283 jQuery('#mainwp-users-table').DataTable( {
284 "responsive" : true,
285 "colReorder": {
286 fixedColumnsLeft: 1,
287 fixedColumnsRight: 1
288 },
289 "stateSave": true,
290 "pagingType": "full_numbers",
291 "order": [],
292 "scrollX" : true,
293 "lengthMenu": [ [10, 25, 50, 100, -1], [10, 25, 50, 100, "All"] ],
294 "columnDefs": [ {
295 "targets": 'no-sort',
296 "orderable": false
297 } ],
298 "preDrawCallback": function() {
299 jQuery( '#mainwp_users_wrap_table table .ui.dropdown' ).dropdown();
300 jQuery( '#mainwp_users_wrap_table table .ui.checkbox' ).checkbox();
301 mainwp_datatable_fix_menu_overflow();
302 mainwp_table_check_columns_init(); // ajax: to fix checkbox all.
303 }
304 } );
305 } );
306 };
307
308
309
310
311 /**
312 * Bulk upload new user
313 */
314 var import_user_stop_by_user = false;
315 var import_user_current_line_number = 0;
316 var import_user_total_import = 0;
317 var import_user_count_created_users = 0;
318 var import_user_count_create_fails = 0;
319
320 jQuery( document ).ready( function () {
321 import_user_total_import = jQuery( '#import_user_total_import' ).val();
322
323 jQuery( '#import_user_btn_import' ).on( 'click', function () {
324 if ( import_user_stop_by_user == false ) {
325 import_user_stop_by_user = true;
326 jQuery( '#import_user_import_logging .log' ).append( _( 'Paused import by user.' ) + "\n" );
327 jQuery( '#import_user_btn_import' ).val( __( 'Continue' ) );
328 jQuery( '#MainWPBulkUploadUserLoading' ).hide();
329 jQuery( '#import_user_btn_save_csv' ).prop("disabled", false); //Enable
330 } else
331 {
332 import_user_stop_by_user = false;
333 jQuery( '#import_user_import_logging .log' ).append( __( 'Continue import.' ) + "\n" );
334 jQuery( '#import_user_btn_import' ).val( __( 'Pause' ) );
335 jQuery( '#MainWPBulkUploadUserLoading' ).show();
336 jQuery( '#import_user_btn_save_csv' ).attr( 'disabled', 'true' ); // Disable
337 mainwp_import_users_next();
338 }
339 } );
340
341
342 jQuery( '#import_user_btn_save_csv' ).on( 'click', function () {
343 var fail_data = '';
344 jQuery( '#import_user_import_failed_rows span' ).each(function(){
345 fail_data += jQuery(this).html() + "\r\n";
346 });
347 var blob = new Blob( [ fail_data ], { type: "text/plain;charset=utf-8" } );
348 saveAs( blob, "import_users_fails.csv" );
349 } );
350
351 if ( jQuery( '#import_user_do_import' ).val() == 1 ) {
352 jQuery( '#MainWPBulkUploadUserLoading' ).show();
353 mainwp_import_users_next();
354 }
355 } );
356
357
358 mainwp_bulkupload_users = function () {
359 if ( jQuery( '#import_user_file_bulkupload' ).val() == '' ) {
360 feedback( 'mainwp-message-zone', __( 'Please enter CSV file for upload.' ), 'yellow' );
361 jQuery( '#import_user_file_bulkupload' ).parent().parent().addClass( 'form-invalid' );
362 } else {
363 jQuery( '#createuser' ).submit();
364 }
365 };
366
367 mainwp_import_users_next = function () {
368
369 if ( import_user_stop_by_user == true )
370 return;
371
372 import_user_current_line_number++;
373
374 if ( import_user_current_line_number > import_user_total_import ) {
375 mainwp_import_users_finished();
376 return;
377 }
378
379 var import_data = jQuery( '#user_import_csv_line_' + import_user_current_line_number ).attr('encoded-data');
380 var original_line = jQuery( '#user_import_csv_line_' + import_user_current_line_number ).attr('original-line');
381
382 var decoded_data = false;
383 var pos_data = [ ];
384 var errors = [ ];
385
386 try {
387 decoded_data = JSON.parse( import_data );
388 } catch(e) {
389 decoded_data = false;
390 errors.push( __( 'Invalid import data.' ) );
391 }
392
393 if ( false != decoded_data ) {
394 jQuery( '#import_user_import_logging .log' ).append( '[' + import_user_current_line_number + '] ' + original_line + '\n');
395 var valid = mainwp_import_users_valid_data( decoded_data );
396 pos_data = valid.data;
397 errors = valid.errors;
398 }
399
400 if ( errors.length > 0 ) {
401 jQuery( '#import_user_import_failed_rows' ).append( '<span>' + original_line + '</span>' );
402 jQuery( '#import_user_import_logging .log' ).append( '[' + import_user_current_line_number + ']>> Error - ' + errors.join( " " ) + '\n' );
403 import_user_count_create_fails++;
404 mainwp_import_users_next();
405 return;
406 }
407
408 if ( 0 == pos_data.length ) {
409 console.log( 'Error: import user data!' );
410 return;
411 }
412
413 pos_data.action = 'mainwp_importuser';
414 pos_data.line_number = import_user_current_line_number;
415 var data = mainwp_secure_data( pos_data );
416
417 //Add user via ajax!!
418 jQuery.post( ajaxurl, data, function ( response_data ) {
419 if ( response_data.error != undefined )
420 return;
421 mainwp_import_users_response( response_data );
422 mainwp_import_users_next();
423 }, 'json' );
424 };
425
426 /* eslint-disable complexity */
427 mainwp_import_users_valid_data = function( decoded_data ) {
428
429 var errors = []; // array.
430 var val_data = {}; // object.
431
432 val_data.user_login = decoded_data.user_login == undefined ? '' : decoded_data.user_login;
433 val_data.email = decoded_data.email == undefined ? '' : decoded_data.email;
434 val_data.first_name = decoded_data.first_name == undefined ? '' : decoded_data.first_name;
435 val_data.last_name = decoded_data.last_name == undefined ? '' : decoded_data.last_name ;
436 val_data.url = decoded_data.url == undefined ? '' : decoded_data.url;
437 val_data.pass1 = decoded_data.pass1 == undefined ? '' : decoded_data.pass1;
438 val_data.send_password = decoded_data.send_password == undefined ? '' : decoded_data.send_password;
439 val_data.role = decoded_data.role == undefined ? '' : decoded_data.role;
440 val_data.select_sites = decoded_data.select_sites == undefined ? '' : decoded_data.select_sites;
441 val_data.select_groups = decoded_data.select_groups == undefined ? '' : decoded_data.select_groups;
442 val_data.select_by = '';
443
444 if ( val_data.user_login == '' ) {
445 errors.push( __( 'Please enter a username.' ) );
446 }
447
448 if ( val_data.email == '' ) {
449 errors.push( __( 'Please enter an email.' ) );
450 }
451
452 if ( val_data.pass1 == '' ) {
453 errors.push( __( 'Please enter a password.' ) );
454 }
455
456 var allowed_roles = [ 'subscriber', 'administrator', 'editor', 'author', 'contributor' ];
457 if ( jQuery.inArray( val_data.role, allowed_roles ) == -1 ) {
458 errors.push( __( 'Please select a data role.' ) );
459 }
460
461 if ( val_data.select_sites != '' ) {
462 var selected_sites = val_data.select_sites.split( ';' );
463 if ( selected_sites.length == 0 ) {
464 errors.push( __( 'Please select websites or groups to add a user.' ) );
465 } else {
466 val_data.select_sites = selected_sites;
467 val_data.select_by = 'site';
468 }
469 } else {
470 var selected_groups = val_data.select_groups.split( ';' );
471 if ( selected_groups.length == 0 ) {
472 errors.push( __( 'Please select websites or groups to add a user.' ) );
473 } else {
474 val_data.select_groups = selected_groups;
475 val_data.select_by = 'group';
476 }
477 }
478 return {
479 errors: errors,
480 data: val_data
481 };
482
483 };
484 /* eslint-enable complexity */
485
486 mainwp_import_users_response = function( response_data ) {
487 var line_num = response_data.line_number;
488 var okList = response_data.ok_list;
489 var errorList = response_data.error_list;
490 if ( okList != undefined )
491 for ( var i = 0; i < okList.length; i++ ) {
492 import_user_count_created_users++;
493 jQuery( '#import_user_import_logging .log' ).append( '[' + line_num + ']>> ' + okList[i] + '\n' );
494 }
495
496 if ( errorList != undefined )
497 for ( var i = 0; i < errorList.length; i++ ) {
498 import_user_count_create_fails++;
499 jQuery( '#import_user_import_logging .log' ).append( '[' + line_num + ']>> ' + errorList[i] + '\n' );
500 }
501
502 if ( response_data.failed_logging != '' && response_data.failed_logging != undefined ) {
503 jQuery( '#import_user_import_failed_rows' ).append( '<span>' + response_data.failed_logging + '</span>' );
504 }
505 jQuery( '#import_user_import_logging' ).scrollTop( jQuery( '#import_user_import_logging .log' ).height() );
506 };
507
508 mainwp_import_users_finished = function() {
509 jQuery( '#import_user_btn_import' ).val( 'Finished' ).attr( 'disabled', 'true' );
510 jQuery( '#MainWPBulkUploadUserLoading' ).hide();
511 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' );
512 if ( import_user_count_create_fails > 0 ) {
513 jQuery( '#import_user_btn_save_csv' ).prop("disabled", false); //Enable
514 }
515 jQuery( '#import_user_import_logging' ).scrollTop( jQuery( '#import_user_import_logging .log' ).height() );
516 }
517