diff options
Diffstat (limited to 'plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php')
-rw-r--r-- | plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php b/plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php new file mode 100644 index 00000000..f0d86be9 --- /dev/null +++ b/plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php @@ -0,0 +1,143 @@ +<?php + +/** + * Provides methods for dealing with module overrides. + * + * @since 5.9.0 + */ +class Jetpack_Modules_Overrides { + /** + * Used to cache module overrides so that we minimize how many times we appy the + * option_jetpack_active_modules filter. + * + * @var null|array + */ + private $overrides = null; + + /** + * Clears the $overrides member used for caching. + * + * Since get_overrides() can be passed a falsey value to skip caching, this is probably + * most useful for clearing cache between tests. + * + * @return void + */ + public function clear_cache() { + $this->overrides = null; + } + + /** + * Returns true if there is a filter on the jetpack_active_modules option. + * + * @return bool Whether there is a filter on the jetpack_active_modules option. + */ + public function do_overrides_exist() { + return (bool) ( has_filter( 'option_jetpack_active_modules' ) || has_filter( 'jetpack_active_modules' ) ); + } + + /** + * Gets the override for a given module. + * + * @param string $module_slug The module's slug. + * @param boolean $use_cache Whether or not cached overrides should be used. + * + * @return bool|string False if no override for module. 'active' or 'inactive' if there is an override. + */ + public function get_module_override( $module_slug, $use_cache = true ) { + $overrides = $this->get_overrides( $use_cache ); + + if ( ! isset( $overrides[ $module_slug ] ) ) { + return false; + } + + return $overrides[ $module_slug ]; + } + + /** + * Returns an array of module overrides where the key is the module slug and the value + * is true if the module is forced on and false if the module is forced off. + * + * @param bool $use_cache Whether or not cached overrides should be used. + * + * @return array The array of module overrides. + */ + public function get_overrides( $use_cache = true ) { + if ( $use_cache && ! is_null( $this->overrides ) ) { + return $this->overrides; + } + + if ( ! $this->do_overrides_exist() ) { + return array(); + } + + $available_modules = Jetpack::get_available_modules(); + + /** + * First, let's get all modules that have been forced on. + */ + + /** This filter is documented in wp-includes/option.php */ + $filtered = apply_filters( 'option_jetpack_active_modules', array() ); + + /** This filter is documented in class.jetpack.php */ + $filtered = apply_filters( 'jetpack_active_modules', $filtered ); + + $forced_on = array_diff( $filtered, array() ); + + /** + * Second, let's get all modules forced off. + */ + + /** This filter is documented in wp-includes/option.php */ + $filtered = apply_filters( 'option_jetpack_active_modules', $available_modules ); + + /** This filter is documented in class.jetpack.php */ + $filtered = apply_filters( 'jetpack_active_modules', $filtered ); + + $forced_off = array_diff( $available_modules, $filtered ); + + /** + * Last, build the return value. + */ + $return_value = array(); + foreach ( $forced_on as $on ) { + $return_value[ $on ] = 'active'; + } + + foreach ( $forced_off as $off ) { + $return_value[ $off ] = 'inactive'; + } + + $this->overrides = $return_value; + + return $return_value; + } + + /** + * A reference to an instance of this class. + * + * @var Jetpack_Modules_Overrides + */ + private static $instance = null; + + /** + * Returns the singleton instance of Jetpack_Modules_Overrides + * + * @return Jetpack_Modules_Overrides + */ + public static function instance() { + if ( is_null( self::$instance ) ) { + self::$instance = new Jetpack_Modules_Overrides(); + } + + return self::$instance; + } + + /** + * Private construct to enforce singleton. + */ + private function __construct() { + } +} + +Jetpack_Modules_Overrides::instance(); |