public static function renderJavaScript() { $uploadSizeInBytes = min(MainWPHelper::return_bytes(ini_get('upload_max_filesize')), MainWPHelper::return_bytes(ini_get('post_max_size'))); $uploadSize = MainWPHelper::human_filesize($uploadSizeInBytes); ?> <div id="mainwp-child_clone_status" title="Restore process"></div> <script language="javascript"> jQuery(document).on('change', '#file', function() { var maxSize = <?php echo $uploadSizeInBytes; ?> ; var humanSize = '<?php echo $uploadSize; ?> '; if (this.files[0].size > maxSize) { jQuery('#filesubmit').attr('disabled', 'disabled'); alert('The selected file is bigger than your maximum allowed filesize. (Maximum: '+humanSize+')'); } else { jQuery('#filesubmit').removeAttr('disabled'); } }); jQuery(document).on('click', '#mainwp-child_displayby_sitename', function() { jQuery('#mainwp-child_displayby_url').removeClass('mainwp-child_action_down'); jQuery(this).addClass('mainwp-child_action_down'); jQuery('.mainwp-child_url_label').hide(); jQuery('.mainwp-child_name_label').show(); return false; }); jQuery(document).on('click', '#mainwp-child_displayby_url', function() { jQuery('#mainwp-child_displayby_sitename').removeClass('mainwp-child_action_down'); jQuery(this).addClass('mainwp-child_action_down'); jQuery('.mainwp-child_name_label').hide(); jQuery('.mainwp-child_url_label').show(); return false; }); jQuery(document).on('click', '.clonesite_select_site_item', function() { jQuery('.clonesite_select_site_item').removeClass('selected'); jQuery(this).addClass('selected'); }); var pollingCreation = undefined; var backupCreationFinished = false; var pollingDownloading = undefined; var backupDownloadFinished = false; handleCloneError = function(resp) { updateClonePopup(resp.error, true, 'red'); }; updateClonePopup = function(pText, pShowDate, pColor) { if (pShowDate == undefined) pShowDate = true; var theDiv = jQuery('#mainwp-child_clone_status'); theDiv.append('<br /><span style="color: ' + pColor + ';">' + (pShowDate ? cloneDateToHMS(new Date()) + ' ' : '') + pText + '</span>'); theDiv.animate({scrollTop: theDiv.height() * 2}, 100); }; cloneDateToHMS = function(date) { var h = date.getHours(); var m = date.getMinutes(); var s = date.getSeconds(); return '' + (h <= 9 ? '0' + h : h) + ':' + (m<=9 ? '0' + m : m) + ':' + (s <= 9 ? '0' + s : s); }; var translations = [] ; translations['large_site'] = "<?php _e('This is a large site (%dMB), the restore process will more than likely fail.', 'mainwp-child'); ?> "; translations['continue_anyway'] = "<?php _e('Continue Anyway?', 'mainwp-child'); ?> "; translations['creating_backup'] = "<?php _e('Creating backup on %s expected size: %dMB (estimated time: %d seconds)', 'mainwp-child'); ?> "; translations['backup_created'] = "<?php _e('Backup created on %s total size to download: %dMB', 'mainwp-child'); ?> "; translations['downloading_backup'] = "<?php _e('Downloading backup', 'mainwp-child'); ?> "; translations['backup_downloaded'] = "<?php _e('Backup downloaded', 'mainwp-child'); ?> "; translations['extracting_backup'] = "<?php _e('Extracting backup and updating your database, this might take a while. Please be patient.', 'mainwp-child'); ?> "; translations['clone_complete'] = "<?php _e('Cloning process completed successfully!', 'mainwp-child'); ?> "; cloneInitiateBackupCreation = function(siteId, siteName, size, rand, continueAnyway) { if ((continueAnyway == undefined) && (size > 256)) { updateClonePopup(mwp_sprintf(translations['large_site'], size)+' <a href="#" class="button continueCloneButton" onClick="cloneInitiateBackupCreation('+"'"+siteId+"'"+', '+"'"+siteName+"'"+', '+size+', '+"'"+rand+"'"+', true); return false;">'+translations['continue_anyway']+'</a>'); return; } else { jQuery('.continueCloneButton').hide(); } size = size / 2.4; //Guessing how large the zip will be //5 mb every 10 seconds updateClonePopup(mwp_sprintf(translations['creating_backup'], siteName, size.toFixed(2), (size / 5 * 3).toFixed(2))); updateClonePopup('<div id="mainwp-child-clone-create-progress" style="margin-top: 1em !important;"></div>', false); jQuery('#mainwp-child-clone-create-progress').progressbar({value: 0, max: (size * 1024)}); var data = { action:'mainwp-child_clone_backupcreate', siteId: siteId, rand: rand }; jQuery.post(ajaxurl, data, function(pSiteId, pSiteName) { return function(resp) { backupCreationFinished = true; clearTimeout(pollingCreation); var progressBar = jQuery('#mainwp-child-clone-create-progress'); progressBar.progressbar('value', parseFloat(progressBar.progressbar('option', 'max'))); if (resp.error) { handleCloneError(resp); return; } updateClonePopup(mwp_sprintf(translations['backup_created'], pSiteName, (resp.size / 1024).toFixed(2))); //update view; cloneInitiateBackupDownload(pSiteId, resp.url, resp.size); } }(siteId, siteName), 'json'); //Poll for filesize 'till it's complete pollingCreation = setTimeout(function() { cloneBackupCreationPolling(siteId, rand); }, 1000); }; cloneBackupCreationPolling = function(siteId, rand) { if (backupCreationFinished) return; var data = { action:'mainwp-child_clone_backupcreatepoll', siteId: siteId, rand: rand }; jQuery.post(ajaxurl, data, function(pSiteId, pRand) { return function(resp) { if (backupCreationFinished) return; if (resp.size) { var progressBar = jQuery('#mainwp-child-clone-create-progress'); if (progressBar.progressbar('option', 'value') < progressBar.progressbar('option', 'max')) { progressBar.progressbar('value', resp.size); } //Also update estimated time?? ETA?? } pollingCreation = setTimeout(function() { cloneBackupCreationPolling(pSiteId, pRand); }, 1000); } }(siteId, rand), 'json'); }; cloneInitiateBackupDownload = function(pSiteId, pFile, pSize) { updateClonePopup(translations['downloading_backup']); updateClonePopup('<div id="mainwp-child-clone-download-progress" style="margin-top: 1em !important;"></div>', false); jQuery('#mainwp-child-clone-download-progress').progressbar({value: 0, max: pSize}); var data = { action:'mainwp-child_clone_backupdownload', file: pFile }; if (pSiteId != undefined) data['siteId'] = pSiteId; jQuery.post(ajaxurl, data, function(siteId) { return function(resp) { backupDownloadFinished = true; clearTimeout(pollingDownloading); var progressBar = jQuery('#mainwp-child-clone-download-progress'); progressBar.progressbar('value', parseFloat(progressBar.progressbar('option', 'max'))); if (resp.error) { handleCloneError(resp); return; } updateClonePopup(translations['backup_downloaded']); //update view cloneInitiateExtractBackup(); }}(pSiteId), 'json'); //Poll for filesize 'till it's complete pollingDownloading = setTimeout(function() { cloneBackupDownloadPolling(pSiteId, pFile); }, 1000); }; cloneBackupDownloadPolling = function(siteId, pFile) { if (backupDownloadFinished) return; var data = { action:'mainwp-child_clone_backupdownloadpoll', siteId: siteId, file: pFile }; jQuery.post(ajaxurl, data, function(pSiteId) { return function(resp) { if (backupDownloadFinished) return; if (resp.size) { var progressBar = jQuery('#mainwp-child-clone-download-progress'); if (progressBar.progressbar('option', 'value') < progressBar.progressbar('option', 'max')) { progressBar.progressbar('value', resp.size); } } pollingDownloading = setTimeout(function() { cloneBackupDownloadPolling(pSiteId); }, 1000); } }(siteId), 'json'); }; cloneInitiateExtractBackup = function(file) { if (file == undefined) file = ''; updateClonePopup(translations['extracting_backup']); //Extract & install SQL var data = { action:'mainwp-child_clone_backupextract', f: file }; jQuery.ajax({ type:"POST", url: ajaxurl, data: data, success: function(resp) { if (resp.error) { handleCloneError(resp); return; } updateClonePopup(translations['clone_complete']); setTimeout(function() { jQuery('#mainwp-child_clone_status').dialog('close'); jQuery('.mainwp-child_select_sites_box').hide(); jQuery('.mainwp-child_info-box-green').show(); jQuery('#mainwp-child_uploadclonebutton').hide(); jQuery('#mainwp-child_clonebutton').hide(); jQuery('.mainwp-hide-after-restore').hide(); }, 1000); }, dataType: 'json'}); }; jQuery(document).on('click', '#mainwp-child-restore', function() { jQuery('#mainwp-child_clone_status').dialog({ resizable: false, height: 400, width: 750, modal: true, close: function(event, ui) {bulkTaskRunning = false; jQuery('#mainwp-child_clone_status').dialog('destroy'); }}); cloneInitiateBackupDownload(undefined, jQuery(this).attr('file'), jQuery(this).attr('size')); return false; }); jQuery(document).on('click', '#mainwp-child_uploadclonebutton', function() { var file = jQuery(this).attr('file'); jQuery('#mainwp-child_clone_status').dialog({ resizable: false, height: 400, width: 750, modal: true, close: function(event, ui) {bulkTaskRunning = false; jQuery('#mainwp-child_clone_status').dialog('destroy'); }}); cloneInitiateExtractBackup(file); return false; }); jQuery(document).on('click', '#mainwp-child_clonebutton', function() { jQuery('#mainwp-child_clone_status').dialog({ resizable: false, height: 400, width: 750, modal: true, close: function(event, ui) {bulkTaskRunning = false; jQuery('#mainwp-child_clone_status').dialog('destroy'); }}); //Initiate backup creation on other child var siteElement = jQuery('.clonesite_select_site_item.selected'); var siteId = siteElement.attr('id'); var siteName = siteElement.find('.mainwp-child_name_label').html(); var siteSize = siteElement.find('.mainwp-child_size_label').attr('size'); var siteRand = siteElement.attr('rand'); cloneInitiateBackupCreation(siteId, siteName, siteSize, siteRand); return false; }); function mwp_sprintf() { if (!arguments || arguments.length < 1 || !RegExp) { return; } var str = arguments[0]; var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/; var a = b = [], numSubstitutions = 0, numMatches = 0; while (a = re.exec(str)) { var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4]; var pPrecision = a[5], pType = a[6], rightPart = a[7]; //alert(a + '\n' + [a[0], leftpart, pPad, pJustify, pMinLength, pPrecision); numMatches++; if (pType == '%') { subst = '%'; } else { numSubstitutions++; if (numSubstitutions >= arguments.length) { alert('Error! Not enough function arguments (' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).'); } var param = arguments[numSubstitutions]; var pad = ''; if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1); else if (pPad) pad = pPad; var justifyRight = true; if (pJustify && pJustify === "-") justifyRight = false; var minLength = -1; if (pMinLength) minLength = parseInt(pMinLength); var precision = -1; if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1)); var subst = param; if (pType == 'b') subst = parseInt(param).toString(2); else if (pType == 'c') subst = String.fromCharCode(parseInt(param)); else if (pType == 'd') subst = parseInt(param) ? parseInt(param) : 0; else if (pType == 'u') subst = Math.abs(param); else if (pType == 'f') subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param); else if (pType == 'o') subst = parseInt(param).toString(8); else if (pType == 's') subst = param; else if (pType == 'x') subst = ('' + parseInt(param).toString(16)).toLowerCase(); else if (pType == 'X') subst = ('' + parseInt(param).toString(16)).toUpperCase(); } str = leftpart + subst + rightPart; } return str; } jQuery(document).on('click', '#mainwp-child_clonebutton_from_server', function() { var cur_dir = jQuery('#clonesite_from_server_current_dir').val(); var file = cur_dir + '/' + jQuery('.clonesite_select_site_item.selected span').html(); jQuery('#mainwp-child_clone_status').dialog({ resizable: false, height: 400, width: 750, modal: true, close: function(event, ui) {bulkTaskRunning = false; jQuery('#mainwp-child_clone_status').dialog('destroy'); }}); cloneInitiateExtractBackup(file); return false; }); </script> <?php self::renderFooter(); }