/** * Backup */ var backupDownloadRunning = false; var backupError = false; var backupContinueRetries = 0; var backupContinueRetriesUnique = [ ]; jQuery( document ).ready( function () { jQuery( '#backup_btnSubmit' ).on( 'click', function () { backup(); } ); jQuery( '#managesite-backup-status-close' ).on( 'click', function () { backupDownloadRunning = false; mainwpPopup( '#managesite-backup-status-box' ).close(true); } ); } ); backup = function () { backupError = false; backupContinueRetries = 0; jQuery( '#backup_loading' ).show(); var remote_destinations = jQuery( '#backup_location_remote' ).hasClass( 'mainwp_action_down' ) ? jQuery.map( jQuery( '#backup_destination_list' ).find( 'input[name="remote_destinations[]"]' ), function ( el ) { return { id: jQuery( el ).val(), title: jQuery( el ).attr( 'title' ), type: jQuery( el ).attr( 'destination_type' ) }; } ) : [ ]; var type = jQuery( '#mainwp-backup-type' ).val(); var size = jQuery( '#backup_site_' + type + '_size' ).val(); if ( type == 'full' ) { size = size * 1024 * 1024 / 2.4; //Guessing how large the zip will be } var fileName = jQuery( '#backup_filename' ).val(); var fileNameUID = mainwp_uid(); var loadFilesBeforeZip = jQuery( '[name="mainwp_options_loadFilesBeforeZip"]:checked' ).val(); var backupPid = Math.round( new Date().getTime() / 1000 ); var data = mainwp_secure_data( { action: 'mainwp_backup', site_id: jQuery( '#backup_site_id' ).val(), pid: backupPid, type: type, exclude: jQuery( '#excluded_folders_list' ).val(), excludebackup: ( jQuery( '#mainwp-known-backup-locations' ).attr( 'checked' ) ? 1 : 0 ), excludecache: ( jQuery( '#mainwp-known-cache-locations' ).attr( 'checked' ) ? 1 : 0 ), excludenonwp: ( jQuery( '#mainwp-non-wordpress-folders' ).attr( 'checked' ) ? 1 : 0 ), excludezip: ( jQuery( '#mainwp-zip-archives' ).attr( 'checked' ) ? 1 : 0 ), filename: fileName, fileNameUID: fileNameUID, archiveFormat: jQuery( '#mainwp_archiveFormat' ).val(), maximumFileDescriptorsOverride: jQuery( '#mainwp_options_maximumFileDescriptorsOverride_override' ).is( ':checked' ) ? 1 : 0, maximumFileDescriptorsAuto: ( jQuery( '#mainwp_maximumFileDescriptorsAuto' ).attr( 'checked' ) ? 1 : 0 ), maximumFileDescriptors: jQuery( '#mainwp_options_maximumFileDescriptors' ).val(), loadFilesBeforeZip: loadFilesBeforeZip, subfolder: jQuery( '#backup_subfolder' ).val() }, true ); mainwpPopup( '#managesite-backup-status-box' ).getContentEl().html( dateToHMS( new Date() ) + ' ' + __( 'Creating the backup file on the child site, this might take a while depending on the size. Please be patient.' ) + '
' ); jQuery( '#managesite-createbackup-status-progress' ).progress( { value: 0, total: size } ); mainwpPopup( '#managesite-backup-status-box' ).init( { callback: function () { if ( !backupError ) { location.reload(); } } } ); var backsprocessContentEl = mainwpPopup( '#managesite-backup-status-box' ).getContentEl(); var fnc = function ( pSiteId, pType, pFileName, pFileNameUID ) { return function ( pFunction ) { var data2 = mainwp_secure_data( { action: 'mainwp_createbackup_getfilesize', siteId: pSiteId, type: pType, fileName: pFileName, fileNameUID: pFileNameUID }, false ); jQuery.ajax( { url: ajaxurl, data: data2, method: 'POST', success: function ( pFunc ) { return function ( response ) { if ( backupCreateRunning && response.error ) { setTimeout( function () { pFunc( pFunc ); }, 1000 ); return; } if ( backupCreateRunning ) { var progressBar = jQuery( '#managesite-createbackup-status-progress' ); if ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) { progressBar.progress( 'set progress', response.size ); } setTimeout( function () { pFunc( pFunc ); }, 1000 ); } } }( pFunction ), error: function ( pFunc ) { return function () { if ( backupCreateRunning ) { setTimeout( function () { pFunc( pFunc ); }, 10000 ); } } }( pFunction ), dataType: 'json' } ); } }( jQuery( '#backup_site_id' ).val(), type, fileName, fileNameUID ); setTimeout( function () { fnc( fnc ); }, 1000 ); backupCreateRunning = true; jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( pSiteId, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename, pData ) { return function ( response ) { if ( response.error || !response.result ) { backup_retry_fail( pSiteId, pData, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename, response.error ? response.error : '' ); } else { backupCreateRunning = false; var progressBar = jQuery( '#managesite-createbackup-status-progress' ); progressBar.progress( 'set progress', parseFloat( progressBar.progress( 'get total' ) ) ); appendToDiv( backsprocessContentEl, __( 'Backup file on child site created successfully!' ) ); backup_download_file( pSiteId, pType, response.result.url, response.result.local, response.result.regexfile, response.result.size, response.result.subfolder, pRemoteDestinations ); } } }( jQuery( '#backup_site_id' ).val(), remote_destinations, backupPid, type, jQuery( '#backup_subfolder' ).val(), fileName, data ), error: function ( pSiteId, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename, pData ) { return function () { backup_retry_fail( pSiteId, pData, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename ); } }( jQuery( '#backup_site_id' ).val(), remote_destinations, backupPid, type, jQuery( '#backup_subfolder' ).val(), fileName, data ), dataType: 'json' } ); }; backup_retry_fail = function ( siteId, pData, remoteDestinations, pid, type, subfolder, filename, responseError ) { var backsprocessContentEl = mainwpPopup( '#managesite-backup-status-box' ).getContentEl(); //we've got the pid file!!!! var data = mainwp_secure_data( { action: 'mainwp_backup_checkpid', site_id: siteId, pid: pid, type: type, subfolder: subfolder, filename: filename } ); jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( response ) { if ( response.status == 'done' ) { backupCreateRunning = false; var progressBar = jQuery( '#managesite-createbackup-status-progress' ); progressBar.progress( 'set progress', parseFloat( progressBar.progress( 'get total' ) ) ); //download!!! appendToDiv( backsprocessContentEl, __( 'Backup file on child site created successfully!' ) ); backup_download_file( siteId, type, response.result.file, response.result.local, response.result.regexfile, response.result.size, response.result.subfolder, remoteDestinations ); } else if ( response.status == 'busy' ) { //Try again in 5seconds setTimeout( function () { backup_retry_fail( siteId, pData, remoteDestinations, pid, type, subfolder, filename, responseError ); }, 10000 ); } else if ( response.status == 'stalled' ) { backupContinueRetries++; if ( backupContinueRetries > 10 ) { if ( responseError != undefined ) { appendToDiv( backsprocessContentEl, ' ERROR: ' + getErrorMessage( responseError ) + '' ); } else { appendToDiv( backsprocessContentEl, ' ERROR: Backup timed out! Please check this help document for more information and possible fixes' ); } } else { appendToDiv( backsprocessContentEl, ' Backup stalled, trying to resume from last file...' ); //retrying file: response.result.file ! pData['filename'] = response.result.file; pData['append'] = 1; pData = mainwp_secure_data( pData, true ); //Rescure jQuery.ajax( { url: ajaxurl, data: pData, method: 'POST', success: function ( pSiteId, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename, pData ) { return function ( response ) { if ( response.error || !response.result ) { backup_retry_fail( pSiteId, pData, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename, response.error ? response.error : '' ); } else { backupCreateRunning = false; var progressBar = jQuery( '#managesite-createbackup-status-progress' ); progressBar.progress( 'set progress', parseFloat( progressBar.progress( 'get total' ) ) ); appendToDiv( backsprocessContentEl, __( 'Backupfile on child site created successfully.' ) ); backup_download_file( pSiteId, pType, response.result.url, response.result.local, response.result.regexfile, response.result.size, response.result.subfolder, pRemoteDestinations ); } } }( siteId, remoteDestinations, pid, type, subfolder, filename, pData ), error: function ( pSiteId, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename, pData ) { return function () { backup_retry_fail( pSiteId, pData, pRemoteDestinations, pBackupPid, pType, pSubfolder, pFilename ); } }( siteId, remoteDestinations, pid, type, subfolder, filename, pData ), dataType: 'json' } ); } } else if ( response.status == 'invalid' ) { backupCreateRunning = false; if ( responseError != undefined ) { appendToDiv( backsprocessContentEl, ' ERROR: ' + getErrorMessage( responseError ) + '' ); } else { appendToDiv( backsprocessContentEl, ' ERROR: Backup timed out! Please check this help document for more information and possible fixes' ); } } else { //Try again in 5seconds setTimeout( function () { backup_retry_fail( siteId, pData, remoteDestinations, pid, type, subfolder, filename, responseError ); }, 10000 ); } }, error: function () { //Try again in 10seconds setTimeout( function () { backup_retry_fail( siteId, pData, remoteDestinations, pid, type, subfolder, filename, responseError ); }, 10000 ); }, dataType: 'json' } ); }; backup_download_file = function ( pSiteId, type, url, file, regexfile, size, subfolder, remote_destinations ) { var backsprocessContentEl = mainwpPopup( '#managesite-backup-status-box' ).getContentEl(); appendToDiv( backsprocessContentEl, __( 'Downloading the file.' ) + '
' ); jQuery( '#managesite-backup-status-progress' ).progress( { value: 0, total: size } ); var fnc = function () { return function ( pFunction ) { var data = mainwp_secure_data( { action: 'mainwp_backup_getfilesize', local: file } ); jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( pFunc ) { return function ( response ) { if ( backupCreateRunning && response.error ) { setTimeout( function () { pFunc( pFunc ); }, 5000 ); return; } if ( backupDownloadRunning ) { var progressBar = jQuery( '#managesite-backup-status-progress' ); if ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) { progressBar.progress( 'set progress', response.result ); } setTimeout( function () { pFunc( pFunc ); }, 1000 ); } } }( pFunction ), error: function ( pFunc ) { return function () { if ( backupCreateRunning ) { setTimeout( function () { pFunc( pFunc ); }, 10000 ); } } }( pFunction ), dataType: 'json' } ); } }( file ); setTimeout( function () { fnc( fnc ); }, 1000 ); var data = mainwp_secure_data( { action: 'mainwp_backup_download_file', site_id: pSiteId, type: type, url: url, local: file } ); backupDownloadRunning = true; jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( pSiteId, pFile, pRegexFile, pSubfolder, pRemoteDestinations, pSize, pType, pUrl ) { return function ( response ) { backupDownloadRunning = false; if ( response.error ) { appendToDiv( backsprocessContentEl, 'ERROR: ' + getErrorMessage( response.error ) + '' ); appendToDiv( backsprocessContentEl, '' + __( 'Backup failed!' ) + '' ); jQuery( '#managesite-backup-status-close' ).prop( 'value', 'Close' ); return; } jQuery( '#managesite-backup-status-progress' ).progress( 'set progress', pSize ); appendToDiv( backsprocessContentEl, __( 'Download from child site completed.' ) ); var newData = mainwp_secure_data( { action: 'mainwp_backup_delete_file', site_id: pSiteId, file: pUrl } ); jQuery.post( ajaxurl, newData, function () {}, 'json' ); backup_upload_file( pSiteId, pFile, pRegexFile, pSubfolder, pRemoteDestinations, pType, pSize ); } }( pSiteId, file, regexfile, subfolder, remote_destinations, size, type, url ), error: function () { return function () { //Try again in 10seconds /*setTimeout(function() { download_retry_fail(pSiteId, pData, pFile, pRegexFile, pSubfolder, pRemoteDestinations, pSize, pType, pUrl); },10000);*/ } }( pSiteId, file, regexfile, subfolder, remote_destinations, size, type, url ), dataType: 'json' } ); }; var backupUploadRunning = [ ]; backup_upload_file = function ( pSiteId, pFile, pRegexFile, pSubfolder, pRemoteDestinations, pType, pSize ) { var backsprocessContentEl = mainwpPopup( '#managesite-backup-status-box' ).getContentEl(); if ( pRemoteDestinations.length > 0 ) { var remote_destination = pRemoteDestinations[0]; //upload.. var unique = Date.now(); appendToDiv( backsprocessContentEl, __( 'Uploading to remote destination: %1 (%2)', remote_destination.title, remote_destination.type ) + '
' ); jQuery( '#managesite-upload-status-progress-' + unique ).progress( { value: 0, total: pSize } ); var fnc = function ( pUnique ) { return function ( pFunction ) { var data2 = mainwp_secure_data( { action: 'mainwp_backup_upload_getprogress', unique: pUnique }, false ); jQuery.ajax( { url: ajaxurl, data: data2, method: 'POST', success: function ( pFunc ) { return function ( response ) { if ( backupUploadRunning[pUnique] && response.error ) { setTimeout( function () { pFunc( pFunc ); }, 1000 ); return; } if ( backupUploadRunning[pUnique] ) { var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); if ( ( progressBar.length > 0 ) && ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) && ( progressBar.progress( 'get value' ) < parseInt( response.result ) ) ) { progressBar.progress( 'set progress', response.result ); } setTimeout( function () { pFunc( pFunc ); }, 1000 ); } } }( pFunction ), error: function ( pFunc ) { return function () { if ( backupUploadRunning[pUnique] ) { setTimeout( function () { pFunc( pFunc ); }, 10000 ); } } }( pFunction ), dataType: 'json' } ); } }( unique ); setTimeout( function () { fnc( fnc ); }, 1000 ); backupUploadRunning[unique] = true; var data = mainwp_secure_data( { action: 'mainwp_backup_upload_file', file: pFile, siteId: pSiteId, regexfile: pRegexFile, subfolder: pSubfolder, type: pType, remote_destination: remote_destination.id, unique: unique } ); pRemoteDestinations.shift(); jQuery.ajax( { type: 'POST', url: ajaxurl, data: data, success: function ( pSiteId, pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, pData, pUnique, pRemoteDestId ) { return function ( response ) { if ( !response || response.error || !response.result ) { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, response && response.error ? response.error : '' ); } else { backupUploadRunning[pUnique] = false; var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); progressBar.progress( 'set progress', pSize ); var obj = response.result; if ( obj.error ) { backupError = true; appendToDiv( backsprocessContentEl, '' + __( 'Upload to %1 (%2) failed:', obj.title, obj.type ) + ' ' + obj.error + '' ); } else { appendToDiv( backsprocessContentEl, __( 'Upload to %1 (%2) successful!', obj.title, obj.type ) ); } backup_upload_file( pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } } }( pSiteId, pRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, data, unique, remote_destination.id ), error: function ( pSiteId, pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, pData, pUnique, pRemoteDestId ) { return function () { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId ); } }( pSiteId, pRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, data, unique, remote_destination.id ), dataType: 'json' } ); } else { appendToDiv( backsprocessContentEl, __( 'Backup completed!' ) ); jQuery( '#managesite-backup-status-close' ).prop( 'value', 'Close' ); if ( !backupError ) { setTimeout( function () { mainwpPopup( '#managesite-backup-status-box' ).close(true); }, 3000 ); } return; } }; backup_upload_file_retry_fail = function ( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ) { var backsprocessContentEl = mainwpPopup( '#managesite-backup-status-box' ).getContentEl(); //we've got the pid file!!!! var data = mainwp_secure_data( { action: 'mainwp_backup_upload_checkstatus', unique: pUnique, remote_destination: pRemoteDestId } ); jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( response ) { if ( response.status == 'done' ) { backupUploadRunning[pUnique] = false; var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); progressBar.progress( 'set progress', pSize ); appendToDiv( backsprocessContentEl, __( 'Upload to %1 (%2) successful!', response.info.title, response.info.type ) ); backup_upload_file( pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } else if ( response.status == 'busy' ) { //Try again in 10seconds setTimeout( function () { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); }, 10000 ); } else if ( response.status == 'stalled' ) { if ( backupContinueRetriesUnique[pUnique] == undefined ) { backupContinueRetriesUnique[pUnique] = 1; } else { backupContinueRetriesUnique[pUnique]++; } if ( backupContinueRetriesUnique[pUnique] > 10 ) { if ( responseError != undefined ) { backupError = true; appendToDiv( backsprocessContentEl, '' + __( 'Upload to %1 (%2) failed:', response.info.title, response.info.type ) + ' ' + responseError + '' ); } else { appendToDiv( backsprocessContentEl, ' ERROR: Upload timed out! Please check this help document for more information and possible fixes' ); } backup_upload_file( pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } else { appendToDiv( backsprocessContentEl, ' Upload stalled, trying to resume from last position...' ); pData = mainwp_secure_data( pData ); //Rescure jQuery.ajax( { url: ajaxurl, data: pData, method: 'POST', success: function ( pSiteId, pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, pData, pRemoteDestId ) { return function ( response ) { if ( response.error || !response.result ) { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, response.error ? response.error : '' ); } else { backupUploadRunning[pUnique] = false; var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); progressBar.progress( 'set progress', pSize ); var obj = response.result; if ( obj.error ) { backupError = true; appendToDiv( backsprocessContentEl, '' + __( 'Upload to %1 (%2) failed:', obj.title, obj.type ) + ' ' + obj.error + '' ); } else { appendToDiv( backsprocessContentEl, __( 'Upload to %1 (%2) successful!', obj.title, obj.type ) ); } backup_upload_file( pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } } }( pSiteId, pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, pData, pRemoteDestId ), error: function ( pSiteId, pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, pData, pRemoteDestId ) { return function () { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId ); } }( pSiteId, pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSize, pData, pRemoteDestId ), dataType: 'json' } ); } } else { //Try again in 5seconds setTimeout( function () { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); }, 10000 ); } }, error: function () { //Try again in 10seconds setTimeout( function () { backup_upload_file_retry_fail( pData, pSiteId, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); }, 10000 ); }, dataType: 'json' } ); }; /** * Manage backups page */ jQuery( document ).ready( function () { jQuery( document ).on( 'click', '.backup_destination_exclude', function () { jQuery( this ).parent().parent().animate( { height: 0 }, { duration: 'slow', complete: function () { jQuery( this ).remove(); } } ); } ); jQuery( '#mainwp_managebackups_add' ).on( 'click', function ( event ) { mainwp_managebackups_add( event ); } ); jQuery( '#mainwp_managebackups_update' ).on( 'click', function ( event ) { mainwp_managebackups_update( event ); } ); jQuery( document ).on( 'click', '.backup_run_now', function () { managebackups_run_now( jQuery( this ) ); return false; } ); jQuery( document ).on( 'click', '#managebackups-task-status-close', function () { backupDownloadRunning = false; mainwpPopup( '#managebackups-task-status-box' ).close(true); } ); managebackups_init(); } ); managebackups_exclude_folder = function ( pElement ) { var folder = pElement.parent().attr( 'rel' ) + "\n"; if ( jQuery( '#excluded_folders_list' ).val().indexOf( folder ) !== -1 ) return; jQuery( '#excluded_folders_list' ).val( jQuery( '#excluded_folders_list' ).val() + folder ); }; var manageBackupsError = false; var manageBackupsTaskRemoteDestinations; var manageBackupsTaskId; var manageBackupsTaskType; var manageBackupsTaskError; managebackups_run_now = function ( el ) { el = jQuery( el ); el.hide(); el.parent().find( '.backup_run_loading' ).show(); mainwpPopup( '#managebackups-task-status-box' ).getContentEl().html( dateToHMS( new Date() ) + ' ' + __( 'Starting the backup task...' ) ); jQuery( '#managebackups-task-status-close' ).prop( 'value', __( 'Cancel' ) ); mainwpPopup( '#managebackups-task-status-box' ).init( { title: __( 'Running task' ), callback: function () { location.reload(); } } ); var taskId = el.attr( 'task_id' ); var taskType = el.attr( 'task_type' ); //Fetch the sites to backup var data = mainwp_secure_data( { action: 'mainwp_backuptask_get_sites', task_id: taskId } ); manageBackupsError = false; jQuery.post( ajaxurl, data, function ( pTaskId, pTaskType ) { return function ( response ) { manageBackupTaskSites = response.result.sites; manageBackupsTaskRemoteDestinations = response.result.remoteDestinations; manageBackupsTaskId = pTaskId; manageBackupsTaskType = pTaskType; manageBackupsTaskError = false; managebackups_run_next(); } }( taskId, taskType ), 'json' ); }; managebackups_run_next = function () { var backtaskContentEl = mainwpPopup( '#managebackups-task-status-box' ).getContentEl(); if ( manageBackupTaskSites.length == 0 ) { appendToDiv( backtaskContentEl, __( 'Backup task completed' ) + ( manageBackupsTaskError ? ' ' + __( 'with errors' ) + '' : '' ) + '.' ); jQuery( '#managebackups-task-status-close' ).prop( 'value', __( 'Close' ) ); if ( !manageBackupsError ) { setTimeout( function () { mainwpPopup( '#managebackups-task-status-box' ).close(true); }, 3000 ); } return; } var siteId = manageBackupTaskSites[0]['id']; var siteName = manageBackupTaskSites[0]['name']; var size = manageBackupTaskSites[0][manageBackupsTaskType + 'size']; var fileNameUID = mainwp_uid(); appendToDiv( backtaskContentEl, '[' + siteName + '] ' + __( 'Creating backup file.' ) + '
' ); manageBackupTaskSites.shift(); var data = mainwp_secure_data( { action: 'mainwp_backuptask_run_site', task_id: manageBackupsTaskId, site_id: siteId, fileNameUID: fileNameUID } ); jQuery( '#managebackups-task-status-create-progress[siteId="' + siteId + '"]' ).progress( { value: 0, total: size } ); var interVal = setInterval( function () { var data = mainwp_secure_data( { action: 'mainwp_createbackup_getfilesize', type: manageBackupsTaskType, siteId: siteId, fileName: '', fileNameUID: fileNameUID } ); jQuery.post( ajaxurl, data, function ( pSiteId ) { return function ( response ) { if ( response.error ) return; if ( backupCreateRunning ) { var progressBar = jQuery( '#managebackups-task-status-create-progress[siteId="' + pSiteId + '"]' ); if ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) { progressBar.progress( 'set progress', response.size ); } } } }( siteId ), 'json' ); }, 1000 ); backupCreateRunning = true; jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( pTaskId, pSiteId, pSiteName, pRemoteDestinations, pInterVal ) { return function ( response ) { backupCreateRunning = false; clearInterval( pInterVal ); var progressBar = jQuery( '#managebackups-task-status-create-progress[siteId="' + pSiteId + '"]' ); progressBar.progress( 'set progress', parseFloat( progressBar.progress( 'get total' ) ) ); if ( response.error ) { appendToDiv( backtaskContentEl, '[' + pSiteName + '] Error: ' + getErrorMessage( response.error ) + '' ); manageBackupsTaskError = true; managebackups_run_next(); } else { appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Backup file created successfully.' ) ); managebackups_backup_download_file( pSiteId, pSiteName, response.result.type, response.result.url, response.result.local, response.result.regexfile, response.result.size, response.result.subfolder, pRemoteDestinations ); } } }( manageBackupsTaskId, siteId, siteName, manageBackupsTaskRemoteDestinations.slice( 0 ), interVal ), error: function ( pInterVal, pSiteName ) { return function () { backupCreateRunning = false; clearInterval( pInterVal ); appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + 'ERROR: Backup timed out - Please check this help document for more information and possible fixes' ); } }( interVal, siteName ), dataType: 'json' } ); }; managebackups_backup_download_file = function ( pSiteId, pSiteName, type, url, file, regexfile, size, subfolder, remote_destinations ) { var backtaskContentEl = mainwpPopup( '#managebackups-task-status-box' ).getContentEl(); appendToDiv( backtaskContentEl, '[' + pSiteName + '] Downloading the file.
' ); jQuery( '#managebackups-task-status-progress[siteId="' + pSiteId + '"]' ).progress( { value: 0, total: size } ); var interVal = setInterval( function () { var data = mainwp_secure_data( { action: 'mainwp_backup_getfilesize', local: file } ); jQuery.post( ajaxurl, data, function ( pSiteId ) { return function ( response ) { if ( response.error ) return; if ( backupDownloadRunning ) { var progressBar = jQuery( '#managebackups-task-status-progress[siteId="' + pSiteId + '"]' ); if ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) { progressBar.progress( 'set progress', response.result ); } } } }( pSiteId ), 'json' ); }, 500 ); var data = mainwp_secure_data( { action: 'mainwp_backup_download_file', site_id: pSiteId, type: type, url: url, local: file } ); backupDownloadRunning = true; jQuery.post( ajaxurl, data, function ( pFile, pRegexFile, pSubfolder, pRemoteDestinations, pSize, pType, pInterVal, pSiteName, pSiteId, pUrl ) { return function ( response ) { backupDownloadRunning = false; clearInterval( pInterVal ); if ( response.error ) { appendToDiv( backtaskContentEl, '[' + pSiteName + '] ERROR: ' + getErrorMessage( response.error ) + '' ); appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Backup failed!' ) + '' ); manageBackupsError = true; managebackups_run_next(); return; } jQuery( '#managebackups-task-status-progress[siteId="' + pSiteId + '"]' ).progress( 'set progress', pSize ); appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Download from child site completed.' ) ); var newData = mainwp_secure_data( { action: 'mainwp_backup_delete_file', site_id: pSiteId, file: pUrl } ); jQuery.post( ajaxurl, newData, function () {}, 'json' ); managebackups_backup_upload_file( pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pRemoteDestinations, pType, pSize ); } }( file, regexfile, subfolder, remote_destinations, size, type, interVal, pSiteName, pSiteId, url ), 'json' ); }; managebackups_backup_upload_file = function ( pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pRemoteDestinations, pType, pSize ) { var backtaskContentEl = mainwpPopup( '#managebackups-task-status-box' ).getContentEl(); if ( pRemoteDestinations.length > 0 ) { var remote_destination = pRemoteDestinations[0]; //upload.. var unique = Date.now(); appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Uploading to selected remote destination: %1 (%2)', remote_destination.title, remote_destination.type ) + '
' ); jQuery( '#managesite-upload-status-progress-' + unique ).progress( { value: 0, total: pSize } ); var fnc = function ( pUnique ) { return function ( pFunction ) { var data2 = mainwp_secure_data( { action: 'mainwp_backup_upload_getprogress', unique: pUnique }, false ); jQuery.ajax( { url: ajaxurl, data: data2, method: 'POST', success: function ( pFunc ) { return function ( response ) { if ( backupUploadRunning[pUnique] && response.error ) { setTimeout( function () { pFunc( pFunc ); }, 1000 ); return; } if ( backupUploadRunning[pUnique] ) { var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); if ( ( progressBar.length > 0 ) && ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) && ( progressBar.progress( 'get value' ) < parseInt( response.result ) ) ) { progressBar.progress( 'set progress', response.result ); } setTimeout( function () { pFunc( pFunc ); }, 1000 ); } } }( pFunction ), error: function ( pFunc ) { return function () { if ( backupUploadRunning[pUnique] ) { setTimeout( function () { pFunc( pFunc ); }, 10000 ); } } }( pFunction ), dataType: 'json' } ); } }( unique ); setTimeout( function () { fnc( fnc ); }, 1000 ); backupUploadRunning[unique] = true; var data = mainwp_secure_data( { action: 'mainwp_backup_upload_file', file: pFile, siteId: pSiteId, regexfile: pRegexFile, subfolder: pSubfolder, type: pType, remote_destination: remote_destination.id, unique: unique } ); pRemoteDestinations.shift(); jQuery.ajax( { type: 'POST', url: ajaxurl, data: data, success: function ( pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, pData, pUnique, pRemoteDestId ) { return function ( response ) { if ( !response || response.error || !response.result ) { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, response.error ? response.error : '' ); } else { backupUploadRunning[pUnique] = false; var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); progressBar.progress( 'set progress', pSize ); var obj = response.result; if ( obj.error ) { manageBackupsError = true; appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Upload to %1 (%2) failed:', obj.title, obj.type ) + ' ' + obj.error + '' ); } else { appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Upload to %1 (%2) successful', obj.title, obj.type ) ); } managebackups_backup_upload_file( pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } } }( pRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, data, unique, remote_destination.id ), error: function ( pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, pData, pUnique, pRemoteDestId ) { return function () { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId ); } }( pRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, data, unique, remote_destination.id ), dataType: 'json' } ); } else { appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Backup completed.' ) ); managebackups_run_next(); } }; managebackups_backup_upload_file_retry_fail = function ( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ) { var backtaskContentEl = mainwpPopup( '#managebackups-task-status-box' ).getContentEl(); //we've got the pid file!!!! var data = mainwp_secure_data( { action: 'mainwp_backup_upload_checkstatus', unique: pUnique, remote_destination: pRemoteDestId } ); jQuery.ajax( { url: ajaxurl, data: data, method: 'POST', success: function ( response ) { if ( response.status == 'done' ) { backupUploadRunning[pUnique] = false; var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); progressBar.progress( 'set progress', pSize ); appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Upload to %1 (%2) successful', response.info.title, response.info.type ) ); managebackups_backup_upload_file( pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } else if ( response.status == 'busy' ) { //Try again in 10seconds setTimeout( function () { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); }, 10000 ); } else if ( response.status == 'stalled' ) { if ( backupContinueRetriesUnique[pUnique] == undefined ) { backupContinueRetriesUnique[pUnique] = 1; } else { backupContinueRetriesUnique[pUnique]++; } if ( backupContinueRetriesUnique[pUnique] > 10 ) { if ( responseError != undefined ) { manageBackupsError = true; appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Upload to %1 (%2) failed:', response.info.title, response.info.type ) + ' ' + responseError + '' ); } else { appendToDiv( backtaskContentEl, ' [' + pSiteName + '] ERROR: Upload timed out - Please check this help document for more information and possible fixes' ); } managebackups_backup_upload_file( pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } else { appendToDiv( backtaskContentEl, ' [' + pSiteName + '] Upload stalled, trying to resume from last position.' ); pData = mainwp_secure_data( pData ); //Rescure jQuery.ajax( { url: ajaxurl, data: pData, method: 'POST', success: function ( pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, pData, pUnique, pRemoteDestId ) { return function ( response ) { if ( response.error || !response.result ) { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, response.error ? response.error : '' ); } else { backupUploadRunning[pUnique] = false; var progressBar = jQuery( '#managesite-upload-status-progress-' + pUnique ); progressBar.progress( 'set progress', pSize ); var obj = response.result; if ( obj.error ) { manageBackupsError = true; appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Upload to %1 (%2) failed:', obj.title, obj.type ) + ' ' + obj.error + '' ); } else { appendToDiv( backtaskContentEl, '[' + pSiteName + '] ' + __( 'Upload to %1 (%2) successful', obj.title, obj.type ) ); } managebackups_backup_upload_file( pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize ); } } }( pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, pData, pUnique, pRemoteDestId ), error: function ( pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, pData, pUnique, pRemoteDestId ) { return function () { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); } }( pNewRemoteDestinations, pFile, pRegexFile, pSubfolder, pType, pSiteName, pSiteId, pSize, pData, pUnique, pRemoteDestId ), dataType: 'json' } ); } } else { //Try again in 5seconds setTimeout( function () { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); }, 10000 ); } }, error: function () { //Try again in 10seconds setTimeout( function () { managebackups_backup_upload_file_retry_fail( pData, pSiteId, pSiteName, pFile, pRegexFile, pSubfolder, pNewRemoteDestinations, pType, pSize, pUnique, pRemoteDestId, responseError ); }, 10000 ); }, dataType: 'json' } ); }; managebackups_init = function () { setVisible( '#mainwp_managebackups_add_errors', false ); jQuery( '#mainwp_managebackups_add_errors' ).html(); jQuery( '#mainwp_managebackups_add_message' ).html(); }; mainwp_managebackups_update = function () { managebackups_init(); var errors = [ ]; if ( jQuery( '#mainwp_managebackups_add_name' ).val() == '' ) { errors.push( __( 'Please enter a valid name for your backup task' ) ); } if ( jQuery( '#select_by' ).val() == 'site' ) { var selected_sites = [ ]; jQuery( "input[name='selected_sites[]']:checked" ).each( function () { selected_sites.push( jQuery( this ).val() ); } ); if ( selected_sites.length == 0 ) { errors.push( __( 'Please select websites or groups to add a backup task.' ) ); } } else { var selected_groups = [ ]; jQuery( "input[name='selected_groups[]']:checked" ).each( function () { selected_groups.push( jQuery( this ).val() ); } ); if ( selected_groups.length == 0 ) { errors.push( __( 'Please select websites or groups to add a backup task.' ) ); } } if ( errors.length > 0 ) { feedback( 'mainwp-message-zone', errors.join( '
' ), 'red' ); } else { feedback( 'mainwp-message-zone', __( 'Adding the task...' ), 'green' ); jQuery( '#mainwp_managebackups_update' ).attr( 'disabled', 'true' ); //disable button to add.. //var loadFilesBeforeZip = jQuery( '[name="mainwp_options_loadFilesBeforeZip"]:checked' ).val(); var name = jQuery( '#mainwp_managebackups_add_name' ).val(); name = name.replace( /"/g, '"' ); var data = mainwp_secure_data( { action: 'mainwp_updatebackup', id: jQuery( '#mainwp_managebackups_edit_id' ).val(), name: name, schedule: jQuery( '#mainwp-backup-task-schedule' ).val(), type: jQuery( '#mainwp-backup-type' ).val(), exclude: ( jQuery( '#mainwp-backup-type' ).val() == 'full' ? jQuery( '#excluded_folders_list' ).val() : '' ), excludebackup: ( jQuery( '#mainwp-known-backup-locations' ).attr( 'checked' ) ? 1 : 0 ), excludecache: ( jQuery( '#mainwp-known-cache-locations' ).attr( 'checked' ) ? 1 : 0 ), excludenonwp: ( jQuery( '#mainwp-non-wordpress-folders' ).attr( 'checked' ) ? 1 : 0 ), excludezip: ( jQuery( '#mainwp-zip-archives' ).attr( 'checked' ) ? 1 : 0 ), 'groups[]': selected_groups, 'sites[]': selected_sites, subfolder: jQuery( '#mainwp_managebackups_add_subfolder' ).val(), filename: jQuery( '#backup_filename' ).val(), archiveFormat: jQuery( '#mainwp_archiveFormat' ).val(), maximumFileDescriptorsOverride: jQuery( '#mainwp_options_maximumFileDescriptorsOverride_override' ).is( ':checked' ) ? 1 : 0, maximumFileDescriptorsAuto: ( jQuery( '#mainwp_maximumFileDescriptorsAuto' ).attr( 'checked' ) ? 1 : 0 ), maximumFileDescriptors: jQuery( '#mainwp_options_maximumFileDescriptors' ).val(), //loadFilesBeforeZip: loadFilesBeforeZip } ); jQuery.post( ajaxurl, data, function ( response ) { managebackups_init(); if ( response.error != undefined ) { feedback( 'mainwp-message-zone', response.error, 'red' ); } else { //Message the backup task was added feedback( 'mainwp-message-zone', response.result, 'green' ); } jQuery( '#mainwp_managebackups_update' ).prop("disabled", false); //Enable add button }, 'json' ); } }; mainwp_managebackups_add = function () { managebackups_init(); var errors = [ ]; if ( jQuery( '#mainwp_managebackups_add_name' ).val() == '' ) { errors.push( __( 'Please enter a valid name for your backup task' ) ); } if ( jQuery( '#select_by' ).val() == 'site' ) { var selected_sites = [ ]; jQuery( "input[name='selected_sites[]']:checked" ).each( function () { selected_sites.push( jQuery( this ).val() ); } ); if ( selected_sites.length == 0 ) { errors.push( __( 'Please select websites or groups.' ) ); } } else { var selected_groups = [ ]; jQuery( "input[name='selected_groups[]']:checked" ).each( function () { selected_groups.push( jQuery( this ).val() ); } ); if ( selected_groups.length == 0 ) { errors.push( __( 'Please select websites or groups.' ) ); } } console.log(errors); if ( errors.length > 0 ) { feedback( 'mainwp-message-zone', errors.join( '
' ), 'red' ); } else { feedback( 'mainwp-message-zone', __( 'Adding the task...' ), 'green' ); jQuery( '#mainwp_managebackups_add' ).attr( 'disabled', 'true' ); //disable button to add.. jQuery( '#mainwp_managesites_add' ).attr( 'disabled', 'true' ); //Disable add button var loadFilesBeforeZip = jQuery( '[name="mainwp_options_loadFilesBeforeZip"]:checked' ).val(); var name = jQuery( '#mainwp_managebackups_add_name' ).val(); name = name.replace( /"/g, '"' ); var data = mainwp_secure_data( { action: 'mainwp_addbackup', name: name, schedule: jQuery( '#mainwp-backup-task-schedule' ).val(), type: jQuery( '#mainwp-backup-type' ).val(), exclude: ( jQuery( '#mainwp-backup-type' ).val() == 'full' ? jQuery( '#excluded_folders_list' ).val() : '' ), excludebackup: ( jQuery( '#mainwp-known-backup-locations' ).attr( 'checked' ) ? 1 : 0 ), excludecache: ( jQuery( '#mainwp-known-cache-locations' ).attr( 'checked' ) ? 1 : 0 ), excludenonwp: ( jQuery( '#mainwp-non-wordpress-folders' ).attr( 'checked' ) ? 1 : 0 ), excludezip: ( jQuery( '#mainwp-zip-archives' ).attr( 'checked' ) ? 1 : 0 ), 'groups[]': selected_groups, 'sites[]': selected_sites, subfolder: jQuery( '#mainwp_managebackups_add_subfolder' ).val(), filename: jQuery( '#backup_filename' ).val(), archiveFormat: jQuery( '#mainwp_archiveFormat' ).val(), maximumFileDescriptorsOverride: jQuery( '#mainwp_options_maximumFileDescriptorsOverride_override' ).is( ':checked' ) ? 1 : 0, maximumFileDescriptorsAuto: ( jQuery( '#mainwp_maximumFileDescriptorsAuto' ).attr( 'checked' ) ? 1 : 0 ), maximumFileDescriptors: jQuery( '#mainwp_options_maximumFileDescriptors' ).val(), loadFilesBeforeZip: loadFilesBeforeZip } ); jQuery.post( ajaxurl, data, function ( response ) { managebackups_init(); if ( response.error != undefined ) { feedback( 'mainwp-message-zone', response.error, 'red' ); } else { //Message the backup task was added location.href = 'admin.php?page=ManageBackups&a=1'; feedback( 'mainwp-message-zone', response.result, 'green' ); } jQuery( '#mainwp_managebackups_add' ).prop("disabled", false); //Enable add button }, 'json' ); } }; managebackups_remove = function ( element ) { var id = jQuery( element ).attr( 'task_id' ); managebackups_init(); var msg = __( 'Are you sure you want to delete this backup task?' ); mainwp_confirm(msg, function(){ jQuery( '#task-status-' + id ).html( __( 'Removing the task...' ) ); var data = mainwp_secure_data( { action: 'mainwp_removebackup', id: id } ); jQuery.post( ajaxurl, data, function ( pElement ) { return function ( response ) { managebackups_init(); var result = ''; var error = ''; if ( response.error != undefined ) { error = response.error; } else if ( response.result == 'SUCCESS' ) { result = __( 'The task has been removed.' ); } else { error = __( 'An undefined error occured.' ); } if ( error != '' ) { setHtml( '#mainwp_managebackups', error ); } if ( result != '' ) { setHtml( '#mainwp_managebackups_add_message', result ); } jQuery( '#task-status-' + id ).html( '' ); if ( error == '' ) { jQuery( pElement ).closest( 'tr' ).remove(); } } }( element ), 'json' ); }); return false; }; managebackups_resume = function ( element ) { var id = jQuery( element ).attr( 'task_id' ); managebackups_init(); jQuery( '#task-status-' + id ).html( __( 'Resuming the task...' ) ); var data = mainwp_secure_data( { action: 'mainwp_resumebackup', id: id } ); jQuery.post( ajaxurl, data, function ( pElement, pId ) { return function ( response ) { managebackups_init(); var result = ''; var error = ''; if ( response.error != undefined ) { error = response.error; } else if ( response.result == 'SUCCESS' ) { result = __( 'The task has been resumed.' ); } else { error = __( 'An undefined error occured.' ); } if ( error != '' ) { setHtml( '#mainwp_managebackups', error ); } if ( result != '' ) { setHtml( '#mainwp_managebackups_add_message', result ); } jQuery( '#task-status-' + id ).html( '' ); if ( error == '' ) { jQuery( pElement ).after( '' + __( 'Pause' ) + '' ); jQuery( pElement ).remove(); } } }( element, id ), 'json' ); return false; }; managebackups_pause = function ( element ) { var id = jQuery( element ).attr( 'task_id' ); managebackups_init(); jQuery( '#task-status-' + id ).html( __( 'Pausing the task...' ) ); var data = mainwp_secure_data( { action: 'mainwp_pausebackup', id: id } ); jQuery.post( ajaxurl, data, function ( pElement, pId ) { return function ( response ) { managebackups_init(); var result = ''; var error = ''; if ( response.error != undefined ) { error = response.error; } else if ( response.result == 'SUCCESS' ) { result = __( 'The task has been paused.' ); } else { error = __( 'An undefined error occured.' ); } if ( error != '' ) { setHtml( '#mainwp_managebackups', error ); } if ( result != '' ) { setHtml( '#mainwp_managebackups_add_message', result ); } jQuery( '#task-status-' + id ).html( '' ); if ( error == '' ) { jQuery( pElement ).after( '' + __( 'Resume' ) + '' ); jQuery( pElement ).remove(); } } }( element, id ), 'json' ); return false; }; jQuery( document ).on( 'click', '#updatesoverview-backup-ignore', function () { if ( updatesoverviewContinueAfterBackup != undefined ) { mainwpPopup( '#updatesoverview-backup-box' ).close(); console.log( updatesoverviewContinueAfterBackup ); updatesoverviewContinueAfterBackup(); updatesoverviewContinueAfterBackup = undefined; } } ); var updatesoverviewShowBusyFunction; var updatesoverviewShowBusyTimeout; mainwp_updatesoverview_checkBackups = function ( sitesToUpdate, siteNames ) { if ( mainwpParams['disable_checkBackupBeforeUpgrade'] == true ) { if ( updatesoverviewContinueAfterBackup != undefined ) updatesoverviewContinueAfterBackup(); return false; } updatesoverviewShowBusyFunction = function () { var output = __( 'Checking if a backup is required for the selected updates...' ); mainwpPopup( '#updatesoverview-backup-box' ).getContentEl().html( output ); jQuery( '#updatesoverview-backup-all' ).hide(); jQuery( '#updatesoverview-backup-ignore' ).hide(); mainwpPopup( '#updatesoverview-backup-box' ).init( { title: __( "Checking backup settings..." ), callback: function () { window.location.href = location.href } } ); }; updatesoverviewShowBusyTimeout = setTimeout( updatesoverviewShowBusyFunction, 300 ); //Step 2: Check if backups are ok. var data = mainwp_secure_data( { action: 'mainwp_checkbackups', sites: sitesToUpdate } ); jQuery.ajax( { type: "POST", url: ajaxurl, data: data, success: function ( pSiteNames ) { return function ( response ) { clearTimeout( updatesoverviewShowBusyTimeout ); mainwpPopup( '#updatesoverview-backup-box' ).close(); var siteFeedback = undefined; if ( response['result'] && response['result']['sites'] != undefined ) { siteFeedback = [ ]; for ( var currSiteId in response['result']['sites'] ) { if ( response['result']['sites'][currSiteId] == false ) { siteFeedback.push( currSiteId ); } } if ( siteFeedback.length == 0 ) siteFeedback = undefined; } if ( siteFeedback != undefined ) { var backupPrimary = ''; if ( response['result']['primary_backup'] && response['result']['primary_backup'] != undefined ) backupPrimary = response['result']['primary_backup']; if ( backupPrimary == '' ) { jQuery( '#updatesoverview-backup-all' ).show(); jQuery( '#updatesoverview-backup-ignore' ).show(); } else { var backupLink = mainwp_get_primaryBackup_link( backupPrimary ); jQuery( '#updatesoverview-backup-now' ).attr( 'href', backupLink ).show(); jQuery( '#updatesoverview-backup-ignore' ).val( __( 'Proceed with Updates' ) ).show(); } var output = '' + __( 'A full backup has not been taken in the last days for the following sites:' ) + '

'; if ( backupPrimary == '' ) { // default backup feature for ( var j = 0; j < siteFeedback.length; j++ ) { output += '' + decodeURIComponent( pSiteNames[siteFeedback[j]] ) + '
'; } } else { for ( var j = 0; j < siteFeedback.length; j++ ) { output += '' + decodeURIComponent( pSiteNames[siteFeedback[j]] ) + '
'; } } mainwpPopup( '#updatesoverview-backup-box' ).getContentEl().html( output ); mainwpPopup( '#updatesoverview-backup-box' ).init( { title: __( "Full backup required!" ), callback: function () { updatesoverviewContinueAfterBackup = undefined; window.location.href = location.href } } ); return false; } if ( updatesoverviewContinueAfterBackup != undefined ) updatesoverviewContinueAfterBackup(); } }( siteNames ), error: function () { mainwpPopup( '#updatesoverview-backup-box' ).close(true); }, dataType: 'json' } ); return false; }; jQuery( document ).on( 'click', '#updatesoverview-backupnow-close', function () { if ( jQuery( this ).prop( 'cancel' ) == '1' ) { updatesoverviewBackupSites = [ ]; updatesoverviewBackupError = false; updatesoverviewBackupDownloadRunning = false; mainwpPopup( '#updatesoverview-backup-box' ).close(true); } else { mainwpPopup( '#updatesoverview-backup-box' ).close(); if ( updatesoverviewContinueAfterBackup != undefined ) updatesoverviewContinueAfterBackup(); } } ); jQuery( document ).on( 'click', '#updatesoverview-backup-all', function () { // change action buttons mainwpPopup( '#updatesoverview-backup-box' ).setActionButtons( '' ); mainwpPopup( '#updatesoverview-backup-box' ).init( { title: __( "Full backup" ), callback: function () { updatesoverviewContinueAfterBackup = undefined; window.location.href = location.href } } ); var sitesToBackup = jQuery( '.updatesoverview-backup-site' ); updatesoverviewBackupSites = [ ]; for ( var i = 0; i < sitesToBackup.length; i++ ) { var currentSite = [ ]; currentSite['id'] = jQuery( sitesToBackup[i] ).attr( 'siteid' ); currentSite['name'] = jQuery( sitesToBackup[i] ).text(); updatesoverviewBackupSites.push( currentSite ); } updatesoverview_backup_run(); } ); var updatesoverviewBackupSites; var updatesoverviewBackupError; var updatesoverviewBackupDownloadRunning; updatesoverview_backup_run = function () { mainwpPopup( '#updatesoverview-backup-box' ).getContentEl().html( dateToHMS( new Date() ) + ' ' + __( 'Starting required backup(s)...' ) ); jQuery( '#updatesoverview-backupnow-close' ).prop( 'value', __( 'Cancel' ) ); jQuery( '#updatesoverview-backupnow-close' ).prop( 'cancel', '1' ); updatesoverview_backup_run_next(); }; updatesoverview_backup_run_next = function () { var backupContentEl = mainwpPopup( '#updatesoverview-backup-box' ).getContentEl(); if ( updatesoverviewBackupSites.length == 0 ) { appendToDiv( backupContentEl, __( 'Required backup(s) completed' ) + ( updatesoverviewBackupError ? ' ' + __( 'with errors' ) + '' : '' ) + '.' ); jQuery( '#updatesoverview-backupnow-close' ).prop( 'cancel', '0' ); if ( updatesoverviewBackupError ) { jQuery( '#updatesoverview-backupnow-close' ).prop( 'value', __( 'Continue update anyway' ) ); } else { jQuery( '#updatesoverview-backupnow-close' ).prop( 'value', __( 'Continue update' ) ); } return; } var siteName = updatesoverviewBackupSites[0]['name']; appendToDiv( backupContentEl, '[' + siteName + '] ' + __( 'Creating backup file...' ) ); var siteId = updatesoverviewBackupSites[0]['id']; updatesoverviewBackupSites.shift(); var data = mainwp_secure_data( { action: 'mainwp_backup_run_site', site_id: siteId } ); jQuery.post( ajaxurl, data, function ( pSiteId, pSiteName ) { return function ( response ) { if ( response.error ) { appendToDiv( backupContentEl, '[' + pSiteName + '] ERROR: ' + getErrorMessage( response.error ) + '' ); updatesoverviewBackupError = true; updatesoverview_backup_run_next(); } else { appendToDiv( backupContentEl, '[' + pSiteName + '] ' + __( 'Backup file created successfully!' ) ); updatesoverview_backupnow_download_file( pSiteId, pSiteName, response.result.type, response.result.url, response.result.local, response.result.regexfile, response.result.size, response.result.subfolder ); } } }( siteId, siteName ), 'json' ); }; updatesoverview_backupnow_download_file = function ( pSiteId, pSiteName, type, url, file, regexfile, size, subfolder ) { var backupContentEl = mainwpPopup( '#updatesoverview-backup-box' ).getContentEl(); appendToDiv( backupContentEl, '[' + pSiteName + '] Downloading the file...
' ); jQuery( '#updatesoverview-backupnow-status-progress[siteId="' + pSiteId + '"]' ).progress( { value: 0, total: size } ); var interVal = setInterval( function () { var data = mainwp_secure_data( { action: 'mainwp_backup_getfilesize', local: file } ); jQuery.post( ajaxurl, data, function ( pSiteId ) { return function ( response ) { if ( response.error ) return; if ( updatesoverviewBackupDownloadRunning ) { var progressBar = jQuery( '#updatesoverview-backupnow-status-progress[siteId="' + pSiteId + '"]' ); if ( progressBar.progress( 'get value' ) < progressBar.progress( 'get total' ) ) { progressBar.progress( 'set progress', response.result ); } } } }( pSiteId ), 'json' ); }, 500 ); var data = mainwp_secure_data( { action: 'mainwp_backup_download_file', site_id: pSiteId, type: type, url: url, local: file } ); updatesoverviewBackupDownloadRunning = true; jQuery.post( ajaxurl, data, function ( pFile, pRegexFile, pSubfolder, pSize, pType, pInterVal, pSiteName, pSiteId, pUrl ) { return function ( response ) { updatesoverviewBackupDownloadRunning = false; clearInterval( pInterVal ); if ( response.error ) { appendToDiv( backupContentEl, '[' + pSiteName + '] ERROR: ' + getErrorMessage( response.error ) + '' ); appendToDiv( backupContentEl, '[' + pSiteName + '] ' + __( 'Backup failed!' ) + '' ); updatesoverviewBackupError = true; updatesoverview_backup_run_next(); return; } jQuery( '#updatesoverview-backupnow-status-progress[siteId="' + pSiteId + '"]' ).progress( 'set progress', pSize ); appendToDiv( backupContentEl, '[' + pSiteName + '] ' + __( 'Download from the child site completed.' ) ); appendToDiv( backupContentEl, '[' + pSiteName + '] ' + __( 'Backup completed.' ) ); var newData = mainwp_secure_data( { action: 'mainwp_backup_delete_file', site_id: pSiteId, file: pUrl } ); jQuery.post( ajaxurl, newData, function () {}, 'json' ); updatesoverview_backup_run_next(); } }( file, regexfile, subfolder, size, type, interVal, pSiteName, pSiteId, url ), 'json' ); };