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;
 }