public static function cloneBackupExtract() { try { MainWPHelper::endSession(); $file = isset($_POST['f']) ? $_POST['f'] : $_POST['file']; $testFull = false; if ($file == '') { $dirs = MainWPHelper::getMainWPDir('backup', false); $backupdir = $dirs[0]; $files = glob($backupdir . 'download-*'); $archiveFile = false; foreach ($files as $file) { if (MainWPHelper::isArchive($file, 'download-')) { $archiveFile = $file; break; } } if ($archiveFile === false) { throw new Exception(__('No download file found', 'mainwp-child')); } $file = $archiveFile; } else { if (file_exists($file)) { $testFull = true; } else { $file = ABSPATH . $file; if (!file_exists($file)) { throw new Exception(__('Backup file not found', 'mainwp-child')); } $testFull = true; } } //return size in kb $cloneInstall = new MainWPCloneInstall($file); //todo: RS: refactor to get those plugins after install (after .18 release) $cloneInstall->readConfigurationFile(); $plugins = get_option('mainwp_temp_clone_plugins'); $themes = get_option('mainwp_temp_clone_themes'); if ($testFull) { $cloneInstall->testDownload(); } $cloneInstall->removeConfigFile(); $cloneInstall->extractBackup(); $pubkey = get_option('mainwp_child_pubkey'); $uniqueId = get_option('mainwp_child_uniqueId'); $server = get_option('mainwp_child_server'); $nonce = get_option('mainwp_child_nonce'); $nossl = get_option('mainwp_child_nossl'); $nossl_key = get_option('mainwp_child_nossl_key'); $sitesToClone = get_option('mainwp_child_clone_sites'); $cloneInstall->install(); $cloneInstall->updateWPConfig(); // $cloneInstall->update_option('mainwp_child_pubkey', $pubkey); // $cloneInstall->update_option('mainwp_child_uniqueId', $uniqueId); // $cloneInstall->update_option('mainwp_child_server', $server); // $cloneInstall->update_option('mainwp_child_nonce', $nonce); // $cloneInstall->update_option('mainwp_child_nossl', $nossl); // $cloneInstall->update_option('mainwp_child_nossl_key', $nossl_key); // $cloneInstall->update_option('mainwp_child_clone_sites', $sitesToClone); // $cloneInstall->update_option('mainwp_child_clone_permalink', true); MainWPHelper::update_option('mainwp_child_pubkey', $pubkey, 'yes'); MainWPHelper::update_option('mainwp_child_uniqueId', $uniqueId); MainWPHelper::update_option('mainwp_child_server', $server); MainWPHelper::update_option('mainwp_child_nonce', $nonce); MainWPHelper::update_option('mainwp_child_nossl', $nossl, 'yes'); MainWPHelper::update_option('mainwp_child_nossl_key', $nossl_key); MainWPHelper::update_option('mainwp_child_clone_sites', $sitesToClone); if (!MainWPHelper::startsWith(basename($file), 'download-backup-')) { MainWPHelper::update_option('mainwp_child_restore_permalink', true, 'yes'); } else { MainWPHelper::update_option('mainwp_child_clone_permalink', true, 'yes'); } $cloneInstall->clean(); if ($plugins !== false) { $out = array(); if (is_array($plugins)) { $dir = WP_CONTENT_DIR . '/plugins/'; $fh = @opendir($dir); while ($entry = @readdir($fh)) { if (!is_dir($dir . $entry)) { continue; } if ($entry == '.' || $entry == '..') { continue; } if (!in_array($entry, $plugins)) { MainWPHelper::delete_dir($dir . $entry); } } @closedir($fh); } delete_option('mainwp_temp_clone_plugins'); } if ($themes !== false) { $out = array(); if (is_array($themes)) { $dir = WP_CONTENT_DIR . '/themes/'; $fh = @opendir($dir); while ($entry = @readdir($fh)) { if (!is_dir($dir . $entry)) { continue; } if ($entry == '.' || $entry == '..') { continue; } if (!in_array($entry, $themes)) { MainWPHelper::delete_dir($dir . $entry); } } @closedir($fh); } delete_option('mainwp_temp_clone_themes'); } $output = array('result' => 'ok'); //todo: remove old tables if other prefix? wp_logout(); wp_set_current_user(0); } catch (Exception $e) { $output = array('error' => $e->getMessage()); } //return size in kb die(json_encode($output)); }
public function createZipPclFullBackup2($filepath, $excludes, $addConfig, $includeCoreFiles, $excludezip, $excludenonwp) { global $classDir; //Create backup folder $backupFolder = dirname($filepath) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR; @mkdir($backupFolder); //Create DB backup $this->createBackupDB($backupFolder . 'dbBackup.sql'); //Copy installation to backup folder $nodes = glob(ABSPATH . '*'); if (!$includeCoreFiles) { $coreFiles = array('favicon.ico', 'index.php', 'license.txt', 'readme.html', 'wp-activate.php', 'wp-app.php', 'wp-blog-header.php', 'wp-comments-post.php', 'wp-config.php', 'wp-config-sample.php', 'wp-cron.php', 'wp-links-opml.php', 'wp-load.php', 'wp-login.php', 'wp-mail.php', 'wp-pass.php', 'wp-register.php', 'wp-settings.php', 'wp-signup.php', 'wp-trackback.php', 'xmlrpc.php'); foreach ($nodes as $key => $node) { if (MainWPHelper::startsWith($node, ABSPATH . WPINC)) { unset($nodes[$key]); } else { if (MainWPHelper::startsWith($node, ABSPATH . basename(admin_url('')))) { unset($nodes[$key]); } else { foreach ($coreFiles as $coreFile) { if ($node == ABSPATH . $coreFile) { unset($nodes[$key]); } } } } } unset($coreFiles); } $this->copy_dir($nodes, $excludes, $backupFolder, $excludenonwp, true); // to fix bug wrong folder @copy($backupFolder . 'dbBackup.sql', $backupFolder . basename(WP_CONTENT_DIR) . '/dbBackup.sql'); @unlink($backupFolder . 'dbBackup.sql'); unset($nodes); //Zip this backup folder.. require_once ABSPATH . 'wp-admin/includes/class-pclzip.php'; $this->zip = new PclZip($filepath); $this->zip->create($backupFolder, PCLZIP_OPT_REMOVE_PATH, $backupFolder); if ($addConfig) { global $wpdb; $string = base64_encode(serialize(array('siteurl' => get_option('siteurl'), 'home' => get_option('home'), 'abspath' => ABSPATH, 'prefix' => $wpdb->prefix, 'lang' => WPLANG))); $this->addFileFromStringToPCLZip('clone/config.txt', $string, $filepath); } //Remove backup folder MainWPHelper::delete_dir($backupFolder); return true; }