(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' ); 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 = $( '
' ); 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 = $( '
' ) .append( '0% ' + this.model.get( 'strings' ).complete + ' ' ) .append( '(0 MB / 0 MB) ' ) .append( '0 of 0 ' + this.model.get( 'strings' ).items_migrated ) .append( this.$showHideTablesElem ) .append( '
' ); this.updateStageTotals(); }, initShowHideTablesElem: function() { this.$showHideTablesElem = $( '' ).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 = $( '' ) .append( '' + this.model.get( 'strings' ).stage_title + ' ' ) .append( '' + this.model.get( 'strings' ).queued + ' ' ) .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 = $( '
' ); var $progress = $( '
' ).css( 'width', '0%' ); var $title = $( '

' ).addClass( 'item-info' ) .append( $( '' ).text( item.name ) ) .append( ' ' ) .append( $( '' ).text( '(' + wpmdb.functions.convertKBSizeToHRFixed( item.size ) + ')' ) ); $el.append( $title ); $el.append( $progress ); $el.append( '' ); $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 = $( '

' + wpmdb_strings.progress_items_truncated_msg.replace( '%1$s', '' + wpmdb_add_commas( this.queuedElements.length ) + '' ) + '
' ); 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 = ''; 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?/, '' + domain + ' ' ); } return label.replace( /\%s(\S*)\s?/, '' + domain + '$1 ' ); } 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( '' + table + ' (' + table_sizes_hr[ table ] + ')' ); } ); } 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( '' + wpmdb_strings.saved + '' ); $( '.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( '' ); 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( '' + wpmdb_strings.saved + '' ); $( '.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( '' ); 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( '' + wpmdb_strings.saved + '' ); $( '.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( '' + value + '' ); } ); $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( '' + value + ' (' + wpmdb.common.connection_data.table_sizes_hr[ value ] + ')' ); } ); $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
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( '

' + wpmdb_strings.fetching_license + '

' ); 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( '
' + wpmdb_strings.enter_license_key + '
' ); return; } $licence_status.empty().removeClass( 'success' ); doing_licence_registration_ajax = true; $( '.button.register-licence' ).after( '' ); $.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( '
' + '' + '
' + '

' + wpmdb_strings.welcome_title + '

' + '

' + wpmdb_strings.welcome_text + '

' + '
' + '
' ); } $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( '' + wpmdb_strings.clear_error_log + '' ); $( '.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 = '' + excluded_post_types.join( ', ' ) + ''; $( '.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 ] + '

' + wpmdb_strings.status + ': ' + jqXHR.status + ' ' + jqXHR.statusText + '

' + wpmdb_strings.response + ':
' + 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 + ' 
'; 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( '' ); 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( '' + wpmdb_strings.saved + '' ); $( '.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( '' + wpmdb_strings.saved + '' ); $( '.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 = $( '
  • ' ); 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 = $( '
    ' ) .append( ' Saved Profiles ' ) .append( '' + updated_profile_name + '' ); $( '#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( '' ); $.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( '' ); $.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( '' + wpmdb_strings.saved + '' ); $( '.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( '' + wpmdb_strings.saved + '' ); $( '.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( '' ); } ); $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 + '

    ' + wpmdb_strings.status + ': ' + jqXHR.status + ' ' + jqXHR.statusText + '

    ' + wpmdb_strings.response + ':
    ' + 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( '

    ' + wpmdb_strings.status + ': ' + jqXHR.status + ' ' + jqXHR.statusText + '

    ' + wpmdb_strings.response + '
    ' + 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]);