4050 lines
136 KiB
JavaScript
4050 lines
136 KiB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
|
var $ = jQuery;
|
|
var MigrationProgressModel = require( 'MigrationProgress-model' );
|
|
var MigrationProgressView = require( 'MigrationProgress-view' );
|
|
var $overlayOriginal = $( '<div id="overlay" class="hide"></div>' );
|
|
var $progressContentOriginal = $( '.progress-content' ).clone().addClass( 'hide' );
|
|
var $proVersion = $( '.pro-version' ).addClass( 'hide' );
|
|
|
|
$overlayOriginal.append( $proVersion );
|
|
|
|
var MigrationProgressController = {
|
|
migration: {
|
|
model: {},
|
|
view: {},
|
|
$progress: {},
|
|
$wrapper: {},
|
|
$overlay: {},
|
|
status: 'active',
|
|
title: '',
|
|
text: '',
|
|
timerCount: 0,
|
|
elapsedInterval: 0,
|
|
currentStageNum: 0,
|
|
counterDisplay: false,
|
|
originalTitle: document.title,
|
|
setTitle: function( title ) {
|
|
this.$progress.find( '.progress-title' ).html( title );
|
|
this.title = title;
|
|
},
|
|
setStatus: function( status ) {
|
|
this.$progress
|
|
.removeClass( this.status )
|
|
.addClass( ( 'error' === status ) ? 'wpmdb-error' : status );
|
|
|
|
// Possible statuses include: 'error', 'paused', 'complete', 'cancelling'
|
|
if ( 'error' === status ) {
|
|
this.$progress.find( '.progress-text' ).addClass( 'migration-error' );
|
|
}
|
|
|
|
this.status = status;
|
|
|
|
this.updateTitleElem();
|
|
},
|
|
setText: function( text ) {
|
|
if ( 'string' !== typeof text ) {
|
|
text = '';
|
|
}
|
|
|
|
if ( 0 >= text.indexOf( 'wpmdb_error' ) ) {
|
|
text = this.decodeErrorObject( text );
|
|
}
|
|
|
|
this.$progress.find( '.progress-text' ).html( text );
|
|
this.text = text;
|
|
},
|
|
setState: function( title, text, status ) {
|
|
if ( null !== title ) {
|
|
this.setTitle( title );
|
|
}
|
|
if ( null !== text ) {
|
|
this.setText( text );
|
|
}
|
|
if ( null !== status ) {
|
|
this.setStatus( status );
|
|
}
|
|
},
|
|
startTimer: function() {
|
|
this.timerCount = 0;
|
|
this.counterDisplay = $( '.timer' );
|
|
this.elapsedInterval = setInterval( this.incrementTimer, 1000 );
|
|
},
|
|
pauseTimer: function() {
|
|
clearInterval( this.elapsedInterval );
|
|
},
|
|
resumeTimer: function() {
|
|
this.elapsedInterval = setInterval( this.incrementTimer, 1000 );
|
|
},
|
|
incrementTimer: function() {
|
|
wpmdb.current_migration.timerCount = wpmdb.current_migration.timerCount + 1;
|
|
wpmdb.current_migration.displayCount();
|
|
},
|
|
displayCount: function() {
|
|
var hours = Math.floor( this.timerCount / 3600 ) % 24;
|
|
var minutes = Math.floor( this.timerCount / 60 ) % 60;
|
|
var seconds = this.timerCount % 60;
|
|
var display = this.pad( hours, 2, 0 ) + ':' + this.pad( minutes, 2, 0 ) + ':' + this.pad( seconds, 2, 0 );
|
|
this.counterDisplay.html( display );
|
|
},
|
|
updateTitleElem: function() {
|
|
var activeStage = this.model.get( 'activeStageName' );
|
|
var stageModel = this.model.getStageModel( activeStage );
|
|
var percentDone = Math.max( 0, stageModel.getTotalProgressPercent() );
|
|
var numStages = this.model.get( 'stages' ).length;
|
|
var currentStage = this.currentStageNum;
|
|
var currentStatus = this.status;
|
|
var progressText = wpmdb_strings.title_progress;
|
|
|
|
if ( 'complete' === stageModel.get( 'status' ) && 0 === stageModel.get( 'totalSize' ) ) {
|
|
percentDone = 100;
|
|
}
|
|
|
|
progressText = progressText.replace( '%1$s', percentDone + '%' );
|
|
progressText = progressText.replace( '%2$s', currentStage );
|
|
progressText = progressText.replace( '%3$s', numStages );
|
|
|
|
if ( 1 === numStages ) {
|
|
progressText = percentDone + '%';
|
|
}
|
|
|
|
if ( wpmdb_strings[ 'title_' + currentStatus ] ) {
|
|
progressText = wpmdb_strings[ 'title_' + currentStatus ];
|
|
}
|
|
|
|
progressText = progressText + ' - ' + this.originalTitle;
|
|
|
|
document.title = progressText;
|
|
},
|
|
restoreTitleElem: function() {
|
|
document.title = this.originalTitle;
|
|
},
|
|
pad: function( num, width, padChar ) {
|
|
padChar = padChar || '0';
|
|
num = num + '';
|
|
return num.length >= width ? num : new Array( width - num.length + 1 ).join( padChar ) + num;
|
|
},
|
|
|
|
// fixes error objects that have been mangled by html encoding
|
|
decodeErrorObject: function( input ) {
|
|
var inputDecoded = input
|
|
.replace( /\{"/g, '{#q!#' )
|
|
.replace( /\"}/g, '#q!#}' )
|
|
.replace( /,"/g, ',#q!#' )
|
|
.replace( /":/g, '#q!#:' )
|
|
.replace( /:"/g, ':#q!#' )
|
|
.replace( /"/g, '\\"' )
|
|
.replace( /#q!#/g, '"' )
|
|
.replace( />/g, '>' )
|
|
.replace( /</g, '<' );
|
|
try {
|
|
inputDecoded = JSON.parse( inputDecoded );
|
|
} catch ( e ) {
|
|
return input;
|
|
}
|
|
return ( 'object' === typeof inputDecoded && 'undefined' !== typeof inputDecoded.body ) ? inputDecoded : input;
|
|
},
|
|
fixProgressStageWidthForScrollBar: function() {
|
|
var scrollBarWidth = Math.abs( this.$wrapper[0].offsetWidth - this.$wrapper[0].clientWidth );
|
|
var visibleProgressItems = this.$wrapper.find( '.active .progress-items' );
|
|
var leftPad = parseInt( visibleProgressItems.css( 'padding-left' ), 10 );
|
|
var rightPad = parseInt( visibleProgressItems.css( 'padding-right' ), 10 );
|
|
|
|
if ( 0 !== scrollBarWidth || ( 0 === scrollBarWidth && rightPad !== leftPad ) ) {
|
|
visibleProgressItems.css( 'padding-right', leftPad - scrollBarWidth + 'px' );
|
|
}
|
|
}
|
|
},
|
|
newMigration: function( settings ) {
|
|
$( '#overlay' ).remove();
|
|
$( '.progress-content' ).remove();
|
|
this.migration.$overlay = $overlayOriginal.clone();
|
|
|
|
$( '#wpwrap' ).append( this.migration.$overlay );
|
|
|
|
this.migration.model = new MigrationProgressModel( settings );
|
|
this.migration.view = new MigrationProgressView( {
|
|
model: this.migration.model
|
|
} );
|
|
|
|
this.migration.$progress = $progressContentOriginal.clone();
|
|
this.migration.$wrapper = this.migration.view.$el;
|
|
this.migration.$progress.find( '.migration-progress-stages' ).replaceWith( this.migration.$wrapper );
|
|
|
|
this.migration.$proVersion = this.migration.$overlay.find( '.pro-version' );
|
|
var proVersionIFrame = this.migration.$proVersion.find( 'iframe' ).remove().clone();
|
|
|
|
this.migration.$overlay.prepend( this.migration.$progress );
|
|
|
|
// timeout needed so class is added after elements are appended to dom and transition runs.
|
|
var self = this;
|
|
setTimeout( function() {
|
|
self.migration.$overlay.add( self.migration.$progress ).add( self.migration.$proVersion ).removeClass( 'hide' ).addClass( 'show' );
|
|
if ( self.migration.$proVersion.length ) {
|
|
setTimeout( function() {
|
|
self.migration.$proVersion.find( '.iframe' ).append( proVersionIFrame );
|
|
}, 500 );
|
|
}
|
|
}, 0 );
|
|
|
|
this.migration.currentStageNum = 0;
|
|
|
|
this.migration.$proVersion.on( 'click', '.close-pro-version', function() {
|
|
self.migration.$proVersion.find( 'iframe' ).remove();
|
|
self.migration.$proVersion.addClass( 'hide remove' );
|
|
setTimeout( function() {
|
|
self.migration.$proVersion.remove();
|
|
}, 500 );
|
|
} );
|
|
|
|
this.migration.model.on( 'migrationComplete', function() {
|
|
self.utils.updateProgTableVisibilitySetting();
|
|
self.utils.updatePauseBeforeFinalizeSetting();
|
|
self.migration.pauseTimer();
|
|
} );
|
|
|
|
$( window ).on( 'resize', _.debounce( this.migration.fixProgressStageWidthForScrollBar.bind( this.migration ), 100 ) );
|
|
this.migration.model.on( 'change:activeStage', this.migration.fixProgressStageWidthForScrollBar.bind( this.migration ) );
|
|
|
|
return this.migration;
|
|
},
|
|
utils: require( 'MigrationProgress-utils' )
|
|
};
|
|
|
|
module.exports = MigrationProgressController;
|
|
|
|
},{"MigrationProgress-model":2,"MigrationProgress-utils":3,"MigrationProgress-view":4}],2:[function(require,module,exports){
|
|
var MigrationProgressStageModel = require( 'MigrationProgressStage-model' );
|
|
var $ = jQuery;
|
|
|
|
var MigrationProgressModel = Backbone.Model.extend( {
|
|
defaults: {
|
|
_initialStages: null,
|
|
stages: null,
|
|
activeStageName: null,
|
|
stageModels: null,
|
|
localTableRows: null,
|
|
localTableSizes: null,
|
|
remoteTableRows: null,
|
|
remoteTableSizes: null,
|
|
migrationStatus: 'active',
|
|
migrationIntent: 'savefile'
|
|
},
|
|
initialize: function() {
|
|
this.set( 'stageModels', {} );
|
|
this.set( '_initialStages', this.get( 'stages' ) );
|
|
this.set( 'stages', [] );
|
|
_.each( this.get( '_initialStages' ), function( stage, items, dataType ) {
|
|
this.addStage( stage.name, items, dataType );
|
|
}, this );
|
|
},
|
|
addStage: function( name, items, dataType, extend ) {
|
|
var itemsArr = [];
|
|
var stage;
|
|
|
|
_.each( items, function( item ) {
|
|
var size, rows;
|
|
|
|
if ( 'remote' === dataType ) {
|
|
size = this.get( 'remoteTableSizes' )[ item ];
|
|
rows = this.get( 'remoteTableRows' )[ item ];
|
|
} else {
|
|
size = this.get( 'localTableSizes' )[ item ];
|
|
rows = this.get( 'localTableRows' )[ item ];
|
|
}
|
|
|
|
itemsArr.push( {
|
|
name: item,
|
|
size: size,
|
|
rows: rows
|
|
} );
|
|
}, this );
|
|
|
|
stage = {
|
|
name: name,
|
|
items: itemsArr,
|
|
dataType: dataType
|
|
};
|
|
|
|
if ( 'object' === typeof extend ) {
|
|
stage = $.extend( stage, extend );
|
|
}
|
|
|
|
this.addStageModel( stage );
|
|
|
|
this.trigger( 'stage:added', this.get( 'stageModels' )[ name ] );
|
|
this.get( 'stageModels' )[ name ].on( 'change', function() {
|
|
this.trigger( 'change' );
|
|
}, this );
|
|
|
|
return this.getStageModel( stage.name );
|
|
},
|
|
addStageItem: function( stage, name, size, rows ) {
|
|
this.getStageModel( stage ).addItem( name, size, rows );
|
|
},
|
|
addStageModel: function( stage ) {
|
|
var stages = this.get( 'stages' );
|
|
var stageModels = this.get( 'stageModels' );
|
|
var newStageModel = new MigrationProgressStageModel( stage );
|
|
|
|
stages.push( stage );
|
|
stageModels[ stage.name ] = newStageModel;
|
|
|
|
this.set( 'stages', stages );
|
|
this.set( 'stageModels', stageModels );
|
|
},
|
|
getStageModel: function( name ) {
|
|
return this.get( 'stageModels' )[ name ];
|
|
},
|
|
getStageItems: function( stage, map ) {
|
|
var stageModel = this.getStageModel( stage );
|
|
var items = stageModel.get( 'items' );
|
|
|
|
if ( undefined === map ) {
|
|
return items;
|
|
} else {
|
|
return items.map( function( item ) {
|
|
return item[ map ];
|
|
} );
|
|
}
|
|
},
|
|
setActiveStage: function( stage ) {
|
|
this.setStageComplete();
|
|
this.set( 'activeStageName', stage );
|
|
this.getStageModel( stage ).set( 'status', 'active' );
|
|
this.trigger( 'change:activeStage' );
|
|
},
|
|
setStageComplete: function( stage ) {
|
|
if ( ! stage ) {
|
|
stage = this.get( 'activeStageName' );
|
|
}
|
|
if ( null !== stage ) {
|
|
this.getStageModel( stage ).set( 'status', 'complete' );
|
|
}
|
|
|
|
wpmdb.current_migration.currentStageNum = wpmdb.current_migration.currentStageNum + 1;
|
|
},
|
|
setMigrationComplete: function() {
|
|
var lastStage = this.getStageModel( this.get( 'activeStageName' ) );
|
|
this.setStageComplete();
|
|
this.trigger( 'migrationComplete' );
|
|
this.set( 'migrationStatus', 'complete' );
|
|
lastStage.activateTab();
|
|
}
|
|
} );
|
|
|
|
module.exports = MigrationProgressModel;
|
|
|
|
},{"MigrationProgressStage-model":5}],3:[function(require,module,exports){
|
|
var $ = jQuery;
|
|
|
|
module.exports = {
|
|
updateProgTableVisibilitySetting: function() {
|
|
if ( ! wpmdb_data.prog_tables_visibility_changed ) {
|
|
return;
|
|
}
|
|
wpmdb_data.prog_tables_visibility_changed = false;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_save_setting',
|
|
nonce: wpmdb_data.nonces.save_setting,
|
|
setting: 'prog_tables_hidden',
|
|
checked: Boolean( wpmdb_data.prog_tables_hidden )
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
console.log( 'Could not save progress item visibility setting', errorThrown );
|
|
}
|
|
} );
|
|
},
|
|
updatePauseBeforeFinalizeSetting: function() {
|
|
if ( ! wpmdb_data.pause_before_finalize_changed ) {
|
|
return;
|
|
}
|
|
wpmdb_data.pause_before_finalize_changed = false;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_save_setting',
|
|
nonce: wpmdb_data.nonces.save_setting,
|
|
setting: 'pause_before_finalize',
|
|
checked: Boolean( wpmdb_data.pause_before_finalize )
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
console.log( 'Could not save pause before finalize setting', errorThrown );
|
|
}
|
|
} );
|
|
}
|
|
};
|
|
|
|
},{}],4:[function(require,module,exports){
|
|
var MigrationProgressStageView = require( './MigrationProgressStage-view.js' );
|
|
var $ = jQuery;
|
|
|
|
var MigrationProgressView = Backbone.View.extend( {
|
|
tagName: 'div',
|
|
className: 'migration-progress-stages',
|
|
id: 'migration-progress-stages',
|
|
self: this,
|
|
initialize: function() {
|
|
this.$el.empty();
|
|
|
|
this.model.on( 'stage:added', function( stageModel ) {
|
|
this.addStageView( stageModel );
|
|
}, this );
|
|
|
|
_.each( this.model.get( 'stageModels' ), this.addStageView, this );
|
|
},
|
|
addStageView: function( stageModel ) {
|
|
var newStageSubView = new MigrationProgressStageView( {
|
|
model: stageModel
|
|
} );
|
|
stageModel.trigger( 'view:initialized', newStageSubView );
|
|
this.$el.append( newStageSubView.$el );
|
|
this.$el.parent().find( '.stage-tabs' ).append( newStageSubView.$tabElem );
|
|
}
|
|
} );
|
|
|
|
module.exports = MigrationProgressView;
|
|
|
|
},{"./MigrationProgressStage-view.js":6}],5:[function(require,module,exports){
|
|
var $ = jQuery;
|
|
|
|
var MigrationProgressStage = Backbone.Model.extend( {
|
|
defaults: {
|
|
status: 'queued',
|
|
_initialItems: null,
|
|
items: null,
|
|
lookupItems: null,
|
|
totalSize: 0,
|
|
totalTransferred: 0,
|
|
dataType: 'local',
|
|
name: '',
|
|
itemsComplete: 0,
|
|
itemsCompleteArr: [],
|
|
strings: null
|
|
},
|
|
initialize: function() {
|
|
this.initStrings();
|
|
|
|
this.set( '_initialItems', this.get( 'items' ).slice() );
|
|
this.set( 'items', [] );
|
|
this.set( 'lookupItems', {} );
|
|
this.set( 'itemsCompleteArr', [] );
|
|
|
|
_.each( this.get( '_initialItems' ), function( item ) {
|
|
this.addItem( item.name, item.size, item.rows );
|
|
}, this );
|
|
|
|
this.on( 'view:initialized', this.triggerItemViewInit );
|
|
|
|
this.on( 'change', function() {
|
|
wpmdb.current_migration.updateTitleElem();
|
|
} );
|
|
},
|
|
initStrings: function() {
|
|
var default_strings = {
|
|
stage_title: this.get( 'name' ),
|
|
migrated: wpmdb_strings.migrated,
|
|
queued: wpmdb_strings.queued,
|
|
active: wpmdb_strings.running,
|
|
complete: wpmdb_strings.complete,
|
|
hide: wpmdb_strings.hide,
|
|
show: wpmdb_strings.show,
|
|
itemsName: wpmdb_strings.tables
|
|
};
|
|
var strings = this.get( 'strings' );
|
|
|
|
strings = ( 'object' === typeof strings ) ? strings : {};
|
|
strings = $.extend( default_strings, strings );
|
|
|
|
strings.items_migrated = strings.itemsName + ' ' + strings.migrated;
|
|
strings.hide_items = strings.hide + ' ' + strings.itemsName;
|
|
strings.show_items = strings.show + ' ' + strings.itemsName;
|
|
|
|
this.set( 'strings', strings );
|
|
},
|
|
addItem: function( name, size, rows ) {
|
|
var items = this.get( 'items' );
|
|
var item = {
|
|
name: name,
|
|
size: size || 1,
|
|
rows: rows || size,
|
|
stageName: this.get( 'name' ),
|
|
$el: null,
|
|
transferred: 0,
|
|
rowsTransferred: 0,
|
|
complete: false
|
|
};
|
|
|
|
items.push( item );
|
|
this.get( 'lookupItems' )[ name ] = items.length - 1;
|
|
|
|
this.set( 'totalSize', parseInt( this.get( 'totalSize' ) ) + parseInt( size ) );
|
|
this.trigger( 'item:added', item );
|
|
},
|
|
triggerItemViewInit: function() {
|
|
var items = this.get( 'items' );
|
|
var self = this;
|
|
_.each( items, function( item ) {
|
|
self.trigger( 'item:added', item );
|
|
} );
|
|
},
|
|
getTotalSizeTransferred: function() {
|
|
return this.get( 'totalTransferred' );
|
|
},
|
|
countItemsComplete: function() {
|
|
return this.get( 'itemsComplete' );
|
|
},
|
|
getTotalProgressPercent: function() {
|
|
var transferred = this.getTotalSizeTransferred();
|
|
var total = this.get( 'totalSize' );
|
|
if ( 0 >= transferred || 0 >= total ) {
|
|
return 0;
|
|
}
|
|
return Math.min( 100, Math.floor( ( transferred / total ) * 100 ) );
|
|
},
|
|
activateTab: function() {
|
|
this.trigger( 'activateTab' );
|
|
wpmdb.current_migration.model.trigger( 'change:activeStage' );
|
|
},
|
|
setItemComplete: function( itemName ) {
|
|
|
|
// Guard: return if item has already been set complete
|
|
var itemsCompleteArr = this.get( 'itemsCompleteArr' );
|
|
if ( ~itemsCompleteArr.indexOf( itemName ) ) {
|
|
return;
|
|
}
|
|
itemsCompleteArr.push( itemName );
|
|
|
|
var item = this.getItemByName( itemName );
|
|
var totalTransferred = this.get( 'totalTransferred' );
|
|
var itemsComplete = this.get( 'itemsComplete' );
|
|
|
|
this.set( 'itemsComplete', ++itemsComplete );
|
|
|
|
totalTransferred += item.size - item.transferred;
|
|
this.set( 'totalTransferred', totalTransferred );
|
|
|
|
item.transferred = item.size;
|
|
item.complete = true;
|
|
item.rowsTransferred = item.rows;
|
|
this.trigger( 'change change:items', item );
|
|
},
|
|
setItemRowsTransferred: function( itemName, numRows ) {
|
|
var amtDone, estTransferred;
|
|
var item = this.getItemByName( itemName );
|
|
var totalTransferred = this.get( 'totalTransferred' );
|
|
|
|
if ( -1 === parseInt( numRows ) ) {
|
|
amtDone = 1;
|
|
} else {
|
|
amtDone = Math.min( 1, numRows / item.rows );
|
|
}
|
|
|
|
if ( 1 === amtDone ) {
|
|
this.setItemComplete( itemName );
|
|
return;
|
|
}
|
|
|
|
estTransferred = item.size * amtDone;
|
|
|
|
totalTransferred += estTransferred - item.transferred;
|
|
this.set( 'totalTransferred', totalTransferred );
|
|
|
|
item.transferred = estTransferred;
|
|
item.rowsTransferred = numRows;
|
|
this.trigger( 'change change:items', item );
|
|
},
|
|
getItemByName: function( itemName ) {
|
|
var item = this.get( 'items' )[ this.get( 'lookupItems' )[ itemName ] ] || {};
|
|
if ( itemName === item.name ) {
|
|
return item;
|
|
} else {
|
|
return this.determineItemByName( itemName );
|
|
}
|
|
},
|
|
determineItemByName: function( itemName ) {
|
|
var items = this.get( 'items' );
|
|
for ( var index = 0; index < items.length; index++ ) {
|
|
var item = items[ index ];
|
|
if ( itemName === item.name ) {
|
|
this.get( 'lookupItems' ).itemName = index;
|
|
return item;
|
|
}
|
|
}
|
|
}
|
|
} );
|
|
|
|
module.exports = MigrationProgressStage;
|
|
|
|
},{}],6:[function(require,module,exports){
|
|
var $ = jQuery;
|
|
|
|
var MigrationProgressStageView = Backbone.View.extend( {
|
|
tagName: 'div',
|
|
className: 'migration-progress-stage-container hide-tables',
|
|
$totalProgressElem: null,
|
|
$tabElem: null,
|
|
$showHideTablesElem: null,
|
|
$pauseBeforeFinalizeElem: null,
|
|
$pauseBeforeFinalizeCheckbox: null,
|
|
$itemsContainer: null,
|
|
itemViews: null,
|
|
maxDomNodes: 100,
|
|
visibleDomNodes: 0,
|
|
queuedElements: null,
|
|
$truncationNotice: null,
|
|
$truncationNoticeHiddenItems: null,
|
|
initialize: function() {
|
|
this.$el.empty();
|
|
this.$el.attr( 'data-stage', this.model.get( 'name' ) ).addClass( 'queued ' + this.model.get( 'name' ) );
|
|
|
|
this.queuedElements = [];
|
|
|
|
this.initTotalProgressElem();
|
|
wpmdb.current_migration.view.$el.parent().find( '.stage-tabs' ).after( this.$totalProgressElem );
|
|
|
|
this.$itemsContainer = $( '<div class=progress-items />' );
|
|
this.$el.append( this.$itemsContainer );
|
|
|
|
this.initTabElem();
|
|
|
|
this.model.on( 'item:added', this.maybeAddElementToView, this );
|
|
|
|
_.each( this.model.get( 'itemModels' ), this.maybeAddElementToView, this );
|
|
this.model.on( 'change', function() {
|
|
this.updateProgressElem();
|
|
this.updateStageTotals();
|
|
}, this );
|
|
|
|
this.model.on( 'change:status', function( e ) {
|
|
this.$el.removeClass( 'queued active' ).addClass( this.model.get( 'status' ) );
|
|
this.$totalProgressElem.removeClass( 'queued active' ).addClass( this.model.get( 'status' ) );
|
|
this.$tabElem.removeClass( 'queued active' ).addClass( this.model.get( 'status' ) )
|
|
.find( '.stage-status' ).text( this.model.get( 'strings' )[ this.model.get( 'status' ) ] );
|
|
}, this );
|
|
|
|
this.model.on( 'change:items', function( item ) {
|
|
if ( item.name ) {
|
|
this.setItemProgress( item );
|
|
}
|
|
}, this );
|
|
|
|
this.model.on( 'activateTab', function() {
|
|
if ( 'complete' === wpmdb.current_migration.model.get( 'migrationStatus' ) ) {
|
|
this.$totalProgressElem.addClass( 'active' ).siblings().removeClass( 'active' );
|
|
this.$tabElem.addClass( 'active' ).siblings().removeClass( 'active' );
|
|
this.$el.addClass( 'active' ).siblings().removeClass( 'active' );
|
|
}
|
|
}, this );
|
|
},
|
|
initTotalProgressElem: function() {
|
|
this.initShowHideTablesElem();
|
|
this.initPauseBeforeFinalizeElem();
|
|
|
|
this.$totalProgressElem = $( '<div class="stage-progress ' + this.model.get( 'name' ) + '" />' )
|
|
.append( '<span class=percent-complete>0</span>% ' + this.model.get( 'strings' ).complete + ' ' )
|
|
.append( '(<span class=size-complete>0 MB</span> / <span class=size-total>0 MB</span>) ' )
|
|
.append( '<span class=tables-complete>0</span> <span class=lowercase >of</span> <span class=tables-total>0</span> ' + this.model.get( 'strings' ).items_migrated )
|
|
.append( this.$showHideTablesElem )
|
|
.append( '<div class=progress-bar-wrapper><div class=progress-bar /></div>' );
|
|
|
|
this.updateStageTotals();
|
|
},
|
|
initShowHideTablesElem: function() {
|
|
this.$showHideTablesElem = $( '<a class=show-hide-tables/>' ).text( this.model.get( 'strings' ).show_items );
|
|
var self = this;
|
|
this.$showHideTablesElem.on( 'click show-hide-progress-tables', function() {
|
|
var progTablesHidden;
|
|
if ( self.$el.hasClass( 'hide-tables' ) ) { // show tables
|
|
progTablesHidden = false;
|
|
self.$el.add( self.$el.siblings() ).removeClass( 'hide-tables' );
|
|
self.$showHideTablesElem.text( self.model.get( 'strings' ).hide_items );
|
|
} else { // hide tables
|
|
progTablesHidden = true;
|
|
self.$el.add( self.$el.siblings() ).addClass( 'hide-tables' );
|
|
self.$showHideTablesElem.text( self.model.get( 'strings' ).show_items );
|
|
}
|
|
|
|
if ( Boolean( progTablesHidden ) !== Boolean( wpmdb_data.prog_tables_hidden ) ) {
|
|
wpmdb_data.prog_tables_visibility_changed = true;
|
|
wpmdb_data.prog_tables_hidden = progTablesHidden;
|
|
}
|
|
} );
|
|
|
|
// show progress tables on init if hidden is false
|
|
if ( ! wpmdb_data.prog_tables_hidden ) {
|
|
this.$showHideTablesElem.triggerHandler( 'show-hide-progress-tables' );
|
|
}
|
|
|
|
// make sure text reflects current state when showing
|
|
this.model.on( 'change:status activateTab', function() {
|
|
if ( wpmdb_data.prog_tables_hidden ) {
|
|
self.$showHideTablesElem.text( self.model.get( 'strings' ).show_items );
|
|
} else {
|
|
self.$showHideTablesElem.text( self.model.get( 'strings' ).hide_items );
|
|
}
|
|
} );
|
|
},
|
|
initPauseBeforeFinalizeElem: function() {
|
|
this.$pauseBeforeFinalizeElem = $( '.pause-before-finalize' );
|
|
this.$pauseBeforeFinalizeCheckbox = this.$pauseBeforeFinalizeElem.find( 'input[type=checkbox]' );
|
|
var self = this;
|
|
var isChecked = false;
|
|
var migrationIntent = wpmdb.current_migration.model.get( 'migrationIntent' );
|
|
|
|
// make sure checkbox is checked based on current state
|
|
if ( wpmdb_data.pause_before_finalize ) {
|
|
isChecked = true;
|
|
}
|
|
this.$pauseBeforeFinalizeCheckbox.prop( 'checked', isChecked );
|
|
|
|
// only display on certain migrations
|
|
if ( -1 !== $.inArray( migrationIntent, [ 'push', 'pull', 'find_replace' ] ) ) {
|
|
if ( 'find_replace' === migrationIntent ) {
|
|
$( '#pause-before-finalize-label' ).text( wpmdb_strings.pause_before_finalize_find_replace );
|
|
}
|
|
this.$pauseBeforeFinalizeElem.show();
|
|
} else {
|
|
this.$pauseBeforeFinalizeElem.hide();
|
|
}
|
|
|
|
// hide on media stage
|
|
wpmdb.current_migration.model.on( 'change:activeStage', function() {
|
|
if ( 'media' === wpmdb.current_migration.model.get( 'activeStageName' ) ) {
|
|
self.$pauseBeforeFinalizeElem.hide();
|
|
}
|
|
} );
|
|
|
|
this.$pauseBeforeFinalizeElem.on( 'click', function() {
|
|
var pauseBeforeFinalizeValue = Boolean( self.$pauseBeforeFinalizeCheckbox.is( ':checked' ) );
|
|
if ( pauseBeforeFinalizeValue !== Boolean( wpmdb_data.pause_before_finalize ) ) {
|
|
wpmdb_data.pause_before_finalize_changed = true;
|
|
wpmdb_data.pause_before_finalize = pauseBeforeFinalizeValue;
|
|
}
|
|
} );
|
|
},
|
|
initTabElem: function() {
|
|
var self = this;
|
|
this.$tabElem = $( '<a class=stage-tab>' )
|
|
.append( '<span class=stage-title>' + this.model.get( 'strings' ).stage_title + '</span> ' )
|
|
.append( '<span class=stage-status>' + this.model.get( 'strings' ).queued + '</span> ' )
|
|
.on( 'click', function() {
|
|
self.model.activateTab();
|
|
} );
|
|
},
|
|
updateProgressElem: function() {
|
|
var percentDone = Math.max( 0, this.model.getTotalProgressPercent() );
|
|
var sizeDone = wpmdb.functions.convertKBSizeToHRFixed( Math.min( this.model.getTotalSizeTransferred(), this.model.get( 'totalSize' ) ) );
|
|
var tablesDone = Math.min( this.model.countItemsComplete(), this.model.get( 'items' ).length );
|
|
|
|
if ( 'complete' === this.model.get( 'status' ) && 0 === this.model.get( 'totalSize' ) ) {
|
|
percentDone = 100;
|
|
this.$showHideTablesElem.fadeOut();
|
|
}
|
|
|
|
this.$totalProgressElem.find( '.percent-complete' ).text( percentDone );
|
|
this.$totalProgressElem.find( '.size-complete' ).text( sizeDone );
|
|
this.$totalProgressElem.find( '.tables-complete' ).text( wpmdb_add_commas( tablesDone ) );
|
|
this.$totalProgressElem.find( '.progress-bar-wrapper .progress-bar' ).css( { width: percentDone + '%' } );
|
|
},
|
|
updateStageTotals: function() {
|
|
var itemCount = this.model.get( 'items' ).length;
|
|
this.$totalProgressElem.find( '.tables-total' ).text( wpmdb_add_commas( itemCount ) );
|
|
this.$totalProgressElem.find( '.size-total' ).text( wpmdb.functions.convertKBSizeToHR( this.model.get( 'totalSize' ) ) );
|
|
},
|
|
initializeItemElement: function( item ) {
|
|
var $el = $( '<div class="item-progress" />' );
|
|
var $progress = $( '<div class="progress-bar"/>' ).css( 'width', '0%' );
|
|
var $title = $( '<p>' ).addClass( 'item-info' )
|
|
.append( $( '<span class="name" />' ).text( item.name ) )
|
|
.append( ' ' )
|
|
.append( $( '<span class="size" />' ).text( '(' + wpmdb.functions.convertKBSizeToHRFixed( item.size ) + ')' ) );
|
|
|
|
$el.append( $title );
|
|
$el.append( $progress );
|
|
$el.append( '<span class="dashicons dashicons-yes"/>' );
|
|
|
|
$el.attr( 'id', 'item-' + item.name );
|
|
$el.attr( 'data-stage', this.model.get( 'name' ) );
|
|
|
|
item.$el = $el;
|
|
item.$progress = $progress;
|
|
item.$title = $title;
|
|
|
|
return item;
|
|
},
|
|
maybeAddElementToView: function( item ) {
|
|
if ( this.visibleDomNodes < this.maxDomNodes ) {
|
|
++this.visibleDomNodes;
|
|
this.$itemsContainer.append( this.initializeItemElement( item ).$el );
|
|
} else {
|
|
this.queuedElements.push( item );
|
|
if ( ! this.$truncationNotice ) {
|
|
this.showTruncationNotice();
|
|
} else {
|
|
this.updateTruncationNotice();
|
|
}
|
|
}
|
|
},
|
|
showTruncationNotice: function() {
|
|
if ( this.$truncationNotice ) {
|
|
return;
|
|
}
|
|
this.$truncationNotice = $( '<div class="truncation-notice" >' + wpmdb_strings.progress_items_truncated_msg.replace( '%1$s', '<span class="hidden-items">' + wpmdb_add_commas( this.queuedElements.length ) + '</span>' ) + '</div>' );
|
|
this.$truncationNoticeHiddenItems = this.$truncationNotice.find( '.hidden-items' );
|
|
this.$itemsContainer.after( this.$truncationNotice );
|
|
},
|
|
updateTruncationNotice: function() {
|
|
this.$truncationNoticeHiddenItems.text( wpmdb_add_commas( this.queuedElements.length ) );
|
|
},
|
|
getNextElementForView: function( $el ) {
|
|
var queueItem;
|
|
if ( this.queuedElements.length ) {
|
|
if ( $el ) {
|
|
this.queuedElements.push( $el );
|
|
}
|
|
queueItem = this.queuedElements.shift();
|
|
if ( queueItem instanceof $ ) {
|
|
$el = queueItem;
|
|
} else {
|
|
$el = this.initializeItemElement( queueItem ).$el;
|
|
}
|
|
}
|
|
return $el;
|
|
},
|
|
setItemProgress: function( item ) {
|
|
var percentDone = Math.min( 100, Math.ceil( 100 * ( item.transferred / item.size ) ) );
|
|
item.$progress.css( 'width', percentDone + '%' );
|
|
if ( 100 <= percentDone ) {
|
|
this.elemComplete( item );
|
|
}
|
|
},
|
|
elemComplete: function( item ) {
|
|
var $el = item.$el.addClass( 'complete' );
|
|
|
|
// skip moving item to end of list if there's only one item in the list
|
|
if ( 1 === this.model.get( 'items' ).length ) {
|
|
return;
|
|
}
|
|
|
|
var $nextEl = this.getNextElementForView( $el );
|
|
|
|
var height = $el.height();
|
|
var marginBottom = $el.css( 'margin-bottom' );
|
|
|
|
var $clone = $nextEl.clone().css( { height: 0, marginBottom: 0 } ).addClass( 'clone' );
|
|
$clone.appendTo( this.$itemsContainer );
|
|
$el.css( { height: height, marginBottom: marginBottom } );
|
|
|
|
setTimeout( function() {
|
|
$el.css( { height: 0, marginBottom: 0 } );
|
|
$clone.css( { height: height, marginBottom: marginBottom } );
|
|
|
|
setTimeout( function() {
|
|
$el.css( { height: 'auto', marginBottom: marginBottom } ).remove();
|
|
$clone.remove();
|
|
this.$itemsContainer.find( '.item-progress:not(.clone)' ).last().after( $nextEl.css( { height: 'auto', marginBottom: marginBottom } ) );
|
|
}.bind( this ), 250 );
|
|
|
|
}.bind( this ), 1000 );
|
|
|
|
}
|
|
} );
|
|
|
|
module.exports = MigrationProgressStageView;
|
|
|
|
},{}],7:[function(require,module,exports){
|
|
(function( $, wpmdb ) {
|
|
|
|
var connection_established = false;
|
|
var last_replace_switch = '';
|
|
var doing_ajax = false;
|
|
var doing_licence_registration_ajax = false;
|
|
var doing_reset_api_key_ajax = false;
|
|
var doing_save_profile = false;
|
|
var doing_plugin_compatibility_ajax = false;
|
|
var profile_name_edited = false;
|
|
var checked_licence = false;
|
|
var show_prefix_notice = false;
|
|
var show_ssl_notice = false;
|
|
var force_reconnect = false;
|
|
var migration_selection = '';
|
|
var show_version_notice = false;
|
|
var migration_completed = false;
|
|
var currently_migrating = false;
|
|
var dump_filename = '';
|
|
var dump_path = '';
|
|
var migration_intent;
|
|
var remote_site;
|
|
var secret_key;
|
|
var form_data;
|
|
var stage;
|
|
var elapsed_interval;
|
|
var completed_msg;
|
|
var tables_to_migrate = '';
|
|
var migration_paused = false;
|
|
var previous_progress_title = '';
|
|
var previous_progress_text_primary = '';
|
|
var previous_progress_text_secondary = '';
|
|
var cancelling_text = '';
|
|
var paused_text = '';
|
|
var migration_cancelled = false;
|
|
var flag_skip_delay = false;
|
|
var delay_between_requests = 0;
|
|
var fade_duration = 400;
|
|
var pause_before_finalize = false;
|
|
var is_auto_pause_before_finalize = false;
|
|
|
|
wpmdb.migration_progress_controller = require( 'MigrationProgress-controller' );
|
|
wpmdb.current_migration = null;
|
|
wpmdb.migration_selection = wpmdb_migration_type();
|
|
|
|
var admin_url = ajaxurl.replace( '/admin-ajax.php', '' ), spinner_url = admin_url + '/images/spinner';
|
|
|
|
if ( 2 < window.devicePixelRatio ) {
|
|
spinner_url += '-2x';
|
|
}
|
|
spinner_url += '.gif';
|
|
var ajax_spinner = '<img src="' + spinner_url + '" alt="" class="ajax-spinner general-spinner" />';
|
|
|
|
window.onbeforeunload = function( e ) {
|
|
if ( currently_migrating ) {
|
|
e = e || window.event;
|
|
|
|
// For IE and Firefox prior to version 4
|
|
if ( e ) {
|
|
e.returnValue = wpmdb_strings.sure;
|
|
}
|
|
|
|
// For Safari
|
|
return wpmdb_strings.sure;
|
|
}
|
|
};
|
|
|
|
function pad( n, width, z ) {
|
|
z = z || '0';
|
|
n = n + '';
|
|
return n.length >= width ? n : new Array( width - n.length + 1 ).join( z ) + n;
|
|
}
|
|
|
|
function is_int( n ) {
|
|
n = parseInt( n );
|
|
return 'number' === typeof n && 0 === n % 1;
|
|
}
|
|
|
|
function get_intersect( arr1, arr2 ) {
|
|
var r = [], o = {}, l = arr2.length, i, v;
|
|
for ( i = 0; i < l; i++ ) {
|
|
o[ arr2[ i ] ] = true;
|
|
}
|
|
l = arr1.length;
|
|
for ( i = 0; i < l; i++ ) {
|
|
v = arr1[ i ];
|
|
if ( v in o ) {
|
|
r.push( v );
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function get_query_var( name ) {
|
|
name = name.replace( /[\[]/, '\\[' ).replace( /[\]]/, '\\]' );
|
|
var regex = new RegExp( '[\\?&]' + name + '=([^&#]*)' ),
|
|
results = regex.exec( location.search );
|
|
return null === results ? '' : decodeURIComponent( results[ 1 ].replace( /\+/g, ' ' ) );
|
|
}
|
|
|
|
function maybe_show_ssl_warning( url, key, remote_scheme ) {
|
|
var scheme = url.substr( 0, url.indexOf( ':' ) );
|
|
if ( remote_scheme !== scheme && url.indexOf( 'https' ) !== -1 ) {
|
|
$( '.ssl-notice' ).show();
|
|
show_ssl_notice = true;
|
|
url = url.replace( 'https', 'http' );
|
|
$( '.pull-push-connection-info' ).val( url + '\n' + key );
|
|
return;
|
|
}
|
|
show_ssl_notice = false;
|
|
return;
|
|
}
|
|
|
|
function maybe_show_prefix_notice( prefix ) {
|
|
if ( prefix !== wpmdb_data.this_prefix ) {
|
|
$( '.remote-prefix' ).html( prefix );
|
|
show_prefix_notice = true;
|
|
if ( 'pull' === wpmdb_migration_type() ) {
|
|
$( '.prefix-notice.pull' ).show();
|
|
} else {
|
|
$( '.prefix-notice.push' ).show();
|
|
}
|
|
}
|
|
}
|
|
|
|
function maybe_show_mixed_cased_table_name_warning() {
|
|
if ( 'undefined' === typeof wpmdb.common.connection_data || false === wpmdb.common.connection_data ) {
|
|
return;
|
|
}
|
|
|
|
var migration_intent = wpmdb_migration_type();
|
|
var tables_to_migrate = get_tables_to_migrate( null, null );
|
|
|
|
$( '.mixed-case-table-name-notice' ).hide();
|
|
|
|
if ( null === tables_to_migrate ) {
|
|
return;
|
|
}
|
|
|
|
tables_to_migrate = tables_to_migrate.join( '' );
|
|
|
|
// The table names are all lowercase, no need to display the warning.
|
|
if ( tables_to_migrate === tables_to_migrate.toLowerCase() ) {
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* Do not display the warning if the remote lower_case_table_names does not equal "1" (i.e the only problematic setting)
|
|
* Applies to push/export migrations.
|
|
*/
|
|
if ( '1' !== wpmdb.common.connection_data.lower_case_table_names && ( 'push' === migration_intent || 'savefile' === migration_intent ) ) {
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* Do not display the warning if the local lower_case_table_names does not equal "1" (i.e the only problematic setting)
|
|
* Only applies to pull migrations.
|
|
*/
|
|
if ( '1' !== wpmdb_data.lower_case_table_names && 'pull' === migration_intent ) {
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* At this stage we've determined:
|
|
* 1. The source database contains at least one table that contains an uppercase character.
|
|
* 2. The destination environment has lower_case_table_names set to 1.
|
|
* 3. The source database table containing the uppercase letter will be converted to lowercase during the migration.
|
|
*/
|
|
|
|
if ( 'push' === migration_intent || 'savefile' === migration_intent ) {
|
|
$( '.mixed-case-table-name-notice.push' ).show();
|
|
} else {
|
|
$( '.mixed-case-table-name-notice.pull' ).show();
|
|
}
|
|
}
|
|
|
|
function get_domain_name( url ) {
|
|
var temp_url = url;
|
|
var domain = temp_url.replace( /\/\/(.*)@/, '//' ).replace( 'http://', '' ).replace( 'https://', '' ).replace( 'www.', '' );
|
|
return domain;
|
|
}
|
|
|
|
function update_domain_placeholder( label, url, stage ) {
|
|
var domain = get_domain_name( url );
|
|
|
|
if ( 'completed' === stage ) {
|
|
return label.replace( /\%s\s?/, '<span class=domain-label>' + domain + '</span> ' );
|
|
}
|
|
|
|
return label.replace( /\%s(\S*)\s?/, '<span class=domain-label>' + domain + '$1</span> ' );
|
|
}
|
|
|
|
function get_migration_status_label( url, intent, stage ) {
|
|
var migrating_stage_label = '';
|
|
var completed_stage_label = '';
|
|
|
|
switch ( intent ) {
|
|
case 'push':
|
|
migrating_stage_label = wpmdb_strings.push_migration_label_migrating;
|
|
completed_stage_label = wpmdb_strings.push_migration_label_completed;
|
|
break;
|
|
case 'pull':
|
|
migrating_stage_label = wpmdb_strings.pull_migration_label_migrating;
|
|
completed_stage_label = wpmdb_strings.pull_migration_label_completed;
|
|
break;
|
|
case 'find_replace':
|
|
migrating_stage_label = wpmdb_strings.find_replace_label_migrating;
|
|
completed_stage_label = wpmdb_strings.find_replace_label_completed;
|
|
break;
|
|
case 'savefile':
|
|
migrating_stage_label = wpmdb_strings.exporting_please_wait;
|
|
completed_stage_label = wpmdb_strings.exporting_complete;
|
|
break;
|
|
}
|
|
|
|
var label = migrating_stage_label;
|
|
|
|
if ( 'completed' === stage ) {
|
|
label = completed_stage_label;
|
|
}
|
|
|
|
if ( 'push' === intent || 'pull' === intent ) {
|
|
label = update_domain_placeholder( label, url, stage );
|
|
}
|
|
|
|
return label;
|
|
}
|
|
|
|
function remove_protocol( url ) {
|
|
return url.replace( /^https?:/i, '' );
|
|
}
|
|
|
|
function disable_export_type_controls() {
|
|
$( '.option-group' ).each( function( index ) {
|
|
$( 'input', this ).attr( 'disabled', 'disabled' );
|
|
$( 'label', this ).css( 'cursor', 'default' );
|
|
} );
|
|
}
|
|
|
|
function enable_export_type_controls() {
|
|
$( '.option-group' ).each( function( index ) {
|
|
$( 'input', this ).removeAttr( 'disabled' );
|
|
$( 'label', this ).css( 'cursor', 'pointer' );
|
|
} );
|
|
}
|
|
|
|
function set_slider_value( parent_selector, value, unit, display ) {
|
|
var display_value = value;
|
|
|
|
if ( undefined !== display ) {
|
|
display_value = display;
|
|
}
|
|
|
|
$( '.slider', parent_selector ).slider( 'value', parseInt( value ) );
|
|
$( '.amount', parent_selector ).html( wpmdb_add_commas( display_value ) + ' ' + unit );
|
|
}
|
|
|
|
function set_pause_resume_button( event ) {
|
|
if ( true === migration_paused ) {
|
|
migration_paused = false;
|
|
doing_ajax = true;
|
|
|
|
wpmdb.current_migration.setState( previous_progress_title, previous_progress_text_primary, 'active' );
|
|
$( '.pause-resume' ).html( wpmdb_strings.pause );
|
|
|
|
// Resume the timer
|
|
wpmdb.current_migration.resumeTimer();
|
|
|
|
wpmdb.functions.execute_next_step();
|
|
} else {
|
|
migration_paused = true;
|
|
doing_ajax = false;
|
|
paused_text = wpmdb_strings.migration_paused;
|
|
previous_progress_title = $( '.progress-title' ).html();
|
|
previous_progress_text_primary = $( '.progress-text', '.progress-wrapper-primary' ).html();
|
|
previous_progress_text_secondary = $( '.progress-text', '.progress-wrapper-secondary ' ).html();
|
|
|
|
if ( 'find_replace' === migration_intent ) {
|
|
paused_text = wpmdb_strings.find_replace_paused;
|
|
}
|
|
|
|
wpmdb.current_migration.setState( paused_text, wpmdb_strings.completing_current_request, null );
|
|
$( 'body' ).off( 'click', '.pause-resume' ); // Is re-bound at execute_next_step when migration is finally paused
|
|
$( 'body' ).off( 'click', '.cancel' ); // Is re-bound at execute_next_step when migration is finally paused
|
|
}
|
|
}
|
|
|
|
function create_table_select( tables, table_sizes_hr, selected_tables ) {
|
|
var $table_select = document.createElement( 'select' );
|
|
$( $table_select ).attr( {
|
|
multiple: 'multiple',
|
|
name: 'select_tables[]',
|
|
id: 'select-tables',
|
|
class: 'multiselect'
|
|
} );
|
|
|
|
if ( 0 < tables.length ) {
|
|
$.each( tables, function( index, table ) {
|
|
if ( $.wpmdb.apply_filters( 'wpmdb_exclude_table', false, table ) ) {
|
|
return;
|
|
}
|
|
|
|
var selected = ' ';
|
|
if ( undefined !== selected_tables && null !== selected_tables && 0 < selected_tables.length && -1 !== $.inArray( table, selected_tables ) ) {
|
|
selected = ' selected="selected" ';
|
|
}
|
|
$( $table_select ).append( '<option' + selected + 'value="' + table + '">' + table + ' (' + table_sizes_hr[ table ] + ')</option>' );
|
|
} );
|
|
}
|
|
|
|
return $table_select;
|
|
}
|
|
|
|
/**
|
|
* Filter temporary tables out of create_table_select().
|
|
*
|
|
* @param exclude
|
|
* @param table_name
|
|
* @returns {bool}
|
|
*/
|
|
function filter_temp_tables( exclude, table_name ) {
|
|
var temp_prefix = wpmdb_data.this_temp_prefix;
|
|
|
|
if ( 'pull' === wpmdb_migration_type() && 'undefined' !== typeof wpmdb.common.connection_data && 'undefined' !== typeof wpmdb.common.connection_data.temp_prefix ) {
|
|
temp_prefix = wpmdb.common.connection_data.temp_prefix;
|
|
}
|
|
|
|
if ( temp_prefix === table_name.substring( 0, temp_prefix.length ) ) {
|
|
return true;
|
|
}
|
|
|
|
return exclude;
|
|
}
|
|
$.wpmdb.add_filter( 'wpmdb_exclude_table', filter_temp_tables );
|
|
|
|
/**
|
|
* Returns tables selected for migration.
|
|
*
|
|
* @param value
|
|
* @param args
|
|
* @returns {string}
|
|
*
|
|
* Also handler for wpmdb_get_tables_to_migrate filter, disregards input values as it is the primary source.
|
|
*/
|
|
function get_tables_to_migrate( value, args ) {
|
|
var tables = '';
|
|
var mig_type = wpmdb_migration_type();
|
|
var table_intent = $( 'input[name=table_migrate_option]:checked' ).val();
|
|
|
|
// Grab tables as per what the user has selected from the multiselect box or all prefixed tables.
|
|
if ( 'migrate_select' === table_intent ) {
|
|
tables = $( '#select-tables' ).val();
|
|
} else {
|
|
if ( 'pull' !== mig_type && 'undefined' !== typeof wpmdb_data.this_prefixed_tables ) {
|
|
tables = wpmdb_data.this_prefixed_tables;
|
|
}
|
|
if ( 'pull' === mig_type && 'undefined' !== typeof wpmdb.common.connection_data && 'undefined' !== typeof wpmdb.common.connection_data.prefixed_tables ) {
|
|
tables = wpmdb.common.connection_data.prefixed_tables;
|
|
}
|
|
}
|
|
|
|
return tables;
|
|
}
|
|
|
|
function get_table_prefix( value, args ) {
|
|
return $( '.table-select-wrap .table-prefix' ).text();
|
|
}
|
|
|
|
function lock_replace_url( lock ) {
|
|
if ( true === lock ) {
|
|
$( '.replace-row.pin .replace-right-col input[type="text"]' ).attr( 'readonly', 'readonly' );
|
|
$( '.replace-row.pin .arrow-col' ).addClass( 'disabled' );
|
|
} else {
|
|
$( '.replace-row.pin .replace-right-col input[type="text"]' ).removeAttr( 'readonly' );
|
|
$( '.replace-row.pin .arrow-col' ).removeClass( 'disabled' );
|
|
}
|
|
}
|
|
|
|
function set_connection_data( data ) {
|
|
wpmdb.common.previous_connection_data = wpmdb.common.connection_data;
|
|
wpmdb.common.connection_data = data;
|
|
$.wpmdb.do_action( 'wpmdb_connection_data_updated', data );
|
|
}
|
|
|
|
/**
|
|
* Returns formatted info for the Max Request Size slider.
|
|
*
|
|
* @param value
|
|
* @return object
|
|
*/
|
|
function get_max_request_display_info( value ) {
|
|
var display_info = {};
|
|
|
|
display_info.unit = 'MB';
|
|
display_info.amount = ( value / 1024 ).toFixed( 2 );
|
|
|
|
return display_info;
|
|
}
|
|
|
|
$( document ).ready( function() {
|
|
wpmdb.migration_state_id = '';
|
|
|
|
$( '#plugin-compatibility' ).change( function( e ) {
|
|
var install = '1';
|
|
var $status = $( this ).closest( 'td' ).next( 'td' ).find( '.setting-status' );
|
|
|
|
if ( $( this ).is( ':checked' ) ) {
|
|
var answer = confirm( wpmdb_strings.mu_plugin_confirmation );
|
|
|
|
if ( ! answer ) {
|
|
$( this ).prop( 'checked', false );
|
|
return;
|
|
}
|
|
} else {
|
|
install = '0';
|
|
}
|
|
|
|
$( '.plugin-compatibility-wrap' ).toggle();
|
|
|
|
$status.find( '.ajax-success-msg' ).remove();
|
|
$status.append( ajax_spinner );
|
|
$( '#plugin-compatibility' ).attr( 'disabled', 'disabled' );
|
|
$( '.plugin-compatibility' ).addClass( 'disabled' );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_plugin_compatibility',
|
|
install: install,
|
|
nonce: wpmdb_data.nonces.plugin_compatibility
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.plugin_compatibility_settings_problem + '\r\n\r\n' + wpmdb_strings.status + ' ' + jqXHR.status + ' ' + jqXHR.statusText + '\r\n\r\n' + wpmdb_strings.response + '\r\n' + jqXHR.responseText );
|
|
$( '.ajax-spinner' ).remove();
|
|
$( '#plugin-compatibility' ).removeAttr( 'disabled' );
|
|
$( '.plugin-compatibility' ).removeClass( 'disabled' );
|
|
},
|
|
success: function( data ) {
|
|
if ( '' !== $.trim( data ) ) {
|
|
alert( data );
|
|
} else {
|
|
$status.append( '<span class="ajax-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.ajax-success-msg' ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
}
|
|
$( '.ajax-spinner' ).remove();
|
|
$( '#plugin-compatibility' ).removeAttr( 'disabled' );
|
|
$( '.plugin-compatibility' ).removeClass( 'disabled' );
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
if ( $( '#plugin-compatibility' ).is( ':checked' ) ) {
|
|
$( '.plugin-compatibility-wrap' ).show();
|
|
}
|
|
|
|
if ( 0 <= navigator.userAgent.indexOf( 'MSIE' ) || 0 <= navigator.userAgent.indexOf( 'Trident' ) ) {
|
|
$( '.ie-warning' ).show();
|
|
}
|
|
|
|
if ( 0 === wpmdb_data.valid_licence ) {
|
|
$( '#savefile' ).prop( 'checked', true );
|
|
}
|
|
var max_request_size_container = $( '.max-request-size' );
|
|
var max_request_size_slider = $( '.slider', max_request_size_container );
|
|
max_request_size_slider.slider( {
|
|
range: 'min',
|
|
value: parseInt( wpmdb_data.max_request / 1024 ),
|
|
min: 512,
|
|
max: parseInt( wpmdb_data.bottleneck / 1024 ),
|
|
step: 256,
|
|
create: function( event, ui ) {
|
|
var display_info = get_max_request_display_info( wpmdb_data.max_request / 1024 );
|
|
set_slider_value( max_request_size_container, wpmdb_data.max_request / 1024, display_info.unit, display_info.amount );
|
|
},
|
|
slide: function( event, ui ) {
|
|
var display_info = get_max_request_display_info( ui.value );
|
|
set_slider_value( max_request_size_container, ui.value, display_info.unit, display_info.amount );
|
|
},
|
|
stop: function( event, ui ) {
|
|
$( '.slider-success-msg' ).remove();
|
|
$( '.amount', max_request_size_container ).after( '<img src="' + spinner_url + '" alt="" class="slider-spinner general-spinner" />' );
|
|
max_request_size_slider.slider( 'disable' );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_update_max_request_size',
|
|
max_request_size: parseInt( ui.value ),
|
|
nonce: wpmdb_data.nonces.update_max_request_size
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
max_request_size_slider.slider( 'enable' );
|
|
$( '.slider-spinner', max_request_size_container ).remove();
|
|
alert( wpmdb_strings.max_request_size_problem );
|
|
var display_info = get_max_request_display_info( wpmdb_data.max_request / 1024 );
|
|
set_slider_value( max_request_size_container, wpmdb_data.max_request / 1024, display_info.unit, display_info.amount );
|
|
max_request_size_slider.slider( 'enable' );
|
|
},
|
|
success: function() {
|
|
max_request_size_slider.slider( 'enable' );
|
|
$( '.slider-label-wrapper', max_request_size_container ).append( '<span class="slider-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.slider-success-msg', max_request_size_container ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
$( '.slider-spinner', max_request_size_container ).remove();
|
|
}
|
|
} );
|
|
}
|
|
} );
|
|
|
|
var delay_between_requests_container = $( '.delay-between-requests' );
|
|
var delay_between_requests_slider = $( '.slider', delay_between_requests_container );
|
|
delay_between_requests_slider.slider( {
|
|
range: 'min',
|
|
value: parseInt( wpmdb_data.delay_between_requests / 1000 ),
|
|
min: 0,
|
|
max: 10,
|
|
step: 1,
|
|
create: function( event, ui ) {
|
|
set_slider_value( delay_between_requests_container, wpmdb_data.delay_between_requests / 1000, 's' );
|
|
},
|
|
slide: function( event, ui ) {
|
|
set_slider_value( delay_between_requests_container, ui.value, 's' );
|
|
},
|
|
stop: function( event, ui ) {
|
|
$( '.slider-success-msg' ).remove();
|
|
$( '.amount', delay_between_requests_container ).after( '<img src="' + spinner_url + '" alt="" class="slider-spinner general-spinner" />' );
|
|
delay_between_requests_slider.slider( 'disable' );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_update_delay_between_requests',
|
|
delay_between_requests: parseInt( ui.value * 1000 ),
|
|
nonce: wpmdb_data.nonces.update_delay_between_requests
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
delay_between_requests_slider.slider( 'enable' );
|
|
$( '.slider-spinner', delay_between_requests_container ).remove();
|
|
alert( wpmdb_strings.delay_between_requests_problem );
|
|
set_slider_value( delay_between_requests_container, wpmdb_data.delay_between_requests / 1000, 's' );
|
|
delay_between_requests_slider.slider( 'enable' );
|
|
},
|
|
success: function() {
|
|
wpmdb_data.delay_between_requests = parseInt( ui.value * 1000 );
|
|
delay_between_requests_slider.slider( 'enable' );
|
|
$( '.slider-label-wrapper', delay_between_requests_container ).append( '<span class="slider-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.slider-success-msg', delay_between_requests_container ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
$( '.slider-spinner', delay_between_requests_container ).remove();
|
|
}
|
|
} );
|
|
}
|
|
} );
|
|
|
|
var $push_select = $( '#select-tables' ).clone();
|
|
var $pull_select = $( '#select-tables' ).clone();
|
|
var $push_post_type_select = $( '#select-post-types' ).clone();
|
|
var $pull_post_type_select = $( '#select-post-types' ).clone();
|
|
var $push_select_backup = $( '#select-backup' ).clone();
|
|
var $pull_select_backup = $( '#select-backup' ).clone();
|
|
|
|
$( '.help-tab .video' ).each( function() {
|
|
var $container = $( this ),
|
|
$viewer = $( '.video-viewer' );
|
|
|
|
$( 'a', this ).click( function( e ) {
|
|
e.preventDefault();
|
|
|
|
$viewer.attr( 'src', '//www.youtube.com/embed/' + $container.data( 'video-id' ) + '?autoplay=1' );
|
|
$viewer.show();
|
|
var offset = $viewer.offset();
|
|
$( window ).scrollTop( offset.top - 50 );
|
|
} );
|
|
} );
|
|
|
|
$( '.backup-options' ).show();
|
|
$( '.keep-active-plugins' ).show();
|
|
if ( 'savefile' === wpmdb_migration_type() ) {
|
|
$( '.backup-options' ).hide();
|
|
$( '.keep-active-plugins' ).hide();
|
|
}
|
|
|
|
last_replace_switch = wpmdb_migration_type();
|
|
|
|
function check_licence( licence ) {
|
|
var update_licence_content = ! doing_licence_registration_ajax;
|
|
checked_licence = true;
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_check_licence',
|
|
licence: licence,
|
|
context: 'all',
|
|
nonce: wpmdb_data.nonces.check_licence
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.license_check_problem );
|
|
},
|
|
success: function( data ) {
|
|
|
|
var $support_content = $( '.support-content' );
|
|
var $addons_content = $( '.addons-content' );
|
|
var $licence_content = $( '.licence-status:not(.notification-message)' );
|
|
var licence_msg, support_msg, addons_msg;
|
|
|
|
if ( 'undefined' !== typeof data.dbrains_api_down ) {
|
|
support_msg = data.dbrains_api_down + data.message;
|
|
addons_msg = data.dbrains_api_down;
|
|
} else if ( 'undefined' !== typeof data.errors ) {
|
|
|
|
if ( 'undefined' !== typeof data.errors.subscription_expired ) {
|
|
licence_msg = data.errors.subscription_expired.licence;
|
|
support_msg = data.errors.subscription_expired.support;
|
|
addons_msg = data.errors.subscription_expired.addons;
|
|
} else {
|
|
var msg = '';
|
|
for ( var key in data.errors ) {
|
|
msg += data.errors[ key ];
|
|
}
|
|
support_msg = msg;
|
|
addons_msg = msg;
|
|
}
|
|
if ( 'undefined' !== typeof data.addon_content ) {
|
|
addons_msg += '\n' + data.addon_content;
|
|
}
|
|
} else {
|
|
support_msg = data.message;
|
|
addons_msg = data.addon_content;
|
|
}
|
|
|
|
if ( update_licence_content ) {
|
|
$licence_content.stop().fadeOut( fade_duration, function() {
|
|
if ( 'undefined' === typeof licence_msg ) {
|
|
$( this ).css( { visibility: 'hidden', display: 'block' } ).slideUp();
|
|
licence_msg = '';
|
|
}
|
|
|
|
$( this )
|
|
.empty()
|
|
.html( licence_msg )
|
|
.stop()
|
|
.fadeIn( fade_duration );
|
|
} );
|
|
}
|
|
|
|
$support_content.stop().fadeOut( fade_duration, function() {
|
|
$( this )
|
|
.empty()
|
|
.html( support_msg )
|
|
.stop()
|
|
.fadeIn( fade_duration );
|
|
} );
|
|
$addons_content.stop().fadeOut( fade_duration, function() {
|
|
$( this )
|
|
.empty()
|
|
.html( addons_msg )
|
|
.stop()
|
|
.fadeIn( fade_duration );
|
|
} );
|
|
|
|
}
|
|
} );
|
|
}
|
|
|
|
/**
|
|
* Handle 'Check License Again' functionality found in expired license messages.
|
|
*/
|
|
$( '.content-tab' ).on( 'click', '.check-my-licence-again', function( e ) {
|
|
e.preventDefault();
|
|
checked_licence = false;
|
|
$( e.target ).replaceWith( 'Checking... ' + ajax_spinner );
|
|
check_licence( null, 'all' );
|
|
} );
|
|
function refresh_table_selects() {
|
|
if ( undefined !== wpmdb_data && undefined !== wpmdb_data.this_tables && undefined !== wpmdb_data.this_table_sizes_hr ) {
|
|
$push_select = create_table_select( wpmdb_data.this_tables, wpmdb_data.this_table_sizes_hr, $( $push_select ).val() );
|
|
}
|
|
|
|
if ( undefined !== wpmdb.common.connection_data && undefined !== wpmdb.common.connection_data.tables && undefined !== wpmdb.common.connection_data.table_sizes_hr ) {
|
|
$pull_select = create_table_select( wpmdb.common.connection_data.tables, wpmdb.common.connection_data.table_sizes_hr, $( $pull_select ).val() );
|
|
}
|
|
}
|
|
|
|
$.wpmdb.add_action( 'wpmdb_refresh_table_selects', refresh_table_selects );
|
|
|
|
function update_push_table_select() {
|
|
$( '#select-tables' ).remove();
|
|
$( '.select-tables-wrap' ).prepend( $push_select );
|
|
$( '#select-tables' ).change();
|
|
}
|
|
|
|
$.wpmdb.add_action( 'wpmdb_update_push_table_select', update_push_table_select );
|
|
|
|
function update_pull_table_select() {
|
|
$( '#select-tables' ).remove();
|
|
$( '.select-tables-wrap' ).prepend( $pull_select );
|
|
$( '#select-tables' ).change();
|
|
}
|
|
|
|
$.wpmdb.add_action( 'wpmdb_update_pull_table_select', update_pull_table_select );
|
|
|
|
function disable_table_migration_options() {
|
|
$( '#migrate-selected' ).parents( '.option-section' ).children( '.header-expand-collapse' ).children( '.expand-collapse-arrow' ).removeClass( 'collapsed' );
|
|
$( '.table-select-wrap' ).show();
|
|
$( '#migrate-only-with-prefix' ).prop( 'checked', false );
|
|
$( '#migrate-selected' ).prop( 'checked', true );
|
|
$( '.table-migrate-options' ).hide();
|
|
$( '.select-tables-wrap' ).show();
|
|
}
|
|
|
|
$.wpmdb.add_action( 'wpmdb_disable_table_migration_options', disable_table_migration_options );
|
|
|
|
function enable_table_migration_options() {
|
|
$( '.table-migrate-options' ).show();
|
|
}
|
|
|
|
$.wpmdb.add_action( 'wpmdb_enable_table_migration_options', enable_table_migration_options );
|
|
|
|
function select_all_tables() {
|
|
$( '#select-tables' ).children( 'option' ).prop( 'selected', true );
|
|
$( '#select-tables' ).change();
|
|
}
|
|
|
|
$.wpmdb.add_action( 'wpmdb_select_all_tables', select_all_tables );
|
|
|
|
function base_old_url( value, args ) {
|
|
return remove_protocol( wpmdb_data.this_url );
|
|
}
|
|
|
|
$.wpmdb.add_filter( 'wpmdb_base_old_url', base_old_url );
|
|
|
|
function establish_remote_connection_from_saved_profile() {
|
|
var action = wpmdb_migration_type();
|
|
var connection_info = $.trim( $( '.pull-push-connection-info' ).val() ).split( '\n' );
|
|
if ( 'undefined' === typeof wpmdb_default_profile ||
|
|
true === wpmdb_default_profile ||
|
|
'savefile' === action ||
|
|
'find_replace' === action ||
|
|
doing_ajax ||
|
|
! wpmdb_data.is_pro ) {
|
|
return;
|
|
}
|
|
|
|
doing_ajax = true;
|
|
disable_export_type_controls();
|
|
|
|
$( '.connection-status' ).html( wpmdb_strings.establishing_remote_connection );
|
|
$( '.connection-status' ).removeClass( 'notification-message error-notice migration-error' );
|
|
$( '.connection-status' ).append( ajax_spinner );
|
|
|
|
var intent = wpmdb_migration_type();
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_verify_connection_to_remote_site',
|
|
url: connection_info[ 0 ],
|
|
key: connection_info[ 1 ],
|
|
intent: intent,
|
|
nonce: wpmdb_data.nonces.verify_connection_to_remote_site,
|
|
convert_post_type_selection: wpmdb_convert_post_type_selection,
|
|
profile: wpmdb_data.profile
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
$( '.connection-status' ).html( get_ajax_errors( jqXHR.responseText, '(#102)', jqXHR ) );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
enable_export_type_controls();
|
|
},
|
|
success: function( data ) {
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
enable_export_type_controls();
|
|
|
|
if ( 'undefined' !== typeof data.wpmdb_error && 1 === data.wpmdb_error ) {
|
|
$( '.connection-status' ).html( data.body );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
|
|
if ( data.body.indexOf( '401 Unauthorized' ) > -1 ) {
|
|
$( '.basic-access-auth-wrapper' ).show();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
maybe_show_ssl_warning( connection_info[ 0 ], connection_info[ 1 ], data.scheme );
|
|
maybe_show_prefix_notice( data.prefix );
|
|
|
|
$( '.pull-push-connection-info' ).addClass( 'temp-disabled' );
|
|
$( '.pull-push-connection-info' ).attr( 'readonly', 'readonly' );
|
|
$( '.connect-button' ).hide();
|
|
|
|
$( '.connection-status' ).hide();
|
|
$( '.step-two' ).show();
|
|
connection_established = true;
|
|
set_connection_data( data );
|
|
move_connection_info_box();
|
|
|
|
maybe_show_mixed_cased_table_name_warning();
|
|
|
|
var loaded_tables = '';
|
|
if ( false === wpmdb_default_profile && 'undefined' !== typeof wpmdb_loaded_tables ) {
|
|
loaded_tables = wpmdb_loaded_tables;
|
|
}
|
|
|
|
$pull_select = create_table_select( wpmdb.common.connection_data.tables, wpmdb.common.connection_data.table_sizes_hr, loaded_tables );
|
|
|
|
var loaded_post_types = '';
|
|
if ( false === wpmdb_default_profile && 'undefined' !== typeof wpmdb_loaded_post_types ) {
|
|
if ( 'undefined' !== typeof data.select_post_types ) {
|
|
$( '#exclude-post-types' ).attr( 'checked', 'checked' );
|
|
$( '.post-type-select-wrap' ).show();
|
|
loaded_post_types = data.select_post_types;
|
|
} else {
|
|
loaded_post_types = wpmdb_loaded_post_types;
|
|
}
|
|
}
|
|
|
|
var $post_type_select = document.createElement( 'select' );
|
|
$( $post_type_select ).attr( {
|
|
multiple: 'multiple',
|
|
name: 'select_post_types[]',
|
|
id: 'select-post-types',
|
|
class: 'multiselect'
|
|
} );
|
|
|
|
$.each( wpmdb.common.connection_data.post_types, function( index, value ) {
|
|
var selected = $.inArray( value, loaded_post_types );
|
|
if ( -1 !== selected || ( true === wpmdb_convert_exclude_revisions && 'revision' !== value ) ) {
|
|
selected = ' selected="selected" ';
|
|
} else {
|
|
selected = ' ';
|
|
}
|
|
$( $post_type_select ).append( '<option' + selected + 'value="' + value + '">' + value + '</option>' );
|
|
} );
|
|
|
|
$pull_post_type_select = $post_type_select;
|
|
|
|
var loaded_tables_backup = '';
|
|
if ( false === wpmdb_default_profile && 'undefined' !== typeof wpmdb_loaded_tables_backup ) {
|
|
loaded_tables_backup = wpmdb_loaded_tables_backup;
|
|
}
|
|
|
|
var $table_select_backup = document.createElement( 'select' );
|
|
$( $table_select_backup ).attr( {
|
|
multiple: 'multiple',
|
|
name: 'select_backup[]',
|
|
id: 'select-backup',
|
|
class: 'multiselect'
|
|
} );
|
|
|
|
$.each( wpmdb.common.connection_data.tables, function( index, value ) {
|
|
var selected = $.inArray( value, loaded_tables_backup );
|
|
if ( -1 !== selected ) {
|
|
selected = ' selected="selected" ';
|
|
} else {
|
|
selected = ' ';
|
|
}
|
|
$( $table_select_backup ).append( '<option' + selected + 'value="' + value + '">' + value + ' (' + wpmdb.common.connection_data.table_sizes_hr[ value ] + ')</option>' );
|
|
} );
|
|
|
|
$push_select_backup = $table_select_backup;
|
|
|
|
if ( 'pull' === wpmdb_migration_type() ) {
|
|
$.wpmdb.do_action( 'wpmdb_update_pull_table_select' );
|
|
$( '#select-post-types' ).remove();
|
|
$( '.exclude-post-types-warning' ).after( $pull_post_type_select );
|
|
$( '#select-backup' ).remove();
|
|
$( '.backup-tables-wrap' ).prepend( $pull_select_backup );
|
|
$( '.table-prefix' ).html( data.prefix );
|
|
$( '.uploads-dir' ).html( wpmdb_data.this_uploads_dir );
|
|
} else {
|
|
$( '#select-backup' ).remove();
|
|
$( '.backup-tables-wrap' ).prepend( $push_select_backup );
|
|
}
|
|
|
|
$.wpmdb.do_action( 'verify_connection_to_remote_site', wpmdb.common.connection_data );
|
|
}
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
// automatically validate connection info if we're loading a saved profile
|
|
establish_remote_connection_from_saved_profile();
|
|
|
|
// add to <a> tags which act as JS event buttons, will not jump page to top and will deselect the button
|
|
$( 'body' ).on( 'click', '.js-action-link', function( e ) {
|
|
e.preventDefault();
|
|
$( this ).blur();
|
|
} );
|
|
|
|
function enable_pro_licence( data, licence_key ) {
|
|
$( '.licence-input, .register-licence' ).remove();
|
|
$( '.licence-not-entered' ).prepend( data.masked_licence );
|
|
$( '.support-content' ).empty().html( '<p>' + wpmdb_strings.fetching_license + '<img src="' + spinner_url + '" alt="" class="ajax-spinner general-spinner" /></p>' );
|
|
check_licence( licence_key );
|
|
|
|
$( '.migrate-selection label' ).removeClass( 'disabled' );
|
|
$( '.migrate-selection input' ).removeAttr( 'disabled' );
|
|
}
|
|
|
|
$( '.licence-input' ).keypress( function( e ) {
|
|
if ( 13 === e.which ) {
|
|
e.preventDefault();
|
|
$( '.register-licence' ).click();
|
|
}
|
|
} );
|
|
|
|
// registers your licence
|
|
$( 'body' ).on( 'click', '.register-licence', function( e ) {
|
|
e.preventDefault();
|
|
|
|
if ( doing_licence_registration_ajax ) {
|
|
return;
|
|
}
|
|
|
|
var licence_key = $.trim( $( '.licence-input' ).val() );
|
|
var $licence_status = $( '.licence-status' );
|
|
|
|
$licence_status.removeClass( 'notification-message error-notice success-notice' );
|
|
|
|
if ( '' === licence_key ) {
|
|
$licence_status.html( '<div class="notification-message error-notice">' + wpmdb_strings.enter_license_key + '</div>' );
|
|
return;
|
|
}
|
|
|
|
$licence_status.empty().removeClass( 'success' );
|
|
doing_licence_registration_ajax = true;
|
|
$( '.button.register-licence' ).after( '<img src="' + spinner_url + '" alt="" class="register-licence-ajax-spinner general-spinner" />' );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'JSON',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_activate_licence',
|
|
licence_key: licence_key,
|
|
nonce: wpmdb_data.nonces.activate_licence,
|
|
context: 'licence'
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
doing_licence_registration_ajax = false;
|
|
$( '.register-licence-ajax-spinner' ).remove();
|
|
$licence_status.html( wpmdb_strings.register_license_problem );
|
|
},
|
|
success: function( data ) {
|
|
$( '.register-licence-ajax-spinner' ).remove();
|
|
|
|
if ( 'undefined' !== typeof data.errors ) {
|
|
var msg = '';
|
|
for ( var key in data.errors ) {
|
|
msg += data.errors[ key ];
|
|
}
|
|
$licence_status.html( msg );
|
|
|
|
if ( 'undefined' !== typeof data.masked_licence ) {
|
|
enable_pro_licence( data, licence_key );
|
|
$( '.migrate-tab .invalid-licence' ).hide();
|
|
}
|
|
} else if ( 'undefined' !== typeof data.wpmdb_error && 'undefined' !== typeof data.body ) {
|
|
$licence_status.html( data.body );
|
|
} else {
|
|
if ( 1 === Number( data.is_first_activation ) ) {
|
|
wpmdb_strings.welcome_text = wpmdb_strings.welcome_text.replace( '%1$s', 'https://deliciousbrains.com/wp-migrate-db-pro/doc/quick-start-guide/' );
|
|
wpmdb_strings.welcome_text = wpmdb_strings.welcome_text.replace( '%2$s', 'https://deliciousbrains.com/wp-migrate-db-pro/videos/' );
|
|
|
|
$licence_status.after(
|
|
'<div id="welcome-wrap">' +
|
|
'<img id="welcome-img" src="' + wpmdb_data.this_plugin_url + 'asset/dist/img/welcome.jpg" />' +
|
|
'<div class="welcome-text">' +
|
|
'<h3>' + wpmdb_strings.welcome_title + '</h3>' +
|
|
'<p>' + wpmdb_strings.welcome_text + '</p>' +
|
|
'</div>' +
|
|
'</div>'
|
|
);
|
|
}
|
|
|
|
$licence_status.html( wpmdb_strings.license_registered ).delay( 5000 ).fadeOut( 1000, function() {
|
|
$( this ).css( { visibility: 'hidden', display: 'block' } ).slideUp();
|
|
} );
|
|
$licence_status.addClass( 'success notification-message success-notice' );
|
|
enable_pro_licence( data, licence_key );
|
|
$( '.invalid-licence' ).hide();
|
|
}
|
|
|
|
doing_licence_registration_ajax = false;
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
// clears the debug log
|
|
$( '.clear-log' ).click( function() {
|
|
$( '.ajax-spinner, .ajax-success-msg' ).remove();
|
|
$( this ).after( ajax_spinner );
|
|
$( '.debug-log-textarea' ).val( '' );
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_clear_log',
|
|
nonce: wpmdb_data.nonces.clear_log
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
$( '.ajax-spinner' ).remove();
|
|
alert( wpmdb_strings.clear_log_problem );
|
|
},
|
|
success: function( data ) {
|
|
$( '.ajax-spinner, .ajax-success-msg' ).remove();
|
|
refresh_debug_log();
|
|
$( '.clear-log' ).after( '<span class="ajax-success-msg">' + wpmdb_strings.clear_error_log + '</span>' );
|
|
$( '.ajax-success-msg' ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
}
|
|
} );
|
|
} );
|
|
|
|
// updates the debug log when the user switches to the help tab
|
|
function refresh_debug_log() {
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_get_log',
|
|
nonce: wpmdb_data.nonces.get_log
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.update_log_problem );
|
|
},
|
|
success: function( data ) {
|
|
$( '.debug-log-textarea' ).val( data );
|
|
}
|
|
} );
|
|
}
|
|
|
|
// select all tables
|
|
$( '.multiselect-select-all' ).click( function() {
|
|
var multiselect = $( this ).parents( '.select-wrap' ).children( '.multiselect' );
|
|
$( 'option', multiselect ).prop( 'selected', 1 );
|
|
$( multiselect ).focus().trigger( 'change' );
|
|
} );
|
|
|
|
// deselect all tables
|
|
$( '.multiselect-deselect-all' ).click( function() {
|
|
var multiselect = $( this ).parents( '.select-wrap' ).children( '.multiselect' );
|
|
$( 'option', multiselect ).removeAttr( 'selected' );
|
|
$( multiselect ).focus().trigger( 'change' );
|
|
} );
|
|
|
|
// invert table selection
|
|
$( '.multiselect-invert-selection' ).click( function() {
|
|
var multiselect = $( this ).parents( '.select-wrap' ).children( '.multiselect' );
|
|
$( 'option', multiselect ).each( function() {
|
|
$( this ).attr( 'selected', !$( this ).attr( 'selected' ) );
|
|
} );
|
|
$( multiselect ).focus().trigger( 'change' );
|
|
} );
|
|
|
|
// on option select hide all "advanced" option divs and show the correct div for the option selected
|
|
$( '.option-group input[type=radio]' ).change( function() {
|
|
var group = $( this ).closest( '.option-group' );
|
|
$( 'ul', group ).hide();
|
|
var parent = $( this ).closest( 'li' );
|
|
$( 'ul', parent ).show();
|
|
} );
|
|
|
|
// on page load, expand hidden divs for selected options (browser form cache)
|
|
$( '.option-group' ).each( function() {
|
|
$( '.option-group input[type=radio]' ).each( function() {
|
|
if ( $( this ).is( ':checked' ) ) {
|
|
var parent = $( this ).closest( 'li' );
|
|
$( 'ul', parent ).show();
|
|
}
|
|
} );
|
|
} );
|
|
|
|
// expand and collapse content on click
|
|
$( '.header-expand-collapse' ).click( function() {
|
|
if ( $( '.expand-collapse-arrow', this ).hasClass( 'collapsed' ) ) {
|
|
$( '.expand-collapse-arrow', this ).removeClass( 'collapsed' );
|
|
$( this ).next().show();
|
|
} else {
|
|
$( '.expand-collapse-arrow', this ).addClass( 'collapsed' );
|
|
$( this ).next().hide();
|
|
}
|
|
} );
|
|
|
|
$( '.checkbox-label input[type=checkbox]' ).change( function() {
|
|
if ( $( this ).is( ':checked' ) ) {
|
|
$( this ).parent().next().show();
|
|
} else {
|
|
$( this ).parent().next().hide();
|
|
}
|
|
} );
|
|
|
|
// warning for excluding post types
|
|
$( '.select-post-types-wrap' ).on( 'change', '#select-post-types', function() {
|
|
exclude_post_types_warning();
|
|
} );
|
|
|
|
function exclude_post_types_warning() {
|
|
var excluded_post_types = $( '#select-post-types' ).val();
|
|
var excluded_post_types_text = '';
|
|
var $exclude_post_types_warning = $( '.exclude-post-types-warning' );
|
|
var $exclude_post_types_migrate_msg = $exclude_post_types_warning.find( '.migrate-msg' );
|
|
var $exclude_post_types_find_replace_msg = $exclude_post_types_warning.find( '.find-replace-msg' );
|
|
|
|
if ( 'find_replace' === wpmdb_migration_type() ) {
|
|
$exclude_post_types_migrate_msg.hide();
|
|
$exclude_post_types_find_replace_msg.show();
|
|
} else {
|
|
$exclude_post_types_find_replace_msg.hide();
|
|
$exclude_post_types_migrate_msg.show();
|
|
}
|
|
|
|
if ( excluded_post_types ) {
|
|
excluded_post_types_text = '<code>' + excluded_post_types.join( '</code>, <code>' ) + '</code>';
|
|
$( '.excluded-post-types' ).html( excluded_post_types_text );
|
|
|
|
if ( '0' === $exclude_post_types_warning.css( 'opacity' ) ) {
|
|
$exclude_post_types_warning
|
|
.css( { opacity: 0 } )
|
|
.slideDown( 200 )
|
|
.animate( { opacity: 1 } );
|
|
}
|
|
} else {
|
|
$exclude_post_types_warning
|
|
.css( { opacity: 0 } )
|
|
.slideUp( 200 )
|
|
.animate( { opacity: 0 } );
|
|
}
|
|
}
|
|
|
|
if ( $( '#exclude-post-types' ).is( ':checked' ) ) {
|
|
if ( $( '#select-post-types' ).val() ) {
|
|
$( '.exclude-post-types-warning' ).css( { display: 'block', opacity: 1 } );
|
|
}
|
|
}
|
|
|
|
// special expand and collapse content on click for save migration profile
|
|
$( '#save-migration-profile' ).change( function() {
|
|
wpmdb.functions.update_migrate_button_text();
|
|
if ( $( this ).is( ':checked' ) ) {
|
|
$( '.save-settings-button' ).show();
|
|
} else {
|
|
$( '.save-settings-button' ).hide();
|
|
}
|
|
} );
|
|
|
|
if ( $( '#save-migration-profile' ).is( ':checked' ) ) {
|
|
$( '.save-settings-button' ).show();
|
|
}
|
|
|
|
$( '.create-new-profile' ).focus( function() {
|
|
$( '#create_new' ).prop( 'checked', true );
|
|
} );
|
|
|
|
$( '.checkbox-label input[type=checkbox]' ).each( function() {
|
|
if ( $( this ).is( ':checked' ) ) {
|
|
$( this ).parent().next().show();
|
|
}
|
|
} );
|
|
|
|
// AJAX migrate button
|
|
$( '.migrate-db-button' ).click( function( event ) {
|
|
$( this ).blur();
|
|
event.preventDefault();
|
|
wpmdb.migration_state_id = '';
|
|
|
|
if ( false === $.wpmdb.apply_filters( 'wpmdb_migration_profile_ready', true ) ) {
|
|
return;
|
|
}
|
|
|
|
// check that they've selected some tables to migrate
|
|
if ( $( '#migrate-selected' ).is( ':checked' ) && null === $( '#select-tables' ).val() ) {
|
|
alert( wpmdb_strings.please_select_one_table );
|
|
return;
|
|
}
|
|
|
|
// check that they've selected some tables to backup
|
|
if ( 'savefile' !== wpmdb_migration_type() && $( '#backup-manual-select' ).is( ':checked' ) && null === $( '#select-backup' ).val() ) {
|
|
alert( wpmdb_strings.please_select_one_table_backup );
|
|
return;
|
|
}
|
|
|
|
var new_url_missing = false;
|
|
var new_file_path_missing = false;
|
|
if ( $( '#new-url' ).length && !$( '#new-url' ).val() ) {
|
|
$( '#new-url-missing-warning' ).show();
|
|
$( '#new-url' ).focus();
|
|
$( 'html,body' ).scrollTop( 0 );
|
|
new_url_missing = true;
|
|
}
|
|
|
|
if ( $( '#new-path' ).length && !$( '#new-path' ).val() ) {
|
|
$( '#new-path-missing-warning' ).show();
|
|
if ( false === new_url_missing ) {
|
|
$( '#new-path' ).focus();
|
|
$( 'html,body' ).scrollTop( 0 );
|
|
}
|
|
new_file_path_missing = true;
|
|
}
|
|
|
|
if ( true === new_url_missing || true === new_file_path_missing ) {
|
|
return;
|
|
}
|
|
|
|
// also save profile
|
|
if ( $( '#save-migration-profile' ).is( ':checked' ) ) {
|
|
save_active_profile();
|
|
}
|
|
|
|
form_data = $( $( '#migrate-form' )[0].elements ).not( '.auth-credentials' ).serialize();
|
|
|
|
migration_intent = wpmdb_migration_type();
|
|
|
|
stage = 'backup';
|
|
|
|
if ( 'savefile' === migration_intent ) {
|
|
stage = 'migrate';
|
|
}
|
|
|
|
if ( false === $( '#create-backup' ).is( ':checked' ) ) {
|
|
stage = 'migrate';
|
|
}
|
|
|
|
wpmdb.current_migration = wpmdb.migration_progress_controller.newMigration( {
|
|
'localTableSizes': wpmdb_data.this_table_sizes,
|
|
'localTableRows': wpmdb_data.this_table_rows,
|
|
'remoteTableSizes': 'undefined' !== typeof wpmdb.common.connection_data ? wpmdb.common.connection_data.table_sizes : null,
|
|
'remoteTableRows': 'undefined' !== typeof wpmdb.common.connection_data ? wpmdb.common.connection_data.table_rows : null,
|
|
'migrationIntent': wpmdb_migration_type()
|
|
} );
|
|
|
|
var backup_option = $( 'input[name=backup_option]:checked' ).val();
|
|
var table_option = $( 'input[name=table_migrate_option]:checked' ).val();
|
|
var selected_tables = '';
|
|
var data_type = '';
|
|
|
|
// set up backup stage
|
|
if ( 'backup' === stage ) {
|
|
if ( 'migrate_only_with_prefix' === table_option && 'backup_selected' === backup_option ) {
|
|
backup_option = 'backup_only_with_prefix';
|
|
}
|
|
if ( 'push' === migration_intent ) {
|
|
data_type = 'remote';
|
|
if ( 'backup_only_with_prefix' === backup_option ) {
|
|
tables_to_migrate = wpmdb.common.connection_data.prefixed_tables;
|
|
} else if ( 'backup_selected' === backup_option ) {
|
|
selected_tables = $( '#select-tables' ).val();
|
|
selected_tables = $.wpmdb.apply_filters( 'wpmdb_backup_selected_tables', selected_tables );
|
|
tables_to_migrate = get_intersect( selected_tables, wpmdb.common.connection_data.tables );
|
|
} else if ( 'backup_manual_select' === backup_option ) {
|
|
tables_to_migrate = $( '#select-backup' ).val();
|
|
}
|
|
} else {
|
|
data_type = 'local';
|
|
if ( 'backup_only_with_prefix' === backup_option ) {
|
|
tables_to_migrate = wpmdb_data.this_prefixed_tables;
|
|
} else if ( 'backup_selected' === backup_option ) {
|
|
selected_tables = $( '#select-tables' ).val();
|
|
selected_tables = $.wpmdb.apply_filters( 'wpmdb_backup_selected_tables', selected_tables );
|
|
tables_to_migrate = get_intersect( selected_tables, wpmdb_data.this_tables );
|
|
} else if ( 'backup_manual_select' === backup_option ) {
|
|
tables_to_migrate = $( '#select-backup' ).val();
|
|
}
|
|
}
|
|
|
|
wpmdb.current_migration.model.addStage( 'backup', tables_to_migrate, data_type, {
|
|
strings: {
|
|
migrated: wpmdb_strings.backed_up
|
|
}
|
|
} );
|
|
}
|
|
|
|
// set up migration stage
|
|
if ( -1 !== $.inArray( migration_intent, [ 'push', 'savefile', 'find_replace' ] ) ) {
|
|
data_type = 'local';
|
|
} else {
|
|
data_type = 'remote';
|
|
}
|
|
|
|
if ( 'find_replace' === migration_intent ) {
|
|
if ( 'backup' !== stage ) {
|
|
stage = 'find_replace';
|
|
}
|
|
|
|
wpmdb.current_migration.model.addStage( 'find_replace', get_tables_to_migrate( null, null ), data_type, {
|
|
strings: {
|
|
migrated: wpmdb_strings.searched,
|
|
stage_title: wpmdb_strings.migrate_button_find_replace
|
|
}
|
|
} );
|
|
} else {
|
|
wpmdb.current_migration.model.addStage( 'migrate', get_tables_to_migrate( null, null ), data_type );
|
|
}
|
|
|
|
// add any additional migration stages via hook
|
|
$.wpmdb.do_action( 'wpmdb_add_migration_stages', {
|
|
'data_type': data_type,
|
|
'tables_to_migrate': get_tables_to_migrate( null, null )
|
|
} );
|
|
|
|
var table_intent = $( 'input[name=table_migrate_option]:checked' ).val();
|
|
var connection_info = $.trim( $( '.pull-push-connection-info' ).val() ).split( '\n' );
|
|
var table_rows = '';
|
|
|
|
remote_site = connection_info[ 0 ];
|
|
secret_key = connection_info[ 1 ];
|
|
|
|
var static_migration_label = get_migration_status_label( remote_site, migration_intent, 'migrating' );
|
|
completed_msg = get_migration_status_label( remote_site, migration_intent, 'completed' );
|
|
|
|
if ( 'find_replace' === stage ) {
|
|
tables_to_migrate = wpmdb.current_migration.model.getStageItems( 'find_replace', 'name' );
|
|
} else if ( 'backup' === stage ) {
|
|
tables_to_migrate = wpmdb.current_migration.model.getStageItems( 'backup', 'name' );
|
|
} else {
|
|
tables_to_migrate = wpmdb.current_migration.model.getStageItems( 'migrate', 'name' );
|
|
}
|
|
|
|
wpmdb.current_migration.model.setActiveStage( stage );
|
|
|
|
wpmdb.current_migration.setTitle( static_migration_label );
|
|
|
|
wpmdb.current_migration.startTimer();
|
|
|
|
currently_migrating = true;
|
|
wpmdb.current_migration.setStatus( 'active' );
|
|
|
|
var request_data = {
|
|
action: 'wpmdb_initiate_migration',
|
|
intent: migration_intent,
|
|
url: remote_site,
|
|
key: secret_key,
|
|
form_data: form_data,
|
|
stage: stage,
|
|
nonce: wpmdb_data.nonces.initiate_migration
|
|
};
|
|
|
|
request_data.site_details = {
|
|
local: wpmdb_data.site_details
|
|
};
|
|
|
|
if ( -1 === $.inArray( migration_intent, [ 'savefile', 'find_replace' ] ) ) {
|
|
request_data.temp_prefix = wpmdb.common.connection_data.temp_prefix;
|
|
request_data.site_details.remote = wpmdb.common.connection_data.site_details;
|
|
}
|
|
|
|
// site_details can have a very large number of elements that blows out PHP's max_input_vars
|
|
// so we reduce it down to one variable for this one POST.
|
|
request_data.site_details = JSON.stringify( request_data.site_details );
|
|
|
|
doing_ajax = true;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
cache: false,
|
|
data: request_data,
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, get_ajax_errors( jqXHR.responseText, '(#112)', jqXHR ), 'error' );
|
|
|
|
console.log( jqXHR );
|
|
console.log( textStatus );
|
|
console.log( errorThrown );
|
|
doing_ajax = false;
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
},
|
|
success: function( data ) {
|
|
doing_ajax = false;
|
|
if ( 'undefined' !== typeof data && 'undefined' !== typeof data.wpmdb_error && 1 === data.wpmdb_error ) {
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, data.body, 'error' );
|
|
|
|
return;
|
|
}
|
|
|
|
wpmdb.migration_state_id = data.migration_state_id;
|
|
|
|
var i = 0;
|
|
|
|
// Set delay between requests - use max of local/remote values, 0 if doing export
|
|
delay_between_requests = 0;
|
|
if ( 'savefile' !== migration_intent && 'undefined' !== typeof wpmdb.common.connection_data && 'undefined' !== typeof wpmdb.common.connection_data.delay_between_requests ) {
|
|
delay_between_requests = Math.max( parseInt( wpmdb_data.delay_between_requests ), parseInt( wpmdb.common.connection_data.delay_between_requests ) );
|
|
}
|
|
|
|
wpmdb.functions.migrate_table_recursive = function( current_row, primary_keys ) {
|
|
|
|
if ( i >= tables_to_migrate.length ) {
|
|
if ( 'backup' === stage ) {
|
|
|
|
stage = 'migrate';
|
|
if ( 'find_replace' === migration_intent ) {
|
|
stage = 'find_replace';
|
|
}
|
|
|
|
wpmdb.current_migration.model.setActiveStage( stage );
|
|
|
|
i = 0;
|
|
|
|
// should get from model
|
|
tables_to_migrate = get_tables_to_migrate( null, null );
|
|
|
|
} else {
|
|
$( '.progress-label' ).removeClass( 'label-visible' );
|
|
|
|
wpmdb.common.hooks = $.wpmdb.apply_filters( 'wpmdb_before_migration_complete_hooks', wpmdb.common.hooks );
|
|
wpmdb.common.hooks.push( wpmdb.functions.migration_complete );
|
|
wpmdb.common.hooks.push( wpmdb.functions.wpmdb_flush );
|
|
wpmdb.common.hooks = $.wpmdb.apply_filters( 'wpmdb_after_migration_complete_hooks', wpmdb.common.hooks );
|
|
wpmdb.common.hooks.push( wpmdb.functions.migration_complete_events );
|
|
wpmdb.common.next_step_in_migration = { fn: wpmdb_call_next_hook };
|
|
wpmdb.functions.execute_next_step();
|
|
return;
|
|
}
|
|
}
|
|
|
|
var last_table = 0;
|
|
if ( i === ( tables_to_migrate.length - 1 ) ) {
|
|
last_table = 1;
|
|
}
|
|
|
|
var gzip = 0;
|
|
if ( 'savefile' !== migration_intent && 'find_replace' !== migration_intent && 1 === parseInt( wpmdb.common.connection_data.gzip ) ) {
|
|
gzip = 1;
|
|
}
|
|
|
|
var request_data = {
|
|
action: 'wpmdb_migrate_table',
|
|
migration_state_id: wpmdb.migration_state_id,
|
|
table: tables_to_migrate[ i ],
|
|
stage: stage,
|
|
current_row: current_row,
|
|
last_table: last_table,
|
|
primary_keys: primary_keys,
|
|
gzip: gzip,
|
|
nonce: wpmdb_data.nonces.migrate_table
|
|
};
|
|
|
|
if ( 'savefile' !== migration_intent && 'find_replace' !== migration_intent ) {
|
|
request_data.bottleneck = wpmdb.common.connection_data.bottleneck;
|
|
request_data.prefix = wpmdb.common.connection_data.prefix;
|
|
}
|
|
|
|
if ( wpmdb.common.connection_data && wpmdb.common.connection_data.path_current_site && wpmdb.common.connection_data.domain ) {
|
|
request_data.path_current_site = wpmdb.common.connection_data.path_current_site;
|
|
request_data.domain_current_site = wpmdb.common.connection_data.domain;
|
|
}
|
|
|
|
doing_ajax = true;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
timeout: 0,
|
|
data: request_data,
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
var progress_text = wpmdb_strings.table_process_problem + ' ' + tables_to_migrate[ i ] + '<br /><br />' + wpmdb_strings.status + ': ' + jqXHR.status + ' ' + jqXHR.statusText + '<br /><br />' + wpmdb_strings.response + ':<br />' + jqXHR.responseText;
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, progress_text, 'error' );
|
|
|
|
doing_ajax = false;
|
|
console.log( jqXHR );
|
|
console.log( textStatus );
|
|
console.log( errorThrown );
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
},
|
|
success: function( data ) {
|
|
doing_ajax = false;
|
|
data = $.trim( data );
|
|
var row_information = wpmdb_parse_json( data );
|
|
var error_text = '';
|
|
|
|
if ( false === row_information || null === row_information ) {
|
|
|
|
// should update model
|
|
if ( '' === data || null === data ) {
|
|
error_text = wpmdb_strings.table_process_problem_empty_response + ' ' + tables_to_migrate[ i ];
|
|
} else {
|
|
error_text = get_ajax_errors( data, null, null );
|
|
}
|
|
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, error_text, 'error' );
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
}
|
|
|
|
if ( 'undefined' !== typeof row_information.wpmdb_error && 1 === row_information.wpmdb_error ) {
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, row_information.body, 'error' );
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
}
|
|
|
|
//successful iteration, update model
|
|
wpmdb.current_migration.setText();
|
|
wpmdb.current_migration.model.getStageModel( stage ).setItemRowsTransferred( tables_to_migrate[ i ], row_information.current_row );
|
|
|
|
// We need the returned file name for delivery or display to the user.
|
|
if ( 1 === last_table && 'savefile' === migration_intent ) {
|
|
if ( 'undefined' !== typeof row_information.dump_filename ) {
|
|
dump_filename = row_information.dump_filename;
|
|
}
|
|
if ( 'undefined' !== typeof row_information.dump_path ) {
|
|
dump_path = row_information.dump_path;
|
|
}
|
|
}
|
|
|
|
if ( -1 === parseInt( row_information.current_row ) ) {
|
|
i++;
|
|
row_information.current_row = '';
|
|
row_information.primary_keys = '';
|
|
}
|
|
|
|
wpmdb.common.next_step_in_migration = {
|
|
fn: wpmdb.functions.migrate_table_recursive,
|
|
args: [ row_information.current_row, row_information.primary_keys ]
|
|
};
|
|
wpmdb.functions.execute_next_step();
|
|
}
|
|
} );
|
|
|
|
};
|
|
|
|
wpmdb.common.next_step_in_migration = {
|
|
fn: wpmdb.functions.migrate_table_recursive,
|
|
args: [ '-1', '' ]
|
|
};
|
|
wpmdb.functions.execute_next_step();
|
|
|
|
}
|
|
|
|
} ); // end ajax
|
|
|
|
} );
|
|
|
|
wpmdb.functions.migration_complete_events = function() {
|
|
if ( false === wpmdb.common.migration_error ) {
|
|
if ( '' === wpmdb.common.non_fatal_errors ) {
|
|
if ( 'savefile' !== migration_intent && true === $( '#save_computer' ).is( ':checked' ) ) {
|
|
wpmdb.current_migration.setText();
|
|
}
|
|
|
|
completed_msg = completed_msg + ' <div class="dashicons dashicons-yes"></div>';
|
|
|
|
if ( true === migration_cancelled ) {
|
|
var cancel_success = wpmdb_strings.migration_cancelled_success;
|
|
|
|
if ( 'find_replace' === migration_intent ) {
|
|
cancel_success = wpmdb_strings.find_replace_cancelled_success;
|
|
}
|
|
|
|
wpmdb.current_migration.setState( completed_msg, cancel_success, 'cancelled' );
|
|
} else {
|
|
wpmdb.current_migration.setState( completed_msg, '', 'complete' );
|
|
}
|
|
|
|
} else {
|
|
wpmdb.current_migration.setState( wpmdb_strings.completed_with_some_errors, wpmdb.common.non_fatal_errors, 'error' );
|
|
}
|
|
}
|
|
|
|
$( '.migration-controls' ).addClass( 'hidden' );
|
|
|
|
// reset migration variables so consecutive migrations work correctly
|
|
wpmdb.common.hooks = [];
|
|
wpmdb.common.call_stack = [];
|
|
wpmdb.common.migration_error = false;
|
|
currently_migrating = false;
|
|
migration_completed = true;
|
|
migration_paused = false;
|
|
migration_cancelled = false;
|
|
doing_ajax = false;
|
|
wpmdb.common.non_fatal_errors = '';
|
|
|
|
$( '.progress-label' ).remove();
|
|
$( '.migration-progress-ajax-spinner' ).remove();
|
|
$( '.close-progress-content' ).show();
|
|
$( '#overlay' ).css( 'cursor', 'pointer' );
|
|
wpmdb.current_migration.model.setMigrationComplete();
|
|
};
|
|
|
|
wpmdb.functions.migration_complete = function() {
|
|
|
|
$( '.migration-controls' ).addClass( 'hidden' );
|
|
|
|
if ( 'savefile' === migration_intent ) {
|
|
currently_migrating = false;
|
|
var migrate_complete_text = wpmdb_strings.migration_complete;
|
|
if ( $( '#save_computer' ).is( ':checked' ) ) {
|
|
var url = wpmdb_data.this_download_url + encodeURIComponent( dump_filename );
|
|
if ( $( '#gzip_file' ).is( ':checked' ) ) {
|
|
url += '&gzip=1';
|
|
}
|
|
window.location = url;
|
|
} else {
|
|
migrate_complete_text = wpmdb_strings.completed_dump_located_at + ' ' + dump_path;
|
|
}
|
|
|
|
if ( false === wpmdb.common.migration_error ) {
|
|
|
|
wpmdb.functions.migration_complete_events();
|
|
wpmdb.current_migration.setState( completed_msg, migrate_complete_text, 'complete' );
|
|
|
|
}
|
|
|
|
} else { // rename temp tables, delete old tables
|
|
|
|
wpmdb.current_migration.setState( null, wpmdb_strings.finalizing_migration, 'finalizing' );
|
|
|
|
var request_data = {
|
|
action: 'wpmdb_finalize_migration',
|
|
migration_state_id: wpmdb.migration_state_id,
|
|
tables: tables_to_migrate.join( ',' ),
|
|
nonce: wpmdb_data.nonces.finalize_migration
|
|
};
|
|
|
|
if ( 'find_replace' !== migration_intent ) {
|
|
request_data.prefix = wpmdb.common.connection_data.prefix;
|
|
}
|
|
|
|
doing_ajax = true;
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: request_data,
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
doing_ajax = false;
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, wpmdb_strings.finalize_tables_problem, 'error' );
|
|
|
|
alert( jqXHR + ' : ' + textStatus + ' : ' + errorThrown );
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
},
|
|
success: function( data ) {
|
|
doing_ajax = false;
|
|
if ( '1' !== $.trim( data ) ) {
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, data, 'error' );
|
|
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
}
|
|
wpmdb.common.next_step_in_migration = { fn: wpmdb_call_next_hook };
|
|
wpmdb.functions.execute_next_step();
|
|
}
|
|
} );
|
|
}
|
|
};
|
|
|
|
wpmdb.functions.wpmdb_flush = function() {
|
|
if ( 'savefile' !== migration_intent ) {
|
|
wpmdb.current_migration.setText( wpmdb_strings.flushing );
|
|
doing_ajax = true;
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_flush',
|
|
migration_state_id: wpmdb.migration_state_id,
|
|
nonce: wpmdb_data.nonces.flush
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
doing_ajax = false;
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, wpmdb_strings.flush_problem, 'error' );
|
|
|
|
alert( jqXHR + ' : ' + textStatus + ' : ' + errorThrown );
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
},
|
|
success: function( data ) {
|
|
doing_ajax = false;
|
|
if ( '1' !== $.trim( data ) ) {
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_failed, data, 'error' );
|
|
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
}
|
|
wpmdb.common.next_step_in_migration = { fn: wpmdb_call_next_hook };
|
|
wpmdb.functions.execute_next_step();
|
|
}
|
|
} );
|
|
}
|
|
};
|
|
|
|
wpmdb.functions.update_migrate_button_text = function() {
|
|
var migration_intent = wpmdb_migration_type();
|
|
var save_string = ( $( '#save-migration-profile' ).is( ':checked' ) ) ? '_save' : '';
|
|
var migrate_string = 'migrate_button_' + ( ( 'savefile' === migration_intent ) ? 'export' : migration_intent ) + save_string;
|
|
$( '.migrate-db .button-primary' ).val( wpmdb_strings[ migrate_string ] );
|
|
};
|
|
|
|
wpmdb.functions.update_migrate_button_text();
|
|
|
|
// close progress pop up once migration is completed
|
|
$( 'body' ).on( 'click', '.close-progress-content-button', function( e ) {
|
|
hide_overlay();
|
|
wpmdb.current_migration.restoreTitleElem();
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', '#overlay', function( e ) {
|
|
if ( true === migration_completed && e.target === this ) {
|
|
hide_overlay();
|
|
wpmdb.current_migration.restoreTitleElem();
|
|
}
|
|
} );
|
|
|
|
function hide_overlay() {
|
|
$( '#overlay' ).removeClass( 'show' ).addClass( 'hide' );
|
|
$( '#overlay > div' ).removeClass( 'show' ).addClass( 'hide' );
|
|
wpmdb.current_migration.$proVersion.find( 'iframe' ).remove();
|
|
setTimeout( function() {
|
|
$( '#overlay' ).remove();
|
|
}, 500 );
|
|
migration_completed = false;
|
|
}
|
|
|
|
// AJAX save button profile
|
|
$( '.save-settings-button' ).click( function( event ) {
|
|
event.preventDefault();
|
|
if ( '' === $.trim( $( '.create-new-profile' ).val() ) && $( '#create_new' ).is( ':checked' ) ) {
|
|
alert( wpmdb_strings.enter_name_for_profile );
|
|
$( '.create-new-profile' ).focus();
|
|
return;
|
|
}
|
|
save_active_profile();
|
|
} );
|
|
|
|
function save_active_profile() {
|
|
var profile;
|
|
$( '.save-settings-button' ).blur();
|
|
|
|
if ( doing_save_profile ) {
|
|
return;
|
|
}
|
|
|
|
// check that they've selected some tables to migrate
|
|
if ( $( '#migrate-selected' ).is( ':checked' ) && null === $( '#select-tables' ).val() ) {
|
|
alert( wpmdb_strings.please_select_one_table );
|
|
return;
|
|
}
|
|
|
|
// check that they've selected some tables to backup
|
|
if ( 'savefile' !== wpmdb_migration_type() && $( '#backup-manual-select' ).is( ':checked' ) && null === $( '#select-backup' ).val() ) {
|
|
alert( wpmdb_strings.please_select_one_table_backup );
|
|
return;
|
|
}
|
|
|
|
var create_new_profile = false;
|
|
|
|
if ( $( '#create_new' ).is( ':checked' ) ) {
|
|
create_new_profile = true;
|
|
}
|
|
var profile_name = $( '.create-new-profile' ).val();
|
|
|
|
doing_save_profile = true;
|
|
profile = $( $( '#migrate-form' )[0].elements ).not( '.auth-credentials' ).serialize();
|
|
|
|
$( '.save-settings-button' ).attr( 'disabled', 'disabled' )
|
|
.after( '<img src="' + spinner_url + '" alt="" class="save-profile-ajax-spinner general-spinner" />' );
|
|
|
|
doing_ajax = true;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_save_profile',
|
|
profile: profile,
|
|
nonce: wpmdb_data.nonces.save_profile
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
doing_ajax = false;
|
|
alert( wpmdb_strings.save_profile_problem );
|
|
$( '.save-settings-button' ).removeAttr( 'disabled' );
|
|
$( '.save-profile-ajax-spinner' ).remove();
|
|
$( '.save-settings-button' ).after( '<span class="ajax-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.ajax-success-msg' ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
doing_save_profile = false;
|
|
},
|
|
success: function( data ) {
|
|
var updated_profile_id = parseInt( $( '#migrate-form input[name=save_migration_profile_option]:checked' ).val(), 10 ) + 1;
|
|
doing_ajax = false;
|
|
$( '.save-settings-button' ).removeAttr( 'disabled' );
|
|
$( '.save-profile-ajax-spinner' ).remove();
|
|
$( '.save-settings-button' ).after( '<span class="ajax-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.ajax-success-msg' ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
doing_save_profile = false;
|
|
$( '.create-new-profile' ).val( '' );
|
|
|
|
if ( create_new_profile ) {
|
|
var new_profile_key = parseInt( data, 10 );
|
|
var new_profile_id = new_profile_key + 1;
|
|
var new_li = $( '<li><span class="delete-profile" data-profile-id="' + new_profile_id + '"></span><label for="profile-' + new_profile_id + '"><input id="profile-' + new_profile_id + '" value="' + new_profile_key + '" name="save_migration_profile_option" type="radio"></label></li>' );
|
|
new_li.find( 'label' ).append( document.createTextNode( ' ' + profile_name ) );
|
|
updated_profile_id = new_profile_id;
|
|
|
|
$( '#create_new' ).parents( 'li' ).before( new_li );
|
|
$( '#profile-' + new_profile_id ).attr( 'checked', 'checked' );
|
|
}
|
|
|
|
// Push updated profile id to history if available
|
|
var updated_url = window.location.href.replace( '#migrate', '' ).replace( /&wpmdb-profile=-?\d+/, '' ) + '&wpmdb-profile=' + updated_profile_id;
|
|
var updated_profile_name = $( '#migrate-form input[name=save_migration_profile_option]:checked' ).parent().text().trim();
|
|
|
|
if ( 'function' === typeof window.history.pushState ) {
|
|
if ( $( '#migrate-form .crumbs' ).length ) {
|
|
$( '#migrate-form .crumbs .crumb:last' ).text( updated_profile_name );
|
|
} else {
|
|
var $crumbs = $( '<div class="crumbs" />' )
|
|
.append( '<a class="crumb" href="' + wpmdb_data.this_plugin_base + '"> Saved Profiles </a>' )
|
|
.append( '<span class="crumb">' + updated_profile_name + '</span>' );
|
|
$( '#migrate-form' ).prepend( $crumbs );
|
|
}
|
|
window.history.pushState( { updated_profile_id: updated_profile_id }, null, updated_url );
|
|
}
|
|
}
|
|
} );
|
|
}
|
|
|
|
// save file (export) / push / pull special conditions
|
|
function move_connection_info_box() {
|
|
$( '.connection-status' ).hide();
|
|
$( '.prefix-notice' ).hide();
|
|
$( '.ssl-notice' ).hide();
|
|
$( '.different-plugin-version-notice' ).hide();
|
|
$( '.step-two' ).show();
|
|
$( '.backup-options' ).show();
|
|
$( '.keep-active-plugins' ).show();
|
|
$( '.directory-permission-notice' ).hide();
|
|
$( '#create-backup' ).removeAttr( 'disabled' );
|
|
$( '#create-backup-label' ).removeClass( 'disabled' );
|
|
$( '.backup-option-disabled' ).hide();
|
|
$( '.compatibility-older-mysql' ).hide();
|
|
var connection_info = $.trim( $( '.pull-push-connection-info' ).val() ).split( '\n' );
|
|
var profile_name;
|
|
wpmdb_toggle_migration_action_text();
|
|
|
|
$.wpmdb.do_action( 'move_connection_info_box', {
|
|
'migration_type': wpmdb_migration_type(),
|
|
'last_migration_type': last_replace_switch
|
|
} );
|
|
|
|
if ( 'pull' === wpmdb_migration_type() ) {
|
|
$( '.pull-list li' ).append( $connection_info_box );
|
|
$connection_info_box.show( function() {
|
|
var connection_textarea = $( this ).find( '.pull-push-connection-info' );
|
|
if ( ! connection_textarea.val() ) {
|
|
connection_textarea.focus();
|
|
}
|
|
} );
|
|
if ( ( 'push' === wpmdb.migration_selection || 'savefile' === wpmdb.migration_selection ) && 2 === connection_info.length ) {
|
|
wpmdb.force_reconnect = true;
|
|
$( '.pull-list li' ).append( $connection_info_box );
|
|
$( '.pull-push-connection-info' ).removeClass( 'temp-disabled' ).attr( 'readonly', 'readonly' );
|
|
$( '.connect-button' ).hide();
|
|
connection_box_changed();
|
|
return;
|
|
}
|
|
if ( connection_established ) {
|
|
$( '.connection-status' ).hide();
|
|
$( '.step-two' ).show();
|
|
$( '.table-prefix' ).html( wpmdb.common.connection_data.prefix );
|
|
$( '.backup-table-prefix' ).html( wpmdb_data.site_details.prefix );
|
|
$( '.uploads-dir' ).html( wpmdb_data.this_uploads_dir );
|
|
if ( false === profile_name_edited ) {
|
|
profile_name = get_domain_name( wpmdb.common.connection_data.url );
|
|
$( '.create-new-profile' ).val( profile_name );
|
|
}
|
|
if ( true === show_prefix_notice ) {
|
|
$( '.prefix-notice.pull' ).show();
|
|
}
|
|
if ( true === show_ssl_notice ) {
|
|
$( '.ssl-notice' ).show();
|
|
}
|
|
if ( true === show_version_notice ) {
|
|
$( '.different-plugin-version-notice' ).show();
|
|
$( '.step-two' ).hide();
|
|
}
|
|
wpmdb_toggle_migration_action_text();
|
|
if ( false === wpmdb_data.write_permission ) {
|
|
$( '#create-backup' ).prop( 'checked', false );
|
|
$( '#create-backup' ).attr( 'disabled', 'disabled' );
|
|
$( '#create-backup-label' ).addClass( 'disabled' );
|
|
$( '.backup-option-disabled' ).show();
|
|
$( '.upload-directory-location' ).html( wpmdb_data.this_upload_dir_long );
|
|
}
|
|
} else {
|
|
$( '.connection-status' ).show();
|
|
$( '.step-two' ).hide();
|
|
}
|
|
} else if ( 'push' === wpmdb_migration_type() ) {
|
|
$( '.push-list li' ).append( $connection_info_box );
|
|
$connection_info_box.show( function() {
|
|
var connection_textarea = $( this ).find( '.pull-push-connection-info' );
|
|
if ( ! connection_textarea.val() ) {
|
|
connection_textarea.focus();
|
|
}
|
|
} );
|
|
if ( ( 'pull' === wpmdb.migration_selection || 'savefile' === wpmdb.migration_selection ) && 2 === connection_info.length ) {
|
|
wpmdb.force_reconnect = true;
|
|
$( '.push-list li' ).append( $connection_info_box );
|
|
$( '.pull-push-connection-info' ).removeClass( 'temp-disabled' ).attr( 'readonly', 'readonly' );
|
|
$( '.connect-button' ).hide();
|
|
connection_box_changed();
|
|
return;
|
|
}
|
|
if ( connection_established ) {
|
|
$( '.connection-status' ).hide();
|
|
$( '.step-two' ).show();
|
|
$( '.table-prefix' ).html( wpmdb_data.this_prefix );
|
|
$( '.backup-table-prefix' ).html( wpmdb.common.connection_data.prefix );
|
|
$( '.uploads-dir' ).html( wpmdb.common.connection_data.uploads_dir );
|
|
if ( false === profile_name_edited ) {
|
|
profile_name = get_domain_name( wpmdb.common.connection_data.url );
|
|
$( '.create-new-profile' ).val( profile_name );
|
|
}
|
|
if ( true === show_prefix_notice ) {
|
|
$( '.prefix-notice.push' ).show();
|
|
}
|
|
if ( true === show_ssl_notice ) {
|
|
$( '.ssl-notice' ).show();
|
|
}
|
|
if ( true === show_version_notice ) {
|
|
$( '.different-plugin-version-notice' ).show();
|
|
$( '.step-two' ).hide();
|
|
}
|
|
wpmdb_toggle_migration_action_text();
|
|
if ( '0' === wpmdb.common.connection_data.write_permissions ) {
|
|
$( '#create-backup' ).prop( 'checked', false );
|
|
$( '#create-backup' ).attr( 'disabled', 'disabled' );
|
|
$( '#create-backup-label' ).addClass( 'disabled' );
|
|
$( '.backup-option-disabled' ).show();
|
|
$( '.upload-directory-location' ).html( wpmdb.common.connection_data.upload_dir_long );
|
|
}
|
|
} else {
|
|
$( '.connection-status' ).show();
|
|
$( '.step-two' ).hide();
|
|
}
|
|
} else if ( 'savefile' === wpmdb_migration_type() || 'find_replace' === wpmdb_migration_type() ) {
|
|
$( '.connection-status' ).hide();
|
|
$( '.step-two' ).show();
|
|
$( '.table-prefix' ).html( wpmdb_data.this_prefix );
|
|
if ( false === profile_name_edited ) {
|
|
$( '.create-new-profile' ).val( '' );
|
|
}
|
|
|
|
if ( 'savefile' === wpmdb_migration_type() ) {
|
|
$( '.backup-options' ).hide();
|
|
$( '.compatibility-older-mysql' ).show();
|
|
}
|
|
|
|
$( '.keep-active-plugins' ).hide();
|
|
if ( false === wpmdb_data.write_permission ) {
|
|
$( '.directory-permission-notice' ).show();
|
|
$( '.step-two' ).hide();
|
|
}
|
|
|
|
if ( 'find_replace' === wpmdb_migration_type() ) {
|
|
if ( 'true' === wpmdb_data.is_multisite ) {
|
|
var $old_replace_col = $( '.old-replace-col' ).eq( 1 );
|
|
$old_replace_col.parent().removeClass( 'pin' ).find( '.replace-remove-row' ).show();
|
|
$old_replace_col.find( 'input' ).removeAttr( 'readonly' );
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
maybe_show_mixed_cased_table_name_warning();
|
|
}
|
|
|
|
// move around textarea depending on whether or not the push/pull options are selected
|
|
var $connection_info_box = $( '.connection-info-wrapper' );
|
|
move_connection_info_box();
|
|
|
|
$( '.migrate-selection.option-group input[type=radio]' ).change( function() {
|
|
move_connection_info_box();
|
|
wpmdb.migration_selection = wpmdb_migration_type();
|
|
if ( connection_established ) {
|
|
change_replace_values();
|
|
}
|
|
wpmdb.functions.update_migrate_button_text();
|
|
} );
|
|
|
|
function change_replace_values() {
|
|
var old_url = null;
|
|
var old_path = null;
|
|
if ( null !== wpmdb.common.previous_connection_data && 'object' === typeof wpmdb.common.previous_connection_data && wpmdb.common.previous_connection_data.url !== wpmdb.common.connection_data.url ) {
|
|
old_url = remove_protocol( wpmdb.common.previous_connection_data.url );
|
|
old_path = wpmdb.common.previous_connection_data.path;
|
|
}
|
|
|
|
if ( 'push' === wpmdb_migration_type() || 'savefile' === wpmdb_migration_type() ) {
|
|
if ( 'pull' === last_replace_switch ) {
|
|
$( '.replace-row' ).each( function() {
|
|
var old_val = $( '.old-replace-col input', this ).val();
|
|
$( '.old-replace-col input', this ).val( $( '.replace-right-col input', this ).val() );
|
|
$( '.replace-right-col input', this ).val( old_val );
|
|
} );
|
|
} else if ( 'push' === last_replace_switch && 'push' === wpmdb_migration_type() && null !== old_url && null !== old_path ) {
|
|
$( '.replace-row' ).each( function() {
|
|
var old_val = $( '.replace-right-col input', this ).val();
|
|
if ( old_val === old_path ) {
|
|
$( '.replace-right-col input', this ).val( wpmdb.common.connection_data.path );
|
|
}
|
|
if ( old_val === old_url ) {
|
|
$( '.replace-right-col input', this ).val( remove_protocol( wpmdb.common.connection_data.url ) );
|
|
}
|
|
} );
|
|
}
|
|
$.wpmdb.do_action( 'wpmdb_update_push_table_select' );
|
|
$( '#select-post-types' ).remove();
|
|
$( '.exclude-post-types-warning' ).after( $push_post_type_select );
|
|
exclude_post_types_warning();
|
|
$( '#select-backup' ).remove();
|
|
$( '.backup-tables-wrap' ).prepend( $push_select_backup );
|
|
} else if ( 'pull' === wpmdb_migration_type() ) {
|
|
if ( '' === last_replace_switch || 'push' === last_replace_switch || 'savefile' === last_replace_switch ) {
|
|
$( '.replace-row' ).each( function() {
|
|
var old_val = $( '.old-replace-col input', this ).val();
|
|
$( '.old-replace-col input', this ).val( $( '.replace-right-col input', this ).val() );
|
|
$( '.replace-right-col input', this ).val( old_val );
|
|
} );
|
|
} else if ( 'pull' === last_replace_switch && 'pull' === wpmdb_migration_type() && null !== old_url && null !== old_path ) {
|
|
$( '.replace-row' ).each( function() {
|
|
var old_val = $( '.old-replace-col input', this ).val();
|
|
if ( old_val === old_path ) {
|
|
$( '.old-replace-col input', this ).val( wpmdb.common.connection_data.path );
|
|
}
|
|
if ( old_val === old_url ) {
|
|
$( '.old-replace-col input', this ).val( remove_protocol( wpmdb.common.connection_data.url ) );
|
|
}
|
|
} );
|
|
}
|
|
$.wpmdb.do_action( 'wpmdb_update_pull_table_select' );
|
|
$( '#select-post-types' ).remove();
|
|
$( '.exclude-post-types-warning' ).after( $pull_post_type_select );
|
|
exclude_post_types_warning();
|
|
$( '#select-backup' ).remove();
|
|
$( '.backup-tables-wrap' ).prepend( $pull_select_backup );
|
|
}
|
|
last_replace_switch = wpmdb_migration_type();
|
|
}
|
|
|
|
// hide second section if pull or push is selected with no connection established
|
|
if ( ( 'pull' === wpmdb_migration_type() || 'push' === wpmdb_migration_type() ) && ! connection_established ) {
|
|
$( '.step-two' ).hide();
|
|
$( '.connection-status' ).show();
|
|
}
|
|
|
|
// show / hide GUID helper description
|
|
$( '.general-helper' ).click( function( e ) {
|
|
e.preventDefault();
|
|
var icon = $( this ),
|
|
bubble = $( this ).next();
|
|
|
|
// Close any that are already open
|
|
$( '.helper-message' ).not( bubble ).hide();
|
|
|
|
var position = icon.position();
|
|
if ( bubble.hasClass( 'bottom' ) ) {
|
|
var bubble_offset = 1;
|
|
|
|
if ( $( this ).is( ':first-child' ) ) {
|
|
bubble_offset = 3;
|
|
}
|
|
|
|
bubble.css( {
|
|
'left': ( ( position.left - bubble.width() / 2 ) - bubble_offset ) + 'px',
|
|
'top': ( position.top + icon.height() + 9 ) + 'px'
|
|
} );
|
|
} else {
|
|
bubble.css( {
|
|
'left': ( position.left + icon.width() + 9 ) + 'px',
|
|
'top': ( position.top + icon.height() / 2 - 18 ) + 'px'
|
|
} );
|
|
}
|
|
bubble.toggle();
|
|
e.stopPropagation();
|
|
} );
|
|
|
|
$( 'body' ).click( function() {
|
|
$( '.helper-message' ).hide();
|
|
} );
|
|
|
|
$( '.helper-message' ).click( function( e ) {
|
|
e.stopPropagation();
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', '.show-errors-toggle', function( e ) {
|
|
e.preventDefault();
|
|
$( this ).next( '.migration-php-errors' ).toggle();
|
|
} );
|
|
|
|
/**
|
|
* Core plugin wrapper for the common AJAX error detecting method
|
|
*
|
|
* @param text
|
|
* @param code
|
|
* @param jqXHR
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
function get_ajax_errors( text, code, jqXHR ) {
|
|
return wpmdbGetAjaxErrors( wpmdb_strings.connection_local_server_problem, code, text, jqXHR );
|
|
}
|
|
|
|
// migrate / settings tabs
|
|
$( '.nav-tab' ).click( function() {
|
|
var hash = $( this ).attr( 'data-div-name' );
|
|
hash = hash.replace( '-tab', '' );
|
|
window.location.hash = hash;
|
|
switch_to_plugin_tab( hash, false );
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', 'a[href^="#"]', function( event ) {
|
|
var href = $( event.target ).attr( 'href' );
|
|
var tab_name = href.substr( 1 );
|
|
|
|
if ( tab_name ) {
|
|
var nav_tab = $( '.' + tab_name );
|
|
if ( 1 === nav_tab.length ) {
|
|
nav_tab.trigger( 'click' );
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
} );
|
|
|
|
// repeatable fields
|
|
$( 'body' ).on( 'click', '.add-row', function() {
|
|
var $parent_tr = $( this ).parents( 'tr' );
|
|
$parent_tr.before( $( '.original-repeatable-field' ).clone().removeClass( 'original-repeatable-field' ) );
|
|
$parent_tr.prev().find( '.old-replace-col input' ).focus();
|
|
} );
|
|
|
|
// repeatable fields
|
|
$( 'body' ).on( 'click', '.replace-remove-row', function() {
|
|
$( this ).parents( 'tr' ).remove();
|
|
if ( 2 >= $( '.replace-row' ).length ) {
|
|
$( '.no-replaces-message' ).show();
|
|
}
|
|
|
|
var prev_id = $( this ).prev().attr( 'id' );
|
|
if ( 'new-url' === prev_id || 'new-path' === prev_id ) {
|
|
$( '#' + prev_id + '-missing-warning' ).hide();
|
|
}
|
|
} );
|
|
|
|
// Hide New URL & New Path Warnings on change.
|
|
$( 'body' )
|
|
.on( 'change', '#new-url', function() {
|
|
$( '#new-url-missing-warning' ).hide();
|
|
} )
|
|
.on( 'change', '#new-path', function() {
|
|
$( '#new-path-missing-warning' ).hide();
|
|
} );
|
|
|
|
// Copy Find field to associated Replace field on arrow click.
|
|
$( 'body' ).on( 'click', '.arrow-col', function() {
|
|
var replace_row_arrow = this;
|
|
|
|
if ( $( replace_row_arrow ).hasClass( 'disabled' ) ) {
|
|
return;
|
|
}
|
|
|
|
var original_value = $( replace_row_arrow ).prev( 'td' ).find( 'input' ).val();
|
|
var new_value_input = $( replace_row_arrow ).next( 'td' ).find( 'input' );
|
|
new_value_input.val( original_value );
|
|
|
|
// Hide New URL or New Path Warning if changed.
|
|
if ( 'new-url' === new_value_input.prop( 'id' ) ) {
|
|
$( '#new-url-missing-warning' ).hide();
|
|
} else if ( 'new-path' === new_value_input.prop( 'id' ) ) {
|
|
$( '#new-path-missing-warning' ).hide();
|
|
}
|
|
} );
|
|
|
|
$( '.add-replace' ).click( function() {
|
|
$( '.replace-fields' ).prepend( $( '.original-repeatable-field' ).clone().removeClass( 'original-repeatable-field' ) );
|
|
$( '.no-replaces-message' ).hide();
|
|
} );
|
|
|
|
$( '#find-and-replace-sort tbody' ).sortable( {
|
|
items: '> tr:not(.pin)',
|
|
handle: 'td:first',
|
|
start: function() {
|
|
$( '.sort-handle' ).css( 'cursor', '-webkit-grabbing' );
|
|
$( '.sort-handle' ).css( 'cursor', '-moz-grabbing' );
|
|
},
|
|
stop: function() {
|
|
$( '.sort-handle' ).css( 'cursor', '-webkit-grab' );
|
|
$( '.sort-handle' ).css( 'cursor', '-moz-grab' );
|
|
}
|
|
} );
|
|
|
|
function validate_url( url ) {
|
|
return /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( url );
|
|
}
|
|
|
|
function switch_to_plugin_tab( hash, skip_addons_check ) {
|
|
$( '.nav-tab' ).removeClass( 'nav-tab-active' );
|
|
$( '.nav-tab.' + hash ).addClass( 'nav-tab-active' );
|
|
$( '.content-tab' ).hide();
|
|
$( '.' + hash + '-tab' ).show();
|
|
|
|
if ( 'settings' === hash ) {
|
|
if ( true === should_check_licence() ) {
|
|
$( 'p.licence-status' ).append( 'Checking License... ' ).append( ajax_spinner );
|
|
check_licence();
|
|
}
|
|
}
|
|
|
|
if ( 'help' === hash ) {
|
|
refresh_debug_log();
|
|
if ( true === should_check_licence() ) {
|
|
$( '.support-content p' ).append( ajax_spinner );
|
|
check_licence();
|
|
}
|
|
}
|
|
|
|
if ( 'addons' === hash && true !== skip_addons_check ) {
|
|
if ( true === should_check_licence() ) {
|
|
$( '.addons-content p' ).append( ajax_spinner );
|
|
check_licence();
|
|
}
|
|
}
|
|
}
|
|
|
|
function should_check_licence() {
|
|
if ( false === checked_licence && '1' === wpmdb_data.has_licence && 'true' === wpmdb_data.is_pro ) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
var hash = '';
|
|
|
|
// check for hash in url (settings || migrate) switch tabs accordingly
|
|
if ( window.location.hash ) {
|
|
hash = window.location.hash.substring( 1 );
|
|
switch_to_plugin_tab( hash, false );
|
|
}
|
|
|
|
if ( '' !== get_query_var( 'install-plugin' ) ) {
|
|
hash = 'addons';
|
|
checked_licence = true;
|
|
switch_to_plugin_tab( hash, true );
|
|
}
|
|
|
|
// process notice links clicks, eg. dismiss, reminder
|
|
$( '.notice-link' ).click( function( e ) {
|
|
e.preventDefault();
|
|
$( this ).closest( '.inline-message' ).hide();
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_process_notice_link',
|
|
nonce: wpmdb_data.nonces.process_notice_link,
|
|
notice: $( this ).data( 'notice' ),
|
|
type: $( this ).data( 'type' ),
|
|
reminder: $( this ).data( 'reminder' )
|
|
}
|
|
} );
|
|
} );
|
|
|
|
// When read-only connection info is copied, convert it to one line
|
|
$( '#connection_info' ).on( 'copy', function( e ) {
|
|
var $this = $( this );
|
|
|
|
// Test for two lines
|
|
var lines = $this.val().split( '\n' );
|
|
if ( 2 === lines.length ) {
|
|
|
|
// Wrapping in a try in case there's no browser support
|
|
try {
|
|
|
|
// Combine the two lines into one
|
|
e.originalEvent.clipboardData.setData( 'text/plain', lines.join( ' ' ) );
|
|
e.preventDefault(); // Default behaviour is to copy any selected text
|
|
}
|
|
catch ( err ) {
|
|
|
|
// Do nothing. Allow normal copying
|
|
}
|
|
}
|
|
});
|
|
|
|
// regenerates the saved secret key
|
|
$( '.reset-api-key' ).click( function() {
|
|
var answer = confirm( wpmdb_strings.reset_api_key );
|
|
|
|
if ( ! answer || doing_reset_api_key_ajax ) {
|
|
return;
|
|
}
|
|
|
|
doing_reset_api_key_ajax = true;
|
|
$( '.reset-api-key' ).after( '<img src="' + spinner_url + '" alt="" class="reset-api-key-ajax-spinner general-spinner" />' );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_reset_api_key',
|
|
nonce: wpmdb_data.nonces.reset_api_key
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.reset_api_key_problem );
|
|
$( '.reset-api-key-ajax-spinner' ).remove();
|
|
doing_reset_api_key_ajax = false;
|
|
},
|
|
success: function( data ) {
|
|
$( '.reset-api-key-ajax-spinner' ).remove();
|
|
doing_reset_api_key_ajax = false;
|
|
$( '.connection-info' ).html( data );
|
|
wpmdb_data.connection_info = $.trim( data ).split( '\n' );
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
// Copy the connection info to the clipboard
|
|
$( '.copy-api-key' ).click( function() {
|
|
|
|
var $el = $( this );
|
|
|
|
// Get connection_info input
|
|
var $connection_info = $( '#connection_info' );
|
|
|
|
// Get the connection info
|
|
var two_lines = $connection_info.val();
|
|
|
|
// Make it one line, if it's two
|
|
var one_line = two_lines.replace( '\n', ' ' );
|
|
|
|
// Replace two lines with one
|
|
$connection_info.val( one_line );
|
|
|
|
// Select the input val
|
|
$connection_info.select();
|
|
|
|
try {
|
|
|
|
// Copy connection_info
|
|
document.execCommand( 'copy' );
|
|
|
|
// Unselect connection_info input
|
|
$connection_info.blur();
|
|
|
|
// show confirmation
|
|
$el.css( 'color', 'transparent' );
|
|
var $confirmation = $( '.copy-api-key-confirmation' ).show();
|
|
|
|
// fadeout confirmation
|
|
setTimeout( function() {
|
|
$confirmation.fadeOut( 'fast' );
|
|
setTimeout( function() {
|
|
$el.css( 'color', '' );
|
|
}, 200 );
|
|
|
|
}, 1000 );
|
|
}
|
|
catch ( err ) {
|
|
alert( 'please press Ctrl/Cmd+C to copy' );
|
|
}
|
|
|
|
// Replace the input val with the two lines
|
|
$connection_info.val( two_lines );
|
|
} );
|
|
|
|
// show / hide table select box when specific settings change
|
|
$( 'input.multiselect-toggle' ).change( function() {
|
|
$( this ).parents( '.expandable-content' ).children( '.select-wrap' ).toggle();
|
|
} );
|
|
|
|
$( '.show-multiselect' ).each( function() {
|
|
if ( $( this ).is( ':checked' ) ) {
|
|
$( this ).parents( '.option-section' ).children( '.header-expand-collapse' ).children( '.expand-collapse-arrow' ).removeClass( 'collapsed' );
|
|
$( this ).parents( '.expandable-content' ).show();
|
|
$( this ).parents( '.expandable-content' ).children( '.select-wrap' ).toggle();
|
|
}
|
|
} );
|
|
|
|
$( 'input[name=backup_option]' ).change( function() {
|
|
$( '.backup-tables-wrap' ).hide();
|
|
if ( 'backup_manual_select' === $( this ).val() ) {
|
|
$( '.backup-tables-wrap' ).show();
|
|
}
|
|
} );
|
|
|
|
if ( $( '#backup-manual-select' ).is( ':checked' ) ) {
|
|
$( '.backup-tables-wrap' ).show();
|
|
}
|
|
|
|
$( '.plugin-compatibility-save' ).click( function() {
|
|
if ( doing_plugin_compatibility_ajax ) {
|
|
return;
|
|
}
|
|
$( this ).addClass( 'disabled' );
|
|
var select_element = $( '#selected-plugins' );
|
|
$( select_element ).attr( 'disabled', 'disabled' );
|
|
|
|
$( '.plugin-compatibility-success-msg' ).remove();
|
|
|
|
doing_plugin_compatibility_ajax = true;
|
|
$( this ).after( '<img src="' + spinner_url + '" alt="" class="plugin-compatibility-spinner general-spinner" />' );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_blacklist_plugins',
|
|
blacklist_plugins: $( select_element ).val(),
|
|
nonce: wpmdb_data.nonces.blacklist_plugins
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.blacklist_problem + '\r\n\r\n' + wpmdb_strings.status + ' ' + jqXHR.status + ' ' + jqXHR.statusText + '\r\n\r\n' + wpmdb_strings.response + '\r\n' + jqXHR.responseText );
|
|
$( select_element ).removeAttr( 'disabled' );
|
|
$( '.plugin-compatibility-save' ).removeClass( 'disabled' );
|
|
doing_plugin_compatibility_ajax = false;
|
|
$( '.plugin-compatibility-spinner' ).remove();
|
|
},
|
|
success: function( data ) {
|
|
if ( '' !== $.trim( data ) ) {
|
|
alert( data );
|
|
}
|
|
$( select_element ).removeAttr( 'disabled' );
|
|
$( '.plugin-compatibility-save' ).removeClass( 'disabled' );
|
|
doing_plugin_compatibility_ajax = false;
|
|
$( '.plugin-compatibility-spinner' ).remove();
|
|
$( '.plugin-compatibility-save' ).after( '<span class="plugin-compatibility-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.plugin-compatibility-success-msg' ).fadeOut( 2000 );
|
|
}
|
|
} );
|
|
} );
|
|
|
|
// delete a profile from the migrate form area
|
|
$( 'body' ).on( 'click', '.delete-profile', function() {
|
|
var name = $( this ).next().clone();
|
|
$( 'input', name ).remove();
|
|
name = $.trim( $( name ).html() );
|
|
var answer = confirm( wpmdb_strings.remove_profile.replace( '{{profile}}', name ) );
|
|
|
|
if ( ! answer ) {
|
|
return;
|
|
}
|
|
var $profile_li = $( this ).parent();
|
|
|
|
if ( $profile_li.find( 'input:checked' ).length ) {
|
|
var $new_profile_li = $profile_li.siblings().last();
|
|
$new_profile_li.find( 'input[type=radio]' ).prop( 'checked', 'checked' );
|
|
$new_profile_li.find( 'input[type=text]' ).focus();
|
|
$( '#migrate-form .crumbs .crumb:last' ).text( 'New Profile' );
|
|
|
|
if ( 'function' === typeof window.history.pushState ) {
|
|
var updated_url = window.location.href.replace( '#migrate', '' ).replace( /&wpmdb-profile=-?\d+/, '' ) + '&wpmdb-profile=-1';
|
|
window.history.pushState( { updated_profile_id: -1 }, null, updated_url );
|
|
}
|
|
}
|
|
|
|
$profile_li.fadeOut( 500 );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_delete_migration_profile',
|
|
profile_id: $( this ).attr( 'data-profile-id' ),
|
|
nonce: wpmdb_data.nonces.delete_migration_profile
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.remove_profile_problem );
|
|
},
|
|
success: function( data ) {
|
|
if ( '-1' === data ) {
|
|
alert( wpmdb_strings.remove_profile_not_found );
|
|
}
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
// deletes a profile from the main profile selection screen
|
|
$( '.main-list-delete-profile-link' ).click( function() {
|
|
var name = $( this ).prev().html();
|
|
var answer = confirm( wpmdb_strings.remove_profile.replace( '{{profile}}', name ) );
|
|
|
|
if ( ! answer ) {
|
|
return;
|
|
}
|
|
|
|
$( this ).parent().fadeOut( 500 );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_delete_migration_profile',
|
|
profile_id: $( this ).attr( 'data-profile-id' ),
|
|
nonce: wpmdb_data.nonces.delete_migration_profile
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.remove_profile_problem );
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
// warn the user when editing the connection info after a connection has been established
|
|
$( 'body' ).on( 'click', '.temp-disabled', function() {
|
|
var answer = confirm( wpmdb_strings.change_connection_info );
|
|
|
|
if ( ! answer ) {
|
|
return;
|
|
} else {
|
|
$( '.ssl-notice' ).hide();
|
|
$( '.different-plugin-version-notice' ).hide();
|
|
$( '.migrate-db-button' ).show();
|
|
$( '.temp-disabled' ).removeAttr( 'readonly' );
|
|
$( '.temp-disabled' ).removeClass( 'temp-disabled' );
|
|
$( '.connect-button' ).show();
|
|
$( '.step-two' ).hide();
|
|
$( '.connection-status' ).show().html( wpmdb_strings.enter_connection_info );
|
|
connection_established = false;
|
|
}
|
|
} );
|
|
|
|
// ajax request for settings page when checking/unchecking setting radio buttons
|
|
$( '.settings-tab input[type=checkbox]' ).change( function() {
|
|
if ( 'plugin-compatibility' === $( this ).attr( 'id' ) ) {
|
|
return;
|
|
}
|
|
var checked = $( this ).is( ':checked' );
|
|
var setting = $( this ).attr( 'id' );
|
|
var $status = $( this ).closest( 'td' ).next( 'td' ).find( '.setting-status' );
|
|
|
|
$( '.ajax-success-msg' ).remove();
|
|
$status.after( ajax_spinner );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_save_setting',
|
|
checked: checked,
|
|
setting: setting,
|
|
nonce: wpmdb_data.nonces.save_setting
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
alert( wpmdb_strings.save_settings_problem );
|
|
$( '.ajax-spinner' ).remove();
|
|
},
|
|
success: function( data ) {
|
|
$( '.ajax-spinner' ).remove();
|
|
$status.append( '<span class="ajax-success-msg">' + wpmdb_strings.saved + '</span>' );
|
|
$( '.ajax-success-msg' ).fadeOut( 2000, function() {
|
|
$( this ).remove();
|
|
} );
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
// disable form submissions
|
|
$( '.migrate-form' ).submit( function( e ) {
|
|
e.preventDefault();
|
|
} );
|
|
|
|
// fire connection_box_changed when the connect button is pressed
|
|
$( '.connect-button' ).click( function( event ) {
|
|
event.preventDefault();
|
|
$( this ).blur();
|
|
connection_box_changed();
|
|
} );
|
|
|
|
// send paste even to connection_box_changed() function
|
|
$( '.pull-push-connection-info' ).bind( 'paste', function( e ) {
|
|
var $this = this;
|
|
setTimeout( function() {
|
|
connection_box_changed();
|
|
}, 0 );
|
|
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', '.try-again', function() {
|
|
$( '.pull-push-connection-info' ).removeClass( 'temp-disabled' );
|
|
connection_box_changed();
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', '.try-http', function() {
|
|
var connection_info = $.trim( $( '.pull-push-connection-info' ).val() ).split( '\n' );
|
|
var new_url = connection_info[ 0 ].replace( 'https', 'http' );
|
|
var new_contents = new_url + '\n' + connection_info[ 1 ];
|
|
$( '.pull-push-connection-info' ).val( new_contents );
|
|
connection_box_changed();
|
|
} );
|
|
|
|
$( '.create-new-profile' ).change( function() {
|
|
profile_name_edited = true;
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', '.temporarily-disable-ssl', function() {
|
|
var hash = '';
|
|
if ( window.location.hash ) {
|
|
hash = window.location.hash.substring( 1 );
|
|
}
|
|
$( this ).attr( 'href', $( this ).attr( 'href' ) + '&hash=' + hash );
|
|
} );
|
|
|
|
// fired when the connection info box changes (e.g. gets pasted into)
|
|
function connection_box_changed() {
|
|
var $this = $( '.pull-push-connection-info' );
|
|
|
|
if ( ( doing_ajax || $( $this ).hasClass( 'temp-disabled' ) ) && false === wpmdb.force_reconnect ) {
|
|
return;
|
|
}
|
|
wpmdb.force_reconnect = false;
|
|
var data = $( '.pull-push-connection-info' ).val();
|
|
|
|
var connection_info = $.trim( data ).split( '\n' );
|
|
var error = false;
|
|
var error_message = '';
|
|
|
|
if ( '' === connection_info ) {
|
|
error = true;
|
|
error_message = wpmdb_strings.connection_info_missing;
|
|
}
|
|
|
|
// attempt to format the connection info from a single line
|
|
if ( 1 === connection_info.length && ! error ) {
|
|
var connection_words = $.trim( data ).split( ' ' );
|
|
if ( 2 === connection_words.length )
|
|
{
|
|
connection_info = connection_words;
|
|
}
|
|
}
|
|
|
|
if ( 2 !== connection_info.length && ! error ) {
|
|
error = true;
|
|
error_message = wpmdb_strings.connection_info_incorrect;
|
|
}
|
|
|
|
if ( ! error && ! validate_url( connection_info[ 0 ] ) ) {
|
|
error = true;
|
|
error_message = wpmdb_strings.connection_info_url_invalid;
|
|
}
|
|
|
|
var key_length = 0;
|
|
|
|
if ( 'undefined' !== typeof connection_info[ 1 ] ) {
|
|
key_length = connection_info[ 1 ].length;
|
|
}
|
|
|
|
if ( ! error && 32 !== key_length && 40 !== key_length ) {
|
|
error = true;
|
|
error_message = wpmdb_strings.connection_info_key_invalid;
|
|
}
|
|
|
|
if ( ! error && connection_info[ 0 ] === wpmdb_data.connection_info[ 0 ] ) {
|
|
error = true;
|
|
error_message = wpmdb_strings.connection_info_local_url;
|
|
}
|
|
|
|
if ( ! error && connection_info[ 1 ] === wpmdb_data.connection_info[ 1 ] ) {
|
|
error = true;
|
|
error_message = wpmdb_strings.connection_info_local_key;
|
|
}
|
|
if ( error ) {
|
|
$( '.connection-status' ).html( error_message );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
return;
|
|
}
|
|
|
|
var new_connection_info_contents = connection_info[ 0 ] + '\n' + connection_info[ 1 ];
|
|
|
|
// If connection info is a single line
|
|
if ( 1 === $.trim( data ).split( '\n' ).length ) {
|
|
|
|
// Repopulate the input with the info on two lines
|
|
$( '.pull-push-connection-info' ).val( new_connection_info_contents );
|
|
}
|
|
|
|
if ( false === wpmdb_data.openssl_available ) {
|
|
connection_info[ 0 ] = connection_info[ 0 ].replace( 'https://', 'http://' );
|
|
new_connection_info_contents = connection_info[ 0 ] + '\n' + connection_info[ 1 ];
|
|
$( '.pull-push-connection-info' ).val( new_connection_info_contents );
|
|
}
|
|
|
|
show_prefix_notice = false;
|
|
doing_ajax = true;
|
|
disable_export_type_controls();
|
|
|
|
if ( $( '.basic-access-auth-wrapper' ).is( ':visible' ) ) {
|
|
connection_info[ 0 ] = connection_info[ 0 ].replace( /\/\/(.*)@/, '//' );
|
|
connection_info[ 0 ] = connection_info[ 0 ].replace( '//', '//' + encodeURIComponent( $.trim( $( '.auth-username' ).val() ) ) + ':' + encodeURIComponent( $.trim( $( '.auth-password' ).val() ) ) + '@' );
|
|
new_connection_info_contents = connection_info[ 0 ] + '\n' + connection_info[ 1 ];
|
|
$( '.pull-push-connection-info' ).val( new_connection_info_contents );
|
|
$( '.basic-access-auth-wrapper' ).hide();
|
|
}
|
|
|
|
$( '.step-two' ).hide();
|
|
$( '.ssl-notice' ).hide();
|
|
$( '.prefix-notice' ).hide();
|
|
$( '.connection-status' ).show();
|
|
|
|
$( '.connection-status' ).html( wpmdb_strings.establishing_remote_connection );
|
|
$( '.connection-status' ).removeClass( 'notification-message error-notice migration-error' );
|
|
$( '.connection-status' ).append( ajax_spinner );
|
|
|
|
var intent = wpmdb_migration_type();
|
|
|
|
profile_name_edited = false;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_verify_connection_to_remote_site',
|
|
url: connection_info[ 0 ],
|
|
key: connection_info[ 1 ],
|
|
intent: intent,
|
|
nonce: wpmdb_data.nonces.verify_connection_to_remote_site
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
$( '.connection-status' ).html( get_ajax_errors( jqXHR.responseText, '(#100)', jqXHR ) );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
enable_export_type_controls();
|
|
},
|
|
success: function( data ) {
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
enable_export_type_controls();
|
|
|
|
if ( 'undefined' !== typeof data.wpmdb_error && 1 === data.wpmdb_error ) {
|
|
$( '.connection-status' ).html( data.body );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
|
|
if ( data.body.indexOf( '401 Unauthorized' ) > -1 ) {
|
|
$( '.basic-access-auth-wrapper' ).show();
|
|
}
|
|
|
|
if ( ! $( '.pull-push-connection-info' ).hasClass( 'temp-disabled' ) && ! $( '.connect-button' ).is( ':visible' ) ) {
|
|
$( '.pull-push-connection-info' ).removeAttr( 'readonly' );
|
|
$( '.connect-button' ).show();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
maybe_show_ssl_warning( connection_info[ 0 ], connection_info[ 1 ], data.scheme );
|
|
|
|
var profile_name = get_domain_name( data.url );
|
|
$( '.create-new-profile' ).val( profile_name );
|
|
|
|
$( '.pull-push-connection-info' ).addClass( 'temp-disabled' );
|
|
$( '.pull-push-connection-info' ).attr( 'readonly', 'readonly' );
|
|
$( '.connect-button' ).hide();
|
|
|
|
$( '.connection-status' ).hide();
|
|
$( '.step-two' ).show();
|
|
|
|
maybe_show_prefix_notice( data.prefix );
|
|
|
|
connection_established = true;
|
|
set_connection_data( data );
|
|
move_connection_info_box();
|
|
change_replace_values();
|
|
|
|
maybe_show_mixed_cased_table_name_warning();
|
|
|
|
refresh_table_selects();
|
|
|
|
$push_select_backup = $( $pull_select ).clone();
|
|
$( $push_select_backup ).attr( {
|
|
name: 'select_backup[]',
|
|
id: 'select-backup'
|
|
} );
|
|
|
|
var $post_type_select = document.createElement( 'select' );
|
|
$( $post_type_select ).attr( {
|
|
multiple: 'multiple',
|
|
name: 'select_post_types[]',
|
|
id: 'select-post-types',
|
|
class: 'multiselect'
|
|
} );
|
|
|
|
$.each( wpmdb.common.connection_data.post_types, function( index, value ) {
|
|
$( $post_type_select ).append( '<option value="' + value + '">' + value + '</option>' );
|
|
} );
|
|
|
|
$pull_post_type_select = $post_type_select;
|
|
|
|
$( '#new-path-missing-warning, #new-url-missing-warning' ).hide();
|
|
|
|
if ( 'pull' === wpmdb_migration_type() ) {
|
|
$( '#new-url' ).val( remove_protocol( wpmdb_data.this_url ) );
|
|
$( '#new-path' ).val( wpmdb_data.this_path );
|
|
if ( 'true' === wpmdb_data.is_multisite ) {
|
|
$( '#new-domain' ).val( wpmdb_data.this_domain );
|
|
$( '.replace-row.pin .old-replace-col input[type="text"]' ).val( remove_protocol( data.url ) );
|
|
}
|
|
$( '#old-url' ).val( remove_protocol( data.url ) );
|
|
$( '#old-path' ).val( data.path );
|
|
|
|
$.wpmdb.do_action( 'wpmdb_update_pull_table_select' );
|
|
$( '#select-post-types' ).remove();
|
|
$( '.exclude-post-types-warning' ).after( $pull_post_type_select );
|
|
exclude_post_types_warning();
|
|
$( '.table-prefix' ).html( data.prefix );
|
|
$( '.backup-table-prefix' ).html( wpmdb_data.site_details.prefix );
|
|
$( '.uploads-dir' ).html( wpmdb_data.this_uploads_dir );
|
|
} else {
|
|
$( '#new-url' ).val( remove_protocol( data.url ) );
|
|
$( '#new-path' ).val( data.path );
|
|
|
|
if ( 'true' === wpmdb_data.is_multisite ) {
|
|
$( '.replace-row.pin .old-replace-col input[type="text"]' ).val( remove_protocol( wpmdb_data.this_url ) );
|
|
}
|
|
$.wpmdb.do_action( 'wpmdb_update_push_table_select' );
|
|
$( '#select-backup' ).remove();
|
|
$( '.backup-tables-wrap' ).prepend( $push_select_backup );
|
|
}
|
|
|
|
wpmdb.common.next_step_in_migration = {
|
|
fn: $.wpmdb.do_action,
|
|
args: [ 'verify_connection_to_remote_site', wpmdb.common.connection_data ]
|
|
};
|
|
wpmdb.functions.execute_next_step();
|
|
}
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
// Sets the initial Pause/Resume button event to Pause
|
|
$( 'body' ).on( 'click', '.pause-resume', function( event ) {
|
|
set_pause_resume_button( event );
|
|
} );
|
|
|
|
function cancel_migration( event ) {
|
|
migration_cancelled = true;
|
|
cancelling_text = wpmdb_strings.cancelling_migration;
|
|
$( '.migration-controls' ).css( { visibility: 'hidden' } );
|
|
|
|
if ( 'find_replace' === migration_intent ) {
|
|
cancelling_text = wpmdb_strings.cancelling_find_replace;
|
|
}
|
|
|
|
wpmdb.current_migration.setState( cancelling_text, wpmdb_strings.completing_current_request, 'cancelling' );
|
|
|
|
if ( true === migration_paused ) {
|
|
migration_paused = false;
|
|
wpmdb.functions.execute_next_step();
|
|
}
|
|
}
|
|
|
|
$( 'body' ).on( 'click', '.cancel', function( event ) {
|
|
cancel_migration( event );
|
|
} );
|
|
|
|
$( '.enter-licence' ).click( function() {
|
|
$( '.settings' ).click();
|
|
$( '.licence-input' ).focus();
|
|
} );
|
|
|
|
wpmdb.functions.execute_next_step = function() {
|
|
|
|
// if delay is set, set a timeout for delay to recall this function, then return
|
|
if ( 0 < delay_between_requests && false === flag_skip_delay ) {
|
|
setTimeout( function() {
|
|
flag_skip_delay = true;
|
|
wpmdb.functions.execute_next_step();
|
|
}, delay_between_requests );
|
|
return;
|
|
} else {
|
|
flag_skip_delay = false;
|
|
}
|
|
|
|
if ( true === migration_paused ) {
|
|
$( '.migration-progress-ajax-spinner' ).hide();
|
|
|
|
// Pause the timer
|
|
wpmdb.current_migration.pauseTimer();
|
|
|
|
var pause_text = '';
|
|
if ( true === is_auto_pause_before_finalize ) {
|
|
pause_text = wpmdb_strings.paused_before_finalize;
|
|
is_auto_pause_before_finalize = false;
|
|
|
|
if ( 'find_replace' === wpmdb_migration_type() ) {
|
|
pause_text = wpmdb_strings.find_replace_paused_before_finalize;
|
|
}
|
|
} else {
|
|
pause_text = wpmdb_strings.paused;
|
|
}
|
|
|
|
wpmdb.current_migration.setState( null, pause_text, 'paused' );
|
|
|
|
// Re-bind Pause/Resume button to Resume when we are finally Paused
|
|
$( 'body' ).on( 'click', '.pause-resume', function( event ) {
|
|
set_pause_resume_button( event );
|
|
} );
|
|
$( 'body' ).on( 'click', '.cancel', function( event ) {
|
|
cancel_migration( event );
|
|
} );
|
|
$( '.pause-resume' ).html( wpmdb_strings.resume );
|
|
return;
|
|
} else if ( true === migration_cancelled ) {
|
|
migration_intent = wpmdb_migration_type();
|
|
|
|
var progress_msg;
|
|
|
|
if ( 'savefile' === migration_intent ) {
|
|
progress_msg = wpmdb_strings.removing_local_sql;
|
|
} else if ( 'pull' === migration_intent ) {
|
|
if ( 'backup' === stage ) {
|
|
progress_msg = wpmdb_strings.removing_local_backup;
|
|
} else {
|
|
progress_msg = wpmdb_strings.removing_local_temp_tables;
|
|
}
|
|
} else if ( 'push' === migration_intent ) {
|
|
if ( 'backup' === stage ) {
|
|
progress_msg = wpmdb_strings.removing_remote_sql;
|
|
} else {
|
|
progress_msg = wpmdb_strings.removing_remote_temp_tables;
|
|
}
|
|
}
|
|
wpmdb.current_migration.setText( progress_msg );
|
|
|
|
var request_data = {
|
|
action: 'wpmdb_cancel_migration',
|
|
migration_state_id: wpmdb.migration_state_id,
|
|
nonce: wpmdb_data.nonces.cancel_migration
|
|
};
|
|
|
|
doing_ajax = true;
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'text',
|
|
cache: false,
|
|
data: request_data,
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_cancellation_failed, wpmdb_strings.manually_remove_temp_files + '<br /><br />' + wpmdb_strings.status + ': ' + jqXHR.status + ' ' + jqXHR.statusText + '<br /><br />' + wpmdb_strings.response + ':<br />' + jqXHR.responseText, 'error' );
|
|
console.log( jqXHR );
|
|
console.log( textStatus );
|
|
console.log( errorThrown );
|
|
doing_ajax = false;
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
},
|
|
success: function( data ) {
|
|
doing_ajax = false;
|
|
data = $.trim( data );
|
|
if ( ( 'push' === migration_intent && '1' !== data ) || ( 'push' !== migration_intent && '' !== data ) ) {
|
|
wpmdb.current_migration.setState( wpmdb_strings.migration_cancellation_failed, data, 'error' );
|
|
wpmdb.common.migration_error = true;
|
|
wpmdb.functions.migration_complete_events();
|
|
return;
|
|
}
|
|
|
|
completed_msg = wpmdb_strings.migration_cancelled;
|
|
|
|
if ( 'find_replace' === migration_intent ) {
|
|
completed_msg = wpmdb_strings.find_replace_cancelled;
|
|
}
|
|
|
|
wpmdb.functions.migration_complete_events();
|
|
wpmdb.current_migration.setStatus( 'cancelled' );
|
|
}
|
|
} );
|
|
} else {
|
|
wpmdb.common.next_step_in_migration.fn.apply( null, wpmdb.common.next_step_in_migration.args );
|
|
}
|
|
};
|
|
|
|
$( 'body' ).on( 'click', '.copy-licence-to-remote-site', function() {
|
|
$( '.connection-status' ).html( wpmdb_strings.copying_license );
|
|
$( '.connection-status' ).removeClass( 'notification-message error-notice migration-error' );
|
|
$( '.connection-status' ).append( ajax_spinner );
|
|
|
|
var connection_info = $.trim( $( '.pull-push-connection-info' ).val() ).split( '\n' );
|
|
|
|
doing_ajax = true;
|
|
disable_export_type_controls();
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_copy_licence_to_remote_site',
|
|
url: connection_info[ 0 ],
|
|
key: connection_info[ 1 ],
|
|
nonce: wpmdb_data.nonces.copy_licence_to_remote_site
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
$( '.connection-status' ).html( get_ajax_errors( jqXHR.responseText, '(#143)', jqXHR ) );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
enable_export_type_controls();
|
|
},
|
|
success: function( data ) {
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
enable_export_type_controls();
|
|
|
|
if ( 'undefined' !== typeof data.wpmdb_error && 1 === data.wpmdb_error ) {
|
|
$( '.connection-status' ).html( data.body );
|
|
$( '.connection-status' ).addClass( 'notification-message error-notice migration-error' );
|
|
|
|
if ( data.body.indexOf( '401 Unauthorized' ) > -1 ) {
|
|
$( '.basic-access-auth-wrapper' ).show();
|
|
}
|
|
|
|
return;
|
|
}
|
|
connection_box_changed();
|
|
}
|
|
} );
|
|
} );
|
|
|
|
$( 'body' ).on( 'click', '.reactivate-licence', function( e ) {
|
|
doing_ajax = true;
|
|
|
|
$( '.invalid-licence' ).empty().html( wpmdb_strings.attempting_to_activate_licence );
|
|
$( '.invalid-licence' ).append( ajax_spinner );
|
|
|
|
$.ajax( {
|
|
url: ajaxurl,
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
cache: false,
|
|
data: {
|
|
action: 'wpmdb_reactivate_licence',
|
|
nonce: wpmdb_data.nonces.reactivate_licence
|
|
},
|
|
error: function( jqXHR, textStatus, errorThrown ) {
|
|
$( '.invalid-licence' ).html( wpmdb_strings.activate_licence_problem );
|
|
$( '.invalid-licence' ).append( '<br /><br />' + wpmdb_strings.status + ': ' + jqXHR.status + ' ' + jqXHR.statusText + '<br /><br />' + wpmdb_strings.response + '<br />' + jqXHR.responseText );
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
},
|
|
success: function( data ) {
|
|
$( '.ajax-spinner' ).remove();
|
|
doing_ajax = false;
|
|
|
|
if ( 'undefined' !== typeof data.wpmdb_error && 1 === data.wpmdb_error ) {
|
|
$( '.invalid-licence' ).html( data.body );
|
|
return;
|
|
}
|
|
|
|
if ( 'undefined' !== typeof data.wpmdb_dbrains_api_down && 1 === data.wpmdb_dbrains_api_down ) {
|
|
$( '.invalid-licence' ).html( wpmdb_strings.temporarily_activated_licence );
|
|
$( '.invalid-licence' ).append( data.body );
|
|
return;
|
|
}
|
|
|
|
$( '.invalid-licence' ).empty().html( wpmdb_strings.licence_reactivated );
|
|
location.reload();
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
$( 'input[name=table_migrate_option]' ).change( function() {
|
|
maybe_show_mixed_cased_table_name_warning();
|
|
$.wpmdb.do_action( 'wpmdb_tables_to_migrate_changed' );
|
|
} );
|
|
|
|
$( 'body' ).on( 'change', '#select-tables', function() {
|
|
maybe_show_mixed_cased_table_name_warning();
|
|
$.wpmdb.do_action( 'wpmdb_tables_to_migrate_changed' );
|
|
} );
|
|
|
|
$.wpmdb.add_filter( 'wpmdb_get_table_prefix', get_table_prefix );
|
|
$.wpmdb.add_filter( 'wpmdb_get_tables_to_migrate', get_tables_to_migrate );
|
|
$.wpmdb.add_action( 'wpmdb_lock_replace_url', lock_replace_url );
|
|
$.wpmdb.add_action( 'move_connection_info_box', exclude_post_types_warning );
|
|
|
|
$.wpmdb.add_filter( 'wpmdb_before_migration_complete_hooks', function( hooks ) {
|
|
pause_before_finalize = $( 'input[name=pause_before_finalize]:checked' ).length ? true : false;
|
|
if ( true === pause_before_finalize && 'savefile' !== migration_intent ) {
|
|
set_pause_resume_button( null ); // don't just set migration_paused to true, since `set_pause_resume_button` will get double bound to clicking resume
|
|
is_auto_pause_before_finalize = true;
|
|
}
|
|
return hooks;
|
|
} );
|
|
|
|
/**
|
|
* Set checkbox
|
|
*
|
|
* @param string checkbox_wrap
|
|
*/
|
|
function set_checkbox( checkbox_wrap ) {
|
|
var $switch = $( '#' + checkbox_wrap );
|
|
var $checkbox = $switch.find( 'input[type=checkbox]' );
|
|
|
|
$switch.toggleClass( 'on' ).find( 'span' ).toggleClass( 'checked' );
|
|
var switch_on = $switch.find( 'span.on' ).hasClass( 'checked' );
|
|
$checkbox.attr( 'checked', switch_on ).trigger( 'change' );
|
|
}
|
|
|
|
$( '.wpmdb-switch' ).on( 'click', function( e ) {
|
|
if ( ! $( this ).hasClass( 'disabled' ) ) {
|
|
set_checkbox( $( this ).attr( 'id' ) );
|
|
}
|
|
} );
|
|
|
|
} );
|
|
|
|
})( jQuery, wpmdb );
|
|
|
|
},{"MigrationProgress-controller":1}]},{},[1,2,3,4,5,6,7]);
|