BossBey File Manager
PHP:
8.2.30
OS:
Linux
User:
imagivibe
Root
/
home
/
imagivibe
/
www
/
wp-content
/
plugins
/
robin-image-optimizer
/
libs
/
addons
/
includes
/
classes
π€ Upload
π New File
π New Folder
Close
Editing: class.folder-image.php
<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } /** * ΠΠ»Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ custom folder image. * * @version 1.0 */ class WRIO_Folder_Image { /** * @var int Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ */ private $id; /** * @var string ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ°ΠΏΠΊΠΈ */ private $path; /** * @var string Π£Π Π */ private $url; /** * @var string ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ */ private $folder_uid; /** * @var RIO_Process_Queue Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ */ private $optimization_data; /** * ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ· custom folder * * @param int $image_id Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ folders * @param array|false $image_data ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ */ public function __construct( $image_id, $image_data = false ) { $this->id = $image_id; if ( $image_data instanceof RIO_Process_Queue ) { $this->optimization_data = $image_data; } else { $this->optimization_data = $this->createOptimizationData(); if ( $image_data ) { $this->optimization_data->configure( (array) $image_data ); } else { $this->loadOptimizationData(); } } /** * @var WRIO_CF_Image_Extra_Data $extra_data */ $extra_data = $this->optimization_data->get_extra_data(); // Use get_home_path() to match how real_path_to_relative() calculates relative paths in class.folder.php $base_path = is_main_site() ? get_home_path() : wp_upload_dir()['basedir'] . '/'; $this->path = wp_normalize_path( untrailingslashit( $base_path ) . $extra_data->get_file_path() ); $this->url = home_url( wp_normalize_path( $extra_data->get_file_path() ) ); $this->folder_uid = $this->optimization_data->get_item_hash_alternative(); } /** * ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π°ΡΡΠ°ΡΠΌΠ΅Π½ΡΠ° * * @param string $property ΠΈΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° * * @return mixed */ public function get( $property ) { if ( isset( $this->$property ) ) { return $this->$property; } return false; } /** * ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ * * @return RIO_Process_Queue */ public function getOptimizationData() { if ( empty( $this->optimization_data ) ) { $this->optimization_data = $this->createOptimizationData(); $this->optimization_data->load(); } return $this->optimization_data; } /** * Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ RIO_Process_Queue * * @return RIO_Process_Queue */ public function createOptimizationData() { return new RIO_Process_Queue( [ 'id' => $this->id, 'item_type' => 'cf_image', ] ); } protected function loadOptimizationData() { global $wpdb; if ( empty( $this->optimization_data ) ) { $this->optimization_data = $this->createOptimizationData(); } $table_name = RIO_Process_Queue::table_name(); $sql = $wpdb->prepare( "SELECT * FROM {$table_name} WHERE id = %d AND item_type = %s LIMIT 1;", [ $this->id, 'cf_image', ] ); $row = $wpdb->get_row( $sql ); if ( ! empty( $row ) ) { $this->optimization_data->configure( $row ); } } /** * ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ * * @return bool */ public function isOptimized() { $optimization_data = $this->getOptimizationData(); if ( empty( $optimization_data ) ) { return false; } if ( $optimization_data->is_optimized() ) { return true; } return false; } /** * Check whether file exists or not. * * @return bool */ public function isFileExists() { if ( file_exists( $this->path ) ) { return true; } return false; } /** * Optimize folder image. * * @param string $optimization_level Level of optimization. * * @return array */ public function optimize( $optimization_level = '' ) { $is_image_backuped = $this->backup(); if ( is_wp_error( $is_image_backuped ) ) { WRIO_Plugin::app()->logger->error( sprintf( 'Failed to backup with message: %s. Skipping optimization of custom folder', $is_image_backuped->get_error_message() ) ); return [ 'errors_count' => 1, 'original_size' => 0, 'optimized_size' => 0, 'optimized_count' => 0, ]; } // Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΈΡΠ°ΠΉΠ· $image_processor = WIO_OptimizationTools::getImageProcessor(); if ( ! $optimization_level ) { $optimization_level = WRIO_Plugin::app()->getPopulateOption( 'image_optimization_level', 'normal' ); } if ( $optimization_level == 'custom' ) { $custom_quality = WRIO_Plugin::app()->getPopulateOption( 'image_optimization_level_custom', 100 ); $optimization_level = intval( $custom_quality ); } $optimization_data = $this->getOptimizationData(); $results = []; $results['processing_level'] = $optimization_level; $main_file_path = $this->path; $main_file_url = $this->url; clearstatcache(); // Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡΠΈΡΡΠΈΠΌ ΠΊΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ $original_main_size = filesize( $main_file_path ); // ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ $optimized_img_data = $image_processor->process( [ 'image_url' => $main_file_url, 'image_path' => $main_file_path, 'quality' => $image_processor->quality( $optimization_level ), 'save_exif' => WRIO_Plugin::app()->getPopulateOption( 'save_exif_data', false ), ] ); if ( is_wp_error( $optimized_img_data ) ) { $results['result_status'] = 'error'; /** * @var $extra_data WRIO_CF_Image_Extra_Data */ $extra_data = $optimization_data->get_extra_data(); $extra_data->set_error( 'optimization' ); $extra_data->set_error_msg( $optimized_img_data->get_error_message() ); $results['extra_data'] = $extra_data; $optimization_data->configure( $results ); $optimization_data->save(); return [ 'errors_count' => 1, 'original_size' => 0, 'optimized_size' => 0, 'optimized_count' => 0, ]; } // ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ if ( isset( $optimized_img_data['status'] ) && $optimized_img_data['status'] == 'processing' ) { $results['result_status'] = 'processing'; $results['is_backed_up'] = $is_image_backuped; $results['original_size'] = 0; $results['final_size'] = 0; /** * @var $extra_data WRIO_CF_Image_Extra_Data */ $extra_data = $optimization_data->get_extra_data(); $extra_data->set_main_optimized_data( $optimized_img_data ); $results['extra_data'] = $extra_data; $optimization_data->configure( $results ); $optimization_data->save(); return [ 'processing' => 1, 'original_size' => 0, 'optimized_size' => 0, ]; } $this->replaceOriginalFile( $optimized_img_data ); // Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ Π½Π΅ ΠΎΡΠ΄Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΡΠ°ΠΌΠΈ if ( ! $optimized_img_data['optimized_size'] ) { clearstatcache(); $optimized_img_data['optimized_size'] = filesize( $main_file_path ); } // ΠΏΡΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° if ( $optimized_img_data['optimized_size'] > $original_main_size ) { $optimized_img_data['optimized_size'] = $original_main_size; } $original_size = $original_main_size; $optimized_size = $optimized_img_data['optimized_size']; $results['result_status'] = 'success'; $results['final_size'] = $optimized_size; $results['original_size'] = $original_size; $results['is_backed_up'] = $is_image_backuped; /** * @var $extra_data WRIO_CF_Image_Extra_Data */ $extra_data = $optimization_data->get_extra_data(); $extra_data->set_main_optimized_data( null ); $extra_data->set_error( null ); $extra_data->set_error_msg( null ); $results['extra_data'] = $extra_data; $mime_type = ''; if ( function_exists( 'wp_get_image_mime' ) ) { $mime_type = wp_get_image_mime( $main_file_path ); } $results['original_mime_type'] = $mime_type; $results['final_mime_type'] = $mime_type; $optimization_data->configure( $results ); $optimization_data->save(); return [ 'errors_count' => 0, 'original_size' => $original_size, 'optimized_size' => $optimized_size, 'optimized_count' => 1, ]; } /** * ΠΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π°ΡΡΠ°ΡΠΌΠ΅Π½ΡΠ° * * @return bool|array */ public function deferredOptimization() { $results = [ 'original_size' => 0, 'optimized_size' => 0, 'optimized_count' => 0, 'processing' => 1, ]; $image_processor = WIO_OptimizationTools::getImageProcessor(); $optimization_data = $this->getOptimizationData(); if ( $optimization_data->get_result_status() != 'processing' ) { return false; } // ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π³Π»Π°Π²Π½ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ /** * @var $extra_data WRIO_CF_Image_Extra_Data */ $extra_data = $optimization_data->get_extra_data(); $main_optimized_data = $extra_data->get_main_optimized_data(); $main_image_url = ''; if ( ! $main_optimized_data['optimized_img_url'] ) { $main_image_url = $image_processor->checkDeferredOptimization( $main_optimized_data ); if ( $main_image_url ) { $main_optimized_data['optimized_img_url'] = $main_image_url; $extra_data->set_main_optimized_data( $main_optimized_data ); } } $thumbnails_processed = true; // Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ ΠΏΠ°ΠΏΠΎΠΊ Π½Π΅Ρ ΠΏΡΠ΅Π²ΡΡΡΠ΅ΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅Π³Π΄Π° true // ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ - ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ if ( $main_image_url && $thumbnails_processed ) { $original_size = 0; $optimized_size = 0; $original_main_size = filesize( $this->get( 'path' ) ); $original_size = $original_size + $original_main_size; $this->replaceOriginalFile( [ 'optimized_img_url' => $main_image_url, ] ); clearstatcache(); $optimized_main_size = filesize( $this->get( 'path' ) ); // ΠΏΡΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° if ( $optimized_main_size > $original_main_size ) { $optimized_main_size = $original_main_size; } $optimized_size = $optimized_size + $optimized_main_size; clearstatcache(); $mime_type = ''; if ( function_exists( 'wp_get_image_mime' ) ) { $mime_type = wp_get_image_mime( $this->get( 'path' ) ); } $optimization_data->configure( [ 'final_size' => $optimized_size, 'original_size' => $original_size, 'result_status' => 'success', 'original_mime_type' => $mime_type, 'final_mime_type' => $mime_type, ] ); $extra_data->set_original_main_size( $original_main_size ); // ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ $extra_data->set_main_optimized_data( null ); $extra_data->set_error( null ); $extra_data->set_error_msg( null ); $results['optimized_count'] = 1; $results['original_size'] = $original_size; $results['optimized_size'] = $optimized_size; unset( $results['processing'] ); } $optimization_data->set_extra_data( $extra_data ); $optimization_data->save(); return $results; } /** * ΠΠ°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ * * @param array $optimized_img_data ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π²Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ */ public function replaceOriginalFile( $optimized_img_data ) { $optimized_img_url = $optimized_img_data['optimized_img_url']; if ( isset( $optimized_img_data['not_need_download'] ) and $optimized_img_data['not_need_download'] ) { $optimized_file = $optimized_img_url; } else { $optimized_file = $this->remoteDownloadImage( $optimized_img_url ); } if ( isset( $optimized_img_data['not_need_replace'] ) and $optimized_img_data['not_need_replace'] ) { // Π΅ΡΠ»ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° ΡΠΆΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ Π΅Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ - ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ, Π½ΠΎ Π±Π΅Π· ΡΠ°ΠΌΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΠΈΡΠ΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡΡ Π½Π΅ Π½Π°Π΄ΠΎ return true; } if ( ! $optimized_file ) { return false; } $path = $this->path; if ( ! is_file( $path ) ) { return false; } file_put_contents( $path, $optimized_file ); return true; } /** * ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° * * todo: RIO-18 ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅Ρ Π²Π½Π΅ΡΠ½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄? * * @param string $url * * @return string */ protected function remoteDownloadImage( $url ) { if ( ! function_exists( 'curl_version' ) ) { return file_get_contents( $url ); } $ch = curl_init(); curl_setopt( $ch, CURLOPT_HEADER, 0 ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch, CURLOPT_URL, $url ); $image_body = curl_exec( $ch ); $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); if ( $http_code != '200' ) { $image_body = false; } curl_close( $ch ); return $image_body; } /** * ΠΠ΅Π»Π°Π΅Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ */ public function backup() { $backup = WRIOP_Backup::get_instance(); return $backup->backupCFImage( $this ); } /** * ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΠ· ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ */ public function restore() { $backup = WRIOP_Backup::get_instance(); $restored = $backup->restoreCFImage( $this ); if ( is_wp_error( $restored ) ) { return $restored; } $optimization_data = $this->getOptimizationData(); $optimization_data->set_result_status( 'unoptimized' ); $optimization_data->save(); /** * Π₯ΡΠΊ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ cf_image * * @since 1.2.0 * * @param RIO_Process_Queue $optimization_data */ do_action( 'wbcr/rio/cf_image_restored', $this->optimization_data ); return true; } }
Save
Cancel