121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Abstract deprecated hooks
 | |
|  *
 | |
|  * @package WooCommerce\Abstracts
 | |
|  * @since   3.0.0
 | |
|  * @version 3.3.0
 | |
|  */
 | |
| 
 | |
| use Automattic\Jetpack\Constants;
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
| 	exit;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * WC_Deprecated_Hooks class maps old actions and filters to new ones. This is the base class for handling those deprecated hooks.
 | |
|  *
 | |
|  * Based on the WCS_Hook_Deprecator class by Prospress.
 | |
|  */
 | |
| abstract class WC_Deprecated_Hooks {
 | |
| 
 | |
| 	/**
 | |
| 	 * Array of deprecated hooks we need to handle.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	protected $deprecated_hooks = array();
 | |
| 
 | |
| 	/**
 | |
| 	 * Array of versions on each hook has been deprecated.
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	protected $deprecated_version = array();
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor.
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		$new_hooks = array_keys( $this->deprecated_hooks );
 | |
| 		array_walk( $new_hooks, array( $this, 'hook_in' ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Hook into the new hook so we can handle deprecated hooks once fired.
 | |
| 	 *
 | |
| 	 * @param string $hook_name Hook name.
 | |
| 	 */
 | |
| 	abstract public function hook_in( $hook_name );
 | |
| 
 | |
| 	/**
 | |
| 	 * Get old hooks to map to new hook.
 | |
| 	 *
 | |
| 	 * @param  string $new_hook New hook name.
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	public function get_old_hooks( $new_hook ) {
 | |
| 		$old_hooks = isset( $this->deprecated_hooks[ $new_hook ] ) ? $this->deprecated_hooks[ $new_hook ] : array();
 | |
| 		$old_hooks = is_array( $old_hooks ) ? $old_hooks : array( $old_hooks );
 | |
| 
 | |
| 		return $old_hooks;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * If the hook is Deprecated, call the old hooks here.
 | |
| 	 */
 | |
| 	public function maybe_handle_deprecated_hook() {
 | |
| 		$new_hook          = current_filter();
 | |
| 		$old_hooks         = $this->get_old_hooks( $new_hook );
 | |
| 		$new_callback_args = func_get_args();
 | |
| 		$return_value      = $new_callback_args[0];
 | |
| 
 | |
| 		foreach ( $old_hooks as $old_hook ) {
 | |
| 			$return_value = $this->handle_deprecated_hook( $new_hook, $old_hook, $new_callback_args, $return_value );
 | |
| 		}
 | |
| 
 | |
| 		return $return_value;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * If the old hook is in-use, trigger it.
 | |
| 	 *
 | |
| 	 * @param  string $new_hook          New hook name.
 | |
| 	 * @param  string $old_hook          Old hook name.
 | |
| 	 * @param  array  $new_callback_args New callback args.
 | |
| 	 * @param  mixed  $return_value      Returned value.
 | |
| 	 * @return mixed
 | |
| 	 */
 | |
| 	abstract public function handle_deprecated_hook( $new_hook, $old_hook, $new_callback_args, $return_value );
 | |
| 
 | |
| 	/**
 | |
| 	 * 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 ] : Constants::get_constant( 'WC_VERSION' );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * 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 ) {
 | |
| 		wc_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
 | |
| 	 */
 | |
| 	abstract protected function trigger_hook( $old_hook, $new_callback_args );
 | |
| }
 |