Files
wingedit.pl/wp-content/plugins/wpvivid-backuprestore/includes/upload-cleaner/class-wpvivid-uploads-scanner.php
2026-03-11 15:57:27 +01:00

2382 lines
76 KiB
PHP

<?php
if (!defined('WPVIVID_PLUGIN_DIR'))
{
die;
}
class WPvivid_Uploads_Scanner
{
public $upload_url;
public $upload_base_url;
public $file_found_cache;
public function __construct()
{
$upload_dir=wp_upload_dir();
$this->upload_url=$upload_dir['baseurl'];
$this->upload_base_url = substr($upload_dir['baseurl'],1+strlen(get_site_url()));
$this->file_found_cache=array();
}
public function init_scan_task()
{
$this->check_table();
$task['start_time']=time();
$task['running_time']=time();
$task['status']='running';
$task['progress']=0;
$task['offset']=0;
update_option('scan_unused_files_task',$task,'no');
}
public function check_table_exist()
{
global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . "wpvivid_scan_result";
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
{
$sql = "CREATE TABLE $table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
path text NOT NULL,
from_post INT NOT NULL,
PRIMARY KEY (id)
) ". $charset_collate . ";";
//reference to upgrade.php file
dbDelta( $sql );
}
}
public function check_unused_uploads_files_table_exist()
{
global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . "wpvivid_unused_uploads_files";
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
{
$sql = "CREATE TABLE $table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
path text NOT NULL,
folder text NOT NULL,
PRIMARY KEY (id)
)". $charset_collate . ";";
//reference to upgrade.php file
dbDelta( $sql );
}
}
public function check_table()
{
global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . "wpvivid_scan_result";
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
{
$sql = "CREATE TABLE $table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
path text NOT NULL,
from_post INT NOT NULL,
PRIMARY KEY (id)
) ". $charset_collate . ";";
//reference to upgrade.php file
dbDelta( $sql );
}
$wpdb->query("TRUNCATE TABLE $table_name");
}
public function init_unused_uploads_task($folders)
{
$this->check_unused_uploads_files_table();
update_option('unused_uploads_task',array(),'no');
$task['start_time']=time();
$task['running_time']=time();
$task['status']='running';
$task['progress']=0;
$task['size']=0;
$upload_folder = wp_upload_dir();
$root_path =$upload_folder['basedir'];
foreach ($folders as $folder)
{
$task['folder'][$folder]['finished']=0;
$task['folder'][$folder]['offset']=0;
if($folder=='.')
{
$task['folder'][$folder]['total']=0;
}
else
{
$path=$root_path.DIRECTORY_SEPARATOR.$folder;
if(file_exists($path))
{
$fi = new FilesystemIterator($path, FilesystemIterator::SKIP_DOTS);
$task['folder'][$folder]['total']=iterator_count($fi);
}
else {
$task['folder'][$folder]['total']=0;
}
}
}
update_option('unused_uploads_task',$task,'no');
}
public function check_unused_uploads_files_table()
{
global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . "wpvivid_unused_uploads_files";
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
{
$sql = "CREATE TABLE $table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
path text NOT NULL,
folder text NOT NULL,
PRIMARY KEY (id)
)". $charset_collate . ";";
//reference to upgrade.php file
dbDelta( $sql );
}
$wpdb->query("TRUNCATE TABLE $table_name");
}
public function scan_sidebars_widgets()
{
global $wp_registered_widgets;
$syswidgets = $wp_registered_widgets;
$active_widgets = get_option( 'sidebars_widgets' );
$files=array();
foreach ( $active_widgets as $sidebar_name => $widgets )
{
if ( $sidebar_name != 'wp_inactive_widgets' && !empty( $widgets ) && is_array( $widgets ) )
{
foreach ( $widgets as $key => $widget )
{
$files=array_merge($files,$this->get_images_from_widget($syswidgets[$widget]));
//do_action( 'wpmc_scan_widget', $syswidgets[$widget] );
//$acfwidget = $syswidgets[$widget]['callback'][0]->id;
//if ( strlen($acfwidget)>11 && substr($acfwidget,0,11)=='acf_widget_' )
//{
//$this->get_images_from_acfwidgets ( $acfwidget );
//}
}
}
}
return $files;
}
public function scan_divi_options()
{
$files=array();
$options=get_option('et_divi',false);
if($options!==false)
{
if(isset($options['divi_logo']))
{
$files[]=$this->get_src($options['divi_logo']);
}
}
$options=get_option('widget_text',false);
if($options!==false)
{
foreach ($options as $option)
{
if(isset($option['title']))
{
$this->get_img_from_divi($option['title'],$files);
}
if(isset($option['text']))
{
$this->get_img_from_divi($option['text'],$files);
}
}
}
$options=get_option('theme_mods_Divi',false);
if($options!==false)
{
if(isset($options['background_image']))
{
$files[]=$this->get_src($options['background_image']);
}
}
$options=get_option('et_divi_builder_global_presets_d5',false);
if($options!==false && is_array($options))
{
$results = array();
$this->wpvivid_recursive_image_search($options, $results);
if(!empty($results))
{
foreach ($results as $url)
{
$src = $this->get_src($url);
if ($src !== false && !in_array($src, $files))
{
$files[] = $src;
}
}
}
}
return $files;
}
public function wpvivid_recursive_image_search($array, &$results)
{
foreach ($array as $key => $value)
{
if (is_array($value))
{
$this->wpvivid_recursive_image_search($value, $results);
}
elseif (is_string($value) && preg_match('/\.(jpe?g|png|gif|webp)$/i', $value))
{
$results[] = $value;
}
}
}
public function get_images_from_widget($widget)
{
$widget_class = $widget['callback'][0]->option_name;
$instance_id = $widget['params'][0]['number'];
$widget_data = get_option( $widget_class );
$files=array();
$ids=array();
if ( !empty( $widget_data[$instance_id]['text'] ) )
{
$html = $widget_data[$instance_id]['text']; // mm change
$media=$this->get_media_from_html($html);
if(!empty($media))
{
$files=$media;
}
}
if ( !empty( $widget_data[$instance_id]['attachment_id'] ) )
{
$id = $widget_data[$instance_id]['attachment_id'];
array_push( $ids, $id );
}
if ( !empty( $widget_data[$instance_id]['url'] ) )
{
$url = $widget_data[$instance_id]['url'];
if ( $this->is_url( $url ) )
{
$src=$this->get_src($url);
array_push( $files, $src );
}
}
if ( !empty( $widget_data[$instance_id]['ids'] ) )
{
$newIds = $widget_data[$instance_id]['ids'];
if(is_array($newIds))
{
$ids = array_merge( $ids, $newIds );
}
else
{
$ids = array_merge( $ids, array($newIds) );
}
}
// Recent Blog Posts
if ( !empty( $widget_data[$instance_id]['thumbnail'] ) )
{
$id = $widget_data[$instance_id]['thumbnail'];
array_push( $ids, $id );
}
foreach ($ids as $id)
{
$files=array_merge($files,$this->get_img_from_id($id));
}
return $files;
}
public function scan_termmeta_thumbnail()
{
global $wpdb;
$query = "SELECT meta_value FROM $wpdb->termmeta WHERE meta_key LIKE '%thumbnail_id%'";
$metas = $wpdb->get_col( $query );
$files=array();
if(count($metas)>0)
{
$ids=array();
foreach ( $metas as $id )
{
if ( is_numeric( $id ) && $id > 0 )
$ids[]=$id;
}
foreach ($ids as $id)
{
$files=array_merge($files,$this->get_img_from_id($id));
}
}
$placeholder_id = get_option( 'woocommerce_placeholder_image', null, true );
if ( !empty( $placeholder_id ) )
$files=array_merge($files,$this->get_img_from_id($placeholder_id));
return $files;
}
public function array_to_file($exploded)
{
$file='';
foreach ($exploded as $key=>$value)
{
$file=$value;
}
return $file;
}
public function scan_image_from_nextend()
{
global $wpdb;
$file_array=array();
if($wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->prefix."nextend2_image_storage" ) ) !== null)
{
$query = "SELECT image FROM ".$wpdb->prefix."nextend2_image_storage";
$metas = $wpdb->get_col( $query );
$upload_dir = wp_upload_dir();
$upload_path = $upload_dir['basedir'];
foreach ($metas as $meta)
{
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$file_tmp = $this->array_to_file($exploded);
$file = str_replace('$upload$', $upload_path, $file_tmp);
if(file_exists($file))
{
$file_array[] = str_replace('$upload$'.'/', '', $file_tmp);
}
continue;
}
}
}
return $file_array;
}
/*
public function get_images_from_acfwidgets( $widget)
{
global $wpdb;
$result=array();
// $widget starts with: acf_widget_ and looks like this: acf_widget_15011-2
$LikeKey = 'widget_' . $widget . '_%'; // Example: option_name starts with widget_acf_widget_15216-3_
$q = "SELECT option_name, option_value FROM {$wpdb->options} where option_name like %s;";
$OptionRows = $wpdb->get_results( $wpdb->prepare( $q, $LikeKey ) , ARRAY_N );
if ( $wpdb->last_error )
{
$result['result']='failed';
$result['error']=$wpdb->last_error;
return $result;
}
if ( count( $OptionRows ) > 0 )
{
$ACFWidget_ids = array();
$ACFWidget_urls = array();
foreach( $OptionRows as $row )
{
//$row[0] = option_name from wp_options
//$row[1] = option_value from wp_options
// Three if statements in priority order (image ids, link fields, text fields)
// *** An image field containing a post id for the image or is it???
if ( strpos($row[0], 'image') || strpos($row[0], 'icon') !== false )
{
if ( is_numeric( $row[1] ) ) {
array_push( $ACFWidget_ids, $row[1] );
}
}
// No else here because sometimes image or icon is present in the option_name and link is also present
// Example: widget_acf_widget_15011-2_link_1_link_icon
// Example: widget_acf_widget_15216-3_widget_image_link
// *** A link field may contain a link or be empty
if ( strpos( $row[0], 'link' ) || strpos( $row[0], 'url' ) !== false )
{
if ( $this->is_url($row[1]) ) {
$url = $this->clean_url($row[1]);
if (!empty($url)) {
array_push($ACFWidget_urls, $url);
}
}
}
// *** A text field may contain HTML
if (strpos($row[0], 'text') || strpos($row[0], 'html') !== false)
{
if (!empty($row[1])) {
$ACFWidget_urls = array_merge($ACFWidget_urls, $this->get_urls_from_html($row[1])); // mm change
}
}
}
}
}
*/
public function get_post_count()
{
global $wpdb;
$post_types=apply_filters('wpvivid_scan_post_types', array());
$post_types="post_type NOT IN ('".implode("','",$post_types)."')";
$post_status="post_status NOT IN ('inherit', 'trash', 'auto-draft')";
$query="SELECT COUNT(*) FROM $wpdb->posts WHERE $post_types AND $post_status";
$result=$wpdb->get_results($query,ARRAY_N);
if($result && sizeof($result)>0)
{
$count = $result[0][0];
}
else
{
$count=0;
}
return $count;
}
public function get_posts($start,$limit)
{
global $wpdb;
$post_types=apply_filters('wpvivid_scan_post_types', array());
$post_types="post_type NOT IN ('".implode("','",$post_types)."')";
$post_status="post_status NOT IN ('inherit', 'trash', 'auto-draft')";
$query=$wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE $post_types AND $post_status LIMIT %d, %d",$start,$limit);
$posts = $wpdb->get_col( $query );
return $posts;
}
public function get_media_from_html($html)
{
$html = mb_convert_encoding( $html, 'HTML-ENTITIES', 'UTF-8' );
$html = do_shortcode( $html );
$html = wp_filter_content_tags( $html );
if ( !class_exists("DOMDocument") )
{
echo 'The DOM extension for PHP is not installed.';
return array();
}
libxml_use_internal_errors(true);
$dom = new DOMDocument();
@$dom->loadHTML( $html );
libxml_clear_errors();
$results = array();
$this->get_img_from_tag_img($dom,$results);
$this->get_img_from_meta($dom,$results);
$this->get_img_from_tag_a($dom,$results);
$this->get_img_from_tag_a($dom,$results,'link');
$this->get_img_from_bk($html,$results);
$this->get_img_from_wp_image($html,$results);
return $results;
}
public function get_media_from_post_content($post)
{
$html = get_post_field( 'post_content', $post );
//$html = mb_convert_encoding( $html, 'HTML-ENTITIES', 'UTF-8' );
if (version_compare(PHP_VERSION, '8.2', '>=')) {
if (function_exists('mb_encode_numericentity')) {
$convmap = [0x80, 0x10FFFF, 0, 0xFFFFFF];
$html = mb_encode_numericentity($html, $convmap, 'UTF-8');
}
} else {
if (function_exists('mb_convert_encoding')) {
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
}
}
ob_start();
$html = do_shortcode( $html );
ob_clean();
ob_end_flush();
$html = wp_filter_content_tags( $html );
if ( !class_exists("DOMDocument") )
{
echo 'The DOM extension for PHP is not installed.';
return array();
}
if(empty($html))
{
return array();
}
libxml_use_internal_errors(true);
$dom = new DOMDocument();
@$dom->loadHTML( $html );
libxml_clear_errors();
$results = array();
$this->get_img_from_tag_img($dom,$results);
$this->get_img_from_meta($dom,$results);
$this->get_img_from_tag_a($dom,$results);
$this->get_img_from_tag_a($dom,$results,'link');
$this->get_img_from_bk($html,$results);
$this->get_img_from_wp_image($html,$results);
$this->get_img_from_divi($html,$results);
$galleries = get_post_galleries_images( $post );
foreach ( $galleries as $gallery )
{
foreach ( $gallery as $image )
{
$src=$this->get_src($image);
if($src!==false)
{
array_push( $results, $src );
}
}
}
return $results;
}
public function get_img_from_tag_img($dom,&$results)
{
$imgs = $dom->getElementsByTagName( 'img' );
foreach ( $imgs as $img )
{
$url = $img->getAttribute('src');
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
$srcset = $img->getAttribute('srcset');
if ( !empty( $srcset ) )
{
$setImgs = explode( ',', trim( $srcset ) );
foreach ( $setImgs as $setImg )
{
$urls = explode( ' ', trim( $setImg ) );
if ( is_array( $urls ) )
{
$src=$this->get_src($urls[0]);
if($src!==false)
{
array_push( $results, $src );
}
}
}
}
}
}
public function get_img_from_meta($dom,&$results)
{
$metas = $dom->getElementsByTagName( 'meta' );
foreach ( $metas as $meta )
{
$property = $meta->getAttribute( 'property' );
if ( $property == 'og:image' || $property == 'og:image:secure_url' || $property == 'twitter:image' )
{
$url = $meta->getAttribute( 'content' );
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
}
}
}
public function get_img_from_tag_a($dom,&$results,$tag='a')
{
$urls = $dom->getElementsByTagName($tag);
foreach ( $urls as $url )
{
$url_href = $url->getAttribute('href'); // mm change
$src=$this->get_src($url_href);
if($src!==false)
{
if ( !empty( $src ) )
{
array_push( $results, $src );
}
}
}
}
public function get_img_from_bk($html,&$results)
{
preg_match_all( "/url\(\'?\"?((https?:\/\/)?[^\\&\#\[\] \"\?]+\.(jpe?g|gif|png))\'?\"?/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ( $res[1] as $url )
{
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
}
}
}
public function get_img_from_wp_image($html,&$results)
{
$posts_images_ids=array();
preg_match_all( "/wp-image-([0-9]+)/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
$posts_images_ids = array_merge( $posts_images_ids, $res[1] );
}
preg_match_all('/\[gallery.*ids=.(.*).\]/', $html, $res );
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ( $res[1] as $id )
{
$ids = explode( ',', $id );
$posts_images_ids = array_merge( $posts_images_ids, $ids );
}
}
if(!empty($posts_images_ids))
{
foreach ($posts_images_ids as $id)
{
$files=$this->get_attachment_size($id);
if(!empty($files))
{
$results=array_merge( $results, $files );
}
}
}
}
public function get_img_from_divi( $html, &$results )
{
$galleries_images_et = array();
// Single Image
preg_match_all( "/src=\"((https?:\/\/)?[^\\&\#\[\] \"\?]+\.(jpe?g|gif|png|ico|tif?f|bmp))\"/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ( $res[1] as $url )
{
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
}
}
preg_match_all( "/image=\"((https?:\/\/)?[^\\&\#\[\] \"\?]+\.(jpe?g|gif|png|ico|tif?f|bmp))\"/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ( $res[1] as $url )
{
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
}
}
preg_match_all('/"image"\s*:\s*\{[^}]*?"url"\s*:\s*"([^"]+\.jpe?g|png|gif|webp)"/i', $html, $res);
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ($res[1] as $url)
{
$src = $this->get_src($url);
if ($src !== false)
{
array_push( $results, $src );
}
}
}
preg_match_all('/"src"\s*:\s*"([^"]+\.(jpe?g|png|gif|webp))"/i', $html, $res);
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ($res[1] as $url)
{
$src = $this->get_src($url);
if ($src !== false)
{
array_push( $results, $src );
}
}
}
// Background Image
preg_match_all( "/background_image=\"((https?:\/\/)?[^\\&\#\[\] \"\?]+\.(jpe?g|gif|png|ico|tif?f|bmp))\"/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) && count( $res[1] ) > 0 )
{
foreach ( $res[1] as $url )
{
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
}
}
// Modules with URL (like the Person module)
preg_match_all( "/url=\"((https?:\/\/)?[^\\&\#\[\] \"\?]+\.(jpe?g|gif|png|ico|tif?f|bmp))\"/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) )
{
foreach ( $res[1] as $url )
{
$src=$this->get_src($url);
if($src!==false)
{
array_push( $results, $src );
}
}
}
// Galleries
preg_match_all( "/gallery_ids=\"([0-9,]+)/", $html, $res );
if ( !empty( $res ) && isset( $res[1] ) )
{
foreach ( $res[1] as $r )
{
$ids = explode( ',', $r );
$galleries_images_et = array_merge( $galleries_images_et, $ids );
}
}
foreach ($galleries_images_et as $id)
{
$results=array_merge($results,$this->get_img_from_id($id));
}
}
public function get_attachment_size($attachment_id)
{
$files=array();
global $wpdb;
$meta_key="(meta_key = '_wp_attached_file')";
$postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d AND $meta_key", $attachment_id ) );
foreach ( $postmeta as $meta )
{
if($meta->meta_key=='_wp_attached_file')
{
$files[]=$meta->meta_value;
$attach_meta = wp_get_attachment_metadata( $attachment_id );
if($attach_meta!=false)
{
if(isset($attach_meta['sizes']))
{
foreach ($attach_meta['sizes'] as $key=>$value)
{
$data=image_get_intermediate_size($attachment_id,$key);
$files[]=$data['path'];
}
}
}
}
}
return $files;
}
public function get_media_from_post_meta($post)
{
global $wpdb;
$meta_key="(meta_key = '_thumbnail_id')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
$postmeta_images_ids = array();
$postmeta_images_urls = array();
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
//
$meta_key="(meta_key = '_product_image_gallery')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
//
//
$meta_key="(meta_key = 'image')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
$meta_key="(meta_key = 'imagem')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
$meta_key="(meta_key = 'bild1')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
$meta_key="(meta_key = 'bild2')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
$meta_key="(meta_key = 'bild3')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta, array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
$meta_key="(meta_key = 'bild4')";
$query=$wpdb->prepare("SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id = %d AND $meta_key",$post);
$metas = $wpdb->get_col($query);
foreach ($metas as $meta)
{
if ( is_numeric( $meta ) )
{
if ( $meta > 0 )
array_push( $postmeta_images_ids, $meta );
continue;
}
else if ( is_serialized( $meta ) )
{
$decoded = @unserialize( $meta,array('allowed_classes' => false) );
if ( is_array( $decoded ) )
{
$this->array_to_ids_or_urls( $decoded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
else {
$exploded = explode( ',', $meta );
if ( is_array( $exploded ) )
{
$this->array_to_ids_or_urls( $exploded, $postmeta_images_ids, $postmeta_images_urls );
continue;
}
}
}
//
$files=array();
foreach ($postmeta_images_ids as $id)
{
$files=array_merge($files,$this->get_img_from_id($id));
}
return $files;
}
public function get_media_from_post_meta_elementor( $post )
{
$postmeta_images_ids = array();
$files=array();
$_elementor_meta = get_post_meta( $post, '_elementor_data',true);
if($_elementor_meta!=false)
{
if ( is_string( $_elementor_meta ) && ! empty( $_elementor_meta ) )
{
$_elementor_meta = json_decode( $_elementor_meta, true );
}
if ( empty( $_elementor_meta ) )
{
$_elementor_meta = array();
}
$elements_data=$_elementor_meta;
foreach ( $elements_data as $element_data )
{
$element_image=$this->get_element_image($element_data,$postmeta_images_ids);
$postmeta_images_ids=array_merge($postmeta_images_ids,$element_image);
}
foreach ($postmeta_images_ids as $id)
{
$files=array_merge($files,$this->get_img_from_id($id));
}
}
return $files;
}
public function get_media_from_post_custom_meta( $post )
{
$custom_fields=get_post_custom($post);
$files=array();
if($custom_fields!=false)
{
if(isset($custom_fields['essb_cached_image']))
{
if ( is_string( $custom_fields['essb_cached_image'] ) && ! empty( $custom_fields['essb_cached_image'] ) )
{
$files[]=$this->get_src($custom_fields['essb_cached_image']);
}
else if(is_array( $custom_fields['essb_cached_image'] )&& ! empty( $custom_fields['essb_cached_image'] ))
{
foreach ($custom_fields['essb_cached_image'] as $essb_cached_image)
{
$files[]=$this->get_src($essb_cached_image);
}
}
}
if(isset($custom_fields['picture']))
{
if ( is_string( $custom_fields['picture'] ) && ! empty( $custom_fields['picture'] ) )
{
$id=$custom_fields['picture'];
$files=array_merge($files,$this->get_img_from_id($id));
}
else if(is_array( $custom_fields['picture'] )&& ! empty( $custom_fields['picture'] ))
{
foreach ($custom_fields['picture'] as $id)
{
$files=array_merge($files,$this->get_img_from_id($id));
}
}
}
}
return $files;
}
public function get_media_from_wpresidence( $post )
{
$files=array();
$image_to_attach = get_post_meta( $post, 'image_to_attach',true);
$image_to_attach_array = explode(",", $image_to_attach);
if(!empty($image_to_attach_array))
{
foreach ($image_to_attach_array as $image_post_id)
{
if(!empty($image_post_id))
{
$_wp_attachment_metadata = get_post_meta( $image_post_id, '_wp_attachment_metadata',true);
if(isset($_wp_attachment_metadata['file']))
{
$files[] = $_wp_attachment_metadata['file'];
$iPos = strripos($_wp_attachment_metadata['file'], '/');
$relative_path = substr($_wp_attachment_metadata['file'], 0, $iPos+1);
if(isset($_wp_attachment_metadata['original_image']))
{
$files[] = $relative_path.$_wp_attachment_metadata['original_image'];
}
if(isset($_wp_attachment_metadata['sizes']))
{
foreach ($_wp_attachment_metadata['sizes'] as $type)
{
if(isset($type['file']))
{
$files[] = $relative_path.$type['file'];
}
}
}
}
}
}
}
return $files;
}
public function get_media_from_breakdance( $post )
{
$files=array();
$array_key='tree_json_string';
$image_to_attach=get_post_meta( $post, 'breakdance_data',true);
if (is_string($image_to_attach))
{
$decoded_value = json_decode($image_to_attach, true);
if ($decoded_value !== null)
{
if (is_array($decoded_value) && array_key_exists($array_key, $decoded_value))
{
if(isset($decoded_value[$array_key]))
{
$tree = json_decode($decoded_value[$array_key], true);
if(isset($tree['root']['children']))
{
foreach ($tree['root']['children'] as $info)
{
if(isset($info['children']))
{
foreach ($info['children'] as $info1)
{
if(isset($info1['children']))
{
foreach ($info1['children'] as $info2)
{
if(isset($info2['children']))
{
foreach ($info2['children'] as $info3)
{
if(isset($info3['data']['properties']['content']['content']['image']['id']))
{
$image_post_id=$info3['data']['properties']['content']['content']['image']['id'];
$_wp_attachment_metadata = get_post_meta( $image_post_id, '_wp_attachment_metadata',true);
if(isset($_wp_attachment_metadata['file']))
{
$files[] = $_wp_attachment_metadata['file'];
$iPos = strripos($_wp_attachment_metadata['file'], '/');
$relative_path = substr($_wp_attachment_metadata['file'], 0, $iPos+1);
if(isset($_wp_attachment_metadata['original_image']))
{
$files[] = $relative_path.$_wp_attachment_metadata['original_image'];
}
if(isset($_wp_attachment_metadata['sizes']))
{
foreach ($_wp_attachment_metadata['sizes'] as $type)
{
if(isset($type['file']))
{
$files[] = $relative_path.$type['file'];
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return $files;
}
private function scan_oxygen_node($node, &$files, &$attachment_ids)
{
if (!is_array($node)) {
return;
}
if (isset($node['options']['original']['image_ids'])) {
$ids = $node['options']['original']['image_ids'];
if (is_string($ids)) {
$parts = explode(',', $ids);
foreach ($parts as $id) {
$id = trim($id);
if ($id !== '' && ctype_digit($id)) {
$attachment_ids[] = (int)$id;
}
}
} elseif (is_array($ids)) {
foreach ($ids as $id) {
if (is_numeric($id)) {
$attachment_ids[] = (int)$id;
}
}
} elseif (is_numeric($ids)) {
$attachment_ids[] = (int)$ids;
}
}
if (isset($node['options']['original']['src']) && is_string($node['options']['original']['src'])) {
$files[] = $this->get_src($node['options']['original']['src']);
}
if (isset($node['options']['original']['background-image'])) {
$bg = $node['options']['original']['background-image'];
if (is_string($bg)) {
$files[] = $this->get_src($bg);
} elseif (is_array($bg)) {
$keys = array('url', 'src', 'value');
foreach ($keys as $k) {
if (isset($bg[$k]) && is_string($bg[$k]) && $bg[$k] !== '') {
$files[] = $this->get_src($bg[$k]);
break;
}
}
if (isset($bg['attachment_id']) && is_numeric($bg['attachment_id'])) {
$attachment_ids[] = (int)$bg['attachment_id'];
}
}
}
foreach ($node as $v) {
if (is_string($v) && strpos($v, 'wp-content/uploads/') !== false) {
$files[] = $this->get_src($v);
} elseif (is_array($v)) {
$this->scan_oxygen_node($v, $files, $attachment_ids);
}
}
if (isset($node['children']) && is_array($node['children'])) {
foreach ($node['children'] as $child) {
$this->scan_oxygen_node($child, $files, $attachment_ids);
}
}
}
public function get_media_from_oxygen( $post )
{
$files = array();
$attachment_ids = array();
$raw = get_post_meta($post, '_ct_builder_json', true);
if (!is_string($raw) || $raw === '') {
return array();
}
$tree = json_decode($raw, true);
if (!is_array($tree)) {
return array();
}
$this->scan_oxygen_node($tree, $files, $attachment_ids);
$attachment_ids = array_values(array_unique(array_filter($attachment_ids)));
foreach ($attachment_ids as $att_id) {
$meta = get_post_meta($att_id, '_wp_attachment_metadata', true);
if (!is_array($meta) || empty($meta['file'])) {
continue;
}
$files[] = $meta['file'];
$pos = strrpos($meta['file'], '/');
$base = ($pos !== false) ? substr($meta['file'], 0, $pos + 1) : '';
if (!empty($meta['original_image'])) {
$files[] = $base . $meta['original_image'];
}
if (!empty($meta['sizes']) && is_array($meta['sizes'])) {
foreach ($meta['sizes'] as $size) {
if (!empty($size['file'])) {
$files[] = $base . $size['file'];
}
}
}
}
$files = array_values(array_unique(array_filter(array_map('trim', $files))));
return $files;
}
public function get_element_image($element_data,&$attachment_added_ids)
{
$element_image=array();
if(!empty($element_data['settings']))
{
$settings=$element_data['settings'];
if(isset($settings['image']))
{
if(isset($settings['image']['id']))
{
if(!in_array($settings['image']['id'],$attachment_added_ids))
{
$element_image[]=$settings['image']['id'];
$attachment_added_ids[]=$settings['image']['id'];
}
}
}
if(isset($settings['logo_items']))
{
foreach ($settings['logo_items'] as $item)
{
if(isset($item['logo_image']))
{
if(!in_array($item['logo_image']['id'],$attachment_added_ids))
{
$element_image[]=$item['logo_image']['id'];
$attachment_added_ids[]=$item['logo_image']['id'];
}
}
}
}
if(isset($settings['gallery']))
{
foreach ($settings['gallery'] as $item)
{
if(isset($item['id']))
{
if(!in_array($item['id'],$attachment_added_ids))
{
$element_image[]=$item['id'];
$attachment_added_ids[]=$item['id'];
}
}
}
}
if(isset($settings['background_image']))
{
if(isset($settings['background_image']['id']))
{
if(!in_array($settings['background_image']['id'],$attachment_added_ids))
{
$element_image[]=$settings['background_image']['id'];
$attachment_added_ids[]=$settings['background_image']['id'];
}
}
}
if(isset($settings['background_a_image']))
{
if(isset($settings['background_a_image']['id']))
{
if(!in_array($settings['background_a_image']['id'],$attachment_added_ids))
{
$element_image[]=$settings['background_a_image']['id'];
$attachment_added_ids[]=$settings['background_a_image']['id'];
}
}
}
if(isset($settings['carousel']) && !empty($settings['carousel']))
{
foreach ($settings['carousel'] as $item)
{
if(isset($item['id']))
{
if(!in_array($item['id'],$attachment_added_ids))
{
$element_image[]=$item['id'];
$attachment_added_ids[]=$item['id'];
}
}
}
}
if(isset($settings['slides']) && !empty($settings['slides']))
{
foreach ($settings['slides'] as $item)
{
if(isset($item['image']['id']))
{
if(!in_array($item['image']['id'],$attachment_added_ids))
{
$element_image[]=$item['image']['id'];
$attachment_added_ids[]=$item['image']['id'];
}
}
}
}
if(isset($settings['poster']) && !empty($settings['poster']))
{
if(isset($settings['poster']['id']))
{
if(!in_array($settings['poster']['id'],$attachment_added_ids))
{
$element_image[]=$settings['poster']['id'];
$attachment_added_ids[]=$settings['poster']['id'];
}
}
}
if(isset($settings['image_overlay']) && !empty($settings['image_overlay']))
{
if(isset($settings['image_overlay']['id']))
{
if(!in_array($settings['image_overlay']['id'],$attachment_added_ids))
{
$element_image[]=$settings['image_overlay']['id'];
$attachment_added_ids[]=$settings['image_overlay']['id'];
}
}
}
if(isset($settings['background_video_fallback']))
{
if(isset($settings['background_video_fallback']['id']))
{
if(!in_array($settings['background_video_fallback']['id'],$attachment_added_ids))
{
$element_image[]=$settings['background_video_fallback']['id'];
$attachment_added_ids[]=$settings['background_video_fallback']['id'];
}
}
}
if(isset($settings['background_slideshow_gallery']) && !empty($settings['background_slideshow_gallery']))
{
foreach ($settings['background_slideshow_gallery'] as $item)
{
if(isset($item['id']))
{
if(!in_array($item['id'],$attachment_added_ids))
{
$element_image[]=$item['id'];
$attachment_added_ids[]=$item['id'];
}
}
}
}
if(isset($settings['column_bg_image_new']) && !empty($settings['column_bg_image_new']))
{
if(isset($settings['column_bg_image_new']['id']))
{
if(!in_array($settings['column_bg_image_new']['id'],$attachment_added_ids))
{
$element_image[]=$settings['column_bg_image_new']['id'];
$attachment_added_ids[]=$settings['column_bg_image_new']['id'];
}
}
}
}
if(!empty($element_data['elements']))
{
foreach ($element_data['elements'] as $element)
{
$temp=$this->get_element_image($element,$attachment_added_ids);
$element_image=array_merge($element_image,$temp);
}
}
return $element_image;
}
public function get_from_meta( $meta, $lookFor, &$ids, &$urls )
{
foreach ( $meta as $key => $value ) {
if ( is_object( $value ) || is_array( $value ) )
$this->get_from_meta( $value, $lookFor, $ids, $urls );
else if ( in_array( $key, $lookFor ) ) {
if ( empty( $value ) )
continue;
else if ( is_numeric( $value ) ) {
// It this an ID?
array_push( $ids, $value );
}
else {
if ( $this->is_url( $value ) ) {
// Is this an URL?
array_push( $urls, $this->clean_url( $value ) );
}
else {
// Is this an array of IDs, encoded as a string? (like "20,13")
$pieces = explode( ',', $value );
foreach ( $pieces as $pval ) {
if ( is_numeric( $pval ) ) {
array_push( $ids, $pval );
}
}
}
}
}
}
}
public function get_img_from_id($attachment_id)
{
$files=array();
$attach_meta = wp_get_attachment_metadata( $attachment_id );
if($attach_meta!=false)
{
if(isset($attach_meta['sizes']))
{
foreach ($attach_meta['sizes'] as $key=>$value)
{
$data=image_get_intermediate_size($attachment_id,$key);
$data['path']=ltrim($data['path'], './');
$name=$data['path'];
if(!in_array($name,$files))
{
$files[]=$name;
}
}
}
if(isset($attach_meta['file'])&&is_string($attach_meta['file']))
{
if(!in_array($attach_meta['file'],$files))
{
$files[]=$attach_meta['file'];
}
}
}
return $files;
}
public function get_src($url)
{
if(empty($url)||!is_string( $url ))
{
return false;
}
if(strlen($url)>4&&strtolower( substr( $url, 0, 4) ) == 'http')
{
$tmp_url = str_replace('https://', '', $url);
$tmp_url = str_replace('http://', '', $tmp_url);
$tmp_upload_url = str_replace('https://', '', $this->upload_url);
$tmp_upload_url = str_replace('http://', '', $tmp_upload_url);
$ipos = strpos( $tmp_url, $tmp_upload_url );
if ($ipos === false)
{
return false;
}
$str=substr( $tmp_url, 1 + strlen( $tmp_upload_url ) + $ipos );
return $str;
}
else if($url[0] == '/')
{
$ipos = strpos( $url, $this->upload_base_url );
if ($ipos === false)
return false;
return substr( $url, 1 + strlen( $this->upload_base_url ) + $ipos );
}
else
{
return false;
}
}
function is_url( $url ) {
return ( (
!empty( $url ) ) &&
is_string( $url ) &&
strlen( $url ) > 4 && (
strtolower( substr( $url, 0, 4) ) == 'http' || $url[0] == '/'
)
);
}
function array_to_ids_or_urls( &$meta, &$ids, &$urls )
{
$regex_file = '/[A-Za-z0-9-_,.\(\)\s]+[.]{1}(jpg|jpeg|jpe|gif|png|tiff|bmp|csv|pdf|xls|xlsx|doc|docx|odt|wpd|rtf|tiff|mp3|mp4|wav|lua)/';
foreach ( $meta as $k => $m )
{
if ( is_numeric( $m ) ) {
// Probably a Media ID
if ( $m > 0 )
array_push( $ids, $m );
}
else if ( is_array( $m ) )
{
// If it's an array with a width, probably that the index is the Media ID
if ( isset( $m['width'] ) && is_numeric( $k ) ) {
if ( $k > 0 )
array_push( $ids, $k );
}
}
else if ( !empty( $m ) )
{
// If it's a string, maybe it's a file (with an extension)
if ( preg_match( $regex_file, $m ) )
array_push( $urls, $m );
}
}
}
private function transfer_path($path)
{
$path = str_replace('\\','/',$path);
$values = explode('/',$path);
return implode(DIRECTORY_SEPARATOR,$values);
}
public function get_folders()
{
$upload_folder = wp_upload_dir();
$root_path =$upload_folder['basedir'];
$regex=apply_filters('wpvivid_uc_scan_include_files_regex',array());
$exclude_regex=apply_filters('wpvivid_uc_scan_exclude_files_regex',array());
$result=$this->get_folder_list($root_path,$regex,$exclude_regex);
return $result;
}
public function get_files($folder)
{
$upload_folder = wp_upload_dir();
$root_path =$upload_folder['basedir'];
$files =array();
$regex=apply_filters('wpvivid_uc_scan_include_files_regex',array());
$exclude_regex=apply_filters('wpvivid_uc_scan_exclude_files_regex',array());
if($folder === '.')
{
$this->scan_root_uploaded_files($files, $root_path.DIRECTORY_SEPARATOR.$folder,$root_path,$regex,$exclude_regex);
}
else
{
$this->scan_list_uploaded_files($files, $root_path.DIRECTORY_SEPARATOR.$folder,$root_path,$regex,$exclude_regex);
}
return $files;
}
private function regex_match($regex_array,$string,$mode)
{
if(empty($regex_array))
{
return true;
}
if($mode==0)
{
foreach ($regex_array as $regex)
{
if(preg_match($regex,$string))
{
return false;
}
}
return true;
}
if($mode==1)
{
foreach ($regex_array as $regex)
{
if(preg_match($regex,$string))
{
return true;
}
}
return false;
}
return true;
}
private function get_folder_list($root_path,$regex=array(),$exclude_regex=array())
{
$result['folders']=array();
$result['files']=array();
$result['size']=0;
$handler = opendir($root_path);
if($handler!==false)
{
while (($filename = readdir($handler)) !== false)
{
if ($filename != "." && $filename != "..")
{
if(empty($exclude_regex) || (!empty($exclude_regex) && $this->regex_match($exclude_regex,$this -> transfer_path($root_path . DIRECTORY_SEPARATOR . $filename),0)))
{
if (is_dir($root_path . DIRECTORY_SEPARATOR . $filename))
{
if(preg_match('#^\d{4}$#',$filename) ||
preg_match('/listing-uploads/', $filename)) //add listing-uploads\gallery
{
$result['folders']=array_merge( $result['folders'],$this->get_sub_folder($root_path . DIRECTORY_SEPARATOR . $filename,$filename,$exclude_regex));
}
else
{
$result['folders'][]=$filename;
}
}
else
{
if ($this->regex_match($exclude_regex, $filename, 0))
{
if($this->regex_match($regex, $filename, 1))
{
$result['files'][] = $filename;
$result['size']+=filesize($root_path . DIRECTORY_SEPARATOR . $filename);
}
}
}
}
}
}
if($handler)
@closedir($handler);
}
$result['folders'][]='.';
return $result;
}
function get_sub_folder($path,$root,$exclude_regex=array())
{
$folders=array();
$handler = opendir($path);
if($handler!==false)
{
while (($filename = readdir($handler)) !== false)
{
if ($filename != "." && $filename != "..")
{
if(empty($exclude_regex) || (!empty($exclude_regex) && $this->regex_match($exclude_regex,$this -> transfer_path($path . DIRECTORY_SEPARATOR . $filename),0)))
{
if (is_dir($path . DIRECTORY_SEPARATOR . $filename))
{
$folders[]=$root.DIRECTORY_SEPARATOR.$filename;
}
}
}
}
if($handler)
@closedir($handler);
}
return $folders;
}
function scan_root_uploaded_files( &$files,$path,$root,$regex=array(),$exclude_regex=array())
{
$count = 0;
if(is_dir($path))
{
$handler = opendir($path);
if($handler!==false)
{
while (($filename = readdir($handler)) !== false)
{
if ($filename != "." && $filename != "..")
{
$count++;
if ($this->regex_match($exclude_regex, $this -> transfer_path($root . DIRECTORY_SEPARATOR . $filename), 0))
{
if($this->regex_match($regex, $filename, 1))
{
$result['files'][] = $filename;
$files[] = str_replace($path . DIRECTORY_SEPARATOR,'',$path . DIRECTORY_SEPARATOR . $filename);
}
}
}
}
if($handler)
@closedir($handler);
}
}
return $files;
}
function scan_list_uploaded_files( &$files,$path,$root,$regex=array(),$exclude_regex=array())
{
$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,$regex);
}
else
{
if ($this->regex_match($exclude_regex, $this -> transfer_path($path . DIRECTORY_SEPARATOR . $filename), 0))
{
if($this->regex_match($regex, $filename, 1))
{
$result['files'][] = $filename;
$files[] = str_replace($root . DIRECTORY_SEPARATOR,'',$path . DIRECTORY_SEPARATOR . $filename);
}
}
}
}
}
if($handler)
@closedir($handler);
}
}
return $files;
}
public function update_scan_task($uploads_files,$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;
$this->insert_scan_result($uploads_files);
update_option('scan_unused_files_task',$task,'no');
}
public function update_unused_uploads_task($uploads_files,$folder,$finished,$offset,$status='running',$progress=0,$size=0)
{
$task=get_option('unused_uploads_task',array());
$task['running_time']=time();
$task['status']=$status;
$task['progress']=$progress;
$task['size']+=$size;
$task['folder'][$folder]['finished']=$finished;
$task['folder'][$folder]['offset']=$offset;
if(!empty($uploads_files))
$this->insert_unused_uploads_files($folder,$uploads_files);
update_option('unused_uploads_task',$task,'no');
}
public function get_unused_uploads_progress()
{
$task=get_option('unused_uploads_task',array());
if(isset($task['folder']))
{
$i=0;
foreach ($task['folder'] as $folder=>$item)
{
if($item['finished'])
$i++;
}
$progress=intval(($i/sizeof($task['folder']))*100);
$ret['percent']=$progress;
$ret['total_folders']=sizeof($task['folder']);
$ret['scanned_folders']=$i;
return $ret;
}
else
{
$ret['percent']=0;
$ret['total_folders']=0;
$ret['scanned_folders']=0;
return $ret;
}
}
public function get_unfinished_folder()
{
$task=get_option('unused_uploads_task',array());
foreach ($task['folder'] as $folder=>$data)
{
if(!$data['finished'])
{
$result['folder']=$folder;
$result['offset']=$data['offset'];
$result['total']=$data['total'];
return $result;
}
}
return false;
}
public function insert_scan_result($uploads_files)
{
global $wpdb;
$table_name = $wpdb->prefix . "wpvivid_scan_result";
$query = "INSERT INTO $table_name (id,path,from_post) VALUES ";
$values = array();
$place_holders=array();
foreach ( $uploads_files as $id=>$files )
{
if(empty($files))
continue;
foreach ($files as $path)
{
array_push( $values, $path );
array_push( $values, $id );
$place_holders[] = "(NULL,'%s',%d)";
}
}
if ( !empty( $values ) )
{
$query .= implode( ', ', $place_holders );
$prepared = $wpdb->prepare( "$query ", $values );
$wpdb->query( $prepared );
}
}
public function insert_unused_uploads_files($folder,$uploads_files)
{
global $wpdb;
$table_name = $wpdb->prefix . "wpvivid_unused_uploads_files";
$query = "INSERT INTO $table_name (id,path,folder) VALUES ";
$values = array();
$place_holders=array();
foreach ( $uploads_files as $path )
{
array_push( $values, $path );
array_push( $values, $folder );
$place_holders[] = "(NULL,'%s','%s')";
}
if ( !empty( $values ) )
{
$query .= implode( ', ', $place_holders );
$prepared = $wpdb->prepare( "$query ", $values );
$wpdb->query( $prepared );
}
}
public function is_uploads_files_exist($file)
{
global $wpdb;
$file=str_replace('\\','/',$file);
$table = $wpdb->prefix . "wpvivid_scan_result";
$row = $wpdb->get_row( "SELECT * FROM $table WHERE path = '$file'" );
if (empty($row))
{
$quick_scan=get_option('wpvivid_uc_quick_scan',false);
if(!$quick_scan)
{
$attachment_id=$this->find_media_id_from_file($file);
if($attachment_id)
{
if(isset($this->file_found_cache[$attachment_id]))
{
if($this->file_found_cache[$attachment_id])
{
return true;
}
else
{
return false;
}
}
$files=$this->get_img_from_id($attachment_id);
if(!empty($files))
{
$files = implode("','",$files);
$sql= "SELECT * FROM $table WHERE path IN ('$files')";
$row = $wpdb->get_row($sql);
if (!empty($row))
{
$this->file_found_cache[$attachment_id]=1;
return true;
}
else
{
$this->file_found_cache[$attachment_id]=0;
}
}
}
}
return false;
}
return 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 get_scan_result($search,$folder)
{
global $wpdb;
$where='';
if(!empty($search)||!empty($folder))
{
$where='WHERE ';
if(!empty($search))
{
$where.="`path` LIKE '%$search%'";
}
if(!empty($search)&&!empty($folder))
{
$where.=' AND ';
}
if(!empty($folder))
{
$where.="`folder` = '$folder'";
}
}
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$sql="SELECT * FROM `$table` ".$where;
return $wpdb->get_results($sql,ARRAY_A);
}
public function get_scan_result_count()
{
global $wpdb;
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$sql="SELECT COUNT(*) FROM $table";
$result=$wpdb->get_results($sql,ARRAY_N);
if($result)
{
return $count=$result[0][0];
}
else
{
return false;
}
}
public function get_scan_result_size()
{
$task=get_option('unused_uploads_task',array());
if(empty($task))
{
return false;
}
else if(isset($task['size']))
{
return size_format($task['size'],2);
}
else
{
return false;
}
}
public function get_all_folder()
{
global $wpdb;
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$sql="SELECT * FROM $table GROUP BY `folder`";
$result=$wpdb->get_results($sql,ARRAY_A);
if($result)
{
$folders=array();
foreach ($result as $item)
{
if($item['folder']=='.')
{
$folders[]='root';
}
else
{
$folders[]=$item['folder'];
}
}
return $folders;
}
else
{
return false;
}
}
public function get_selected_files_list($selected_list)
{
global $wpdb;
$ids=implode(",",$selected_list);
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$sql="SELECT * FROM $table WHERE `id` IN ($ids)";
$result=$wpdb->get_results($sql,ARRAY_A);
if($result)
{
$files=array();
foreach ($result as $item)
{
$files[]=$item['path'];
}
return $files;
}
else
{
return false;
}
}
public function delete_selected_files_list($selected_list)
{
global $wpdb;
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$ids=implode(",",$selected_list);
$sql="DELETE FROM $table WHERE `id` IN ($ids)";
$result=$wpdb->query($sql);
if($result)
{
return true;
}
else
{
return false;
}
}
public function get_all_files_list($search,$folder,$offset,$count)
{
global $wpdb;
$where='';
if(!empty($search)||!empty($folder))
{
$where='WHERE ';
if(!empty($search))
{
$where.="`path` LIKE '%$search%'";
}
if(!empty($search)&&!empty($folder))
{
$where.=' AND ';
}
if(!empty($folder))
{
$where.="`folder` = '$folder'";
}
}
$where.=" LIMIT $offset,$count";
//LIMIT
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$sql="SELECT * FROM $table ".$where;
$result=$wpdb->get_results($sql,ARRAY_A);
if($result)
{
$files=array();
foreach ($result as $item)
{
$files[]=$item['path'];
}
return $files;
}
else
{
return false;
}
}
public function delete_all_files_list($search,$folder,$count)
{
global $wpdb;
$where='';
if(!empty($search)||!empty($folder))
{
$where='WHERE ';
if(!empty($search))
{
$where.="`path` LIKE '%$search%'";
}
if(!empty($search)&&!empty($folder))
{
$where.=' AND ';
}
if(!empty($folder))
{
$where.="`folder` = '$folder'";
}
}
$where.=" LIMIT $count";
//LIMIT
$table = $wpdb->prefix . "wpvivid_unused_uploads_files";
$sql="DELETE FROM $table ".$where;
$result=$wpdb->query($sql);
if($result)
{
return true;
}
else
{
return false;
}
}
}