148 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Deprecated hooks.
 | |
|  * It's created based on WC_Deprecated_Hooks.
 | |
|  *
 | |
|  * @since 3.9.6
 | |
|  * @package Deprecated_Hooks
 | |
|  */
 | |
| 
 | |
| namespace Smush\Core;
 | |
| 
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * Handles deprecation notices and triggering of legacy action hooks.
 | |
|  */
 | |
| class Deprecated_Hooks {
 | |
| 
 | |
| 	/**
 | |
| 	 * Array of deprecated actions hooks we need to handle. Format of 'new' => 'old'.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	private $deprecated_action_hooks = array(
 | |
| 		'wp_smush_before_smush_file' => 'smush_s3_integration_fetch_file',
 | |
| 		'wp_smush_after_remove_file' => 'smush_s3_backup_remove',
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Array of deprecated filters hooks we need to handle. Format of 'new' => 'old'.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	private $deprecated_filter_hooks = array(
 | |
| 		'wp_smush_backup_exists' => 'smush_backup_exists',
 | |
| 		'wp_smush_file_exists'   => 'smush_file_exists',
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Array of versions on each hook has been deprecated.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	private $deprecated_version = array(
 | |
| 		'smush_backup_exists'             => '3.9.6',
 | |
| 		'smush_s3_integration_fetch_file' => '3.9.6',
 | |
| 		'smush_s3_backup_remove'          => '3.9.6',
 | |
| 		'smush_file_exists'               => '3.9.6',
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Is action hook.
 | |
| 	 *
 | |
| 	 * @var bool
 | |
| 	 */
 | |
| 	private $is_action;
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor.
 | |
| 	 *
 | |
| 	 * Hook into the new hook so we can handle deprecated hooks once fired.
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		$deprecated_hooks = array_merge( array_keys( $this->deprecated_action_hooks ), array_keys( $this->deprecated_filter_hooks ) );
 | |
| 		if ( $deprecated_hooks ) {
 | |
| 			foreach ( $deprecated_hooks as $new_action ) {
 | |
| 				add_filter( $new_action, array( $this, 'maybe_handle_deprecated_hook' ), -1000, 8 );
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get old hooks to map to new hook.
 | |
| 	 *
 | |
| 	 * @param  string $new_hook New hook name.
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	private function get_old_hooks( $new_hook ) {
 | |
| 		$old_hooks = array();
 | |
| 		if ( isset( $this->deprecated_action_hooks[ $new_hook ] ) ) {
 | |
| 			$old_hooks = $this->deprecated_action_hooks[ $new_hook ];
 | |
| 
 | |
| 			$this->is_action = true;
 | |
| 		} elseif ( isset( $this->deprecated_filter_hooks[ $new_hook ] ) ) {
 | |
| 			$old_hooks = $this->deprecated_filter_hooks[ $new_hook ];
 | |
| 			// reset hook type.
 | |
| 			$this->is_action = null;
 | |
| 		}
 | |
| 
 | |
| 		return is_array( $old_hooks ) ? $old_hooks : array( $old_hooks );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * If the hook is Deprecated, call the old hooks here.
 | |
| 	 */
 | |
| 	public function maybe_handle_deprecated_hook() {
 | |
| 		$new_hook          = current_filter();
 | |
| 		$new_callback_args = func_get_args();
 | |
| 		$return_value      = $new_callback_args[0];
 | |
| 		$old_hooks         = $this->get_old_hooks( $new_hook );
 | |
| 		if ( $old_hooks ) {
 | |
| 			foreach ( $old_hooks as $old_hook ) {
 | |
| 				if ( has_filter( $old_hook ) ) {
 | |
| 					$this->display_notice( $old_hook, $new_hook );
 | |
| 					$return_value = $this->trigger_hook( $old_hook, $new_callback_args );
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $return_value;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Display a deprecated notice for old hooks.
 | |
| 	 *
 | |
| 	 * @param string $old_hook Old hook.
 | |
| 	 * @param string $new_hook New hook.
 | |
| 	 */
 | |
| 	protected function display_notice( $old_hook, $new_hook ) {
 | |
| 		_deprecated_hook( esc_html( $old_hook ), esc_html( $this->get_deprecated_version( $old_hook ) ), esc_html( $new_hook ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Fire off a legacy hook with it's args.
 | |
| 	 *
 | |
| 	 * @param  string $old_hook          Old hook name.
 | |
| 	 * @param  array  $new_callback_args New callback args.
 | |
| 	 * @return mixed|void
 | |
| 	 */
 | |
| 	protected function trigger_hook( $old_hook, $new_callback_args ) {
 | |
| 		if ( $this->is_action ) {
 | |
| 			do_action_ref_array( $old_hook, $new_callback_args );
 | |
| 		} else {
 | |
| 			return apply_filters_ref_array( $old_hook, $new_callback_args );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Get deprecated version.
 | |
| 	 *
 | |
| 	 * @param string $old_hook Old hook name.
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	protected function get_deprecated_version( $old_hook ) {
 | |
| 		return ! empty( $this->deprecated_version[ $old_hook ] ) ? $this->deprecated_version[ $old_hook ] : WP_SMUSH_VERSION;
 | |
| 	}
 | |
| }
 |