summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/class-module-control.php')
-rw-r--r--plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/class-module-control.php217
1 files changed, 217 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/class-module-control.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/class-module-control.php
new file mode 100644
index 00000000..ea97b03c
--- /dev/null
+++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/class-module-control.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * Jetpack Search: Module_Control class
+ *
+ * @package automattic/jetpack-search
+ */
+
+namespace Automattic\Jetpack\Search;
+
+use Automattic\Jetpack\Status;
+use Jetpack_Options;
+use WP_Error;
+
+/**
+ * To get and set Searh module settings
+ */
+class Module_Control {
+ /**
+ * Plan object
+ *
+ * @var Plan
+ */
+ protected $plan;
+
+ /**
+ * We use the same options as Jetpack the plugin to flag whether Search is active.
+ */
+ const JETPACK_ACTIVE_MODULES_OPTION_KEY = 'active_modules';
+ const JETPACK_SEARCH_MODULE_SLUG = 'search';
+ const SEARCH_MODULE_INSTANT_SEARCH_OPTION_KEY = 'instant_search_enabled';
+
+ /**
+ * Contructor
+ *
+ * @param Plan|null $plan - Plan object.
+ */
+ public function __construct( $plan = null ) {
+ $this->plan = is_null( $plan ) ? new Plan() : $plan;
+ }
+
+ /**
+ * Returns a boolean for whether of the module is enabled.
+ *
+ * @return bool
+ */
+ public function is_active() {
+ return in_array( self::JETPACK_SEARCH_MODULE_SLUG, $this->get_active_modules(), true );
+ }
+
+ /**
+ * Returns a boolean for whether instant search is enabled.
+ *
+ * @return bool
+ */
+ public function is_instant_search_enabled() {
+ return (bool) get_option( self::SEARCH_MODULE_INSTANT_SEARCH_OPTION_KEY );
+ }
+
+ /**
+ * Activiate Search module
+ */
+ public function activate() {
+ /**
+ * Fires before a module is activated.
+ *
+ * @since 2.6.0
+ *
+ * @param string $module Module slug.
+ * @param bool $exit Should we exit after the module has been activated. Default to true.
+ * @param bool $redirect Should the user be redirected after module activation? Default to true.
+ */
+ do_action( 'jetpack_pre_activate_module', self::JETPACK_SEARCH_MODULE_SLUG );
+
+ // If it's already active, then don't do it again.
+ if ( $this->is_active() ) {
+ return true;
+ }
+ // Not available for offline mode.
+ $is_offline_mode = ( new Status() )->is_offline_mode();
+ if ( $is_offline_mode ) {
+ return new WP_Error( 'offline_mode', __( 'Search module can not be activated in offline mode.', 'jetpack-search-pkg' ) );
+ }
+ // Return false if no plan supports search.
+ if ( ! $this->plan->supports_search() ) {
+ return new WP_Error( 'not_supported', __( 'Your plan does not support Jetpack Search.', 'jetpack-search-pkg' ) );
+ }
+
+ $active_modules = $this->get_active_modules();
+ $active_modules[] = self::JETPACK_SEARCH_MODULE_SLUG;
+
+ $success = Jetpack_Options::update_option( self::JETPACK_ACTIVE_MODULES_OPTION_KEY, $active_modules );
+
+ /**
+ * Fired after a module has been deactivated.
+ *
+ * @since 4.2.0
+ *
+ * @param string $module Module slug.
+ * @param boolean $success whether the module was deactivated.
+ */
+ do_action( 'jetpack_activate_module', self::JETPACK_SEARCH_MODULE_SLUG, $success );
+ /**
+ * Fires when a module is deactivated.
+ * The dynamic part of the filter, $module, is the module slug.
+ *
+ * @since 1.9.0
+ *
+ * @param string $module Module slug.
+ */
+ do_action( 'jetpack_activate_module_' . self::JETPACK_SEARCH_MODULE_SLUG );
+
+ return $success;
+ }
+
+ /**
+ * Deactiviate Search module
+ */
+ public function deactivate() {
+ /**
+ * Fires when a module is deactivated.
+ *
+ * @since 1.9.0
+ *
+ * @param string $module Module slug.
+ */
+ do_action( 'jetpack_pre_deactivate_module', self::JETPACK_SEARCH_MODULE_SLUG );
+
+ $active_modules = $this->get_active_modules();
+ $active_modules = array_values( array_diff( $active_modules, array( self::JETPACK_SEARCH_MODULE_SLUG ) ) );
+
+ $success = Jetpack_Options::update_option( self::JETPACK_ACTIVE_MODULES_OPTION_KEY, $active_modules );
+
+ /**
+ * Fired after a module has been deactivated.
+ *
+ * @since 4.2.0
+ *
+ * @param string $module Module slug.
+ * @param boolean $success whether the module was deactivated.
+ */
+ do_action( 'jetpack_deactivate_module', self::JETPACK_SEARCH_MODULE_SLUG, $success );
+ /**
+ * Fires when a module is deactivated.
+ * The dynamic part of the filter, $module, is the module slug.
+ *
+ * @since 1.9.0
+ *
+ * @param string $module Module slug.
+ */
+ do_action( 'jetpack_deactivate_module_' . self::JETPACK_SEARCH_MODULE_SLUG );
+
+ $this->disable_instant_search();
+
+ return $success;
+ }
+
+ /**
+ * Update module status
+ *
+ * @param boolean $active - true to activate, false to deactivate.
+ */
+ public function update_status( $active ) {
+ return $active ? $this->activate() : $this->deactivate();
+ }
+
+ /**
+ * Disable Instant Search Experience
+ */
+ public function disable_instant_search() {
+ return update_option( self::SEARCH_MODULE_INSTANT_SEARCH_OPTION_KEY, false );
+ }
+
+ /**
+ * Enable Instant Search Experience
+ */
+ public function enable_instant_search() {
+ if ( ! $this->is_active() ) {
+ return new WP_Error( 'search_module_inactive', __( 'Search module needs to be activated before enabling instant search.', 'jetpack-search-pkg' ) );
+ }
+ return update_option( self::SEARCH_MODULE_INSTANT_SEARCH_OPTION_KEY, true );
+ }
+
+ /**
+ * Update instant search status
+ *
+ * @param boolean $enabled - true to enable, false to disable.
+ */
+ public function update_instant_search_status( $enabled ) {
+ return $enabled ? $this->enable_instant_search() : $this->disable_instant_search();
+ }
+
+ /**
+ * Get a list of activated modules as an array of module slugs.
+ */
+ public function get_active_modules() {
+ $active_modules = Jetpack_Options::get_option( self::JETPACK_ACTIVE_MODULES_OPTION_KEY );
+
+ if ( ! is_array( $active_modules ) ) {
+ $active_modules = array();
+ }
+
+ /**
+ * Allow filtering of the active modules.
+ *
+ * Gives theme and plugin developers the power to alter the modules that
+ * are activated on the fly.
+ *
+ * @since 5.8.0
+ *
+ * @param array $active Array of active module slugs.
+ */
+ $active_modules = apply_filters( 'jetpack_active_modules', $active_modules );
+
+ return array_unique( $active_modules );
+ }
+
+}