<?php
use Automattic\Jetpack\Constants;
if (!defined('ABSPATH')) {
exit;
}
abstract class WC_Deprecated_Hooks
{
protected $deprecated_hooks = array();
protected $deprecated_version = array();
public function __construct()
{
$new_hooks = array_keys($this->deprecated_hooks);
array_walk($new_hooks, array($this, 'hook_in'));
}
public abstract function hook_in($hook_name);
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;
}
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;
}
public abstract function handle_deprecated_hook($new_hook, $old_hook, $new_callback_args, $return_value);
protected function get_deprecated_version($old_hook)
{
return !empty($this->deprecated_version[$old_hook]) ? $this->deprecated_version[$old_hook] : Constants::get_constant('WC_VERSION');
}
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));
}
protected abstract function trigger_hook($old_hook, $new_callback_args);
}