OwlCyberSecurity - MANAGER
Edit File: class-wpvivid-isolate-files.php
<?php if (!defined('WPVIVID_PLUGIN_DIR')) { die; } class WPvivid_Isolate_Files { public function __construct() { } public function check_folder() { if(!is_dir(WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR)) { @mkdir(WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR,0777,true); } } public function isolate_files($files) { $upload_dir=wp_upload_dir(); $root_path=$upload_dir['basedir'].DIRECTORY_SEPARATOR; if(!is_dir(WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR)) { @mkdir(WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR,0777,true); } $iso_dir=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR.DIRECTORY_SEPARATOR; foreach ($files as $file) { $from=$root_path.$file; $to=$iso_dir.$file; if(file_exists($from)) { if (!is_dir(dirname($to))) { mkdir(dirname($to), 0777, true); } @rename($from,$to); } } $ret['result']='success'; return $ret; } public function init_isolate_task() { $task['start_time']=time(); $task['running_time']=time(); $task['status']='running'; $task['progress']=0; $task['offset']=0; update_option('init_isolate_task',$task,'no'); } public function get_isolate_task_offset() { $task=get_option('scan_unused_files_task',array()); if(empty($task)) { return false; } if($task['status']=='finished') { return false; } return $task['offset']; } public function update_isolate_task($offset,$status='running',$progress=0) { $task=get_option('scan_unused_files_task',array()); $task['running_time']=time(); $task['status']=$status; $task['progress']=$progress; $task['offset']=$offset; update_option('scan_unused_files_task',$task,'no'); } public function get_isolate_folder() { $root=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR; $ret=$this->get_folder_list($root); return $ret; } public function get_isolate_files($search='',$folder_ex='',$count=0) { $root=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR; $ret=$this->get_folder_list($root,$search); if(empty($folder_ex)) { $result=$ret['files']; foreach ($ret['folders'] as $folder) { $files=array(); $this->scan_list_uploaded_files($files,$root.DIRECTORY_SEPARATOR.$folder,$root,$folder,$search); $result=array_merge($result,$files); } } else if($folder_ex=='.') { $result=$ret['files']; if($count>0&&sizeof($result)>$count) { $result=array_slice($result, 0, $count); } return $result; } else { $files=array(); $this->scan_list_uploaded_files($files,$root.DIRECTORY_SEPARATOR.$folder_ex,$root,$folder_ex,$search); $result=$files; } if($count>0&&sizeof($result)>$count) { $result=array_slice($result, 0, $count); } return $result; } private function get_folder_list($root_path,$search='') { $result['folders']=array(); $result['folders'][]='root'; $result['files']=array(); if(!file_exists($root_path)){ @mkdir($root_path, 0755, true); } $handler = opendir($root_path); if($handler!==false) { while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { if (is_dir($root_path . DIRECTORY_SEPARATOR . $filename)) { if(preg_match('#^\d{4}$#',$filename)) { $result['folders']=array_merge( $result['folders'],$this->get_sub_folder($root_path . DIRECTORY_SEPARATOR . $filename,$filename)); } else { $ret=scandir($root_path . DIRECTORY_SEPARATOR . $filename); if($ret!==false&&count($ret)!=2) { $result['folders'][]=$filename; } } } else { if($filename=='.htaccess'||$filename=='index.php') { continue; } if(empty($search)) { $file['path']=$filename; $file['folder']='.'; $result['files'][] = $file; } else if(preg_match('#'.$search.'#',$filename)) { $file['path']=$filename; $file['folder']='.'; $result['files'][] = $file; } } } } if($handler) @closedir($handler); } return $result; } private function get_sub_folder($path,$root) { $folders=array(); $handler = opendir($path); if($handler!==false) { while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { if (is_dir($path . DIRECTORY_SEPARATOR . $filename)) { $ret=scandir($path . DIRECTORY_SEPARATOR . $filename); if($ret!==false&&count($ret)!=2) { $folders[]=$root.DIRECTORY_SEPARATOR.$filename; } } } } if($handler) @closedir($handler); } return $folders; } private function scan_list_uploaded_files( &$files,$path,$root,$folder,$search='') { $count = 0; if(is_dir($path)) { $handler = opendir($path); if($handler!==false) { while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { $count++; if (is_dir($path . DIRECTORY_SEPARATOR . $filename)) { $this->scan_list_uploaded_files($files, $path . DIRECTORY_SEPARATOR . $filename,$root,$folder,$search); } else { if(empty($search)) { $file['path']=str_replace($root . DIRECTORY_SEPARATOR,'',$path . DIRECTORY_SEPARATOR . $filename); $file['folder']=$folder; $files[] = $file; } else if(preg_match('#'.$search.'#',$filename)) { $file['path']=str_replace($root . DIRECTORY_SEPARATOR,'',$path . DIRECTORY_SEPARATOR . $filename); $file['folder']=$folder; $files[] = $file; } } } } if($handler) @closedir($handler); } } return $files; } public function delete_files($files) { $root=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR; $delete_media_when_delete_file=get_option('wpvivid_uc_delete_media_when_delete_file',true); foreach ($files as $file) { @wp_delete_file($root.DIRECTORY_SEPARATOR.$file); if($delete_media_when_delete_file) { $attachment_id=$this->find_media_id_from_file($file); if($attachment_id) { wp_delete_attachment( $attachment_id, true ); } } } } public function delete_files_ex($files) { $root=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR; $delete_media_when_delete_file=get_option('wpvivid_uc_delete_media_when_delete_file',true); foreach ($files as $file) { @wp_delete_file($root.DIRECTORY_SEPARATOR.$file['path']); if($delete_media_when_delete_file) { $attachment_id=$this->find_media_id_from_file($file['path']); if($attachment_id) { wp_delete_attachment( $attachment_id, true ); } } } } public function find_media_id_from_file( $file ) { global $wpdb; $file=basename($file); $sql = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%$file%'"; $ret = $wpdb->get_var( $sql ); if(!$ret) { $sql = $wpdb->prepare( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wp_attached_file' AND meta_value = %s", $file ); $ret = $wpdb->get_var( $sql ); } return $ret; } public function restore_files($files) { $upload_dir=wp_upload_dir(); $root_path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR.DIRECTORY_SEPARATOR; $upload_path=$upload_dir['basedir'].DIRECTORY_SEPARATOR; foreach ($files as $file) { $from=$root_path.$file; $to=$upload_path.$file; if(file_exists($from)) { if (!is_dir(dirname($to))) { mkdir(dirname($to), 0777, true); } @rename($from,$to); } } $ret['result']='success'; return $ret; } public function restore_files_ex($files) { $upload_dir=wp_upload_dir(); $root_path=WP_CONTENT_DIR.DIRECTORY_SEPARATOR.WPVIVID_UPLOADS_ISO_DIR.DIRECTORY_SEPARATOR; $upload_path=$upload_dir['basedir'].DIRECTORY_SEPARATOR; foreach ($files as $file) { $from=$root_path.$file['path']; $to=$upload_path.$file['path']; if(file_exists($from)) { if (!is_dir(dirname($to))) { mkdir(dirname($to), 0777, true); } @rename($from,$to); } } $ret['result']='success'; return $ret; } }