%PDF- %PDF-
Direktori : /var/www/html/buggydubrovnik.com/wp-content/plugins/imagify/inc/deprecated/ |
Current File : /var/www/html/buggydubrovnik.com/wp-content/plugins/imagify/inc/deprecated/deprecated.php |
<?php defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' ); /** * Get all mime types which could be optimized by Imagify. * * @since 1.3 * @since 1.7 Deprecated. * @deprecated * * @return array $mime_type The mime type. */ function get_imagify_mime_type() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'imagify_get_mime_types()' ); return imagify_get_mime_types(); } /** * Planning cron. * If the task is not programmed, it is automatically triggered. * * @since 1.4.2 * @since 1.7 Deprecated. * @deprecated */ function _imagify_rating_scheduled() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Cron_Rating::get_instance()->schedule_event()' ); Imagify_Cron_Rating::get_instance()->schedule_event(); } /** * Save the user images count to display it later in a notice message to ask him to rate Imagify on WordPress.org. * * @since 1.4.2 * @since 1.7 Deprecated. * @deprecated */ function _do_imagify_rating_cron() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Cron_Rating::get_instance()->do_event()' ); Imagify_Cron_Rating::get_instance()->do_event(); } /** * Adds weekly interval for cron jobs. * * @since 1.6 * @since 1.7 Deprecated. * @author Remy Perona * @deprecated * * @param Array $schedules An array of intervals used by cron jobs. * @return Array Updated array of intervals. */ function imagify_purge_cron_schedule( $schedules ) { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Cron_Library_Size::get_instance()->maybe_add_recurrence( $schedules )' ); return Imagify_Cron_Library_Size::get_instance()->do_event( $schedules ); } /** * Planning cron task to update weekly the size of the images and the size of images uploaded by month. * If the task is not programmed, it is automatically triggered. * * @since 1.6 * @since 1.7 Deprecated. * @author Remy Perona * @deprecated */ function _imagify_update_library_size_calculations_scheduled() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Cron_Library_Size::get_instance()->schedule_event()' ); Imagify_Cron_Library_Size::get_instance()->schedule_event(); } /** * Cron task to update weekly the size of the images and the size of images uploaded by month. * * @since 1.6 * @since 1.7 Deprecated. * @author Remy Perona * @deprecated */ function _do_imagify_update_library_size_calculations() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Cron_Library_Size::get_instance()->do_event()' ); Imagify_Cron_Library_Size::get_instance()->do_event(); } /** * Set a file permissions using FS_CHMOD_FILE. * * @since 1.2 * @since 1.6.5 Use WP Filesystem. * @since 1.7.1 Deprecated. * @deprecated * * @param string $file_path Path to the file. * @return bool True on success, false on failure. */ function imagify_chmod_file( $file_path ) { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'imagify_get_filesystem()->chmod_file( $file_path )' ); return imagify_get_filesystem()->chmod_file( $file_path ); } /** * Get a file mime type. * * @since 1.6.9 * @since 1.7 Doesn't use exif_imagetype() nor getimagesize() anymore. * @since 1.7.1 Deprecated. * @author Grégory Viguier * @deprecated * * @param string $file_path A file path (prefered) or a filename. * @return string|bool A mime type. False on failure: the test is limited to mime types supported by Imagify. */ function imagify_get_mime_type_from_file( $file_path ) { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'imagify_get_filesystem()->get_mime_type( $file_path )' ); return imagify_get_filesystem()->get_mime_type( $file_path ); } /** * Get a file modification date, formated as "mysql". Fallback to current date. * * @since 1.7 * @since 1.7.1 Deprecated. * @author Grégory Viguier * @deprecated * * @param string $file_path The file path. * @return string The date. */ function imagify_get_file_date( $file_path ) { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'imagify_get_filesystem()->get_date( $file_path )' ); return imagify_get_filesystem()->get_date( $file_path ); } /** * Get a clean value of ABSPATH that can be used in string replacements. * * @since 1.6.8 * @since 1.7.1 Deprecated. * @author Grégory Viguier * @deprecated * * @return string The path to WordPress' root folder. */ function imagify_get_abspath() { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'imagify_get_filesystem()->get_abspath()' ); return imagify_get_filesystem()->get_abspath(); } /** * Make an absolute path relative to WordPress' root folder. * Also works for files from registered symlinked plugins. * * @since 1.6.10 * @since 1.7 The parameter $base is added. * @since 1.7.1 Deprecated. * @author Grégory Viguier * @deprecated * * @param string $file_path An absolute path. * @param string $base A base path to use instead of ABSPATH. * @return string|bool A relative path. Can return the absolute path or false in case of a failure. */ function imagify_make_file_path_relative( $file_path, $base = '' ) { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'imagify_get_filesystem()->make_path_relative( $file_path, $base )' ); return imagify_get_filesystem()->make_path_relative( $file_path, $base ); } /** * Tell if a file is symlinked. * * @since 1.7 * @since 1.7.1 Deprecated. * @author Grégory Viguier * @deprecated * * @param string $file_path An absolute path. * @return bool */ function imagify_file_is_symlinked( $file_path ) { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'imagify_get_filesystem()->is_symlinked( $file_path )' ); return imagify_get_filesystem()->is_symlinked( $file_path ); } /** * Determine if the Imagify API key is valid. * * @since 1.0 * @since 1.7.1 Deprecated. * @deprecated * * @return bool True if the API key is valid. */ function imagify_valid_key() { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'Imagify_Requirements::is_api_key_valid()' ); return Imagify_Requirements::is_api_key_valid(); } /** * Check if external requests are blocked for Imagify. * * @since 1.0 * @since 1.7.1 Deprecated. * @deprecated * * @return bool True if Imagify API can't be called. */ function is_imagify_blocked() { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'Imagify_Requirements::is_imagify_blocked()' ); return Imagify_Requirements::is_imagify_blocked(); } /** * Determine if the Imagify API is available by checking the API version. * * @since 1.0 * @since 1.7.1 Deprecated. * @deprecated * * @return bool True if the Imagify API is available. */ function is_imagify_servers_up() { _deprecated_function( __FUNCTION__ . '()', '1.7.1', 'Imagify_Requirements::is_api_up()' ); return Imagify_Requirements::is_api_up(); } /** * Auto-optimize when a new attachment is generated. * * @since 1.0 * @since 1.5 Async job. * @since 1.8.4 Deprecated * @see Imagify_Admin_Ajax_Post_Deprecated::imagify_async_optimize_upload_new_media_callback() * @deprecated * * @param array $metadata An array of attachment meta data. * @param int $attachment_id Current attachment ID. * @return array */ function _imagify_optimize_attachment( $metadata, $attachment_id ) { _deprecated_function( __FUNCTION__ . '()', '1.8.4', 'Imagify_Auto_Optimization::get_instance()->store_upload_ids()' ); if ( ! Imagify_Requirements::is_api_key_valid() || ! get_imagify_option( 'auto_optimize' ) ) { return $metadata; } /** * Allow to prevent automatic optimization for a specific attachment. * * @since 1.6.12 * @author Grégory Viguier * * @param bool $optimize True to optimize, false otherwise. * @param int $attachment_id Attachment ID. * @param array $metadata An array of attachment meta data. */ $optimize = apply_filters( 'imagify_auto_optimize_attachment', true, $attachment_id, $metadata ); if ( ! $optimize ) { return $metadata; } $context = 'wp'; $action = 'imagify_async_optimize_upload_new_media'; $_ajax_nonce = wp_create_nonce( 'new_media-' . $attachment_id ); imagify_do_async_job( compact( 'action', '_ajax_nonce', 'metadata', 'attachment_id', 'context' ) ); return $metadata; } /** * Optimize an attachment after being resized. * * @since 1.3.6 * @since 1.4 Async job. * @since 1.8.4 Deprecated * @deprecated */ function _imagify_optimize_save_image_editor_file() { _deprecated_function( __FUNCTION__ . '()', '1.8.4' ); if ( ! isset( $_POST['action'], $_POST['do'], $_POST['postid'] ) || 'image-editor' !== $_POST['action'] || 'open' === $_POST['do'] ) { // WPCS: CSRF ok. return; } $attachment_id = absint( $_POST['postid'] ); if ( ! $attachment_id || ! Imagify_Requirements::is_api_key_valid() ) { return; } check_ajax_referer( 'image_editor-' . $attachment_id ); $attachment = get_imagify_attachment( 'wp', $attachment_id, 'save_image_editor_file' ); if ( ! $attachment->get_data() ) { return; } $body = $_POST; $body['action'] = 'imagify_async_optimize_save_image_editor_file'; imagify_do_async_job( $body ); } /** * Display an admin notice informing that the current WP version is lower than the required one. * * @since 1.8.1 * @since 1.9 Deprecated * @author Grégory Viguier * @deprecated */ function imagify_wp_version_notice() { global $wp_version; _deprecated_function( __FUNCTION__ . '()', '1.9', 'Imagify_Requirements_Check->print_notice()' ); if ( is_multisite() ) { if ( ! function_exists( 'is_plugin_active_for_network' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $is_active = is_plugin_active_for_network( plugin_basename( IMAGIFY_FILE ) ); $capacity = $is_active ? 'manage_network_options' : 'manage_options'; } else { $capacity = 'manage_options'; } if ( ! current_user_can( $capacity ) ) { return; } echo '<div class="error notice"><p>'; echo '<strong>' . __( 'Notice:', 'imagify' ) . '</strong> '; /* translators: 1 is this plugin name, 2 is the required WP version, 3 is the current WP version. */ printf( __( '%1$s requires WordPress %2$s minimum, your website is actually running version %3$s.', 'imagify' ), '<strong>Imagify</strong>', '<code>' . IMAGIFY_WP_MIN . '</code>', '<code>' . $wp_version . '</code>' ); echo '</p></div>'; } /** * Delete the backup file when an attachement is deleted. * * @since 1.0 * @since 1.9 Deprecated * @deprecated * * @param int $post_id Attachment ID. */ function _imagify_delete_backup_file( $post_id ) { _deprecated_function( __FUNCTION__ . '()', '1.9', 'imagify_cleanup_after_media_deletion( $post_id )' ); get_imagify_attachment( 'wp', $post_id, 'delete_attachment' )->delete_backup(); } /** * Classes autoloader. * * @since 1.6.12 * @since 1.9 Deprecated * @author Grégory Viguier * @deprecated * * @param string $class Name of the class to include. */ function imagify_autoload( $class ) { static $strtolower; _deprecated_function( __FUNCTION__ . '()', '1.9' ); if ( ! isset( $strtolower ) ) { $strtolower = function_exists( 'mb_strtolower' ) ? 'mb_strtolower' : 'strtolower'; } // Generic classes. $classes = array( 'Imagify_Abstract_Attachment' => 1, 'Imagify_Abstract_Background_Process' => 1, 'Imagify_Abstract_Cron' => 1, 'Imagify_Abstract_DB' => 1, 'Imagify_Abstract_Options' => 1, 'Imagify_Admin_Ajax_Post' => 1, 'Imagify_Assets' => 1, 'Imagify_Attachment' => 1, 'Imagify_Auto_Optimization' => 1, 'Imagify_Cron_Library_Size' => 1, 'Imagify_Cron_Rating' => 1, 'Imagify_Cron_Sync_Files' => 1, 'Imagify_Custom_Folders' => 1, 'Imagify_Data' => 1, 'Imagify_DB' => 1, 'Imagify_File_Attachment' => 1, 'Imagify_Files_DB' => 1, 'Imagify_Files_Iterator' => 1, 'Imagify_Files_List_Table' => 1, 'Imagify_Files_Recursive_Iterator' => 1, 'Imagify_Files_Scan' => 1, 'Imagify_Files_Stats' => 1, 'Imagify_Filesystem' => 1, 'Imagify_Folders_DB' => 1, 'Imagify_Notices' => 1, 'Imagify_Options' => 1, 'Imagify_Requirements' => 1, 'Imagify_Settings' => 1, 'Imagify_User' => 1, 'Imagify_Views' => 1, 'Imagify' => 1, ); if ( isset( $classes[ $class ] ) ) { $class = str_replace( '_', '-', call_user_func( $strtolower, $class ) ); include IMAGIFY_PATH . 'inc/classes/class-' . $class . '.php'; return; } // Third party classes. $classes = array( 'Imagify_AS3CF_Attachment' => 'amazon-s3-and-cloudfront', 'Imagify_AS3CF' => 'amazon-s3-and-cloudfront', 'Imagify_Enable_Media_Replace' => 'enable-media-replace', 'Imagify_Formidable_Pro' => 'formidable-pro', 'Imagify_NGG_Attachment' => 'nextgen-gallery', 'Imagify_NGG_DB' => 'nextgen-gallery', 'Imagify_NGG_Dynamic_Thumbnails_Background_Process' => 'nextgen-gallery', 'Imagify_NGG_Storage' => 'nextgen-gallery', 'Imagify_NGG' => 'nextgen-gallery', 'Imagify_Regenerate_Thumbnails' => 'regenerate-thumbnails', 'Imagify_WP_Retina_2x' => 'wp-retina-2x', 'Imagify_WP_Retina_2x_Core' => 'wp-retina-2x', 'Imagify_WP_Time_Capsule' => 'wp-time-capsule', ); if ( isset( $classes[ $class ] ) ) { $folder = $classes[ $class ]; $class = str_replace( '_', '-', call_user_func( $strtolower, $class ) ); include IMAGIFY_PATH . 'inc/3rd-party/' . $folder . '/inc/classes/class-' . $class . '.php'; } } /** * Tell if the attachment has the required WP metadata. * * @since 1.6.12 * @since 1.7 Also checks that the '_wp_attached_file' meta is valid (not a URL or anything funny). * @since 1.9 Deprecated * @author Grégory Viguier * @deprecated * * @param int $attachment_id The attachment ID. * @return bool */ function imagify_attachment_has_required_metadata( $attachment_id ) { _deprecated_function( __FUNCTION__ . '()', '1.9', '( new Imagify\\Media\\WP( $attachment_id ) )->has_required_media_data() )' ); $file = get_post_meta( $attachment_id, '_wp_attached_file', true ); if ( ! $file || preg_match( '@://@', $file ) || preg_match( '@^.:\\\@', $file ) ) { return false; } return (bool) wp_get_attachment_metadata( $attachment_id, true ); } /** * Get the default Bulk Optimization buffer size. * * @since 1.5.10 * @since 1.7 Added $sizes parameter. * @since 1.9 Deprecated * @author Jonathan Buttigieg * @deprecated * * @param int $sizes Number of image sizes per item (attachment). * @return int The buffer size. */ function get_imagify_bulk_buffer_size( $sizes = false ) { _deprecated_function( __FUNCTION__ . '()', '1.9' ); if ( ! $sizes ) { $sizes = count( get_imagify_thumbnail_sizes() ); } switch ( true ) { case ( $sizes >= 10 ): return 1; case ( $sizes >= 8 ): return 2; case ( $sizes >= 6 ): return 3; default: return 4; } } /** * Get the Imagify attachment class name depending to a context. * * @since 1.5 * @since 1.6.6 $attachment_id and $identifier have been added. * @since 1.9 Deprecated * @author Jonathan Buttigieg * @deprecated * * @param string $context The context to determine the class name. * @param int $attachment_id The attachment ID. * @param string $identifier An identifier. * @return string The Imagify attachment class name. */ function get_imagify_attachment_class_name( $context, $attachment_id, $identifier ) { _deprecated_function( __FUNCTION__ . '()', '1.9', 'imagify_get_optimization_process_class_name( $context )' ); $context = $context ? $context : 'wp'; if ( 'wp' !== $context && 'wp' === strtolower( $context ) ) { $context = 'wp'; } /** * Filter the context used for the optimization. * * @since 1.6.6 * @author Grégory Viguier * * @param string $context The context. * @param int $attachment_id The attachment ID. * @param string $identifier An identifier. */ $context = apply_filters( 'imagify_optimize_attachment_context', $context, $attachment_id, $identifier ); return 'Imagify_' . ( 'wp' !== $context ? $context . '_' : '' ) . 'Attachment'; } /** * Get the Imagify attachment instance depending to a context. * * @since 1.6.13 * @since 1.9 Deprecated * @author Grégory Viguier * @deprecated * * @param string $context The context to determine the class name. * @param int $attachment_id The attachment ID. * @param string $identifier An identifier. * @return object The Imagify attachment instance. */ function get_imagify_attachment( $context, $attachment_id, $identifier ) { _deprecated_function( __FUNCTION__ . '()', '1.9', 'imagify_get_optimization_process( $media_id, $context )' ); $class_name = get_imagify_attachment_class_name( $context, $attachment_id, $identifier ); return new $class_name( $attachment_id ); } /** * Optimize a file with Imagify. * * @since 1.0 * @since 1.9 Deprecated * @deprecated * * @param string $file_path Absolute path to the file. * @param array $args { * Optional. An array of arguments. * * @type bool $backup Force a backup of the original file. * @type int $optimization_level The optimization level (2=ultra, 1=aggressive, 0=normal). * @type bool $keep_exif To keep exif data or not. * } * @return array|WP_Error Optimized image data. A WP_Error object on error. */ function do_imagify( $file_path, $args = array() ) { _deprecated_function( __FUNCTION__ . '()', '1.9', '(new Imagify\\Optimization\\File( $file_path ))->optimize( $args )' ); $args = array_merge( array( 'backup' => get_imagify_option( 'backup' ), 'optimization_level' => get_imagify_option( 'optimization_level' ), 'keep_exif' => get_imagify_option( 'exif' ), 'context' => 'wp', 'resized' => false, 'original_size' => 0, 'backup_path' => null, ), $args ); /** * Filter the attachment path. * * @since 1.2 * * @param string $file_path The attachment path. */ $file_path = apply_filters( 'imagify_file_path', $file_path ); // Check that file path isn't empty. if ( ! $file_path ) { return new WP_Error( 'empty_path', __( 'File path is empty.', 'imagify' ) ); } // Check if curl is available. if ( ! Imagify_Requirements::supports_curl() ) { return new WP_Error( 'curl', __( 'cURL is not available on the server.', 'imagify' ) ); } $filesystem = imagify_get_filesystem(); // Check if imageMagick or GD is available. if ( $filesystem->is_image( $file_path ) && ! Imagify_Requirements::supports_image_editor() ) { return new WP_Error( 'image_editor', sprintf( /* translators: %s is a "More info?" link. */ __( 'No php extensions are available to edit images on the server. ImageMagick or GD is required. %s', 'imagify' ), '<a href="' . esc_url( imagify_get_external_url( 'documentation-imagick-gd' ) ) . '" target="_blank">' . __( 'More info?', 'imagify' ) . '</a>' ) ); } // Check if external HTTP requests are blocked. if ( Imagify_Requirements::is_imagify_blocked() ) { return new WP_Error( 'http_block_external', __( 'External HTTP requests are blocked.', 'imagify' ) ); } // Check if the Imagify servers & the API are accessible. if ( ! Imagify_Requirements::is_api_up() ) { return new WP_Error( 'api_server_down', __( 'Sorry, our servers are temporarily unavailable. Please, try again in a couple of minutes.', 'imagify' ) ); } // Check that the file exists. if ( ! $filesystem->is_writable( $file_path ) || ! $filesystem->is_file( $file_path ) ) { /* translators: %s is a file path. */ return new WP_Error( 'file_not_found', sprintf( __( 'Could not find %s.', 'imagify' ), $filesystem->make_path_relative( $file_path ) ) ); } // Check that the file directory is writable. if ( ! $filesystem->is_writable( $filesystem->dir_path( $file_path ) ) ) { /* translators: %s is a file path. */ return new WP_Error( 'not_writable', sprintf( __( '%s is not writable.', 'imagify' ), $filesystem->make_path_relative( $filesystem->dir_path( $file_path ) ) ) ); } /** * Fires before to optimize the Image with Imagify. * * @since 1.0 * * @param string $file_path Absolute path to the image file. * @param bool $backup Force a backup of the original file. */ do_action( 'before_do_imagify', $file_path, $args['backup'] ); // Create a backup file before sending to optimization (to make sure we can backup the file). $do_backup = $args['backup'] && ! $args['resized']; if ( $do_backup ) { $backup_result = imagify_backup_file( $file_path, $args['backup_path'] ); if ( is_wp_error( $backup_result ) ) { // Stop the process if we can't backup the file. return $backup_result; } } // Send image for optimization and fetch the response. $response = upload_imagify_image( array( 'image' => $file_path, 'data' => wp_json_encode( array( 'aggressive' => ( 1 === (int) $args['optimization_level'] ), 'ultra' => ( 2 === (int) $args['optimization_level'] ), 'keep_exif' => $args['keep_exif'], 'context' => $args['context'], 'original_size' => $args['original_size'], ) ), ) ); // Check status code. if ( is_wp_error( $response ) ) { return new WP_Error( 'api_error', $response->get_error_message() ); } if ( ! function_exists( 'download_url' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } $temp_file = download_url( $response->image ); if ( is_wp_error( $temp_file ) ) { return new WP_Error( 'temp_file_not_found', $temp_file->get_error_message() ); } $filesystem->move( $temp_file, $file_path, true ); /** * Fires after to optimize the Image with Imagify. * * @since 1.0 * * @param string $file_path Absolute path to the image file. * @param bool $backup Force a backup of the original file. */ do_action( 'after_do_imagify', $file_path, $args['backup'] ); return $response; } /** * Backup a file. * * @since 1.6.8 * @since 1.9 Deprecated * @author Grégory Viguier * @deprecated * * @param string $file_path The file path. * @param string $backup_path The backup path. This is useful for NGG for example, who doesn't store the backups in our backup folder. * @return bool|object True on success. False if the backup option is not enabled. A WP_Error object on failure. */ function imagify_backup_file( $file_path, $backup_path = null ) { _deprecated_function( __FUNCTION__ . '()', '1.9', '(new Imagify\\Optimization\\File( $file_path ))->backup( $backup_path )' ); if ( ! get_imagify_option( 'backup' ) ) { return false; } // Make sure the source path is not empty. if ( ! $file_path ) { return new WP_Error( 'empty_path', __( 'The file path is empty.', 'imagify' ) ); } $filesystem = imagify_get_filesystem(); // Make sure the filesystem has no errors. if ( ! empty( $filesystem->errors->errors ) ) { return new WP_Error( 'filesystem_error', __( 'Filesystem error.', 'imagify' ), $filesystem->errors ); } // Make sure the source file exists. if ( ! $filesystem->exists( $file_path ) ) { return new WP_Error( 'source_doesnt_exist', __( 'The file to backup does not exist.', 'imagify' ), array( 'file_path' => $filesystem->make_path_relative( $file_path ), ) ); } if ( ! isset( $backup_path ) ) { // Make sure the backup directory is writable. if ( ! Imagify_Requirements::attachments_backup_dir_is_writable() ) { return new WP_Error( 'backup_dir_not_writable', __( 'The backup directory is not writable.', 'imagify' ) ); } $backup_path = get_imagify_attachment_backup_path( $file_path ); } // Make sure the uploads directory has no errors. if ( ! $backup_path ) { return new WP_Error( 'wp_upload_error', __( 'Error while retrieving the uploads directory path.', 'imagify' ) ); } // Create sub-directories. $filesystem->make_dir( $filesystem->dir_path( $backup_path ) ); /** * Allow to overwrite the backup file if it already exists. * * @since 1.6.9 * @author Grégory Viguier * * @param bool $overwrite Whether to overwrite the backup file. * @param string $file_path The file path. * @param string $backup_path The backup path. */ $overwrite = apply_filters( 'imagify_backup_overwrite_backup', false, $file_path, $backup_path ); // Copy the file. $filesystem->copy( $file_path, $backup_path, $overwrite, FS_CHMOD_FILE ); // Make sure the backup copy exists. if ( ! $filesystem->exists( $backup_path ) ) { return new WP_Error( 'backup_doesnt_exist', __( 'The file could not be saved.', 'imagify' ), array( 'file_path' => $filesystem->make_path_relative( $file_path ), 'backup_path' => $filesystem->make_path_relative( $backup_path ), ) ); } return true; } if ( is_admin() ) : /** * Fix the capability for our capacity filter hook * * @since 1.0 * @since 1.7 Deprecated. * @author Jonathan * @deprecated */ function _imagify_correct_capability_for_options_page() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->get_capability()' ); return Imagify_Settings::get_instance()->get_capability(); } /** * Tell to WordPress to be confident with our setting, we are clean! * * @since 1.0 * @since 1.7 Deprecated. * @author Jonathan * @deprecated */ function _imagify_register_setting() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->register()' ); Imagify_Settings::get_instance()->register(); } /** * Filter specific options before its value is (maybe) serialized and updated. * * @since 1.0 * @since 1.7 Deprecated. * @author Jonathan * @deprecated * * @param mixed $value The new option value. * @param mixed $old_value The old option value. * @return array The new option value. */ function _imagify_pre_update_option( $value, $old_value ) { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->sanitize_and_validate( $value )' ); return Imagify_Settings::get_instance()->sanitize_and_validate( $value ); } /** * If the user clicked the "Save & Go to Bulk Optimizer" button, set a redirection to the bulk optimizer. * We use this hook because it can be triggered even if the option value hasn't changed. * * @since 1.6.8 * @since 1.7 Deprecated. * @author Grégory Viguier * @deprecated * * @param mixed $value The new, unserialized option value. * @param mixed $old_value The old option value. * @return mixed The option value. */ function _imagify_maybe_set_redirection_before_save_options( $value, $old_value ) { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->maybe_set_redirection( $value, $old_value )' ); return Imagify_Settings::get_instance()->maybe_set_redirection( $value, $old_value ); } /** * Used to launch some actions after saving the network options. * * @since 1.6.5 * @since 1.7 Deprecated. * @author Grégory Viguier * @deprecated * * @param string $option Name of the network option. * @param mixed $value Current value of the network option. * @param mixed $old_value Old value of the network option. */ function _imagify_after_save_network_options( $option, $value, $old_value ) { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->after_save_network_options( $option, $value, $old_value )' ); Imagify_Settings::get_instance()->after_save_network_options( $option, $value, $old_value ); } /** * Used to launch some actions after saving the options. * * @since 1.0 * @since 1.5 Used to redirect user to Bulk Optimizer (if requested). * @since 1.6.8 Not used to redirect user to Bulk Optimizer anymore: see _imagify_maybe_set_redirection_before_save_options(). * @since 1.7 Deprecated. * @author Jonathan * @deprecated * * @param mixed $old_value The old option value. * @param mixed $value The new option value. */ function _imagify_after_save_options( $old_value, $value ) { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->after_save_options( $old_value, $value )' ); Imagify_Settings::get_instance()->after_save_options( $old_value, $value ); } /** * `options.php` do not handle site options. Let's use `admin-post.php` for multisite installations. * * @since 1.0 * @since 1.7 Deprecated. * @deprecated */ function _imagify_update_site_option_on_network() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Settings::get_instance()->update_site_option_on_network()' ); Imagify_Settings::get_instance()->update_site_option_on_network(); } /** * Display the plan chooser section. * * @since 1.6 * @since 1.7 Deprecated. * @author Geoffrey * @deprecated * * @return string HTML. */ function get_imagify_new_to_imagify() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'imagify_get_template( \'part-new-to-imagify\' )' ); return imagify_get_template( 'part-new-to-imagify' ); } /** * Get the payment modal HTML. * * @since 1.6 * @since 1.6.3 Include discount banners. * @since 1.7 Deprecated. * @author Geoffrey * @deprecated */ function imagify_payment_modal() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->print_template( \'modal-payment\' )' ); Imagify_Views::get_instance()->print_template( 'modal-payment' ); } /** * Print the discount banner used inside Payment Modal. * * @since 1.6.3 * @since 1.7 Deprecated. * @author Geoffrey Crofte * @deprecated */ function imagify_print_discount_banner() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->print_template( \'part-discount-banner\' )' ); Imagify_Views::get_instance()->print_template( 'part-discount-banner' ); } /** * Return the formatted price present in pricing tables. * * @since 1.6 * @since 1.7 Deprecated. * @author Geoffrey * @deprecated * * @param float $value The price value. * @return string The markuped price. */ function get_imagify_price_table_format( $value ) { _deprecated_function( __FUNCTION__ . '()', '1.7' ); $v = explode( '.', (string) $value ); return '<span class="imagify-price-big">' . $v[0] . '</span> <span class="imagify-price-mini">.' . ( strlen( $v[1] ) === 1 ? $v[1] . '0' : $v[1] ) . '</span>'; } /** * Add submenu in menu "Settings". * * @since 1.0 * @since 1.7 Deprecated. * @deprecated */ function _imagify_settings_menu() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->add_network_menus()' ); Imagify_Views::get_instance()->add_network_menus(); } /** * Add submenu in menu "Media". * * @since 1.0 * @since 1.7 Deprecated. * @deprecated */ function _imagify_bulk_optimization_menu() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->add_site_menus()' ); Imagify_Views::get_instance()->add_site_menus(); } /** * The main settings page. * * @since 1.0 * @since 1.7 Deprecated. * @deprecated */ function _imagify_display_options_page() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->display_settings_page()' ); Imagify_Views::get_instance()->display_settings_page(); } /** * The bulk optimization page. * * @since 1.0 * @since 1.7 Deprecated. * @deprecated */ function _imagify_display_bulk_page() { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->display_bulk_page()' ); Imagify_Views::get_instance()->display_bulk_page(); } /** * Add link to the plugin configuration pages. * * @since 1.0 * @since 1.7 Deprecated. * * @param array $actions An array of action links. * @return array */ function _imagify_plugin_action_links( $actions ) { _deprecated_function( __FUNCTION__ . '()', '1.7', 'Imagify_Views::get_instance()->plugin_action_links( $actions )' ); return Imagify_Views::get_instance()->plugin_action_links( $actions ); } /** * Get stats data for a specific folder type. * * @since 1.7 * @since 1.9 Deprecated * @author Grégory Viguier * @deprecated * * @param string $context A context. * @return array */ function imagify_get_folder_type_data( $context ) { _deprecated_function( __FUNCTION__ . '()', '1.9', 'Imagify_Admin_Ajax_Post::get_instance()->get_bulk_instance( $context )->get_context_data()' ); /** * Get the data. */ switch ( $context ) { case 'wp': $total_saving_data = imagify_count_saving_data(); $data = array( 'images-optimized' => imagify_count_optimized_attachments(), 'errors' => imagify_count_error_attachments(), 'optimized' => $total_saving_data['optimized_size'], 'original' => $total_saving_data['original_size'], 'errors_url' => get_imagify_admin_url( 'folder-errors', $context ), ); break; case 'custom-folders': $data = array( 'images-optimized' => Imagify_Files_Stats::count_optimized_files(), 'errors' => Imagify_Files_Stats::count_error_files(), 'optimized' => Imagify_Files_Stats::get_optimized_size(), 'original' => Imagify_Files_Stats::get_original_size(), 'errors_url' => get_imagify_admin_url( 'folder-errors', $context ), ); break; default: /** * Provide custom folder type data. * * @since 1.7 * @author Grégory Viguier * * @param array $data An array with keys corresponding to cell classes, and values formatted with HTML. * @param string $context A context. */ $data = apply_filters( 'imagify_get_folder_type_data', [], $context ); if ( ! $data || ! is_array( $data ) ) { return []; } } /** * Format the data. */ /* translators: %s is a formatted number, dont use %d. */ $data['images-optimized'] = sprintf( _n( '%s Media File Optimized', '%s Media Files Optimized', $data['images-optimized'], 'imagify' ), '<span>' . number_format_i18n( $data['images-optimized'] ) . '</span>' ); if ( $data['errors'] ) { /* translators: %s is a formatted number, dont use %d. */ $data['errors'] = sprintf( _n( '%s Error', '%s Errors', $data['errors'], 'imagify' ), '<span>' . number_format_i18n( $data['errors'] ) . '</span>' ); $data['errors'] .= ' <a href="' . esc_url( $data['errors_url'] ) . '">' . __( 'View Errors', 'imagify' ) . '</a>'; } else { $data['errors'] = ''; } if ( $data['optimized'] ) { $data['optimized'] = '<span class="imagify-cell-label">' . __( 'Optimized Filesize', 'imagify' ) . '</span> ' . imagify_size_format( $data['optimized'], 2 ); } else { $data['optimized'] = ''; } if ( $data['original'] ) { $data['original'] = '<span class="imagify-cell-label">' . __( 'Original Filesize', 'imagify' ) . '</span> ' . imagify_size_format( $data['original'], 2 ); } else { $data['original'] = ''; } unset( $data['errors_url'] ); return $data; } /** * Tell if the current user has the required ability to operate Imagify. * * @since 1.6.11 * @since 1.9 * @see imagify_get_capacity() * @author Grégory Viguier * @deprecated * * @param string $describer Capacity describer. See imagify_get_capacity() for possible values. Can also be a "real" user capacity. * @param int $post_id A post ID. * @return bool */ function imagify_current_user_can( $describer = 'manage', $post_id = null ) { static $can_upload; _deprecated_function( __FUNCTION__ . '()', '1.9', 'imagify_get_context( $context )->current_user_can( $describer, $media_id )' ); $post_id = $post_id ? $post_id : null; $capacity = imagify_get_capacity( $describer ); $user_can = false; if ( 'manage' !== $describer && 'bulk-optimize' !== $describer && 'optimize-file' !== $describer ) { // Describers that are not 'manage', 'bulk-optimize', and 'optimize-file' need an additional test for 'upload_files'. if ( ! isset( $can_upload ) ) { $can_upload = current_user_can( 'upload_files' ); } if ( $can_upload ) { if ( 'upload_files' === $capacity ) { // We already know it's true. $user_can = true; } else { $user_can = current_user_can( $capacity, $post_id ); } } } else { $user_can = current_user_can( $capacity ); } /** * Filter the current user ability to operate Imagify. * * @since 1.6.11 * * @param bool $user_can Tell if the current user has the required ability to operate Imagify. * @param string $capacity The user capacity. * @param string $describer Capacity describer. See imagify_get_capacity() for possible values. Can also be a "real" user capacity. * @param int $post_id A post ID (a gallery ID for NGG). */ return apply_filters( 'imagify_current_user_can', $user_can, $capacity, $describer, $post_id ); } /** * Get user capacity to operate Imagify. * * @since 1.6.5 * @since 1.6.11 Uses a string as describer for the first argument. * @since 1.9 Deprecated. * @author Grégory Viguier * @deprecated * * @param string $describer Capacity describer. Possible values are 'manage', 'bulk-optimize', 'manual-optimize', 'auto-optimize', and 'optimize-file'. * @return string */ function imagify_get_capacity( $describer = 'manage' ) { static $edit_attachment_cap; _deprecated_function( __FUNCTION__ . '()', '1.9', 'imagify_get_context( $context )->get_capacity( $describer )' ); // Back compat. if ( ! is_string( $describer ) ) { if ( $describer || ! is_multisite() ) { $describer = 'bulk-optimize'; } else { $describer = 'manage'; } } switch ( $describer ) { case 'manage': $capacity = imagify_is_active_for_network() ? 'manage_network_options' : 'manage_options'; break; case 'optimize-file': $capacity = is_multisite() ? 'manage_network_options' : 'manage_options'; break; case 'bulk-optimize': $capacity = 'manage_options'; break; case 'optimize': case 'restore': // This is a generic capacity: don't use it unless you have no other choices! if ( ! isset( $edit_attachment_cap ) ) { $edit_attachment_cap = get_post_type_object( 'attachment' ); $edit_attachment_cap = $edit_attachment_cap ? $edit_attachment_cap->cap->edit_posts : 'edit_posts'; } $capacity = $edit_attachment_cap; break; case 'manual-optimize': case 'manual-restore': // Must be used with an Attachment ID. $capacity = 'edit_post'; break; case 'auto-optimize': $capacity = 'upload_files'; break; default: $capacity = $describer; } /** * Filter the user capacity used to operate Imagify. * * @since 1.0 * @since 1.6.5 Added $force_mono parameter. * @since 1.6.11 Replaced $force_mono by $describer. * * @param string $capacity The user capacity. * @param string $describer Capacity describer. Possible values are 'manage', 'bulk-optimize', 'manual-optimize', 'auto-optimize', and 'optimize-file'. */ return apply_filters( 'imagify_capacity', $capacity, $describer ); } /** * Check for user capacity. * * @since 1.6.10 * @since 1.6.11 Uses a capacity describer instead of a capacity itself. * @since 1.9 Deprecated. * @see imagify_get_capacity() * @author Grégory Viguier * @deprecated * * @param string $describer Capacity describer. See imagify_get_capacity() for possible values. Can also be a "real" user capacity. * @param int $post_id A post ID. */ function imagify_check_user_capacity( $describer = 'manage', $post_id = null ) { _deprecated_function( __FUNCTION__ . '()', '1.9' ); if ( ! imagify_current_user_can( $describer, $post_id ) ) { imagify_die(); } } /** * Update the Heartbeat API settings. * * @since 1.4.5 * @since 1.9.3 Deprecated. * @deprecated * * @param array $settings Heartbeat API settings. * @return array */ function _imagify_heartbeat_settings( $settings ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3' ); $settings['interval'] = 30; return $settings; } /** * Prepare the data that goes back with the Imagifybeat API. * * @since 1.4.5 * @since 1.9.3 Deprecated. * @deprecated * * @param array $response The Imagifybeat response. * @param array $data The $_POST data sent. * @return array */ function _imagify_heartbeat_received( $response, $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->add_bulk_optimization_stats_to_response()' ); $heartbeat_id = 'imagify_bulk_data'; if ( empty( $data[ $heartbeat_id ] ) ) { return $response; } $folder_types = array_flip( array_filter( $data[ $heartbeat_id ] ) ); $response[ $heartbeat_id ] = imagify_get_bulk_stats( $folder_types, array( 'fullset' => true, ) ); return $response; } /** * Prepare the data that goes back with the Imagifybeat API. * * @since 1.7.1 * @since 1.9.3 Deprecated. * @author Grégory Viguier * @deprecated * * @param array $response The Imagifybeat response. * @param array $data The $_POST data sent. * @return array */ function imagify_heartbeat_requirements_received( $response, $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->add_requirements_to_response()' ); $heartbeat_id = 'imagify_bulk_requirements'; if ( empty( $data[ $heartbeat_id ] ) ) { return $response; } $response[ $heartbeat_id ] = array( 'curl_missing' => ! Imagify_Requirements::supports_curl(), 'editor_missing' => ! Imagify_Requirements::supports_image_editor(), 'external_http_blocked' => Imagify_Requirements::is_imagify_blocked(), 'api_down' => Imagify_Requirements::is_imagify_blocked() || ! Imagify_Requirements::is_api_up(), 'key_is_valid' => ! Imagify_Requirements::is_imagify_blocked() && Imagify_Requirements::is_api_up() && Imagify_Requirements::is_api_key_valid(), 'is_over_quota' => ! Imagify_Requirements::is_imagify_blocked() && Imagify_Requirements::is_api_up() && Imagify_Requirements::is_api_key_valid() && Imagify_Requirements::is_over_quota(), ); return $response; } /** * Look for media where status has changed, compared to what Imagifybeat sends. * This is used in the bulk optimization page. * * @since 1.9 * @since 1.9.3 Deprecated. * @author Grégory Viguier * @deprecated * * @param array $response The Imagifybeat response. * @param array $data The $_POST data sent. * @return array */ function imagify_heartbeat_bulk_optimization_status_received( $response, $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->add_bulk_optimization_status_to_response()' ); $heartbeat_id = 'imagify_bulk_queue'; if ( empty( $data[ $heartbeat_id ] ) || ! is_array( $data[ $heartbeat_id ] ) ) { return $response; } $statuses = []; foreach ( $data[ $heartbeat_id ] as $item ) { if ( empty( $statuses[ $item['context'] ] ) ) { $statuses[ $item['context'] ] = []; } $statuses[ $item['context'] ][ '_' . $item['mediaID'] ] = 1; } $results = imagify_get_modified_optimization_statusses( $statuses ); if ( ! $results ) { return $response; } $response[ $heartbeat_id ] = []; // Sanitize received data and grab some other info. foreach ( $results as $context_id => $media_atts ) { $process = imagify_get_optimization_process( $media_atts['media_id'], $media_atts['context'] ); $optim_data = $process->get_data(); if ( $optim_data->is_optimized() ) { // Successfully optimized. $full_size_data = $optim_data->get_size_data(); $response[ $heartbeat_id ][] = [ 'mediaID' => $media_atts['media_id'], 'context' => $media_atts['context'], 'success' => true, 'status' => 'optimized', // Raw data. 'originalOverallSize' => $full_size_data['original_size'], 'newOverallSize' => $full_size_data['optimized_size'], 'overallSaving' => $full_size_data['original_size'] - $full_size_data['optimized_size'], 'thumbnailsCount' => $optim_data->get_optimized_sizes_count(), // Human readable data. 'originalSizeHuman' => imagify_size_format( $full_size_data['original_size'], 2 ), 'newSizeHuman' => imagify_size_format( $full_size_data['optimized_size'], 2 ), 'overallSavingHuman' => imagify_size_format( $full_size_data['original_size'] - $full_size_data['optimized_size'], 2 ), 'originalOverallSizeHuman' => imagify_size_format( $full_size_data['original_size'], 2 ), 'percentHuman' => $full_size_data['percent'] . '%', ]; } elseif ( $optim_data->is_already_optimized() ) { // Already optimized. $response[ $heartbeat_id ][] = [ 'mediaID' => $media_atts['media_id'], 'context' => $media_atts['context'], 'success' => true, 'status' => 'already-optimized', ]; } else { // Error. $full_size_data = $optim_data->get_size_data(); $message = ! empty( $full_size_data['error'] ) ? $full_size_data['error'] : ''; $status = 'error'; if ( 'You\'ve consumed all your data. You have to upgrade your account to continue' === $message ) { $status = 'over-quota'; } $response[ $heartbeat_id ][] = [ 'mediaID' => $media_atts['media_id'], 'context' => $media_atts['context'], 'success' => false, 'status' => $status, 'error' => imagify_translate_api_message( $message ), ]; } } return $response; } /** * Look for media where status has changed, compared to what Imagifybeat sends. * This is used in the settings page. * * @since 1.9 * @since 1.9.3 Deprecated. * @author Grégory Viguier * @deprecated * * @param array $response The Imagifybeat response. * @param array $data The $_POST data sent. * @return array */ function imagify_heartbeat_options_bulk_optimization_status_received( $response, $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->add_options_optimization_status_to_response()' ); $heartbeat_id = 'imagify_options_bulk_queue'; if ( empty( $data[ $heartbeat_id ] ) || ! is_array( $data[ $heartbeat_id ] ) ) { return $response; } $statuses = []; foreach ( $data[ $heartbeat_id ] as $item ) { if ( empty( $statuses[ $item['context'] ] ) ) { $statuses[ $item['context'] ] = []; } $statuses[ $item['context'] ][ '_' . $item['mediaID'] ] = 1; } $results = imagify_get_modified_optimization_statusses( $statuses ); if ( ! $results ) { return $response; } $response[ $heartbeat_id ] = []; foreach ( $results as $result ) { $response[ $heartbeat_id ][] = [ 'mediaID' => $result['media_id'], 'context' => $result['context'], ]; } return $response; } /** * Look for media where status has changed, compared to what Imagifybeat sends. * This is used in the WP Media Library. * * @since 1.9 * @since 1.9.3 Deprecated. * @author Grégory Viguier * @deprecated * * @param array $response The Imagifybeat response. * @param array $data The $_POST data sent. * @return array */ function imagify_heartbeat_optimization_status_received( $response, $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->add_library_optimization_status_to_response()' ); $heartbeat_id = get_imagify_localize_script_translations( 'media-modal' ); $heartbeat_id = $heartbeat_id['heartbeatId']; if ( empty( $data[ $heartbeat_id ] ) || ! is_array( $data[ $heartbeat_id ] ) ) { return $response; } $response[ $heartbeat_id ] = imagify_get_modified_optimization_statusses( $data[ $heartbeat_id ] ); if ( ! $response[ $heartbeat_id ] ) { return $response; } // Sanitize received data and grab some other info. foreach ( $response[ $heartbeat_id ] as $context_id => $media_atts ) { $process = imagify_get_optimization_process( $media_atts['media_id'], $media_atts['context'] ); $response[ $heartbeat_id ][ $context_id ] = get_imagify_media_column_content( $process, false ); } return $response; } /** * Look for media where status has changed, compared to what Imagifybeat sends. * This is used in the custom folders list (the "Other Media" page). * * @since 1.9 * @since 1.9.3 Deprecated. * @author Grégory Viguier * @deprecated * * @param array $response The Imagifybeat response. * @param array $data The $_POST data sent. * @return array */ function imagify_heartbeat_custom_folders_optimization_status_received( $response, $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->add_custom_folders_optimization_status_to_response()' ); $heartbeat_id = get_imagify_localize_script_translations( 'files-list' ); $heartbeat_id = $heartbeat_id['heartbeatId']; if ( empty( $data[ $heartbeat_id ] ) || ! is_array( $data[ $heartbeat_id ] ) ) { return $response; } $response[ $heartbeat_id ] = imagify_get_modified_optimization_statusses( $data[ $heartbeat_id ] ); if ( ! $response[ $heartbeat_id ] ) { return $response; } $admin_ajax_post = Imagify_Admin_Ajax_Post::get_instance(); $list_table = new Imagify_Files_List_Table( [ 'screen' => 'imagify-files', ] ); // Sanitize received data and grab some other info. foreach ( $response[ $heartbeat_id ] as $context_id => $media_atts ) { $process = imagify_get_optimization_process( $media_atts['media_id'], $media_atts['context'] ); $response[ $heartbeat_id ][ $context_id ] = $admin_ajax_post->get_media_columns( $process, $list_table ); } return $response; } /** * Look for media where status has changed, compared to what Imagifybeat sends. * * @since 1.9 * @since 1.9.3 Deprecated. * @author Grégory Viguier * @deprecated * * @param array $data The data received. * @return array */ function imagify_get_modified_optimization_statusses( $data ) { _deprecated_function( __FUNCTION__ . '()', '1.9.3', '\\Imagify\\Imagifybeat\\Actions::get_instance()->get_modified_optimization_statuses()' ); if ( ! $data ) { return []; } $output = []; // Sanitize received data and grab some other info. foreach ( $data as $context => $media_statuses ) { if ( ! $context || ! $media_statuses || ! is_array( $media_statuses ) ) { continue; } // Sanitize the IDs: IDs come as strings, prefixed with an undescore character (to prevent JavaScript from screwing everything). $media_ids = array_keys( $media_statuses ); $media_ids = array_map( function( $media_id ) { return (int) substr( $media_id, 1 ); }, $media_ids ); $media_ids = array_filter( $media_ids ); if ( ! $media_ids ) { continue; } // Sanitize the context. $context_instance = imagify_get_context( $context ); $context = $context_instance->get_name(); $process_class_name = imagify_get_optimization_process_class_name( $context ); $transient_name = sprintf( $process_class_name::LOCK_NAME, $context, '%' ); $is_network_wide = $context_instance->is_network_wide(); Imagify_DB::cache_process_locks( $context, $media_ids ); // Now that everything is cached for this context, we can get the transients without hitting the DB. foreach ( $media_ids as $id ) { $is_locked = (bool) $media_statuses[ '_' . $id ]; $option_name = str_replace( '%', $id, $transient_name ); if ( $is_network_wide ) { $in_db = (bool) get_site_transient( $option_name ); } else { $in_db = (bool) get_transient( $option_name ); } if ( $is_locked === $in_db ) { continue; } $output[ $context . '_' . $id ] = [ 'media_id' => $id, 'context' => $context, ]; } } return $output; } endif; /** * Maybe reset opcache after Imagify update. * * @since 1.7.1.2 * @since 2.0 * @author Grégory Viguier * * @param object $wp_upgrader Plugin_Upgrader instance. * @param array $hook_extra { * Array of bulk item update data. * * @type string $action Type of action. Default 'update'. * @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'. * @type bool $bulk Whether the update process is a bulk update. Default true. * @type array $plugins Array of the basename paths of the plugins' main files. * } */ function imagify_maybe_reset_opcache( $wp_upgrader, $hook_extra ) { _deprecated_function( __FUNCTION__ . '()', '2.0' ); static $imagify_path; if ( ! isset( $hook_extra['action'], $hook_extra['type'], $hook_extra['plugins'] ) ) { return; } if ( 'update' !== $hook_extra['action'] || 'plugin' !== $hook_extra['type'] || ! is_array( $hook_extra['plugins'] ) ) { return; } $plugins = array_flip( $hook_extra['plugins'] ); if ( ! isset( $imagify_path ) ) { $imagify_path = plugin_basename( IMAGIFY_FILE ); } if ( ! isset( $plugins[ $imagify_path ] ) ) { return; } imagify_reset_opcache(); } /** * Reset PHP opcache. * * @since 1.8.1 * @since 1.9.9 Added $reset_function_cache parameter and return boolean. * @since 2.0 deprecated * @author Grégory Viguier * * @param bool $reset_function_cache Set to true to bypass the cache. * @return bool Return true if the opcode cache was reset (or reset in a previous call), or false if the opcode cache is disabled. */ function imagify_reset_opcache( $reset_function_cache = false ) { _deprecated_function( __FUNCTION__ . '()', '2.0' ); static $can_reset; if ( $reset_function_cache || ! isset( $can_reset ) ) { if ( ! function_exists( 'opcache_reset' ) ) { $can_reset = false; return false; } $opcache_enabled = filter_var( ini_get( 'opcache.enable' ), FILTER_VALIDATE_BOOLEAN ); // phpcs:ignore PHPCompatibility.IniDirectives.NewIniDirectives.opcache_enableFound if ( ! $opcache_enabled ) { $can_reset = false; return false; } $restrict_api = ini_get( 'opcache.restrict_api' ); // phpcs:ignore PHPCompatibility.IniDirectives.NewIniDirectives.opcache_restrict_apiFound if ( $restrict_api && strpos( __FILE__, $restrict_api ) !== 0 ) { $can_reset = false; return false; } $can_reset = true; } if ( ! $can_reset ) { return false; } return opcache_reset(); // phpcs:ignore PHPCompatibility.FunctionUse.NewFunctions.opcache_resetFound }