PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.2.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.2.2
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 5.2.1 All 155 releases
← All changes | assets/js/mainwp-setup.js +188 -142 5.0.1 → 6.2.2 View file →
@@ -1,177 +1,223 @@
1 1 jQuery(function () {
2 - jQuery( '#mainwp-qsw-verify-mainwp-child-active' ).on('change', function () {
3 - if ( jQuery( this ).is( ':checked' ) ) {
4 - jQuery( '#mainwp-qsw-connect-site-form' ).fadeIn( 500 );
5 - jQuery( '#mainwp_managesites_add' ).show();
6 - jQuery( '#mainwp_addsite_continue_button' ).hide();
2 + jQuery('.mainwp-field-tab-connect input[name=tab_connect]').change(function () {
3 + const tab_active = this.value;
4 + if (tab_active !== '') {
5 + jQuery('#mainwp-qsw-connect-site-form').fadeIn(500);
6 + jQuery('#mainwp_managesites_add').show();
7 + jQuery('#mainwp-qsw-toggle-verify-mainwp-child-active').show();
8 + jQuery('#mainwp_addsite_continue_button').hide();
9 + jQuery('.menu-connect-first-site .item').tab('change tab', tab_active);
10 + }
11 + });
12 +
13 + jQuery('#mainwp-qsw-verify-mainwp-child-active').on('change', function () {
14 + if (jQuery(this).is(':checked')) {
15 + jQuery('#mainwp_managesites_add').removeClass('disabled');
16 + jQuery('#mainwp_managesites_add_import').removeClass('disabled');
7 17 } else {
8 - jQuery( '#mainwp-qsw-connect-site-form' ).fadeOut( 500 );
9 - jQuery( '#mainwp_managesites_add' ).hide();
10 - jQuery( '#mainwp_addsite_continue_button' ).show();
18 + jQuery('#mainwp_managesites_add').addClass('disabled');
19 + jQuery('#mainwp_managesites_add_import').addClass('disabled');
11 20 }
12 - } );
21 + });
13 22
14 - jQuery( '#mainwp_qsw_client_name_field' ).on('keyup', function () {
15 - if ( jQuery( this ).val() ) {
16 - jQuery( '#bulk_add_createclient' ).show();
17 - jQuery( '#mainwp_qsw_add_client_continue_button' ).hide();
23 + // Handle submit import file CVS.
24 + jQuery(document).on('click', '#mainwp_managesites_add_import', function () {
25 + let error_messages = mainwp_managesites_import_handle_form_before_submit();
26 + // If there is an error, prevent submission and display the error
27 + if (error_messages.length > 0) {
28 + feedback('mainwp-message-zone', error_messages.join("<br/>"), "red");
18 29 } else {
19 - jQuery( '#bulk_add_createclient' ).hide();
20 - jQuery( '#mainwp_qsw_add_client_continue_button' ).show();
30 + jQuery('#mainwp_connect_first_site_form').trigger('submit');
21 31 }
22 - } );
23 32
24 - jQuery( '#mainwp-toggle-optional-settings' ).on( 'click', function () {
25 - jQuery( '#mainwp-qsw-optional-settings-form' ).toggle( 300 );
26 33 return false;
27 - } );
34 + });
28 35
29 - jQuery( '.ui.checkbox:not(.not-auto-init)' ).checkbox();
36 + jQuery('#mainwp_qsw_client_name_field').on('keyup', function () {
37 + if (jQuery(this).val()) {
38 + jQuery('#bulk_add_createclient').show();
39 + jQuery('#mainwp_qsw_add_client_continue_button').hide();
40 + } else {
41 + jQuery('#bulk_add_createclient').hide();
42 + jQuery('#mainwp_qsw_add_client_continue_button').show();
43 + }
44 + });
45 +
46 + jQuery('#mainwp-toggle-optional-settings').on('click', function () {
47 + jQuery('#mainwp-qsw-optional-settings-form').toggle(300);
48 + return false;
49 + });
50 +
51 + jQuery('.ui.checkbox:not(.not-auto-init)').checkbox();
30 52 jQuery('.ui.dropdown:not(.not-auto-init)').dropdown();
31 53
32 - jQuery( '.mainwp-checkbox-showhide-elements' ).on( 'click', function () {
33 - var hiel = jQuery( this ).attr( 'hide-parent' );
34 - // if semantic ui checkbox is checked.
35 - if ( jQuery( this ).find( 'input' ).is( ':checked' ) ) {
36 - jQuery( '[hide-element=' + hiel + ']' ).fadeIn( 500 );
37 - } else {
38 - jQuery( '[hide-element=' + hiel + ']' ).fadeOut( 500 );
54 + jQuery('.mainwp-checkbox-showhide-elements').on('click', function () {
55 + let $el = jQuery(this);
56 + let hiels = $el.attr('hide-parent');
57 + if (hiels !== undefined && hiels !== '') {
58 + let isChecked = $el.find('input').is(':checked');
59 + let items = hiels.split(';');
60 + items.forEach(function(hiel) {
61 + // if semantic ui checkbox is checked.
62 + if (isChecked) {
63 + jQuery('[hide-element=' + hiel + ']').fadeIn(500);
64 + } else {
65 + jQuery('[hide-element=' + hiel + ']').fadeOut(500);
66 + }
67 + });
39 68 }
40 - } );
69 + });
41 70
42 - jQuery( document ).on( 'click', '#mainwp_managesites_add', function ( event ) {
43 - mainwp_setup_managesites_add( event );
44 - } );
71 + jQuery(document).on('click', '#mainwp_managesites_add', function () {
72 + mainwp_setup_managesites_add();
73 + });
45 74
46 - jQuery( document ).on( 'change', '#mainwp_managesites_add_wpurl', function() {
47 - var url = jQuery( '#mainwp_managesites_add_wpurl' ).val().trim();
48 - var protocol = jQuery( '#mainwp_managesites_add_wpurl_protocol' ).val();
49 -
50 - if ( url.lastIndexOf( 'http://' ) === 0 ) {
75 + jQuery(document).on('change', '#mainwp_managesites_add_wpurl', function () {
76 + let url = jQuery('#mainwp_managesites_add_wpurl').val().trim();
77 + let protocol = jQuery('#mainwp_managesites_add_wpurl_protocol').val();
78 +
79 + if (url.lastIndexOf('http://') === 0) {
51 80 protocol = 'http';
52 - url = url.substring( 7 );
53 - } else if ( url.lastIndexOf( 'https://' ) === 0 ) {
81 + url = url.substring(7);
82 + } else if (url.lastIndexOf('https://') === 0) {
54 83 protocol = 'https';
55 - url = url.substring( 8 );
84 + url = url.substring(8);
56 85 }
57 86
58 - if ( jQuery( '#mainwp_managesites_add_wpname' ).val() == '' ) {
59 - jQuery( '#mainwp_managesites_add_wpname' ).val( url );
87 + if (jQuery('#mainwp_managesites_add_wpname').val() == '') {
88 + jQuery('#mainwp_managesites_add_wpname').val(url);
60 89 }
61 90
62 - jQuery( '#mainwp_managesites_add_wpurl' ).val( url );
63 - jQuery( '#mainwp_managesites_add_wpurl_protocol' ).val( protocol ).trigger( "change" );
64 - } );
91 + jQuery('#mainwp_managesites_add_wpurl').val(url);
92 + jQuery('#mainwp_managesites_add_wpurl_protocol').val(protocol).trigger("change");
93 + });
65 94
66 -} );
95 +});
67 96
97 +// Handle tab onvisible.
98 +const mainwp_menu_connect_first_site_onvisible_callback = function (objItem) {
99 + const tab = jQuery(objItem).attr("data-tab");
100 + jQuery('.mainwp-field-tab-connect input[name=tab_connect]').filter(`[value="${tab}"]`).parent().trigger('click'); // set checked class ui checkbox
101 + if (tab === 'multiple-site') {
102 + jQuery('#mainwp_managesites_add_import').show();
103 + jQuery('#mainwp_managesites_add').hide();
104 + } else if (tab === 'single-site') {
105 + jQuery('#mainwp_managesites_add').show();
106 + jQuery('#mainwp_managesites_add_import').hide();
107 + }
108 +}
68 109 // Connect a new website
69 -mainwp_setup_managesites_add = function () {
110 +let mainwp_setup_managesites_add = function () {
111 + mainwp_set_message_zone('#mainwp-message-zone');
112 + let errors = [];
70 113
71 - jQuery( '#mainwp-message-zone' ).hide();
72 -
73 - var errors = [ ];
74 -
75 - if ( jQuery( '#mainwp_managesites_add_wpname' ).val().trim() == '' ) {
76 - errors.push( 'Please enter a title for the website.' );
114 + if (jQuery('#mainwp_managesites_add_wpname').val().trim() == '') {
115 + errors.push('Please enter a title for the website.');
77 116 }
78 117
79 - if ( jQuery( '#mainwp_managesites_add_wpurl' ).val().trim() == '' ) {
80 - errors.push( 'Please enter a valid URL for the site.' );
118 + if (jQuery('#mainwp_managesites_add_wpurl').val().trim() == '') {
119 + errors.push('Please enter a valid URL for the site.');
81 120 } else {
82 - var url = jQuery( '#mainwp_managesites_add_wpurl' ).val().trim();
83 - if ( url.substr( -1 ) != '/' ) {
121 + let url = jQuery('#mainwp_managesites_add_wpurl').val().trim();
122 + if (!url.endsWith('/')) {
84 123 url += '/';
85 124 }
86 125
87 - jQuery( '#mainwp_managesites_add_wpurl' ).val( url );
126 + jQuery('#mainwp_managesites_add_wpurl').val(url);
88 127
89 - if ( !isUrl( jQuery( '#mainwp_managesites_add_wpurl_protocol' ).val() + '://' + jQuery( '#mainwp_managesites_add_wpurl' ).val() ) ) {
90 - errors.push( 'Please enter a valid URL for the site.' );
128 + if (!isUrl(jQuery('#mainwp_managesites_add_wpurl_protocol').val() + '://' + jQuery('#mainwp_managesites_add_wpurl').val())) {
129 + errors.push('Please enter a valid URL for the site.');
91 130 }
92 131 }
93 132
94 - if ( jQuery( '#mainwp_managesites_add_wpadmin' ).val().trim() == '' ) {
95 - errors.push( 'Please enter a username of the website administrator.' );
133 + if (jQuery('#mainwp_managesites_add_wpadmin').val().trim() == '') {
134 + errors.push('Please enter a username of the website administrator.');
96 135 }
97 136
98 - if ( errors.length > 0 ) {
99 - jQuery( '#mainwp-message-zone' ).html( errors.join( '<br />' ) ).addClass( 'yellow' ).show();
137 + if (errors.length > 0) {
138 + mainwp_set_message_zone('#mainwp-message-zone', errors.join('<br />'), 'yellow');
100 139 } else {
101 - jQuery( '#mainwp-message-zone' ).html( 'Adding the site to your MainWP Dashboard. Please wait...' ).removeClass( 'green red yellow' ).show();
102 - jQuery( '#mainwp_managesites_add' ).attr( 'disabled', 'true' ); //disable button to add..
140 + mainwp_set_message_zone('#mainwp-message-zone', '<i class="notched circle loading icon"></i> Adding the site to your MainWP Dashboard. Please wait...', '');
141 + jQuery('#mainwp_managesites_add').attr('disabled', 'true'); //disable button to add..
103 142
104 - var url = jQuery( '#mainwp_managesites_add_wpurl_protocol' ).val() + '://' + jQuery( '#mainwp_managesites_add_wpurl' ).val().trim();
143 + let url = jQuery('#mainwp_managesites_add_wpurl_protocol').val() + '://' + jQuery('#mainwp_managesites_add_wpurl').val().trim();
105 144
106 - if ( url.substr( -1 ) != '/' ) {
145 + if (!url.endsWith('/')) {
107 146 url += '/';
108 147 }
109 148
110 - var name = jQuery( '#mainwp_managesites_add_wpname' ).val().trim();
111 - name = name.replace( /"/g, '&quot;' );
149 + let name = jQuery('#mainwp_managesites_add_wpname').val().trim();
150 + name = name.replace(/"/g, '&quot;');
112 151
113 - var data = mainwp_setup_secure_data( {
152 + let data = mainwp_setup_secure_data({
114 153 action: 'mainwp_checkwp',
115 154 name: name,
116 155 url: url,
117 - admin: jQuery( '#mainwp_managesites_add_wpadmin' ).val().trim(),
118 - } );
156 + admin: jQuery('#mainwp_managesites_add_wpadmin').val().trim(),
157 + });
119 158
120 - jQuery.post( ajaxurl, data, function ( res_things ) {
121 - response = res_things.response;
159 + jQuery.post(ajaxurl, data, function (res_things) {
160 + let response = res_things.response;
122 161 response = response.trim();
123 162
124 - var url = jQuery( '#mainwp_managesites_add_wpurl_protocol' ).val() + '://' + jQuery( '#mainwp_managesites_add_wpurl' ).val().trim();
125 - if ( url.substr( -1 ) != '/' ) {
163 + let url = jQuery('#mainwp_managesites_add_wpurl_protocol').val() + '://' + jQuery('#mainwp_managesites_add_wpurl').val().trim();
164 + if (!url.endsWith('/')) {
126 165 url += '/';
127 166 }
128 167
129 - url = url.replace( /"/g, '&quot;' );
168 + url = url.replace(/"/g, '&quot;');
130 169
131 - if ( response == 'HTTPERROR' ) {
132 - errors.push( 'This site can not be reached! Please use the Test Connection feature and see if the positive response will be returned. For additional help, please review <a href="https://kb.mainwp.com/">MainWP Knowledgebase</a>, and if you still have issues, please let us know in the <a href="https://managers.mainwp.com/c/community-support/5">MainWP Community</a>.' );
133 - } else if ( response == 'NOMAINWP' ) {
134 - errors.push( 'MainWP Child plugin not detected or could not be reached! Ensure the MainWP Child plugin is installed and activated on the child site, and there are no security rules blocking requests. If you continue experiencing this issue, check the <a href="https://managers.mainwp.com/c/community-support/5">MainWP Community</a> for help.' );
135 - } else if ( response.substr( 0, 5 ) == 'ERROR' ) {
136 - if ( response.length == 5 ) {
137 - errors.push( 'Undefined error occurred. Please try again. If the issue does not resolve, please review <a href="https://kb.mainwp.com/">MainWP Knowledgebase</a>, and if you still have issues, please let us know in the <a href="https://managers.mainwp.com/c/community-support/5">MainWP Community</a>.' );
170 + if (response == 'HTTPERROR') {
171 + errors.push('This site can not be reached! Please use the Test Connection feature and see if the positive response will be returned. For additional help, please review <a href="https://docs.mainwp.com/">MainWP Knowledgebase</a>, and if you still have issues, please let us know in the <a href="https://community.mainwp.com/c/community-support/5">MainWP Community</a>.'); // NOSONAR - noopener - open safe.
172 + } else if (response == 'NOMAINWP') {
173 + errors.push(mainwp_js_get_error_not_detected_connect());
174 + } else if (response.substring(0, 5) == 'ERROR') {
175 + if (response.length == 5) {
176 + errors.push('Undefined error occurred. Please try again. If the issue does not resolve, please review <a href="https://docs.mainwp.com/">MainWP Knowledgebase</a>, and if you still have issues, please let us know in the <a href="https://community.mainwp.com/c/community-support/5">MainWP Community</a>.'); // NOSONAR - noopener - open safe.
138 177 } else {
139 - errors.push( response.substr( 6 ) );
178 + let error = response.substring(6);
179 + let err = mainwp_js_get_error_not_detected_connect(error, 'html_msg', false, true); // return text error.
180 + if (false === err) {
181 + errors.push(error); // it is not json string error.
182 + } else if (true !== err && '' != err) {
183 + errors.push(err); // decoded error.
184 + }
140 185 }
141 - } else if ( response == 'OK' ) {
142 - jQuery( '#mainwp_managesites_add' ).attr( 'disabled', 'true' );
186 + } else if (response == 'OK') {
187 + jQuery('#mainwp_managesites_add').attr('disabled', 'true');
143 188
144 - var name = jQuery( '#mainwp_managesites_add_wpname' ).val();
145 - name = name.replace( /"/g, '&quot;' );
146 - var group_ids = '';
147 - var data = mainwp_setup_secure_data( {
189 + let name = jQuery('#mainwp_managesites_add_wpname').val();
190 + name = name.replace(/"/g, '&quot;');
191 + let group_ids = '';
192 + let data = mainwp_setup_secure_data({
148 193 action: 'mainwp_addwp',
149 194 managesites_add_wpname: name,
150 195 managesites_add_wpurl: url,
151 - managesites_add_wpadmin: jQuery( '#mainwp_managesites_add_wpadmin' ).val(),
152 - managesites_add_uniqueId: jQuery( '#mainwp_managesites_add_uniqueId' ).val(),
196 + managesites_add_wpadmin: jQuery('#mainwp_managesites_add_wpadmin').val(),
197 + managesites_add_adminpwd: encodeURIComponent(jQuery('#mainwp_managesites_add_admin_pwd').val()),
198 + managesites_add_uniqueId: jQuery('#mainwp_managesites_add_uniqueId').val(),
153 199 groupids: group_ids,
154 200 qsw_page: true,
155 - } );
201 + });
156 202
157 203 // to support add client reports tokens values
158 - jQuery( "input[name^='creport_token_']" ).each( function(){
159 - var tname = jQuery( this ).attr( 'name' );
160 - var tvalue = jQuery( this ).val();
204 + jQuery("input[name^='creport_token_']").each(function () {
205 + let tname = jQuery(this).attr('name');
206 + let tvalue = jQuery(this).val();
161 207 data[tname] = tvalue;
162 - } );
208 + });
163 209
164 210 // support hooks fields
165 - jQuery( ".mainwp_addition_fields_addsite input" ).each( function() {
166 - var tname = jQuery( this ).attr( 'name' );
167 - var tvalue = jQuery( this ).val();
168 - data[tname] = tvalue;
169 - } );
211 + jQuery(".mainwp_addition_fields_addsite input").each(function () {
212 + let tname = jQuery(this).attr('name');
213 + let tvalue = jQuery(this).val();
214 + data[tname] = tvalue;
215 + });
170 216
171 - jQuery.post( ajaxurl, data, function ( res_things ) {
217 + jQuery.post(ajaxurl, data, function (res_things) {
172 218
173 - if ( res_things.error ) {
219 + if (res_things.error) {
174 220 response = res_things.error;
175 221 } else {
176 222 response = res_things.response;
177 223 }
@@ -177,63 +223,63 @@
177 223 }
178 224
179 225 response = response.trim();
180 226
181 - jQuery( '#mainwp-message-zone' ).hide();
182 - jQuery( '#mainwp-info-zone' ).hide();
227 + mainwp_set_message_zone('#mainwp-message-zone');
228 + jQuery('#mainwp-info-zone').hide();
183 229
184 - if ( response.substr( 0, 5 ) == 'ERROR' ) {
185 - jQuery( '#mainwp-message-zone' ).removeClass( 'green yellow green' );
186 - jQuery( '#mainwp-message-zone' ).html( response.substr( 6 ) ).addClass( 'red' ).show();
230 + if (response.substring(0, 5) == 'ERROR') {
231 + mainwp_set_message_zone('#mainwp-message-zone', response.substring(6), 'red');
187 232 } else {
188 233 //Message the WP was added
189 - jQuery( '#mainwp-message-zone' ).removeClass( 'green yellow green' );
190 - jQuery( '#mainwp-message-zone' ).html( response ).addClass( 'green' ).show();
234 + mainwp_set_message_zone('#mainwp-message-zone', response, 'green');
191 235
192 236 //Reset fields
193 - jQuery( '#mainwp_managesites_add_wpname' ).val( '' );
194 - jQuery( '#mainwp_managesites_add_wpurl' ).val( '' );
195 - jQuery( '#mainwp_managesites_add_wpurl_protocol' ).val( 'https' );
196 - jQuery( '#mainwp_managesites_add_wpadmin' ).val( '' );
197 - jQuery( '#mainwp_managesites_add_uniqueId' ).val( '' );
237 + jQuery('#mainwp_managesites_add_wpname').val('');
238 + jQuery('#mainwp_managesites_add_wpurl').val('');
239 + jQuery('#mainwp_managesites_add_wpurl_protocol').val('https');
240 + jQuery('#mainwp_managesites_add_wpadmin').val('');
241 + jQuery('#mainwp_managesites_add_admin_pwd').val('');
242 + jQuery('#mainwp_managesites_add_uniqueId').val('');
198 243
199 - jQuery( "input[name^='creport_token_']" ).each( function() {
200 - jQuery( this ).val( '' );
201 - } );
244 + jQuery("input[name^='creport_token_']").each(function () {
245 + jQuery(this).val('');
246 + });
202 247
203 248 // support hooks fields
204 - jQuery( ".mainwp_addition_fields_addsite input" ).each( function() {
205 - jQuery( this ).val('');
206 - } );
207 -
249 + jQuery(".mainwp_addition_fields_addsite input").each(function () {
250 + jQuery(this).val('');
251 + });
252 +
208 253 setTimeout(function () {
209 - window.location.href = 'admin.php?page=mainwp-setup&step=connect_first_site';
210 - }, 1000);
254 + mainwp_forceReload('admin.php?page=mainwp-setup&step=add_client');
255 + }, 3000);
211 256 }
212 257
213 - jQuery( '#mainwp_managesites_add' ).prop("disabled", false);
214 - }, 'json' );
258 + jQuery('#mainwp_managesites_add').prop("disabled", false);
259 + }, 'json');
215 260 }
216 - if ( errors.length > 0 ) {
217 - jQuery( '#mainwp-message-zone' ).removeClass( 'green yellow green' );
218 - jQuery( '#mainwp-message-zone' ).hide();
219 - jQuery( '#mainwp_managesites_add' ).prop("disabled", false);
220 - jQuery( '#mainwp-message-zone' ).html( errors.join( '<br />' ) ).addClass( 'red' ).show();
261 + if (errors.length > 0) {
262 + mainwp_set_message_zone('#mainwp-message-zone', errors.join('<br />'), 'red');
263 + jQuery('#mainwp_managesites_add').prop("disabled", false);
221 264 }
222 - }, 'json' );
265 + }, 'json');
223 266 }
224 267 };
225 268
226 269 // Check if the URL field is valid value
227 -function isUrl( s ) {
228 - var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/;
229 - return regexp.test( s );
270 +function isUrl(url) {
271 + try {
272 + new URL(url);
273 + return true;
274 + } catch (e) {
275 + console.log(e);
276 + }
277 + return false;
230 278 }
231 279
232 -mainwp_setup_secure_data = function ( data ) {
233 - if ( data['action'] == undefined )
280 +let mainwp_setup_secure_data = function (data) {
281 + if (data['action'] == undefined)
234 282 return data;
235 -
236 - data['security'] = jQuery( '#nonce_secure_data' ).attr( data['action'] );
237 -
283 + data.security = jQuery('input[name="qsw_nonce[' + data.action + ']"]').val() || '';
238 284 return data;
239 285 };