PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 4.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v4.2
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 5.2.1 5.2.2 5.3 All 153 releases
mainwp / assets / js / mainwp-users.js

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

506 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' ).removeAttr( 'disabled' );
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' ).removeAttr( 'disabled' );
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' ).removeAttr( 'disabled' );
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' ).removeAttr( 'disabled' );
195
196 jQuery( '#mainwp_btn_update_user' ).removeAttr( 'disabled' );
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
218 if ( jQuery( '#select_by' ).val() == 'site' ) {
219 jQuery( "input[name='selected_sites[]']:checked" ).each( function () {
220 selected_sites.push( jQuery( this ).val() );
221 } );
222 if ( selected_sites.length == 0 ) {
223 errors.push( __( 'Please select at least one website or group.' ) );
224 }
225 } else {
226 jQuery( "input[name='selected_groups[]']:checked" ).each( function () {
227 selected_groups.push( jQuery( this ).val() );
228 } );
229 if ( selected_groups.length == 0 ) {
230 errors.push( __( 'Please select at least one website or group.' ) );
231 }
232 }
233
234 var role = "";
235 var roles = jQuery("#mainwp_user_roles").dropdown("get value");
236 if (roles !== null) {
237 role = roles.join(',');
238 }
239
240 if ( errors.length > 0 ) {
241 jQuery( '#mainwp-message-zone' ).html( errors.join( '<br />' ) );
242 jQuery( '#mainwp-message-zone' ).show();
243 jQuery( '#mainwp-message-zone' ).addClass( 'yellow ');
244 jQuery( '#mainwp_users_loading_info' ).hide();
245 return;
246 } else {
247 jQuery( '#mainwp-message-zone' ).html( "" );
248 jQuery( '#mainwp-message-zone' ).removeClass( 'yellow ');
249 jQuery( '#mainwp-message-zone' ).hide();
250 }
251
252 var name = jQuery( '#mainwp_search_users' ).val();
253
254 var data = mainwp_secure_data( {
255 action: 'mainwp_users_search',
256 role: role,
257 search: name,
258 'groups[]': selected_groups,
259 'sites[]': selected_sites
260 } );
261
262 jQuery( '#mainwp-loading-users-row' ).show();
263 jQuery.post( ajaxurl, data, function ( response ) {
264 response = jQuery.trim( response );
265 jQuery( '#mainwp-loading-users-row' ).hide();
266 jQuery( '#mainwp_users_loading_info' ).hide();
267 jQuery( '#mainwp_users_main' ).show();
268 // var matches = ( response == null ? null : response.match( /user\[\]/g ) );
269 // jQuery( '#mainwp_users_total' ).html( matches == null ? 0 : matches.length );
270 jQuery( '#mainwp_users_wrap_table' ).html( response );
271 // re-initialize datatable
272 jQuery("#mainwp-users-table").DataTable().destroy();
273 jQuery('#mainwp-users-table').DataTable({
274 "colReorder": {
275 fixedColumnsLeft: 1,
276 fixedColumnsRight: 1
277 },
278 "stateSave": true,
279 "pagingType": "full_numbers",
280 "order": [],
281 "scrollX" : true,
282 "lengthMenu": [ [10, 25, 50, 100, -1], [10, 25, 50, 100, "All"] ],
283 "columnDefs": [ {
284 "targets": 'no-sort',
285 "orderable": false
286 } ],
287 "preDrawCallback": function() {
288 jQuery('#mainwp-users-table .ui.dropdown').dropdown();
289 jQuery('#mainwp-users-table .ui.checkbox').checkbox();
290 mainwp_datatable_fix_menu_overflow();
291 mainwp_table_check_columns_init(); // ajax: to fix checkbox all.
292 }
293 });
294 } );
295 };
296
297
298
299
300 /**
301 * Bulk upload new user
302 */
303 var import_user_stop_by_user = false;
304 var import_user_current_line_number = 0;
305 var import_user_total_import = 0;
306 var import_user_count_created_users = 0;
307 var import_user_count_create_fails = 0;
308
309 jQuery( document ).ready( function () {
310 import_user_total_import = jQuery( '#import_user_total_import' ).val();
311
312 jQuery( '#import_user_btn_import' ).on( 'click', function () {
313 if ( import_user_stop_by_user == false ) {
314 import_user_stop_by_user = true;
315 jQuery( '#import_user_import_logging .log' ).append( _( 'Paused import by user.' ) + "\n" );
316 jQuery( '#import_user_btn_import' ).val( __( 'Continue' ) );
317 jQuery( '#MainWPBulkUploadUserLoading' ).hide();
318 jQuery( '#import_user_btn_save_csv' ).removeAttr( 'disabled' ); //Enable
319 } else
320 {
321 import_user_stop_by_user = false;
322 jQuery( '#import_user_import_logging .log' ).append( __( 'Continue import.' ) + "\n" );
323 jQuery( '#import_user_btn_import' ).val( __( 'Pause' ) );
324 jQuery( '#MainWPBulkUploadUserLoading' ).show();
325 jQuery( '#import_user_btn_save_csv' ).attr( 'disabled', 'true' ); // Disable
326 mainwp_import_users_next();
327 }
328 } );
329
330
331 jQuery( '#import_user_btn_save_csv' ).on( 'click', function () {
332 var fail_data = '';
333 jQuery( '#import_user_import_failed_rows span' ).each(function(){
334 fail_data += jQuery(this).html() + "\r\n";
335 });
336 var blob = new Blob( [ fail_data ], { type: "text/plain;charset=utf-8" } );
337 saveAs( blob, "import_users_fails.csv" );
338 } );
339
340 if ( jQuery( '#import_user_do_import' ).val() == 1 ) {
341 jQuery( '#MainWPBulkUploadUserLoading' ).show();
342 mainwp_import_users_next();
343 }
344 } );
345
346
347 mainwp_bulkupload_users = function () {
348 if ( jQuery( '#import_user_file_bulkupload' ).val() == '' ) {
349 feedback( 'mainwp-message-zone', __( 'Please enter CSV file for upload.' ), 'yellow' );
350 jQuery( '#import_user_file_bulkupload' ).parent().parent().addClass( 'form-invalid' );
351 } else {
352 jQuery( '#createuser' ).submit();
353 }
354 };
355
356 mainwp_import_users_next = function () {
357
358 if ( import_user_stop_by_user == true )
359 return;
360
361 import_user_current_line_number++;
362
363 if ( import_user_current_line_number > import_user_total_import ) {
364 mainwp_import_users_finished();
365 return;
366 }
367
368 var import_data = jQuery( '#user_import_csv_line_' + import_user_current_line_number ).attr('encoded-data');
369 var original_line = jQuery( '#user_import_csv_line_' + import_user_current_line_number ).attr('original-line');
370
371 var decoded_data = false;
372 var pos_data = [ ];
373 var errors = [ ];
374
375 try {
376 decoded_data = JSON.parse( import_data );
377 } catch(e) {
378 decoded_data = false;
379 errors.push( __( 'Invalid import data.' ) );
380 }
381
382 if ( false != decoded_data ) {
383 jQuery( '#import_user_import_logging .log' ).append( '[' + import_user_current_line_number + '] ' + original_line + '\n');
384 var valid = mainwp_import_users_valid_data( decoded_data );
385 pos_data = valid.data;
386 errors = valid.errors;
387 }
388
389 if ( errors.length > 0 ) {
390 jQuery( '#import_user_import_failed_rows' ).append( '<span>' + original_line + '</span>' );
391 jQuery( '#import_user_import_logging .log' ).append( '[' + import_user_current_line_number + ']>> Error - ' + errors.join( " " ) + '\n' );
392 import_user_count_create_fails++;
393 mainwp_import_users_next();
394 return;
395 }
396
397 if ( 0 == pos_data.length ) {
398 console.log( 'Error: import user data!' );
399 return;
400 }
401
402 pos_data.action = 'mainwp_importuser';
403 pos_data.line_number = import_user_current_line_number;
404 var data = mainwp_secure_data( pos_data );
405
406 //Add user via ajax!!
407 jQuery.post( ajaxurl, data, function ( response_data ) {
408 if ( response_data.error != undefined )
409 return;
410 mainwp_import_users_response( response_data );
411 mainwp_import_users_next();
412 }, 'json' );
413 };
414
415 /* eslint-disable complexity */
416 mainwp_import_users_valid_data = function( decoded_data ) {
417
418 var errors = []; // array.
419 var val_data = {}; // object.
420
421 val_data.user_login = decoded_data.user_login == undefined ? '' : decoded_data.user_login;
422 val_data.email = decoded_data.email == undefined ? '' : decoded_data.email;
423 val_data.first_name = decoded_data.first_name == undefined ? '' : decoded_data.first_name;
424 val_data.last_name = decoded_data.last_name == undefined ? '' : decoded_data.last_name ;
425 val_data.url = decoded_data.url == undefined ? '' : decoded_data.url;
426 val_data.pass1 = decoded_data.pass1 == undefined ? '' : decoded_data.pass1;
427 val_data.send_password = decoded_data.send_password == undefined ? '' : decoded_data.send_password;
428 val_data.role = decoded_data.role == undefined ? '' : decoded_data.role;
429 val_data.select_sites = decoded_data.select_sites == undefined ? '' : decoded_data.select_sites;
430 val_data.select_groups = decoded_data.select_groups == undefined ? '' : decoded_data.select_groups;
431 val_data.select_by = '';
432
433 if ( val_data.user_login == '' ) {
434 errors.push( __( 'Please enter a username.' ) );
435 }
436
437 if ( val_data.email == '' ) {
438 errors.push( __( 'Please enter an email.' ) );
439 }
440
441 if ( val_data.pass1 == '' ) {
442 errors.push( __( 'Please enter a password.' ) );
443 }
444
445 var allowed_roles = [ 'subscriber', 'administrator', 'editor', 'author', 'contributor' ];
446 if ( jQuery.inArray( val_data.role, allowed_roles ) == -1 ) {
447 errors.push( __( 'Please select a data role.' ) );
448 }
449
450 if ( val_data.select_sites != '' ) {
451 var selected_sites = val_data.select_sites.split( ';' );
452 if ( selected_sites.length == 0 ) {
453 errors.push( __( 'Please select websites or groups to add a user.' ) );
454 } else {
455 val_data.select_sites = selected_sites;
456 val_data.select_by = 'site';
457 }
458 } else {
459 var selected_groups = val_data.select_groups.split( ';' );
460 if ( selected_groups.length == 0 ) {
461 errors.push( __( 'Please select websites or groups to add a user.' ) );
462 } else {
463 val_data.select_groups = selected_groups;
464 val_data.select_by = 'group';
465 }
466 }
467 return {
468 errors: errors,
469 data: val_data
470 };
471
472 };
473 /* eslint-enable complexity */
474
475 mainwp_import_users_response = function( response_data ) {
476 var line_num = response_data.line_number;
477 var okList = response_data.ok_list;
478 var errorList = response_data.error_list;
479 if ( okList != undefined )
480 for ( var i = 0; i < okList.length; i++ ) {
481 import_user_count_created_users++;
482 jQuery( '#import_user_import_logging .log' ).append( '[' + line_num + ']>> ' + okList[i] + '\n' );
483 }
484
485 if ( errorList != undefined )
486 for ( var i = 0; i < errorList.length; i++ ) {
487 import_user_count_create_fails++;
488 jQuery( '#import_user_import_logging .log' ).append( '[' + line_num + ']>> ' + errorList[i] + '\n' );
489 }
490
491 if ( response_data.failed_logging != '' && response_data.failed_logging != undefined ) {
492 jQuery( '#import_user_import_failed_rows' ).append( '<span>' + response_data.failed_logging + '</span>' );
493 }
494 jQuery( '#import_user_import_logging' ).scrollTop( jQuery( '#import_user_import_logging .log' ).height() );
495 };
496
497 mainwp_import_users_finished = function() {
498 jQuery( '#import_user_btn_import' ).val( 'Finished' ).attr( 'disabled', 'true' );
499 jQuery( '#MainWPBulkUploadUserLoading' ).hide();
500 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' );
501 if ( import_user_count_create_fails > 0 ) {
502 jQuery( '#import_user_btn_save_csv' ).removeAttr( "disabled" ); //Enable
503 }
504 jQuery( '#import_user_import_logging' ).scrollTop( jQuery( '#import_user_import_logging .log' ).height() );
505 }
506