X7ROOT File Manager
Current Path:
/usr/src/litespeed-wp-plugin/7.8.0.1/litespeed-cache/src
usr
/
src
/
litespeed-wp-plugin
/
7.8.0.1
/
litespeed-cache
/
src
/
??
..
??
activation.cls.php
(17.31 KB)
??
admin-display.cls.php
(48.47 KB)
??
admin-settings.cls.php
(11.12 KB)
??
admin.cls.php
(6.13 KB)
??
api.cls.php
(10.36 KB)
??
avatar.cls.php
(8.65 KB)
??
base.cls.php
(37.66 KB)
??
cdn
??
cdn.cls.php
(15.92 KB)
??
cloud-auth-callback.trait.php
(10.43 KB)
??
cloud-auth-ip.trait.php
(4.33 KB)
??
cloud-auth.trait.php
(9.38 KB)
??
cloud-misc.trait.php
(10.32 KB)
??
cloud-node.trait.php
(5.95 KB)
??
cloud-request.trait.php
(19.68 KB)
??
cloud.cls.php
(7.32 KB)
??
conf.cls.php
(19.53 KB)
??
control.cls.php
(24.35 KB)
??
core.cls.php
(20.97 KB)
??
crawler-map.cls.php
(19.41 KB)
??
crawler.cls.php
(44.72 KB)
??
css.cls.php
(17.77 KB)
??
data.cls.php
(22.21 KB)
??
data.upgrade.func.php
(5.72 KB)
??
data_structure
??
db-optm.cls.php
(15.35 KB)
??
debug2.cls.php
(18.4 KB)
??
doc.cls.php
(5.45 KB)
??
error.cls.php
(7.35 KB)
??
esi.cls.php
(27.18 KB)
??
file.cls.php
(10.57 KB)
??
guest.cls.php
(2.75 KB)
??
gui.cls.php
(36.57 KB)
??
health.cls.php
(2.83 KB)
??
htaccess.cls.php
(29.81 KB)
??
img-optm-manage.trait.php
(30.85 KB)
??
img-optm-pull.trait.php
(22.1 KB)
??
img-optm-send.trait.php
(21.9 KB)
??
img-optm.cls.php
(5.26 KB)
??
import.cls.php
(4.29 KB)
??
import.preset.cls.php
(5.5 KB)
??
lang.cls.php
(17.02 KB)
??
localization.cls.php
(4.03 KB)
??
media.cls.php
(44.08 KB)
??
metabox.cls.php
(5.29 KB)
??
object-cache-wp.cls.php
(18.82 KB)
??
object-cache.cls.php
(20.95 KB)
??
object.lib.php
(14.16 KB)
??
optimize.cls.php
(38.64 KB)
??
optimizer.cls.php
(10.5 KB)
??
placeholder.cls.php
(17.93 KB)
??
purge.cls.php
(34.41 KB)
??
report.cls.php
(6.12 KB)
??
rest.cls.php
(9.08 KB)
??
root.cls.php
(14.29 KB)
??
router.cls.php
(20.76 KB)
??
str.cls.php
(3.08 KB)
??
tag.cls.php
(9.26 KB)
??
task.cls.php
(7.05 KB)
??
tool.cls.php
(4.17 KB)
??
ucss.cls.php
(16.35 KB)
??
utility.cls.php
(26.01 KB)
??
vary.cls.php
(21.33 KB)
??
vpi.cls.php
(9.38 KB)
Editing: img-optm-send.trait.php
<?php /** * Image optimization send trait * * @package LiteSpeed * @since 7.8 */ namespace LiteSpeed; defined( 'WPINC' ) || exit(); /** * Trait Img_Optm_Send * * Handles image optimization request sending. */ trait Img_Optm_Send { /** * Gather images auto when update attachment meta * This is to optimize new uploaded images first. Stored in img_optm table. * Later normal process will auto remove these records when trying to optimize these images again * * @since 4.0 * @param array $meta_value The meta value array. * @param int $post_id The post ID. */ public function wp_update_attachment_metadata( $meta_value, $post_id ) { global $wpdb; self::debug2( '🖌️ Auto update attachment meta [id] ' . $post_id ); if ( empty( $meta_value['file'] ) ) { return; } // Load gathered images if ( ! $this->_existed_src_list ) { // To aavoid extra query when recalling this function self::debug( 'SELECT src from img_optm table' ); if ( $this->__data->tb_exist( 'img_optm' ) ) { $q = "SELECT src FROM `$this->_table_img_optm` WHERE post_id = %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $list = $wpdb->get_results( $wpdb->prepare( $q, $post_id ) ); foreach ( $list as $v ) { $this->_existed_src_list[] = $post_id . '.' . $v->src; } } if ( $this->__data->tb_exist( 'img_optming' ) ) { $q = "SELECT src FROM `$this->_table_img_optming` WHERE post_id = %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $list = $wpdb->get_results( $wpdb->prepare( $q, $post_id ) ); foreach ( $list as $v ) { $this->_existed_src_list[] = $post_id . '.' . $v->src; } } else { $this->__data->tb_create( 'img_optming' ); } } // Prepare images $this->tmp_pid = $post_id; $this->tmp_path = pathinfo( $meta_value['file'], PATHINFO_DIRNAME ) . '/'; $this->_append_img_queue( $meta_value, true ); if ( ! empty( $meta_value['sizes'] ) ) { foreach ( $meta_value['sizes'] as $img_size_name => $img_size ) { $this->_append_img_queue( $img_size, false, $img_size_name ); } } if ( ! $this->_img_in_queue ) { self::debug( 'auto update attachment meta 2 bypass: empty _img_in_queue' ); return; } // Save to DB $this->_save_raw(); // $this->_send_request(); } /** * Auto send optm request * * @since 2.4.1 * @access public */ public static function cron_auto_request() { if ( ! wp_doing_cron() ) { return false; } $instance = self::cls(); $instance->new_req(); } /** * Calculate wet run allowance * * @since 3.0 * @return int|false The wet limit or false if no limit. */ public function wet_limit() { $wet_limit = 1; if ( ! empty( $this->_summary['img_taken'] ) ) { $wet_limit = pow( $this->_summary['img_taken'], 2 ); } if ( 1 === $wet_limit && ! empty( $this->_summary[ 'img_status.' . self::STATUS_ERR_OPTM ] ) ) { $wet_limit = pow( $this->_summary[ 'img_status.' . self::STATUS_ERR_OPTM ], 2 ); } if ( $wet_limit < Cloud::IMG_OPTM_DEFAULT_GROUP ) { return $wet_limit; } // No limit return false; } /** * Push raw img to image optm server * * @since 1.6 * @access public */ public function new_req() { global $wpdb; // check if is running if ( ! empty( $this->_summary['is_running'] ) && time() - $this->_summary['is_running'] < apply_filters( 'litespeed_imgoptm_new_req_interval', 3600 ) ) { self::debug( 'The previous req was in 3600s.' ); return; } $this->_summary['is_running'] = time(); self::save_summary(); // Check if has credit to push $err = false; $allowance = Cloud::cls()->allowance( Cloud::SVC_IMG_OPTM, $err ); $wet_limit = $this->wet_limit(); self::debug( "allowance_max $allowance wet_limit $wet_limit" ); if ( $wet_limit && $wet_limit < $allowance ) { $allowance = $wet_limit; } if ( ! $allowance ) { self::debug( '❌ No credit' ); Admin_Display::error( Error::msg( $err ) ); $this->_finished_running(); return; } self::debug( 'preparing images to push' ); $this->__data->tb_create( 'img_optming' ); $q = "SELECT COUNT(1) FROM `$this->_table_img_optming` WHERE optm_status = %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $q = $wpdb->prepare( $q, [ self::STATUS_REQUESTED ] ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $total_requested = $wpdb->get_var( $q ); $max_requested = $allowance * 1; if ( $total_requested > $max_requested ) { self::debug( '❌ Too many queued images (' . $total_requested . ' > ' . $max_requested . ')' ); Admin_Display::error( Error::msg( 'too_many_requested' ) ); $this->_finished_running(); return; } $allowance -= $total_requested; if ( $allowance < 1 ) { self::debug( '❌ Too many requested images ' . $total_requested ); Admin_Display::error( Error::msg( 'too_many_requested' ) ); $this->_finished_running(); return; } // Limit maximum number of items waiting to be pulled $q = "SELECT COUNT(1) FROM `$this->_table_img_optming` WHERE optm_status = %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $q = $wpdb->prepare( $q, [ self::STATUS_NOTIFIED ] ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $total_notified = $wpdb->get_var( $q ); if ( $total_notified > 0 ) { self::debug( '❌ Too many notified images (' . $total_notified . ')' ); Admin_Display::error( Error::msg( 'too_many_notified' ) ); $this->_finished_running(); return; } $q = "SELECT COUNT(1) FROM `$this->_table_img_optming` WHERE optm_status IN (%d, %d)"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $q = $wpdb->prepare( $q, [ self::STATUS_NEW, self::STATUS_RAW ] ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $total_new = $wpdb->get_var( $q ); // $allowance -= $total_new; // May need to get more images $list = []; $more = $allowance - $total_new; if ( $more > 0 ) { $q = "SELECT b.post_id, b.meta_value FROM `$wpdb->posts` a LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID WHERE b.meta_key = '_wp_attachment_metadata' AND a.post_type = 'attachment' AND a.post_status = 'inherit' AND a.ID>%d AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif') ORDER BY a.ID LIMIT %d "; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $q = $wpdb->prepare( $q, [ $this->_summary['next_post_id'], $more ] ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $list = $wpdb->get_results( $q ); foreach ( $list as $v ) { if ( ! $v->post_id ) { continue; } $this->_summary['next_post_id'] = $v->post_id; $meta_value = $this->_parse_wp_meta_value( $v ); if ( ! $meta_value ) { continue; } $meta_value['file'] = wp_normalize_path( $meta_value['file'] ); $basedir = $this->wp_upload_dir['basedir'] . '/'; if ( strpos( $meta_value['file'], $basedir ) === 0 ) { $meta_value['file'] = substr( $meta_value['file'], strlen( $basedir ) ); } $this->tmp_pid = $v->post_id; $this->tmp_path = pathinfo( $meta_value['file'], PATHINFO_DIRNAME ) . '/'; $this->_append_img_queue( $meta_value, true ); if ( ! empty( $meta_value['sizes'] ) ) { foreach ( $meta_value['sizes'] as $img_size_name => $img_size ) { $this->_append_img_queue( $img_size, false, $img_size_name ); } } } self::save_summary(); $num_a = count( $this->_img_in_queue ); self::debug( 'Images found: ' . $num_a ); $this->_filter_duplicated_src(); self::debug( 'Images after duplicated: ' . count( $this->_img_in_queue ) ); $this->_filter_invalid_src(); self::debug( 'Images after invalid: ' . count( $this->_img_in_queue ) ); // Check w/ legacy imgoptm table, bypass finished images $this->_filter_legacy_src(); $num_b = count( $this->_img_in_queue ); if ( $num_b !== $num_a ) { self::debug( 'Images after filtered duplicated/invalid/legacy src: ' . $num_b ); } // Save to DB $this->_save_raw(); } // Push to Cloud server $accepted_imgs = $this->_send_request( $allowance ); $this->_finished_running(); if ( ! $accepted_imgs ) { return; } $placeholder1 = Admin_Display::print_plural( $accepted_imgs[0], 'image' ); $placeholder2 = Admin_Display::print_plural( $accepted_imgs[1], 'image' ); $msg = sprintf( __( 'Pushed %1$s to Cloud server, accepted %2$s.', 'litespeed-cache' ), $placeholder1, $placeholder2 ); Admin_Display::success( $msg ); } /** * Set running to done * * @since 3.0 * @access private */ private function _finished_running() { $this->_summary['is_running'] = 0; self::save_summary(); } /** * Add a new img to queue which will be pushed to request * * @since 1.6 * @since 7.5 Allow to choose which image sizes should be optimized + added parameter $img_size_name. * @access private * @param array $meta_value The meta value array. * @param bool $is_ori_file Whether this is the original file. * @param string|bool $img_size_name The image size name or false. */ private function _append_img_queue( $meta_value, $is_ori_file = false, $img_size_name = false ) { if ( empty( $meta_value['file'] ) || empty( $meta_value['width'] ) || empty( $meta_value['height'] ) ) { self::debug2( 'bypass image due to lack of file/w/h: pid ' . $this->tmp_pid, $meta_value ); return; } $short_file_path = $meta_value['file']; // Test if need to skip image size. if ( ! $is_ori_file ) { $short_file_path = $this->tmp_path . $short_file_path; $skip = false !== array_search( $img_size_name, $this->_sizes_skipped, true ); if ( $skip ) { self::debug2( 'bypass image ' . $short_file_path . ' due to skipped size: ' . $img_size_name ); return; } } // Check if src is gathered already or not if ( in_array( $this->tmp_pid . '.' . $short_file_path, $this->_existed_src_list, true ) ) { // Debug2::debug2( '[Img_Optm] bypass image due to gathered: pid ' . $this->tmp_pid . ' ' . $short_file_path ); return; } else { // Append handled images $this->_existed_src_list[] = $this->tmp_pid . '.' . $short_file_path; } // check file exists or not $_img_info = $this->__media->info( $short_file_path, $this->tmp_pid ); $extension = pathinfo( $short_file_path, PATHINFO_EXTENSION ); if ( ! $_img_info || ! in_array( $extension, [ 'jpg', 'jpeg', 'png', 'gif' ], true ) ) { self::debug2( 'bypass image due to file not exist: pid ' . $this->tmp_pid . ' ' . $short_file_path ); return; } // Check if optimized file exists or not $target_needed = false; if ( $this->_format ) { $target_file_path = $short_file_path . '.' . $this->_format; if ( ! $this->__media->info( $target_file_path, $this->tmp_pid ) ) { $target_needed = true; } } if ( $this->conf( self::O_IMG_OPTM_ORI ) ) { $target_file_path = substr( $short_file_path, 0, -strlen( $extension ) ) . 'bk.' . $extension; if ( ! $this->__media->info( $target_file_path, $this->tmp_pid ) ) { $target_needed = true; } } if ( ! $target_needed ) { self::debug2( 'bypass image due to optimized file exists: pid ' . $this->tmp_pid . ' ' . $short_file_path ); return; } // Debug2::debug2( '[Img_Optm] adding image: pid ' . $this->tmp_pid ); $this->_img_in_queue[] = [ 'pid' => $this->tmp_pid, 'md5' => $_img_info['md5'], 'url' => $_img_info['url'], 'src' => $short_file_path, // not needed in LiteSpeed IAPI, just leave for local storage after post 'mime_type' => ! empty( $meta_value['mime-type'] ) ? $meta_value['mime-type'] : '', ]; } /** * Save gathered image raw data * * @since 3.0 * @access private */ private function _save_raw() { if ( empty( $this->_img_in_queue ) ) { return; } $data = []; $pid_list = []; foreach ( $this->_img_in_queue as $k => $v ) { $_img_info = $this->__media->info( $v['src'], $v['pid'] ); // attachment doesn't exist, delete the record if ( empty( $_img_info['url'] ) || empty( $_img_info['md5'] ) ) { unset( $this->_img_in_queue[ $k ] ); continue; } $pid_list[] = (int) $v['pid']; $data[] = $v['pid']; $data[] = self::STATUS_RAW; $data[] = $v['src']; } global $wpdb; $fields = 'post_id, optm_status, src'; $q = "INSERT INTO `$this->_table_img_optming` ( $fields ) VALUES "; // Add placeholder $q .= Utility::chunk_placeholder( $data, $fields ); // Store data // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $wpdb->query( $wpdb->prepare( $q, $data ) ); $count = count( $this->_img_in_queue ); self::debug( 'Added raw images [total] ' . $count ); $this->_img_in_queue = []; // Save thumbnail groups for future rescan index $this->_gen_thumbnail_set(); $pid_list = array_unique( $pid_list ); self::debug( 'pid list to append to postmeta', $pid_list ); $pid_list = array_diff( $pid_list, $this->_pids_set ); $this->_pids_set = array_merge( $this->_pids_set, $pid_list ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $existed_meta = $wpdb->get_results( "SELECT * FROM `$wpdb->postmeta` WHERE post_id IN ('" . implode( "','", $pid_list ) . "') AND meta_key='" . self::DB_SET . "'" ); $existed_pid = []; if ( $existed_meta ) { foreach ( $existed_meta as $v ) { $existed_pid[] = $v->post_id; } self::debug( 'pid list to update postmeta', $existed_pid ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery $wpdb->query( // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- $existed_pid is array of sanitized IDs $wpdb->prepare( "UPDATE `$wpdb->postmeta` SET meta_value=%s WHERE post_id IN (" . implode( ',', $existed_pid ) . ') AND meta_key=%s', [ $this->_thumbnail_set, self::DB_SET, ] ) ); } // Add new meta $new_pids = $existed_pid ? array_diff( $pid_list, $existed_pid ) : $pid_list; if ( $new_pids ) { self::debug( 'pid list to update postmeta', $new_pids ); foreach ( $new_pids as $v ) { self::debug( 'New group set info [pid] ' . $v ); $q = "INSERT INTO `$wpdb->postmeta` (post_id, meta_key, meta_value) VALUES (%d, %s, %s)"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $wpdb->query( $wpdb->prepare( $q, [ $v, self::DB_SET, $this->_thumbnail_set ] ) ); } } } /** * Generate thumbnail sets of current image group * * @since 5.4 * @access private */ private function _gen_thumbnail_set() { if ( $this->_thumbnail_set ) { return; } $set = []; foreach ( Media::cls()->get_image_sizes() as $size ) { $curr_size = $size['width'] . 'x' . $size['height']; if ( in_array( $curr_size, $set, true ) ) { continue; } $set[] = $curr_size; } $this->_thumbnail_set = implode( PHP_EOL, $set ); } /** * Filter duplicated src in work table and $this->_img_in_queue, then mark them as duplicated * * @since 2.0 * @access private */ private function _filter_duplicated_src() { global $wpdb; $srcpath_list = []; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared $list = $wpdb->get_results( "SELECT src FROM `$this->_table_img_optming`" ); foreach ( $list as $v ) { $srcpath_list[] = $v->src; } foreach ( $this->_img_in_queue as $k => $v ) { if ( in_array( $v['src'], $srcpath_list, true ) ) { unset( $this->_img_in_queue[ $k ] ); continue; } $srcpath_list[] = $v['src']; } } /** * Filter legacy finished ones * * @since 5.4 * @access private */ private function _filter_legacy_src() { global $wpdb; if ( ! $this->__data->tb_exist( 'img_optm' ) ) { return; } if ( ! $this->_img_in_queue ) { return; } $finished_ids = []; Utility::compatibility(); $post_ids = array_unique( array_column( $this->_img_in_queue, 'pid' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared $list = $wpdb->get_results( "SELECT post_id FROM `$this->_table_img_optm` WHERE post_id in (" . implode( ',', $post_ids ) . ') GROUP BY post_id' ); foreach ( $list as $v ) { $finished_ids[] = $v->post_id; } foreach ( $this->_img_in_queue as $k => $v ) { if ( in_array( $v['pid'], $finished_ids, true ) ) { self::debug( 'Legacy image optimized [pid] ' . $v['pid'] ); unset( $this->_img_in_queue[ $k ] ); continue; } } // Drop all existing legacy records // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared $wpdb->query( "DELETE FROM `$this->_table_img_optm` WHERE post_id in (" . implode( ',', $post_ids ) . ')' ); } /** * Filter the invalid src before sending * * @since 3.0.8.3 * @access private */ private function _filter_invalid_src() { $img_in_queue_invalid = []; foreach ( $this->_img_in_queue as $k => $v ) { if ( $v['src'] ) { $extension = pathinfo( $v['src'], PATHINFO_EXTENSION ); } if ( ! $v['src'] || empty( $extension ) || ! in_array( $extension, [ 'jpg', 'jpeg', 'png', 'gif' ], true ) ) { $img_in_queue_invalid[] = $v['id']; unset( $this->_img_in_queue[ $k ] ); continue; } } if ( ! $img_in_queue_invalid ) { return; } $count = count( $img_in_queue_invalid ); $msg = sprintf( __( 'Cleared %1$s invalid images.', 'litespeed-cache' ), $count ); Admin_Display::success( $msg ); self::debug( 'Found invalid src [total] ' . $count ); } /** * Push img request to Cloud server * * @since 1.6.7 * @access private * @param int $allowance The allowance limit. * @return array|void Array with pushed and accepted counts. */ private function _send_request( $allowance ) { global $wpdb; $q = "SELECT id, src, post_id FROM `$this->_table_img_optming` WHERE optm_status=%d LIMIT %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $q = $wpdb->prepare( $q, [ self::STATUS_RAW, $allowance ] ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $_img_in_queue = $wpdb->get_results( $q ); if ( ! $_img_in_queue ) { return; } self::debug( 'Load img in queue [total] ' . count( $_img_in_queue ) ); $list = []; foreach ( $_img_in_queue as $v ) { $_img_info = $this->__media->info( $v->src, $v->post_id ); // If record is invalid, remove from img_optming table if ( empty( $_img_info['url'] ) || empty( $_img_info['md5'] ) ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared $wpdb->query( $wpdb->prepare( "DELETE FROM `$this->_table_img_optming` WHERE id=%d", $v->id ) ); continue; } $img = [ 'id' => $v->id, 'url' => $_img_info['url'], 'md5' => $_img_info['md5'], ]; // Build the needed image types for request as we now support soft reset counter if ( $this->_format ) { $target_file_path = $v->src . '.' . $this->_format; if ( $this->__media->info( $target_file_path, $v->post_id ) ) { $img[ 'optm_' . $this->_format ] = 0; } } if ( $this->conf( self::O_IMG_OPTM_ORI ) ) { $extension = pathinfo( $v->src, PATHINFO_EXTENSION ); $target_file_path = substr( $v->src, 0, -strlen( $extension ) ) . 'bk.' . $extension; if ( $this->__media->info( $target_file_path, $v->post_id ) ) { $img['optm_ori'] = 0; } } $list[] = $img; } if ( ! $list ) { $msg = __( 'No valid image found in the current request.', 'litespeed-cache' ); Admin_Display::error( $msg ); return; } $data = [ 'action' => self::CLOUD_ACTION_NEW_REQ, 'list' => wp_json_encode( $list ), 'optm_ori' => $this->conf( self::O_IMG_OPTM_ORI ) ? 1 : 0, 'optm_lossless' => $this->conf( self::O_IMG_OPTM_LOSSLESS ) ? 1 : 0, 'keep_exif' => $this->conf( self::O_IMG_OPTM_EXIF ) ? 1 : 0, ]; if ( $this->_format ) { $data[ 'optm_' . $this->_format ] = 1; } // Push to Cloud server $json = Cloud::post( Cloud::SVC_IMG_OPTM, $data ); if ( ! $json ) { return; } // Check data format if ( empty( $json['ids'] ) ) { self::debug( 'Failed to parse response data from Cloud server ', $json ); $msg = __( 'No valid image found by Cloud server in the current request.', 'litespeed-cache' ); Admin_Display::error( $msg ); return; } self::debug( 'Returned data from Cloud server count: ' . count( $json['ids'] ) ); $ids = implode( ',', array_map( 'intval', $json['ids'] ) ); // Update img table $q = "UPDATE `$this->_table_img_optming` SET optm_status = '" . self::STATUS_REQUESTED . "' WHERE id IN ( $ids )"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.NotPrepared $wpdb->query( $q ); $this->_summary['last_requested'] = time(); self::save_summary(); return [ count( $list ), count( $json['ids'] ) ]; } /** * Parse wp's meta value * * @since 1.6.7 * @access private * @param object $v The database row object. * @return array|false The parsed meta value or false on failure. */ private function _parse_wp_meta_value( $v ) { if ( empty( $v ) ) { self::debug( 'bypassed parsing meta due to null value' ); return false; } if ( ! $v->meta_value ) { self::debug( 'bypassed parsing meta due to no meta_value: pid ' . $v->post_id ); return false; } // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Suppress warnings from corrupted metadata $meta_value = @maybe_unserialize( $v->meta_value ); if ( ! is_array( $meta_value ) ) { self::debug( 'bypassed parsing meta due to meta_value not json: pid ' . $v->post_id ); return false; } if ( empty( $meta_value['file'] ) ) { self::debug( 'bypassed parsing meta due to no ori file: pid ' . $v->post_id ); return false; } return $meta_value; } }
Upload File
Create Folder