update
This commit is contained in:
@@ -0,0 +1,768 @@
|
||||
<?php
|
||||
|
||||
if (!defined('WPVIVID_PLUGIN_DIR'))
|
||||
{
|
||||
die;
|
||||
}
|
||||
|
||||
class WPvivid_Restore_File_2
|
||||
{
|
||||
public $log;
|
||||
|
||||
public function __construct($log=false)
|
||||
{
|
||||
$this->log=$log;
|
||||
}
|
||||
|
||||
public function restore($sub_task,$backup_id)
|
||||
{
|
||||
if($sub_task['type']=='wp-core')
|
||||
{
|
||||
return $this->restore_core($sub_task,$backup_id);
|
||||
}
|
||||
|
||||
$files=$sub_task['unzip_file']['files'];
|
||||
$GLOBALS['wpvivid_restore_addon_type'] =$sub_task['type'];
|
||||
//restore_reset
|
||||
|
||||
foreach ($files as $index=>$file)
|
||||
{
|
||||
if($file['finished']==1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['unzip_file']['last_unzip_file']=$file['file_name'];
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].'</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
|
||||
$backup = WPvivid_Backuplist::get_backup_by_id($backup_id);
|
||||
$backup_item = new WPvivid_Backup_Item($backup);
|
||||
|
||||
$extract_child_finished=isset($file['extract_child_finished'])?$file['extract_child_finished']:0;
|
||||
|
||||
if(isset($file['has_child'])&&$extract_child_finished==0)
|
||||
{
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['unzip_file']['last_unzip_file']=$file['parent_file'];
|
||||
$sub_task['unzip_file']['last_unzip_file_index']=0;
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['parent_file'].'</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
|
||||
$root_path=$backup_item->get_local_path();
|
||||
|
||||
if(!file_exists($root_path))
|
||||
{
|
||||
@mkdir($root_path);
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.$file['parent_file'],'notice');
|
||||
$extract_files[]=$file['file_name'];
|
||||
$ret=$this->extract_ex($root_path.$file['parent_file'],$extract_files,untrailingslashit($root_path),$sub_task['options']);
|
||||
if($ret['result']!='success')
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.$file['parent_file'].' succeeded.','notice');
|
||||
$file_name=$root_path.$file['file_name'];
|
||||
$sub_task['unzip_file']['files'][$index]['extract_child_finished']=1;
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['parent_file'].' completed.</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
}
|
||||
else
|
||||
{
|
||||
$root_path=$backup_item->get_local_path();
|
||||
$file_name=$root_path.$file['file_name'];
|
||||
}
|
||||
|
||||
|
||||
$root_path = '';
|
||||
if (isset($file['options']['root']))
|
||||
{
|
||||
$root_path = $this->transfer_path(get_home_path() . $file['options']['root']);
|
||||
}
|
||||
else if (isset($file['options']['root_flag']))
|
||||
{
|
||||
if ($file['options']['root_flag'] == WPVIVID_BACKUP_ROOT_WP_CONTENT)
|
||||
{
|
||||
$root_path = $this->transfer_path(WP_CONTENT_DIR);
|
||||
}
|
||||
else if ($file['options']['root_flag'] == WPVIVID_BACKUP_ROOT_CUSTOM)
|
||||
{
|
||||
$root_path = $this->transfer_path(WP_CONTENT_DIR . DIRECTORY_SEPARATOR . WPvivid_Setting::get_backupdir());
|
||||
}
|
||||
else if ($file['options']['root_flag'] == WPVIVID_BACKUP_ROOT_WP_ROOT)
|
||||
{
|
||||
$root_path = $this->transfer_path(ABSPATH);
|
||||
}
|
||||
else if($file['options']['root_flag'] == WPVIVID_BACKUP_ROOT_WP_UPLOADS)
|
||||
{
|
||||
$upload_dir = wp_upload_dir();
|
||||
$upload_path = $upload_dir['basedir'];
|
||||
|
||||
$root_path = $this->transfer_path($upload_path);
|
||||
}
|
||||
}
|
||||
|
||||
if($sub_task['restore_reset'])
|
||||
{
|
||||
if($sub_task['restore_reset_finished']===false)
|
||||
{
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['last_msg']='<span>Cleaning folder:</span><span>'.$sub_task['type'].'</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
$this->log->WriteLog('Cleaning folder:'.$sub_task['type'],'notice');
|
||||
$this->reset_restore($sub_task['type']);
|
||||
$sub_task['restore_reset_finished']=true;
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['last_msg']='<span>Cleaning folder:</span><span>'.$sub_task['type'].' completed.</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
}
|
||||
}
|
||||
|
||||
$root_path = rtrim($root_path, '/');
|
||||
$root_path = rtrim($root_path, DIRECTORY_SEPARATOR);
|
||||
|
||||
$restore_task=get_option('wpvivid_restore_task',array());
|
||||
$restore_detail_options=$restore_task['restore_detail_options'];
|
||||
$unzip_files_pre_request=$restore_detail_options['unzip_files_pre_request'];
|
||||
$use_index=$restore_detail_options['use_index'];
|
||||
if($use_index==false)
|
||||
{
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].'</span>';
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['unzip_file']['last_unzip_file']=$file['file_name'];
|
||||
$sub_task['unzip_file']['last_unzip_file_index']=0;
|
||||
|
||||
$this->update_sub_task($sub_task);
|
||||
$this->log->WriteLog('Extracting file:'.$file_name,'notice');
|
||||
$ret=$this->extract($file_name,untrailingslashit($root_path),$sub_task['options']);
|
||||
if($ret['result']!='success')
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.$file_name.' succeeded','notice');
|
||||
$sub_task['unzip_file']['files'][$index]['finished']=1;
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].' completed.</span>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sum=$this->get_zip_file_count($file_name);
|
||||
|
||||
$start=$file['index'];
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].' '.$start.'/'.$sum.'</span>';
|
||||
$sub_task['unzip_file']['sum']=$sum;
|
||||
$sub_task['unzip_file']['start']=$start;
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['unzip_file']['last_unzip_file']=$file['file_name'];
|
||||
$sub_task['unzip_file']['last_unzip_file_index']=$start;
|
||||
$this->update_sub_task($sub_task);
|
||||
$this->log->WriteLog('Extracting file:'.basename($file_name).' index:'.$start,'notice');
|
||||
$ret=$this->extract_by_index($file_name,untrailingslashit($root_path),$start,$start+$unzip_files_pre_request,$sub_task['options']);
|
||||
if($ret['result']!='success')
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.basename($file_name).' index:'.$start.' finished.','notice');
|
||||
$sub_task['unzip_file']['files'][$index]['index']=$start+$unzip_files_pre_request;
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
if($start+$unzip_files_pre_request>=$sum)
|
||||
{
|
||||
$sub_task['unzip_file']['files'][$index]['finished']=1;
|
||||
$sub_task['unzip_file']['sum']=0;
|
||||
$sub_task['unzip_file']['start']=0;
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].' completed.</span>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].' '.$sub_task['unzip_file']['files'][$index]['index'].'/'.$sum.'</span>';
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if($this->check_restore_finished($sub_task))
|
||||
{
|
||||
$sub_task['finished']=1;
|
||||
$sub_task['unzip_file']['unzip_finished']=1;
|
||||
$sub_task['unzip_file']['sum']=0;
|
||||
$sub_task['unzip_file']['start']=0;
|
||||
}
|
||||
|
||||
$ret['result']='success';
|
||||
$ret['sub_task']=$sub_task;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function restore_core($sub_task,$backup_id)
|
||||
{
|
||||
$files=$sub_task['unzip_file']['files'];
|
||||
$GLOBALS['wpvivid_restore_addon_type'] =$sub_task['type'];
|
||||
//restore_reset
|
||||
foreach ($files as $index=>$file)
|
||||
{
|
||||
if($file['finished']==1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['unzip_file']['last_unzip_file']=$file['file_name'];
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['file_name'].'</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
|
||||
$backup = WPvivid_Backuplist::get_backup_by_id($backup_id);
|
||||
$backup_item = new WPvivid_Backup_Item($backup);
|
||||
$extract_child_finished=isset($file['extract_child_finished'])?$file['extract_child_finished']:0;
|
||||
if(isset($file['has_child'])&&$extract_child_finished==0)
|
||||
{
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['parent_file'].'</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
|
||||
$root_path=$backup_item->get_local_path();
|
||||
|
||||
if(!file_exists($root_path))
|
||||
{
|
||||
@mkdir($root_path);
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.$file['parent_file'],'notice');
|
||||
|
||||
$extract_files[]=$file['file_name'];
|
||||
$ret=$this->extract_ex($root_path.$file['parent_file'],$extract_files,untrailingslashit($root_path),$sub_task['options']);
|
||||
if($ret['result']!='success')
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.$file['parent_file'].' succeeded.','notice');
|
||||
$file_name=$root_path.$file['file_name'];
|
||||
$sub_task['unzip_file']['files'][$index]['extract_child_finished']=1;
|
||||
$sub_task['last_msg']='<span><strong>Extracting file:</strong></span><span>'.$file['parent_file'].' completed.</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
}
|
||||
else
|
||||
{
|
||||
$root_path=$backup_item->get_local_path();
|
||||
$file_name=$root_path.$file['file_name'];
|
||||
}
|
||||
|
||||
if($sub_task['restore_reset'])
|
||||
{
|
||||
if($sub_task['restore_reset_finished']===false)
|
||||
{
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['last_msg']='<span>Cleaning folder:</span><span>'.$sub_task['type'].'</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
$this->log->WriteLog('Cleaning folder:'.$sub_task['type'],'notice');
|
||||
$this->reset_restore($sub_task['type']);
|
||||
|
||||
$sub_task['restore_reset_finished']=true;
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$sub_task['last_msg']='<span>Cleaning folder:</span><span>'.$sub_task['type'].' completed.</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
}
|
||||
}
|
||||
|
||||
$root_path = $this->transfer_path(ABSPATH);
|
||||
|
||||
$root_path = rtrim($root_path, '/');
|
||||
$root_path = rtrim($root_path, DIRECTORY_SEPARATOR);
|
||||
|
||||
$sub_task['last_msg']='<span><strong>Extracting Files:</strong></span><span>'.$file['file_name'].'</span>';
|
||||
$sub_task['unzip_file']['last_action']='Unzipping';
|
||||
$this->update_sub_task($sub_task);
|
||||
$this->log->WriteLog('Extracting file:'.basename($file_name),'notice');
|
||||
|
||||
$ret=$this->extract($file_name,untrailingslashit($root_path),$sub_task['options']);
|
||||
if($ret['result']!='success')
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
$this->log->WriteLog('Extracting file:'.basename($file_name).' succeeded.','notice');
|
||||
$sub_task['unzip_file']['files'][$index]['finished']=1;
|
||||
$sub_task['last_msg']='<span><strong>Extracting Files:</strong></span><span>'.$file['file_name'].' finished</span>';
|
||||
$this->update_sub_task($sub_task);
|
||||
}
|
||||
|
||||
if($this->check_restore_finished($sub_task))
|
||||
{
|
||||
$sub_task['finished']=1;
|
||||
$sub_task['unzip_file']['unzip_finished']=1;
|
||||
}
|
||||
|
||||
$ret['result']='success';
|
||||
$ret['sub_task']=$sub_task;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function extract($file_name,$root_path,$option)
|
||||
{
|
||||
if (!class_exists('WPvivid_PclZip'))
|
||||
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
||||
|
||||
if(!empty($option))
|
||||
{
|
||||
$GLOBALS['wpvivid_restore_option'] = $option;
|
||||
}
|
||||
|
||||
if(!defined('PCLZIP_TEMPORARY_DIR'))
|
||||
define(PCLZIP_TEMPORARY_DIR,dirname($root_path));
|
||||
|
||||
$archive = new WPvivid_PclZip($file_name);
|
||||
$zip_ret = $archive->extract(WPVIVID_PCLZIP_OPT_PATH, $root_path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback_2',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
|
||||
if(!$zip_ret)
|
||||
{
|
||||
$ret['result']='failed';
|
||||
$ret['error'] = $archive->errorInfo(true);
|
||||
$this->log->WriteLog('Extracting failed. Error:'.$archive->errorInfo(true),'notice');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ret['result']='success';
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function extract_ex($file_name,$extract_files,$root_path,$option)
|
||||
{
|
||||
if (!class_exists('WPvivid_PclZip'))
|
||||
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
||||
|
||||
if(!empty($option))
|
||||
{
|
||||
$GLOBALS['wpvivid_restore_option'] = $option;
|
||||
}
|
||||
|
||||
if(!defined('PCLZIP_TEMPORARY_DIR'))
|
||||
define(PCLZIP_TEMPORARY_DIR,dirname($root_path));
|
||||
|
||||
$archive = new WPvivid_PclZip($file_name);
|
||||
$zip_ret = $archive->extract(WPVIVID_PCLZIP_OPT_BY_NAME,$extract_files,WPVIVID_PCLZIP_OPT_PATH, $root_path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback_2',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
|
||||
if(!$zip_ret)
|
||||
{
|
||||
$ret['result']='failed';
|
||||
$ret['error'] = $archive->errorInfo(true);
|
||||
$this->log->WriteLog('Extracting failed. Error:'.$archive->errorInfo(true),'notice');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ret['result']='success';
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function extract_by_index($file_name,$root_path,$start,$end,$option)
|
||||
{
|
||||
$index=$start.'-'.$end;
|
||||
|
||||
if (!class_exists('WPvivid_PclZip'))
|
||||
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
||||
|
||||
if(!empty($option))
|
||||
{
|
||||
$GLOBALS['wpvivid_restore_option'] = $option;
|
||||
}
|
||||
|
||||
if(!defined('PCLZIP_TEMPORARY_DIR'))
|
||||
define(PCLZIP_TEMPORARY_DIR,dirname($root_path));
|
||||
|
||||
$archive = new WPvivid_PclZip($file_name);
|
||||
$zip_ret = $archive->extractByIndex($index,WPVIVID_PCLZIP_OPT_PATH, $root_path,WPVIVID_PCLZIP_OPT_REPLACE_NEWER,WPVIVID_PCLZIP_CB_PRE_EXTRACT,'wpvivid_function_pre_extract_callback_2',WPVIVID_PCLZIP_OPT_TEMP_FILE_THRESHOLD,16);
|
||||
if(!$zip_ret)
|
||||
{
|
||||
$ret['result']='failed';
|
||||
$ret['error'] = $archive->errorInfo(true);
|
||||
$this->log->WriteLog('Extracting failed. Error:'.$archive->errorInfo(true),'notice');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ret['result']='success';
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function get_zip_file_count($file_name)
|
||||
{
|
||||
if (!class_exists('WPvivid_PclZip'))
|
||||
include_once WPVIVID_PLUGIN_DIR . '/includes/zip/class-wpvivid-pclzip.php';
|
||||
|
||||
$archive = new WPvivid_PclZip($file_name);
|
||||
$properties=$archive->properties();
|
||||
return $properties['nb'];
|
||||
}
|
||||
|
||||
public function check_restore_finished($sub_task)
|
||||
{
|
||||
$finished=true;
|
||||
|
||||
$files=$sub_task['unzip_file']['files'];
|
||||
|
||||
foreach ($files as $index=>$file)
|
||||
{
|
||||
if($file['finished']==1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
$finished=false;
|
||||
}
|
||||
}
|
||||
|
||||
return $finished;
|
||||
}
|
||||
|
||||
private function transfer_path($path)
|
||||
{
|
||||
$path = str_replace('\\','/',$path);
|
||||
$values = explode('/',$path);
|
||||
return implode(DIRECTORY_SEPARATOR,$values);
|
||||
}
|
||||
|
||||
public function update_sub_task($sub_task=false)
|
||||
{
|
||||
$restore_task=get_option('wpvivid_restore_task',array());
|
||||
|
||||
if($restore_task['do_sub_task']!==false)
|
||||
{
|
||||
$key=$restore_task['do_sub_task'];
|
||||
$restore_task['update_time']=time();
|
||||
if($sub_task!==false)
|
||||
$restore_task['sub_tasks'][$key]=$sub_task;
|
||||
update_option('wpvivid_restore_task',$restore_task,'no');
|
||||
}
|
||||
}
|
||||
|
||||
public function reset_restore($type)
|
||||
{
|
||||
if($type=='themes')
|
||||
{
|
||||
return $this->delete_themes();
|
||||
}
|
||||
else if($type=='plugin')
|
||||
{
|
||||
return $this->delete_plugins();
|
||||
}
|
||||
else if($type=='upload')
|
||||
{
|
||||
return $this->delete_uploads();
|
||||
}
|
||||
else if($type=='wp-content')
|
||||
{
|
||||
return $this->delete_wp_content();
|
||||
}
|
||||
//else if($type=='mu_plugins')
|
||||
//{
|
||||
// return $this->delete_mu_plugins();
|
||||
//}
|
||||
else if($type=='wp-core')
|
||||
{
|
||||
return $this->delete_core();
|
||||
}
|
||||
$ret['result']='success';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function delete_themes()
|
||||
{
|
||||
if (!function_exists('delete_theme'))
|
||||
{
|
||||
require_once ABSPATH . 'wp-admin/includes/theme.php';
|
||||
}
|
||||
|
||||
if (!function_exists('request_filesystem_credentials'))
|
||||
{
|
||||
require_once ABSPATH . 'wp-admin/includes/file.php';
|
||||
}
|
||||
|
||||
$all_themes = wp_get_themes(array('errors' => null));
|
||||
|
||||
foreach ($all_themes as $theme_slug => $theme_details)
|
||||
{
|
||||
delete_theme($theme_slug);
|
||||
}
|
||||
|
||||
update_option('template', '');
|
||||
update_option('stylesheet', '');
|
||||
update_option('current_theme', '');
|
||||
|
||||
$ret['result']=WPVIVID_SUCCESS;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function delete_plugins()
|
||||
{
|
||||
if (!function_exists('get_plugins'))
|
||||
{
|
||||
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
||||
}
|
||||
if (!function_exists('request_filesystem_credentials'))
|
||||
{
|
||||
require_once ABSPATH . 'wp-admin/includes/file.php';
|
||||
}
|
||||
|
||||
$wpvivid_backup_pro='wpvivid-backup-pro/wpvivid-backup-pro.php';
|
||||
$wpvivid_backup='wpvivid-backuprestore/wpvivid-backuprestore.php';
|
||||
|
||||
$all_plugins = get_plugins();
|
||||
unset($all_plugins[$wpvivid_backup_pro]);
|
||||
unset($all_plugins[$wpvivid_backup]);
|
||||
|
||||
if (!empty($all_plugins))
|
||||
{
|
||||
$this->_delete_plugins(array_keys($all_plugins));
|
||||
}
|
||||
|
||||
$ret['result']=WPVIVID_SUCCESS;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function _delete_plugins($plugins)
|
||||
{
|
||||
if ( empty( $plugins ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$plugins_dir = trailingslashit( WP_PLUGIN_DIR );
|
||||
|
||||
foreach ( $plugins as $plugin_file )
|
||||
{
|
||||
$this_plugin_dir = trailingslashit( dirname( $plugins_dir . $plugin_file ) );
|
||||
|
||||
// If plugin is in its own directory, recursively delete the directory.
|
||||
if ( strpos( $plugin_file, '/' ) && $this_plugin_dir != $plugins_dir )
|
||||
{ //base check on if plugin includes directory separator AND that it's not the root plugin folder
|
||||
$this->delete_folder($this_plugin_dir,$plugins_dir);
|
||||
} else {
|
||||
@wp_delete_file($plugins_dir . $plugin_file);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function delete_uploads()
|
||||
{
|
||||
$upload_dir = wp_get_upload_dir();
|
||||
|
||||
$this->delete_folder($upload_dir['basedir'], $upload_dir['basedir']);
|
||||
|
||||
$ret['result']=WPVIVID_SUCCESS;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function delete_folder($folder, $base_folder)
|
||||
{
|
||||
$files = array_diff(scandir($folder), array('.', '..'));
|
||||
|
||||
foreach ($files as $file)
|
||||
{
|
||||
if (is_dir($folder . DIRECTORY_SEPARATOR . $file))
|
||||
{
|
||||
$this->delete_folder($folder . DIRECTORY_SEPARATOR . $file, $base_folder);
|
||||
} else {
|
||||
@wp_delete_file($folder . DIRECTORY_SEPARATOR . $file);
|
||||
}
|
||||
} // foreach
|
||||
|
||||
if ($folder != $base_folder)
|
||||
{
|
||||
$tmp = @rmdir($folder);
|
||||
return $tmp;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public function delete_wp_content()
|
||||
{
|
||||
global $wpvivid_plugin;
|
||||
|
||||
$wp_content_dir = trailingslashit(WP_CONTENT_DIR);
|
||||
|
||||
$wpvivid_backup=WPvivid_Setting::get_backupdir();
|
||||
|
||||
$whitelisted_folders = array('mu-plugins', 'plugins', 'themes', 'uploads',$wpvivid_backup);
|
||||
|
||||
$dirs = glob($wp_content_dir . '*', GLOB_ONLYDIR);
|
||||
foreach ($dirs as $dir)
|
||||
{
|
||||
if (false == in_array(basename($dir), $whitelisted_folders))
|
||||
{
|
||||
$this->delete_folder($dir, $dir);
|
||||
@rmdir($dir);
|
||||
}
|
||||
}
|
||||
|
||||
$ret['result']=WPVIVID_SUCCESS;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function delete_mu_plugins()
|
||||
{
|
||||
$ret['result']=WPVIVID_SUCCESS;
|
||||
|
||||
$mu_plugins = get_mu_plugins();
|
||||
|
||||
if(empty($mu_plugins))
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$this->delete_folder(WPMU_PLUGIN_DIR, WPMU_PLUGIN_DIR);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function delete_core()
|
||||
{
|
||||
$ret['result']=WPVIVID_SUCCESS;
|
||||
|
||||
require_once( ABSPATH . 'wp-admin/includes/update-core.php' );
|
||||
|
||||
global $_old_files;
|
||||
|
||||
$wp_dir = ABSPATH;
|
||||
|
||||
foreach ( $_old_files as $old_file )
|
||||
{
|
||||
$old_file = $wp_dir . $old_file;
|
||||
if ( ! file_exists( $old_file ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the file isn't deleted, try writing an empty string to the file instead.
|
||||
@wp_delete_file($old_file);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
function wpvivid_function_pre_extract_callback_2($p_event, &$p_header)
|
||||
{
|
||||
$plugins = substr(WP_PLUGIN_DIR, strpos(WP_PLUGIN_DIR, 'wp-content/'));
|
||||
|
||||
if ( isset( $GLOBALS['wpvivid_restore_option'] ) )
|
||||
{
|
||||
$option = $GLOBALS['wpvivid_restore_option'];
|
||||
$type=$GLOBALS['wpvivid_restore_addon_type'];
|
||||
if ($type == 'themes')
|
||||
{
|
||||
if (isset($option['remove_themes']))
|
||||
{
|
||||
foreach ($option['remove_themes'] as $slug => $themes)
|
||||
{
|
||||
if (empty($slug))
|
||||
continue;
|
||||
if(strpos($p_header['filename'],$plugins.DIRECTORY_SEPARATOR.$slug)!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($type == 'plugin')
|
||||
{
|
||||
if (isset($option['remove_plugins']))
|
||||
{
|
||||
foreach ($option['remove_plugins'] as $slug => $plugin)
|
||||
{
|
||||
if (empty($slug))
|
||||
continue;
|
||||
if(strpos($p_header['filename'],$plugins.'/'.$slug)!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$option=array();
|
||||
}
|
||||
|
||||
$path = str_replace('\\','/',WP_CONTENT_DIR);
|
||||
$content_path = $path.'/';
|
||||
if(strpos($p_header['filename'], $content_path.'advanced-cache.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], $content_path.'db.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], $content_path.'object-cache.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'],$plugins.'/wpvivid-backuprestore')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'],'wp-config.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'],'wpvivid_package_info.json')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(isset($option['restore_htaccess'])&&$option['restore_htaccess'])
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if(strpos($p_header['filename'],'.htaccess')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'],'.user.ini')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'],'wordfence-waf.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-browser-cache.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-page-cache.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], $content_path.'mu-plugins/endurance-php-edge.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], $content_path.'mu-plugins/wp-stack-cache.php')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(strpos($p_header['filename'], '.DS_Store')!==false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user