Nessuna descrizione

abstract-wc-deprecated-hooks.php 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Abstract deprecated hooks
  4. *
  5. * @package WooCommerce\Abstracts
  6. * @since 3.0.0
  7. * @version 3.3.0
  8. */
  9. use Automattic\Jetpack\Constants;
  10. if ( ! defined( 'ABSPATH' ) ) {
  11. exit;
  12. }
  13. /**
  14. * WC_Deprecated_Hooks class maps old actions and filters to new ones. This is the base class for handling those deprecated hooks.
  15. *
  16. * Based on the WCS_Hook_Deprecator class by Prospress.
  17. */
  18. abstract class WC_Deprecated_Hooks {
  19. /**
  20. * Array of deprecated hooks we need to handle.
  21. *
  22. * @var array
  23. */
  24. protected $deprecated_hooks = array();
  25. /**
  26. * Array of versions on each hook has been deprecated.
  27. *
  28. * @var array
  29. */
  30. protected $deprecated_version = array();
  31. /**
  32. * Constructor.
  33. */
  34. public function __construct() {
  35. $new_hooks = array_keys( $this->deprecated_hooks );
  36. array_walk( $new_hooks, array( $this, 'hook_in' ) );
  37. }
  38. /**
  39. * Hook into the new hook so we can handle deprecated hooks once fired.
  40. *
  41. * @param string $hook_name Hook name.
  42. */
  43. abstract public function hook_in( $hook_name );
  44. /**
  45. * Get old hooks to map to new hook.
  46. *
  47. * @param string $new_hook New hook name.
  48. * @return array
  49. */
  50. public function get_old_hooks( $new_hook ) {
  51. $old_hooks = isset( $this->deprecated_hooks[ $new_hook ] ) ? $this->deprecated_hooks[ $new_hook ] : array();
  52. $old_hooks = is_array( $old_hooks ) ? $old_hooks : array( $old_hooks );
  53. return $old_hooks;
  54. }
  55. /**
  56. * If the hook is Deprecated, call the old hooks here.
  57. */
  58. public function maybe_handle_deprecated_hook() {
  59. $new_hook = current_filter();
  60. $old_hooks = $this->get_old_hooks( $new_hook );
  61. $new_callback_args = func_get_args();
  62. $return_value = $new_callback_args[0];
  63. foreach ( $old_hooks as $old_hook ) {
  64. $return_value = $this->handle_deprecated_hook( $new_hook, $old_hook, $new_callback_args, $return_value );
  65. }
  66. return $return_value;
  67. }
  68. /**
  69. * If the old hook is in-use, trigger it.
  70. *
  71. * @param string $new_hook New hook name.
  72. * @param string $old_hook Old hook name.
  73. * @param array $new_callback_args New callback args.
  74. * @param mixed $return_value Returned value.
  75. * @return mixed
  76. */
  77. abstract public function handle_deprecated_hook( $new_hook, $old_hook, $new_callback_args, $return_value );
  78. /**
  79. * Get deprecated version.
  80. *
  81. * @param string $old_hook Old hook name.
  82. * @return string
  83. */
  84. protected function get_deprecated_version( $old_hook ) {
  85. return ! empty( $this->deprecated_version[ $old_hook ] ) ? $this->deprecated_version[ $old_hook ] : Constants::get_constant( 'WC_VERSION' );
  86. }
  87. /**
  88. * Display a deprecated notice for old hooks.
  89. *
  90. * @param string $old_hook Old hook.
  91. * @param string $new_hook New hook.
  92. */
  93. protected function display_notice( $old_hook, $new_hook ) {
  94. wc_deprecated_hook( esc_html( $old_hook ), esc_html( $this->get_deprecated_version( $old_hook ) ), esc_html( $new_hook ) );
  95. }
  96. /**
  97. * Fire off a legacy hook with it's args.
  98. *
  99. * @param string $old_hook Old hook name.
  100. * @param array $new_callback_args New callback args.
  101. * @return mixed
  102. */
  103. abstract protected function trigger_hook( $old_hook, $new_callback_args );
  104. }