PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 4.6.0.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v4.6.0.1
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
mainwp / assets / js / mainwp-extensions.js

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

876 lines 39.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* eslint complexity: ["error", 100] */
2 jQuery(document).on('click', '.mainwp-extensions-add-menu', function () {
3 var extensionSlug = jQuery(this).parents('.plugin-card').attr('extension_slug');
4 var data = mainwp_secure_data({
5 action: 'mainwp_extension_add_menu',
6 slug: extensionSlug
7 });
8
9 jQuery.post(ajaxurl, data, function (response) {
10 if (response.result == 'SUCCESS')
11 location.reload();
12 else if (response.error) {
13 alert(response.error);
14 }
15 }, 'json');
16
17 return false;
18 });
19
20 jQuery(document).on('click', '.mainwp-extensions-remove-menu', function () {
21 var extensionSlug = jQuery(this).parents('.plugin-card').attr('extension_slug');
22 var data = mainwp_secure_data({
23 action: 'mainwp_extension_remove_menu',
24 slug: extensionSlug
25 });
26
27 jQuery.post(ajaxurl, data, function (response) {
28 if (response.result == 'SUCCESS')
29 location.reload();
30 }, 'json');
31
32 return false;
33 });
34
35 jQuery(document).ready(function () {
36 jQuery(document).on('click', '.mainwp-manage-extension-license', function () {
37 var currentCard = jQuery(this).closest(".card");
38 currentCard.find("#mainwp-extensions-api-form").toggle();
39 if (jQuery(this).attr('api-actived') == '0') {
40 extensions_activate_next(currentCard, false);
41 }
42 return false;
43 });
44
45 jQuery(document).on('click', '.extension-privacy-info-link', function () {
46 var slug = jQuery(this).attr('base-slug');
47 var title = '';
48 if (jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").length > 0) {
49 title = jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").attr('extension_title');
50 } else {
51 title = jQuery(this).closest('.ui.card').attr('extension-title');
52 }
53 var privacy = jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").attr('privacy');
54 var integration = jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").attr('integration');
55 var integration_url = jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").attr('integration_url');
56 var integration_owner = jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").attr('integration_owner');
57 var integration_owner_pp = jQuery('#mainwp-extensions-privacy-info').find("input[base-slug='" + slug + "']").attr('integration_owner_pp');
58
59 jQuery('#mainwp-privacy-info-modal').modal({
60 allowMultiple: true,
61 onShow: function () {
62 jQuery('#mainwp-privacy-info-modal').find('.header').html(title + ' Privacy Info');
63 if (0 == privacy) {
64 jQuery('#mainwp-privacy-info-modal').find('.content').html('Standalone Extension. This Extension does not use any 3rd party plugins or API\'s to integrate with your Dashboard. This extension falls under the <a href="https://mainwp.com/mainwp-plugin-privacy-policy/" target="_blank">MainWP Plugin Privacy Policy</a>.');
65 } else if (1 == privacy) {
66 if (slug == 'advanced-uptime-monitor-extension') {
67 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>Extension integrates with a 3rd party API.</strong>');
68 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
69 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="' + integration_url + '" target="_blank">' + integration + '</a>');
70 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
71 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="' + integration_owner_pp + '" target="_blank">' + integration_owner + '</a>');
72 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
73 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://betteruptime.com/" target="_blank">Better Uptime API</a>');
74 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
75 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://betterstack.com/privacy" target="_blank">Better Stack, Inc.</a>');
76 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
77 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://nodeping.com" target="_blank">NodePing API</a>');
78 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
79 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://nodeping.com/privacy.html" target="_blank">NodePing LLC</a>');
80 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
81 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://www.site24x7.com/" target="_blank">Site24x7 API</a>');
82 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
83 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://www.zoho.com/privacy.html" target="_blank">Zoho Corporation Pvt. Ltd.</a>');
84 } else if (slug == 'mainwp-vulnerability-checker-extension') {
85 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>Extension integrates with a 3rd party API.</strong>');
86 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
87 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="' + integration_url + '" target="_blank">' + integration + '</a>');
88 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
89 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="' + integration_owner_pp + '" target="_blank">' + integration_owner + '</a>');
90 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
91 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://nvd.nist.gov/" target="_blank">NVD NIST API</a>');
92 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
93 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://www.nist.gov/privacy-policy" target="_blank">National Institute of Standards and Technology</a>');
94 } else if (slug == 'mainwp-api-backups-extension') {
95 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>Extension integrates with a 3rd party API.</strong>');
96 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
97 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="' + integration_url + '" target="_blank">' + integration + '</a>');
98 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
99 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="' + integration_owner_pp + '" target="_blank">' + integration_owner + '</a>');
100 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
101 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://gridpane.com/" target="_blank">GridPane API</a>');
102 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
103 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://gridpane.com/privacy/" target="_blank">GridPane Inc.</a>');
104 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
105 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://www.digitalocean.com/" target="_blank">Digital Ocean API</a>');
106 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
107 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://www.digitalocean.com/legal/privacy-policy" target="_blank">DigitalOcean, LLC.</a>');
108 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
109 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://www.linode.com/" target="_blank">Linode API</a>');
110 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
111 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://www.linode.com/legal-privacy/" target="_blank">Akamai Technologies</a>');
112 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
113 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://www.vultr.com/" target="_blank">Vultr API</a>');
114 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
115 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://www.vultr.com/legal/privacy/" target="_blank">Constant Company, LLC.</a>');
116 } else {
117 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>Extension integrates with a 3rd party API.</strong>');
118 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
119 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="' + integration_url + '" target="_blank">' + integration + '</a>');
120 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
121 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="' + integration_owner_pp + '" target="_blank">' + integration_owner + '</a>');
122 }
123 } else if (2 == privacy) {
124 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>Extension integrates with a 3rd party Plugin.</strong>');
125 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
126 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="' + integration_url + '" target="_blank">' + integration + '</a>');
127 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
128 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="' + integration_owner_pp + '" target="_blank">' + integration_owner + '</a>');
129 } else {
130 if ( slug =='mainwp-page-speed-extension' ) {
131 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>Extension integrates with a 3rd party Plugin.</strong>');
132 jQuery('#mainwp-privacy-info-modal').find('.content').append('<div class="ui hidden divider"></div>');
133 jQuery('#mainwp-privacy-info-modal').find('.content').append('Integrates with: <a href="https://wordpress.org/plugins/google-pagespeed-insights/" target="_blank">Insights from Google PageSpeed</a>');
134 jQuery('#mainwp-privacy-info-modal').find('.content').append('<br/>');
135 jQuery('#mainwp-privacy-info-modal').find('.content').append('Owned by: <a href="https://mattkeys.me/" target="_blank">Matt Keys</a>');
136 } else {
137 jQuery('#mainwp-privacy-info-modal').find('.content').html('<strong>This extension is not developed by MainWP. Privacy info is not available.</strong>');
138 }
139 }
140 },
141 onHide: function () {
142 jQuery('#mainwp-privacy-info-modal').find('.header').html('');
143 jQuery('#mainwp-privacy-info-modal').find('.content').html('');
144 },
145 }).modal('show');
146
147 return false;
148 });
149
150 jQuery(document).on('click', '.extension-the-plugin-action', function () {
151 var parent = jQuery(this).closest(".card");
152 var slug = jQuery(parent).attr('extension-slug');
153 var loadingEl = parent.find(".action-feedback");
154 var whatAct = jQuery(this).attr("plugin-action");
155
156 loadingEl.show();
157 loadingEl.find('.message').removeClass('red green');
158
159 var msg = __('Deactivating...');
160 if (whatAct == 'active') {
161 msg = __('Activating...');
162 } else if (whatAct == 'remove') {
163 msg = __('Removing...');
164 }
165
166 loadingEl.find('.message').html('<i class="notched circle loading icon"></i> ' + msg);
167
168 var data = mainwp_secure_data({
169 action: 'mainwp_extension_plugin_action',
170 slug: slug,
171 what: whatAct,
172 });
173
174 jQuery(this).attr('disabled', true);
175 jQuery.post(ajaxurl, data, function (response) {
176 jQuery(this).attr('disabled', false);
177 var success = false;
178 if (response) {
179 if (response.result == 'SUCCESS') {
180 loadingEl.find('.message').addClass('green');
181 msg = __('Extension deactivated.');
182 if (whatAct == 'active') {
183 msg = __('Extension activated.');
184 } else if (whatAct == 'remove') {
185 msg = __('Extension removed.');
186 }
187 loadingEl.find('.message').html(msg);
188 success = true;
189 } else if (response.error) {
190 loadingEl.find('.message').addClass('red');
191 loadingEl.find('.message').html(response.error);
192 } else {
193 loadingEl.find('.message').addClass('red');
194 loadingEl.find('.message').html(__('Undefined error. '));
195 }
196 } else {
197 loadingEl.find('.message').addClass('red');
198 loadingEl.find('.message').html(__('Undefined error. '));
199 }
200
201 if (success) {
202 setTimeout(function () {
203 location.href = 'admin.php?page=Extensions';
204 }, 2000);
205 }
206 }, 'json');
207 return false;
208 });
209 });
210
211 jQuery(document).on('click', '.mainwp-extensions-activate', function () {
212 mainwp_extensions_activate(this, false);
213 });
214
215 function mainwp_extensions_activate(pObj, retring) {
216 var apiEl = jQuery(pObj).closest(".card");
217 var statusEl = apiEl.find(".activate-api-status");
218 var loadingEl = apiEl.find(".api-feedback");
219
220 loadingEl.hide();
221
222 if (jQuery(pObj).attr('license-status') == 'activated') {
223 loadingEl.show();
224 loadingEl.find('.message').html(__('Already activated.'));
225 return;
226 }
227
228 if (retring == true) {
229 loadingEl.show();
230 loadingEl.find('.message').html(__('Connection error detected. The Verify Certificate option has been switched to NO. Retrying...'));
231 } else {
232 var extensionSlug = jQuery(apiEl).attr('extension-slug');
233 var key = apiEl.find('input[type="text"].extension-api-key').val();
234 var email = apiEl.find('input[type="text"].extension-api-email').val();
235
236 if (key == '')
237 return;
238
239 var data = mainwp_secure_data({
240 action: 'mainwp_extension_api_activate',
241 slug: extensionSlug,
242 key: key,
243 email: email
244 });
245 }
246
247 loadingEl.show();
248 loadingEl.find('.message').removeClass('red green');
249 loadingEl.find('.message').html('<i class="notched circle loading icon"></i>' + __('Activating...'));
250
251 jQuery.post(ajaxurl, data, function (response) {
252
253 var success = false;
254
255 if (response) {
256 if (response.result == 'SUCCESS') {
257 loadingEl.find('.message').addClass('green');
258 loadingEl.find('.message').html(__('License activated. '));
259 statusEl.html('<i class="green check icon"></i> License');
260 success = true;
261 } else if (response.error) {
262 loadingEl.find('.message').addClass('red');
263 loadingEl.find('.message').html(response.error);
264 } else if (response.retry_action && response.retry_action == 1) {
265 jQuery("#mainwp_api_sslVerifyCertificate").val(0);
266 mainwp_extensions_activate(pObj, true);
267 return false;
268 } else {
269 loadingEl.find('.message').addClass('red');
270 loadingEl.find('.message').html(__('Undefined error. '));
271 }
272 } else {
273 loadingEl.find('.message').addClass('red');
274 loadingEl.find('.message').html(__('Undefined error. '));
275 }
276
277 if (success) {
278 setTimeout(function () {
279 location.href = 'admin.php?page=Extensions';
280 }, 2000);
281 }
282 }, 'json');
283 return false;
284 }
285
286 jQuery(document).on('click', '.mainwp-extensions-deactivate', function () {
287 var apiEl = jQuery(this).closest(".card");
288 var statusEl = apiEl.find(".activate-api-status");
289 var loadingEl = apiEl.find(".api-feedback");
290
291 if (!apiEl.find('.mainwp-extensions-deactivate-chkbox').is(':checked'))
292 return false;
293
294 loadingEl.hide();
295
296 var extensionSlug = jQuery(apiEl).attr('extension-slug');
297 var extensionApiKey = jQuery(apiEl).find('.extension-api-key').val();
298 var data = mainwp_secure_data({
299 action: 'mainwp_extension_deactivate',
300 slug: extensionSlug,
301 api_key: extensionApiKey
302 });
303
304 loadingEl.show();
305 loadingEl.find('.message').removeClass('red green');
306 loadingEl.find('.message').html('<i class="notched circle loading icon"></i>' + __('Deactivating...'));
307
308 jQuery.post(ajaxurl, data, function (response) {
309
310 if (response) {
311 if (response.result == 'SUCCESS') {
312 loadingEl.find('.message').addClass('green');
313 loadingEl.find('.message').html(__('License deactivated.'));
314 statusEl.html('<i class="green check icon"></i> License');
315 success = true;
316 } else if (response.error) {
317 loadingEl.find('.message').addClass('red');
318 loadingEl.find('.message').html(response.error);
319 } else {
320 loadingEl.find('.message').addClass('red');
321 loadingEl.find('.message').html(__('Undefined error. '));
322 }
323 } else {
324 loadingEl.find('.message').addClass('red');
325 loadingEl.find('.message').html(__('Undefined error. '));
326 }
327
328 setTimeout(function () {
329 location.href = 'admin.php?page=Extensions';
330 }, 2000);
331 }, 'json');
332 return false;
333 });
334
335
336 // Verify mainwp.com login credentials
337 jQuery(document).on('click', '#mainwp-extensions-savelogin', function () {
338 mainwp_extensions_savelogin(this, false);
339 });
340
341 function mainwp_extensions_savelogin(pObj, retring) {
342 var grabingEl = jQuery("#mainwp-extensions-api-fields");
343 var api_key = grabingEl.find('#mainwp_com_api_key').val();
344 var statusEl = jQuery(".mainwp-extensions-api-loading");
345 var data = mainwp_secure_data({
346 action: 'mainwp_extension_saveextensionapilogin',
347 api_key: api_key,
348 saveLogin: jQuery('#extensions_api_savemylogin_chk').is(':checked') ? 1 : 0
349 });
350
351 if (retring == true) {
352 statusEl.html(__("Connection error detected. The Verify Certificate option has been switched to NO. Retrying...")).fadeIn();
353 } else {
354 statusEl.removeClass('red');
355 statusEl.removeClass('green');
356 statusEl.removeClass('yellow');
357 statusEl.show();
358 statusEl.html('<i class="notched circle loading icon"></i> ' + __('Validating. Please wait...'));
359 }
360
361 jQuery.post(ajaxurl, data, function (response) {
362 var undefError = false;
363 if (response) {
364 if (response.saved) {
365 statusEl.addClass('green');
366 statusEl.html('Saved.').fadeIn();
367 } else if (response.result == 'SUCCESS') {
368 statusEl.addClass('green');
369 statusEl.html('MainWP Main API Key is valid!').fadeIn();
370 setTimeout(function () {
371 statusEl.fadeOut();
372 }, 3000);
373 } else if (response.error) {
374 statusEl.addClass('red');
375 statusEl.html(response.error).fadeIn();
376 } else if (response.retry_action && response.retry_action == 1) {
377 jQuery("#mainwp_api_sslVerifyCertificate").val(0);
378 mainwp_extensions_savelogin(pObj, true);
379 return false;
380 } else {
381 undefError = true;
382 }
383 } else {
384 undefError = true;
385 }
386
387 if (undefError) {
388 statusEl.addClass('red');
389 statusEl.html(__('Undefined error. Please try again.')).fadeIn();
390 }
391 }, 'json');
392 return false;
393 }
394
395 var maxActivateThreads = 8;
396 var totalActivateThreads = 0;
397 var currentActivateThreads = 0;
398 var finishedActivateThreads = 0;
399 var countSuccessActivation = 0;
400
401 // Bulk grab API keys
402 jQuery(document).on('click', '#mainwp-extensions-grabkeys', function () {
403 mainwp_extensions_grabkeys(false);
404 });
405
406 function mainwp_extensions_grabkeys(retring) {
407 var grabingEl = jQuery("#mainwp-extensions-api-fields");
408 var master_api_key = grabingEl.find('#mainwp_com_api_key').val();
409 var statusEl = jQuery(".mainwp-extensions-api-loading");
410
411 var data = mainwp_secure_data({
412 action: 'mainwp_extension_testextensionapilogin',
413 master_api_key: master_api_key
414 });
415
416 if (master_api_key == '') {
417 statusEl.html(__("Main API Key is required.")).show();
418 statusEl.addClass('yellow');
419 } else {
420 if (retring == true) {
421 statusEl.html(__("Connection error detected. The Verify Certificate option has been switched to NO. Retrying...")).fadeIn();
422 } else {
423 statusEl.removeClass('red');
424 statusEl.removeClass('yellow');
425 statusEl.removeClass('green');
426 statusEl.show();
427 statusEl.html('<i class="notched circle loading icon"></i> ' + __('Validating. Please wait...')).show();
428 }
429
430 jQuery.post(ajaxurl, data, function (response) {
431 var undefError = false;
432 if (response) {
433 if (response.result == 'SUCCESS') {
434 statusEl.addClass('green');
435 statusEl.html('MainWP Main API Key is valid!').fadeIn();
436 setTimeout(function () {
437 statusEl.fadeOut();
438 }, 3000);
439 totalActivateThreads = jQuery('#mainwp-extensions-list .card[status="queue"]').length;
440 console.log(totalActivateThreads);
441 if (totalActivateThreads > 0)
442 extensions_loop_next();
443 } else if (response.error) {
444 statusEl.addClass('red');
445 statusEl.html(response.error).fadeIn();
446 } else if (response.retry_action && response.retry_action == 1) {
447 jQuery("#mainwp_api_sslVerifyCertificate").val(0);
448 mainwp_extensions_grabkeys(true);
449 return false;
450 } else {
451 undefError = true;
452 }
453 } else {
454 undefError = true;
455 }
456 if (undefError) {
457 statusEl.addClass('red');
458 statusEl.html(__('Undefined error. Please try again.')).fadeIn();
459 }
460 }, 'json');
461 }
462 return false;
463 }
464
465 extensions_loop_next = function () {
466 while ((extToActivate = jQuery('#mainwp-extensions-list .card[status="queue"]:first')) && (extToActivate.length > 0) && (currentActivateThreads < maxActivateThreads)) {
467 extensions_activate_next(extToActivate, true);
468 }
469 if ((finishedActivateThreads == totalActivateThreads) && (countSuccessActivation == totalActivateThreads)) {
470 setTimeout(function () {
471 location.href = 'admin.php?page=Extensions';
472 }, 2000);
473 }
474 };
475
476 extensions_activate_next = function (pObj, bulkAct) {
477
478 var grabingEl = jQuery("#mainwp-extensions-api-fields");
479 var apiEl = pObj;
480 var statusEl = apiEl.find(".activate-api-status");
481 var loadingEl = apiEl.find(".api-feedback");
482
483 var master_api_key = grabingEl.find('#mainwp_com_api_key').val();
484
485 apiEl.attr("status", "running");
486
487 var extensionSlug = apiEl.attr('extension-slug');
488 var data = mainwp_secure_data({
489 action: 'mainwp_extension_grabapikey',
490 master_api_key: master_api_key,
491 slug: extensionSlug
492 });
493
494 currentActivateThreads++;
495
496 loadingEl.show();
497 loadingEl.find('.message').removeClass('red green');
498 loadingEl.find('.message').html('<i class="notched circle loading icon"></i>' + __('Activating...'));
499
500 if (apiEl.attr('license-status') == 'activated') {
501 finishedActivateThreads++;
502 currentActivateThreads--;
503 loadingEl.find('.message').addClass('green');
504 loadingEl.find('.message').html(__('Already activated.'));
505 countSuccessActivation++;
506 if (bulkAct) {
507 extensions_loop_next();
508 }
509 return;
510 }
511
512 jQuery.post(ajaxurl, data, function (response) {
513 finishedActivateThreads++;
514 currentActivateThreads--;
515
516 if (response) {
517 if (response.result == 'SUCCESS') {
518 countSuccessActivation++;
519 loadingEl.find('.message').addClass('green');
520 loadingEl.find('.message').html(__('License activated.'));
521 statusEl.html('<i class="green check icon"></i> License');
522 apiEl.find('.mainwp-extensions-deactivate-chkbox').attr('checked', false);
523 if (!bulkAct) {
524 setTimeout(function () {
525 location.href = 'admin.php?page=Extensions';
526 }, 2000);
527 }
528 } else if (response.error) {
529 loadingEl.find('.message').addClass('red');
530 loadingEl.find('.message').html(response.error);
531 } else {
532 loadingEl.find('.message').addClass('red');
533 loadingEl.find('.message').html(__('Undefined error. '));
534 }
535 } else {
536 loadingEl.find('.message').addClass('red');
537 loadingEl.find('.message').html(__('Undefined error. '));
538 }
539 if (bulkAct) {
540 extensions_loop_next();
541 }
542 }, 'json');
543 };
544
545 jQuery(document).on('click', '#mainwp-extensions-bulkinstall', function () {
546 var grabingEl = jQuery("#mainwp-extensions-api-fields");
547 var api_key = grabingEl.find('#mainwp_com_api_key').val().trim();
548 if (api_key == '') {
549 mainwp_extension_grab_org_extensions(this);
550 } else {
551 mainwp_extension_grab_purchased(this, false);
552 }
553 })
554
555 mainwp_extension_grab_purchased = function (pObj, retring) {
556
557 var grabingEl = jQuery("#mainwp-extensions-api-fields");
558 var api_key = grabingEl.find('#mainwp_com_api_key').val().trim();
559
560 var statusEl = jQuery(".mainwp-extensions-api-loading");
561 var data = mainwp_secure_data({
562 action: 'mainwp_extension_getpurchased',
563 api_key: api_key
564 });
565
566 if (api_key == '') {
567 statusEl.html(__("Main API Key is required.")).show();
568 statusEl.addClass('yellow');
569 } else {
570 if (retring == true) {
571 statusEl.html(__("Connection error detected. The Verify Certificate option has been switched to NO. Retrying...")).fadeIn();
572 } else
573 statusEl.removeClass('red');
574 statusEl.removeClass('green');
575 statusEl.removeClass('yellow');
576 statusEl.show();
577 statusEl.html('<i class="notched circle loading icon"></i> ' + __('Verifying. Please wait...'));
578
579 jQuery.post(ajaxurl, data, function (response) {
580 var undefError = false;
581 if (response) {
582 if (response.result == 'SUCCESS') {
583 jQuery('#mainwp-get-purchased-extensions-modal').modal({
584 allowMultiple: true,
585 closable: false,
586 onHide: function () {
587 location.href = 'admin.php?page=Extensions';
588 }
589 }).modal('show');
590 jQuery('#mainwp-get-purchased-extensions-modal').find('.content').html(response.data);
591 statusEl.hide();
592 } else if (response.error) {
593 statusEl.addClass('red');
594 statusEl.html(response.error).fadeIn();
595 } else if (response.retry_action && response.retry_action == 1) {
596 jQuery("#mainwp_api_sslVerifyCertificate").val(0);
597 mainwp_extension_grab_purchased(pObj, true);
598 return false;
599 } else {
600 undefError = true;
601 }
602 } else {
603 undefError = true;
604 }
605
606 if (undefError) {
607 statusEl.addClass('red');
608 statusEl.html(__('Undefined error occurred. Please try again.')).fadeIn();
609 }
610 }, 'json');
611 }
612 return false;
613 }
614
615 mainwp_extension_grab_org_extensions = function () {
616
617 var statusEl = jQuery(".mainwp-extensions-api-loading");
618 var data = mainwp_secure_data({
619 action: 'mainwp_extension_getpurchased',
620 });
621
622 statusEl.removeClass('green');
623 statusEl.removeClass('yellow');
624 statusEl.show();
625 statusEl.html('<i class="notched circle loading icon"></i> ' + __('Running. Please wait...'));
626
627 jQuery.post(ajaxurl, data, function (response) {
628 var undefError = false;
629 if (response) {
630 if (response.result == 'SUCCESS') {
631 jQuery('#mainwp-get-purchased-extensions-modal').modal({
632 allowMultiple: true,
633 closable: false,
634 onHide: function () {
635 location.href = 'admin.php?page=Extensions';
636 }
637 }).modal('show');
638 jQuery('#mainwp-get-purchased-extensions-modal').find('.content').html(response.data);
639 statusEl.hide();
640 } else if (response.error) {
641 statusEl.addClass('red');
642 statusEl.html(response.error).fadeIn();
643 } else {
644 undefError = true;
645 }
646 } else {
647 undefError = true;
648 }
649
650 if (undefError) {
651 statusEl.addClass('red');
652 statusEl.html(__('Undefined error. Please try again.')).fadeIn();
653 }
654 }, 'json');
655
656 return false;
657 }
658
659
660 jQuery(document).on('click', '#mainwp-extensions-installnow', function () {
661 mainwp_extension_bulk_install();
662 return false;
663 })
664
665 bulkExtensionsMaxThreads = mainwpParams['maximumInstallUpdateRequests'] == undefined ? 3 : mainwpParams['maximumInstallUpdateRequests'];
666 bulkExtensionsCurrentThreads = 0;
667 bulkExtensionsTotal = 0;
668 bulkExtensionsFinished = 0;
669 bulkExtensionsRunning = false;
670
671 mainwp_extension_bulk_install = function () {
672 if (bulkExtensionsRunning)
673 return;
674
675 jQuery('.mainwp-installing-extensions input[type="checkbox"][status="queue"]:not(:checked)').closest('.extension-to-install').find('.installing-extension[status="queue"]').html('<span data-tooltip="Skipped" data-position="left center" data-inverted=""><i class="stop circle outline grey icon"></i></span>');
676
677 bulkExtensionsTotal = jQuery('.mainwp-installing-extensions input[type="checkbox"][status="queue"]:checked').length;
678
679 if (bulkExtensionsTotal == 0)
680 return false;
681
682 jQuery('.mainwp-installing-extensions input[type="checkbox"][status="queue"]:checked').closest('.extension-to-install').find('.installing-extension[status="queue"]').html('<i class="clock outline icon"></i> ' + __('Queued'));
683
684 mainwp_extension_bulk_install_next();
685 }
686
687 mainwp_extension_bulk_install_next = function () {
688 while ((extToInstall = jQuery('.mainwp-installing-extensions input[type="checkbox"][status="queue"]:checked:first').closest('.extension-to-install')) && (extToInstall.length > 0) && (bulkExtensionsCurrentThreads < bulkExtensionsMaxThreads)) {
689 mainwp_extension_bulk_install_specific(extToInstall);
690 }
691
692 if ((bulkExtensionsTotal > 0) && (bulkExtensionsFinished == bulkExtensionsTotal)) {
693 mainwp_extension_bulk_activate();
694 }
695 }
696
697 mainwp_extension_bulk_install_specific = function (pExtToInstall) {
698 bulkExtensionsRunning = true;
699 pExtToInstall.find('input[type="checkbox"]').attr('status', 'running');
700 bulkExtensionsCurrentThreads++;
701
702 var statusEl = pExtToInstall.find('.installing-extension');
703
704 statusEl.html('<span data-tooltip="Installing extension. Please wait..." data-position="left center" data-inverted=""><i class="notched circle loading icon"></i></span>');
705
706 var data = mainwp_secure_data({
707 action: 'mainwp_extension_downloadandinstall',
708 download_link: pExtToInstall.attr('download-link'),
709 plugin_slug: pExtToInstall.attr('plugin-slug')
710 });
711
712 jQuery.ajax({
713 type: 'POST',
714 url: ajaxurl,
715 data: data,
716 success: function () {
717 return function (res_data) {
718 bulkExtensionsCurrentThreads--;
719 bulkExtensionsFinished++;
720
721 statusEl.html('');
722
723 var reg = new RegExp('<mainwp>(.*)</mainwp>');
724 var matches = reg.exec(res_data);
725 var response = '';
726
727 if (matches) {
728 response_json = matches[1];
729 response = JSON.parse(response_json);
730 }
731
732 if (response != '') {
733 if (response.result == 'SUCCESS') {
734 statusEl.html('<span data-tooltip="' + response.output + '" data-inverted="" data-position="left center"><i class="check green icon"></i></span>');
735 jQuery('.mainwp-installing-extensions').append('<span class="extension-installed-success" slug="' + response.slug + '"></span>')
736 } else if (response.error) {
737 statusEl.html('<span data-tooltip="' + response.error + '" data-inverted="" data-position="left center"><i class="times red icon"></i></span>');
738 } else {
739 statusEl.html('<span data-tooltip="Undefined error occured. Please try again." data-inverted="" data-position="left center"><i class="times red icon"></i></span>');
740 }
741 } else {
742 statusEl.html('<span data-tooltip="Undefined error occured. Please try again." data-inverted="" data-position="left center"><i class="times red icon"></i></span>');
743 }
744
745 mainwp_extension_bulk_install_next();
746 }
747 }()
748 });
749
750 return false;
751 }
752
753 mainwp_extension_bulk_activate = function () {
754 var plugins = [];
755
756 jQuery('.extension-installed-success').each(function () {
757 plugins.push(jQuery(this).attr('slug'));
758 });
759
760 if (plugins.length == 0) {
761 mainwp_extension_bulk_install_done();
762 return;
763 }
764
765 var data = mainwp_secure_data({
766 action: 'mainwp_extension_bulk_activate',
767 plugins: plugins
768 });
769
770 var statusEl = jQuery('#mainwp-bulk-activating-extensions-status');
771
772 statusEl.html('<i class="notched circle loading icon"></i>' + __('Activating extensions. Please wait...')).show();
773 jQuery.post(ajaxurl, data, function (response) {
774 statusEl.html('');
775 if (response == 'SUCCESS') {
776 statusEl.addClass('green');
777 statusEl.html(__('Extensions have been activated successfully!'));
778 statusEl.fadeOut(3000);
779 }
780 mainwp_extension_bulk_install_done();
781 });
782 }
783
784 mainwp_extension_bulk_install_done = function () {
785 bulkExtensionsRunning = false;
786
787 var statusEl = jQuery('#mainwp-bulk-activating-extensions-status');
788
789 statusEl.addClass('green');
790 statusEl.html(__("Installation completed successfully. Page will reload automatically in 3 seconds.")).show();
791 if (jQuery('.extension-installed-success').length == bulkExtensionsFinished) {
792 setTimeout(function () {
793 location.href = 'admin.php?page=Extensions';
794 }, 3000);
795 }
796 }
797
798
799 // Is this function still in use???
800 jQuery(document).on('click', '#mainwp-extensions-api-sslverify-certificate', function () {
801
802 var parent = jQuery(this).closest(".extension_api_sslverify_loading");
803 var statusEl = parent.find('span.status');
804 var loadingEl = parent.find("i");
805
806 var data = mainwp_secure_data({
807 action: 'mainwp_extension_apisslverifycertificate',
808 api_sslverify: jQuery("#mainwp_api_sslVerifyCertificate").val()
809 });
810
811 statusEl.hide();
812 loadingEl.show();
813 jQuery.post(ajaxurl, data, function (response) {
814 loadingEl.hide();
815 var undefError = false;
816 if (response) {
817 if (response.saved) {
818 statusEl.css('color', '#0074a2');
819 statusEl.html('MainWP Main API Key saved!').fadeIn();
820 setTimeout(function () {
821 statusEl.fadeOut();
822 }, 3000);
823 } else if (response.error) {
824 statusEl.css('color', 'red');
825 statusEl.html(response.error).fadeIn();
826 } else {
827 undefError = true;
828 }
829 } else {
830 undefError = true;
831 }
832
833 if (undefError) {
834 statusEl.css('color', 'red');
835 statusEl.html('<i class="exclamation circle icon"></i> Undefined error!').fadeIn();
836 }
837 }, 'json');
838 return false;
839 });
840
841 jQuery(document).ready(function ($) {
842 jQuery(document).on('click', '#mainwp-check-all-sync-ext', function () {
843 $('.sync-ext-row').find("input:checkbox").each(function () {
844 $(this).attr('checked', true);
845 });
846 });
847 jQuery(document).on('click', '#mainwp-uncheck-all-sync-ext', function () {
848 $('.sync-ext-row').find("input:checkbox").each(function () {
849 $(this).attr('checked', false);
850 });
851 });
852
853 jQuery(document).on('click', '.mainwp-show-extensions', function () {
854 $('a.mainwp-show-extensions').removeClass('mainwp_action_down');
855 $(this).addClass('mainwp_action_down');
856
857 var gr = $(this).attr('group');
858 var selectedEl = $('#mainwp-available-extensions-list .mainwp-availbale-extension-holder.group-' + gr);
859 var installedGroup = $('.installed-group-exts');
860 installedGroup.hide();
861
862 if (gr == 'all') {
863 $('#mainwp-available-extensions-list .mainwp-availbale-extension-holder').fadeIn(500);
864 } else {
865 $('#mainwp-available-extensions-list .mainwp-availbale-extension-holder').hide();
866 if (selectedEl.length > 0) {
867 selectedEl.fadeIn(500);
868 } else {
869 installedGroup.fadeIn(500);
870 }
871 }
872
873 return false;
874 });
875 });
876