| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- /*******************************************************************************
- * Copyright (c) 2019, Code Atlantic LLC
- ******************************************************************************/
- "use strict";
- (function ($) {
- /**
- * Batch Processor.
- *
- * @since 1.7.0
- */
- var batch = {
- form: {
- beforeSubmit: function ($form) {
- var $submit = $form.find('.pum-field-submit input[type="submit"]'),
- $messages = $form.find('.pum-upgrade-messages'),
- $progress = $form.find('.pum-batch-progress'),
- // Handle the Are You Sure (AYS) if present on the form element.
- ays = $form.data('ays');
- if (!$submit.hasClass('button-disabled')) {
- if (ays !== undefined && !confirm(ays)) {
- return false;
- }
- $progress.removeClass('pum-batch-progress--active');
- $progress.find('progress').prop('value', null);
- // Clear messages.
- $messages.html('');
- // Disable the button.
- $submit.addClass('button-disabled');
- // Add the spinner.
- $('<span class="spinner is-active"></span>').insertAfter($submit);
- return true;
- }
- return false;
- }
- },
- complete: function ($form) {
- var $alert = $form.parents('.pum-alert');
- $form.find('.pum-field-submit, progress').hide();
- $('p.pum-upgrade-notice').hide();
- $alert.removeClass('pum-alert__warning').addClass('pum-alert__success');
- $alert.prepend('<h2>' + pum_batch_vars.complete + '</h2>');
- },
- action: 'pum_process_batch_request',
- /**
- * Processes a single batch of data.
- *
- * @param {integer|number|string} step Step in the process.
- * @param {object} data Form data.
- */
- process_step: function (step, data) {
- var self = this;
- $.ajax({
- type: 'POST',
- url: ajaxurl,
- data: {
- batch_id: data.batch_id,
- action: self.action,
- nonce: data.nonce,
- form: data.form,
- step: parseInt(step),
- data: data
- },
- dataType: "json",
- success: function (response) {
- if (response.data.done || response.data.error) {
- var batchSelector = response.data.mapping ? '.pum-batch-import-form' : '.pum-batch-form',
- // We need to get the actual in progress form, not all forms on the page
- $batchForm = $(batchSelector),
- spinner = $batchForm.find('.spinner'),
- notice_wrap = $batchForm.find('.notice-wrap');
- $batchForm.find('.button-disabled').removeClass('button-disabled');
- if (response.data.error) {
- spinner.remove();
- notice_wrap.html('<div class="updated error"><p>' + response.data.error + '</p></div>');
- } else if (response.data.done) {
- spinner.remove();
- notice_wrap.html('<div id="pum-batch-success" class="updated notice"><p class="pum-batch-success">' + response.data.message + '</p></div>');
- if (response.data.url) {
- window.location = response.data.url;
- }
- } else {
- notice_wrap.remove();
- }
- } else {
- $('.pum-batch-progress div').animate({
- width: response.data.percentage + '%'
- }, 50);
- self.process_step(response.data.step, data);
- }
- }
- }).fail(function (response) {
- if (window.console && window.console.log) {
- console.log(response);
- }
- });
- }
- },
- batch_upgrades = $.extend(true, {}, batch, {
- action: 'pum_process_upgrade_request',
- /**
- * Processes a que of batch upgrades.
- *
- * @param {integer|number|string} step Step in the process.
- * @param {object} data Form data.
- */
- process_step: function (step, data) {
- var self = this;
- $.ajax({
- type: 'POST',
- url: ajaxurl,
- data: {
- upgrade_id: data.upgrade_id,
- action: self.action,
- nonce: data.nonce,
- form: data.form,
- step: parseInt(step),
- data: data
- },
- dataType: "json",
- success: function (response) {
- var $form = $('.pum-upgrade-form'), // We need to get the actual in progress form, not all forms on the page
- $spinner = $form.find('.spinner'),
- $submit = $form.find('.button-disabled'),
- $messages = $form.find('.pum-upgrade-messages');
- if (response.data.done || response.data.error) {
- // Reset submit button.
- $submit.removeClass('button-disabled');
- if (response.data.error) {
- $spinner.remove();
- $messages.prepend('<div class="notice notice-error notice-alt"><p>' + response.data.error + '</p></div>');
- } else if (response.data.done) {
- $messages.prepend('<div class="notice notice-success"><p><strong>' + response.data.message + '</strong></p></div>');
- if (response.data.next) {
- $form
- .data('upgrade_id', response.data.next)
- .data('step', 1)
- .data('ays', false);
- self.process_step(1, {
- upgrade_id: response.data.next,
- nonce: data.nonce,
- form: data.form
- });
- } else {
- $submit.parent().hide();
- $spinner.remove();
- batch.complete($form);
- }
- if (response.data.url) {
- window.location = response.data.url;
- }
- } else {
- if (response.data.message !== '') {
- $messages.prepend('<div class="notice"><p class="">' + response.data.message + '</p></div>');
- }
- }
- } else {
- if (response.data.message !== '') {
- $messages.prepend('<div class="notice"><p class="">' + response.data.message + '</p></div>');
- }
- $('.pum-batch-progress').addClass('pum-batch-progress--active');
- $('.pum-batch-progress progress.pum-task-progress').addClass('active').val(response.data.percentage);
- self.process_step(response.data.step, data);
- }
- }
- }).fail(function (response) {
- if (window.console && window.console.log) {
- console.log(response);
- }
- });
- }
- });
- // Import this module.
- window.PUM_Admin = window.PUM_Admin || {};
- window.PUM_Admin.batch = batch;
- window.PUM_Admin.batch_upgrades = batch_upgrades;
- /**
- * Handles form submission preceding batch processing.
- */
- $(document)
- .on('submit', '.pum-batch-form[data-batch_id]', function (event) {
- var $this = $(this),
- submitButton = $this.find('input[type="submit"]'),
- // Handle the Are You Sure (AYS) if present on the form element.
- ays = $this.data('ays'),
- data = {
- batch_id: $this.data('batch_id'),
- nonce: $this.data('nonce'),
- form: $this.serializeAssoc(),
- test: $this.pumSerializeObject()
- };
- event.preventDefault();
- if (!submitButton.hasClass('button-disabled')) {
- if (ays !== undefined && !confirm(ays)) {
- return;
- }
- // Remove existing notice & progress bars.
- $this.find('.notice-wrap').remove();
- // Add the progress bar.
- $this.append($('<div class="notice-wrap"><div class="pum-batch-progress"><div></div>'));
- // Disable the button.
- submitButton.addClass('button-disabled');
- // Add the spinner.
- submitButton.parent().append('<span class="spinner is-active"></span>');
- // Start the process.
- batch.process_step(1, data);
- }
- })
- .on('submit', '.pum-batch-form.pum-upgrade-form[data-upgrade_id]', function (event) {
- var $form = $(this),
- data = {
- upgrade_id: $form.data('upgrade_id'),
- nonce: $form.data('nonce'),
- form: $form.serializeAssoc(),
- test: $form.pumSerializeObject()
- };
- event.preventDefault();
- // Process presubmit actions like showing progress data and validating info.
- if (batch_upgrades.form.beforeSubmit($form)) {
- // Start the process.
- batch_upgrades.process_step($form.data('step') || 1, data);
- }
- });
- }(jQuery));
- // Initiate when ready.
- jQuery(function ($) {
- $.extend({
- arrayMerge: function () {
- var a = {};
- var n = 0;
- var argv = $.arrayMerge.arguments;
- for (var i = 0; i < argv.length; i++) {
- if (Array.isArray(argv[i])) {
- for (var j = 0; j < argv[i].length; j++) {
- a[n++] = argv[i][j];
- }
- a = $.makeArray(a);
- } else {
- for (var k in argv[i]) {
- if (argv[i].hasOwnProperty(k)) {
- if (isNaN(k)) {
- var v = argv[i][k];
- if (typeof v === 'object' && a[k]) {
- v = $.arrayMerge(a[k], v);
- }
- a[k] = v;
- } else {
- a[n++] = argv[i][k];
- }
- }
- }
- }
- }
- return a;
- },
- count: function (arr) {
- return Array.isArray(arr) ? arr.length : typeof arr === 'object' ? Object.keys(arr).length : false;
- }
- });
- $.fn.extend({
- serializeAssoc: function () {
- var o = {
- aa: {},
- add: function (name, value) {
- var tmp = name.match(/^(.*)\[([^\]]*)]$/),
- v = {};
- if (tmp) {
- if (tmp[2])
- v[tmp[2]] = value;
- else
- v[$.count(v)] = value;
- this.add(tmp[1], v);
- } else if (typeof value === 'object') {
- if (typeof this.aa[name] !== 'object') {
- this.aa[name] = {};
- }
- this.aa[name] = $.arrayMerge(this.aa[name], value);
- } else {
- this.aa[name] = value;
- }
- }
- };
- var a = $(this).serializeArray();
- for (var i = 0; i < a.length; i++) {
- o.add(a[i].name, a[i].value);
- }
- return o.aa;
- }
- });
- });
|