if (!defined('WPVIVID_PLUGIN_DIR')){
require_once WPVIVID_PLUGIN_DIR . '/includes/class-wpvivid-compress-default.php';
$wpvivid_extract_option = array();
class WPvivid_ZipClass extends Wpvivid_Compress_Default
public $path_filter=array();
public function __construct()
if (!class_exists('PclZip'))
include_once(ABSPATH.'/wp-admin/includes/class-pclzip.php');
if (!class_exists('PclZip'))
$this->last_error = array('result'=>WPVIVID_FAILED,'error'=>"Class PclZip is not detected. Please update or reinstall your WordPress.");
public function get_packages($data,$write_child_files_json=false)
if(!function_exists('get_home_path'))
require_once(ABSPATH . 'wp-admin/includes/file.php');
$files = $this -> filesplit($data['compress']['max_file_size'],$data['files']);
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
if(!file_exists($temp_dir))
for($i =0;$i <sizeof($files);$i ++)
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if($write_child_files_json)
foreach ($files[$i] as $file)
$ret_file=$this->get_json_data($file);
if($ret_file['result']==WPVIVID_SUCCESS)
$json=$ret_file['json_data'];
$json = json_decode($json, 1);
$package['json']['child_file'][basename($file)]=$json;
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[$i];
$path = $data['path'].$data['prefix'].'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
if($write_child_files_json)
foreach ($files[0] as $file)
$ret_file=$this->get_json_data($file);
if($ret_file['result']==WPVIVID_SUCCESS)
$json=$ret_file['json_data'];
$json = json_decode($json, 1);
$package['json']['child_file'][basename($file)]=$json;
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[0];
$ret['packages']=$packages;
$ret['temp_dir']=$temp_dir;
public function get_plugin_packages($data)
if(!function_exists('get_home_path'))
require_once(ABSPATH . 'wp-admin/includes/file.php');
$max_size= $data['compress']['max_file_size'];
$max_size = str_replace('M', '', $max_size);
$size = intval($max_size) * 1024 * 1024;
$files = $this -> filesplit_plugin($size,$data['files'],false);
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
if(!file_exists($temp_dir))
for($i =0;$i <sizeof($files);$i ++)
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[$i];
$path = $data['path'].$data['prefix'].'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[0];
$ret['packages']=$packages;
$ret['temp_dir']=$temp_dir;
public function get_upload_packages($data)
if(!function_exists('get_home_path'))
require_once(ABSPATH . 'wp-admin/includes/file.php');
$max_size= $data['compress']['max_file_size'];
$max_size = str_replace('M', '', $max_size);
$size = intval($max_size) * 1024 * 1024;
$files = $this -> get_files_cache($size,$data);
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
if(!file_exists($temp_dir))
foreach ($files as $file)
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $file;
$path = $data['path'].$data['prefix'].'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[0];
$ret['packages']=$packages;
public function compress_additional_database($data){
if(!function_exists('get_home_path'))
require_once(ABSPATH . 'wp-admin/includes/file.php');
$wpvivid_plugin->wpvivid_log->WriteLog('Start compressing '.$data['key'],'notice');
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
if(!file_exists($temp_dir))
$ret['result']=WPVIVID_SUCCESS;
foreach ($files as $file){
$file_name = str_replace($data['path'], '', $file_name);
$file_name = str_replace('.sql', '', $file_name);
$path = $data['path'].$file_name.'.zip';
if(isset($data['json_info']))
$package_file['json']=$data['json_info'];
foreach ($data['sql_file_name'] as $sql_info){
if($file === $sql_info['file_name']){
$package_file['json']['database'] = $sql_info['database'];
if(isset($data['root_path']))
$package['json']['root_path'] = $data['root_path'];
if(isset($data['root_flag']))
$package_file['json']['root_flag'] = $data['root_flag'];
$package_file['json']['file']=basename($path);
$package_file['path'] = $path;
$package_file['files'] = $file;
$wpvivid_plugin->set_time_limit($wpvivid_plugin->current_task['id']);
$zip_ret=$this -> _zip($package_file['path'],$package_file['files'], $data, $package_file['json']);
if($zip_ret['result']==WPVIVID_SUCCESS)
$ret['files'][] = $zip_ret['file_data'];
$wpvivid_plugin->wpvivid_log->WriteLog('Compressing '.$data['key'].' completed','notice');
public function compress($data,$write_child_files_json=false)
if(!function_exists('get_home_path'))
require_once(ABSPATH . 'wp-admin/includes/file.php');
$wpvivid_plugin->wpvivid_log->WriteLog('Start compressing '.$data['key'],'notice');
$files = $this -> filesplit($data['compress']['max_file_size'],$data['files']);
$temp_dir = $data['path'].'temp-'.$data['prefix'].DIRECTORY_SEPARATOR;
if(!file_exists($temp_dir))
for($i =0;$i <sizeof($files);$i ++)
$path = $data['path'].$data['prefix'].'.part'.sprintf('%03d',($i +1)).'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($options['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[$i];
$path = $data['path'].$data['prefix'].'.zip';
if(isset($data['json_info']))
$package['json']=$data['json_info'];
$remove_path_size = strlen( $this -> transfer_path(get_home_path()));
$package['json']['root'] = substr($data['root_path'], $remove_path_size);
if(isset($data['root_flag']))
$package['json']['root_flag'] = $data['root_flag'];
if(isset($options['root_path']))
$package['json']['root_path'] = $data['root_path'];
$package['json']['file']=basename($path);
$package['path'] = $path;
$package['files'] = $files[0];
$ret['result']=WPVIVID_SUCCESS;
foreach ($packages as $package)
if(!empty($package['files']))
$wpvivid_plugin->set_time_limit($wpvivid_plugin->current_task['id']);
$zip_ret=$this -> _zip($package['path'],$package['files'], $data,$package['json']);
if($zip_ret['result']==WPVIVID_SUCCESS)
$ret['files'][] = $zip_ret['file_data'];
$wpvivid_plugin->wpvivid_log->WriteLog('Compressing '.$data['key'].' completed','notice');
public function extract($files, $path = '', $option = array())
if (!class_exists('WPvivid_PclZip'))
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
$GLOBALS['wpvivid_extract_option'] = $option;
//$wpvivid_plugin->restore_data->write_log('start prepare extract','notice');
define(PCLZIP_TEMPORARY_DIR,dirname($path));
$ret['result']=WPVIVID_SUCCESS;
foreach ($files as $file)
$wpvivid_plugin->restore_data->write_log('start extracting file:'.$file,'notice');
$archive = new WPvivid_PclZip($file);
$zip_ret = $archive->extract(WPVIVID_PCLZIP_OPT_PATH, $path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
$ret['result']=WPVIVID_FAILED;
$ret['error'] = $archive->errorInfo(true);
$wpvivid_plugin->restore_data->write_log('extract finished:'.wp_json_encode($ret),'notice');
$wpvivid_plugin->restore_data->write_log('extract finished file:'.$file,'notice');
//$this->restore_data->write_log('extract finished files:'.wp_json_encode($all_files),'notice');
public function extract_ex($files,$path = '',$extract_files=array())
if (!class_exists('WPvivid_PclZip'))
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
//$wpvivid_plugin->restore_data->write_log('start prepare extract','notice');
define(PCLZIP_TEMPORARY_DIR,dirname($path));
$ret['result']=WPVIVID_SUCCESS;
foreach ($files as $file)
$wpvivid_plugin->restore_data->write_log('start extracting file:'.$file,'notice');
$wpvivid_plugin->restore_data->write_log('extract child file:'.wp_json_encode($extract_files),'notice');
$archive = new WPvivid_PclZip($file);
$zip_ret = $archive->extract(WPVIVID_PCLZIP_OPT_BY_NAME,$extract_files,WPVIVID_PCLZIP_OPT_PATH, $path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
$ret['result']=WPVIVID_FAILED;
$ret['error'] = $archive->errorInfo(true);
$wpvivid_plugin->restore_data->write_log('extract finished:'.wp_json_encode($ret),'notice');
$wpvivid_plugin->restore_data->write_log('extract finished file:'.$file,'notice');
//$this->restore_data->write_log('extract finished files:'.wp_json_encode($all_files),'notice');
public function extract_by_files($files,$zip,$path = '')
if (!class_exists('WPvivid_PclZip'))
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
define(PCLZIP_TEMPORARY_DIR,$path);
$archive = new WPvivid_PclZip($zip);
$list = $archive -> listContent();
if(strstr($item['filename'],WPVIVID_ZIPCLASS_JSONFILE_NAME))
$result = $archive->extract(WPVIVID_PCLZIP_OPT_BY_NAME, WPVIVID_ZIPCLASS_JSONFILE_NAME);
$json = json_decode(file_get_contents(dirname($zip).WPVIVID_ZIPCLASS_JSONFILE_NAME),true);
$path = $json['root_path'];
$str = $archive->extract(WPVIVID_PCLZIP_OPT_PATH, $path, WPVIVID_PCLZIP_OPT_BY_NAME, $files, WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
$error = $archive->errorInfo(true);
if($item['status'] === 'ok'){
$last_error = 'restore '.$item['filename'].' failed status:'.$item['status'];
$table['succeed'] = $success_num;
$table['failed'] = $error_num;