diff options
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/initializers/class-initializer.php')
-rw-r--r-- | plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/initializers/class-initializer.php | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/initializers/class-initializer.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/initializers/class-initializer.php new file mode 100644 index 00000000..077d7be2 --- /dev/null +++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/initializers/class-initializer.php @@ -0,0 +1,224 @@ +<?php +/** + * Initializer base class. + * + * @package @automattic/jetpack-search + */ + +namespace Automattic\Jetpack\Search; + +use Automattic\Jetpack\Connection\Manager as Connection_Manager; +use WP_Error; +/** + * Base class for the initializer pattern. + */ +class Initializer { + + /** + * Initialize the search package. + * + * The method is called from the `Config` class. + */ + public static function init() { + // Load compatibility files - at this point all plugins are already loaded. + static::include_compatibility_files(); + + // Set up package version hook. + add_filter( 'jetpack_package_versions', __NAMESPACE__ . '\Package::send_version_to_tracker' ); + + /** + * The filter allows abortion of the Jetpack Search package initialization. + * + * @since 0.11.2 + * + * @param boolean $init_search_package Default value is true. + */ + if ( ! apply_filters( 'jetpack_search_init_search_package', true ) ) { + /** + * Fires when the Jetpack Search fails and would fallback to MySQL. + * + * @since Jetpack 7.9.0 + * @param string $reason Reason for Search fallback. + * @param mixed $data Data associated with the request, such as attempted search parameters. + */ + do_action( 'jetpack_search_abort', 'jetpack_search_init_search_package_filter', null ); + return; + } + + static::init_before_connection(); + + // Check whether Jetpack Search should be initialized in the first place . + if ( ! static::is_connected() || ! static::is_search_supported() ) { + /** This filter is documented in search/src/initalizers/class-initalizer.php */ + do_action( 'jetpack_search_abort', 'inactive', null ); + return; + } + + $blog_id = Helper::get_wpcom_site_id(); + if ( ! $blog_id ) { + /** This filter is documented in search/src/initalizers/class-initalizer.php */ + do_action( 'jetpack_search_abort', 'no_blog_id', null ); + return; + } + + if ( ! ( new Module_Control() )->is_active() ) { + /** This filter is documented in search/src/initalizers/class-initalizer.php */ + do_action( 'jetpack_search_abort', 'module_inactive', null ); + return; + } + + // Initialize search package. + if ( ! static::init_search( $blog_id ) ) { + /** This filter is documented in search/src/initalizers/class-initalizer.php */ + do_action( 'jetpack_search_abort', 'jetpack_search_init_search', null ); + return; + } + + /** + * Fires when the Jetpack Search package has been initialized. + * + * @since 0.11.2 + */ + do_action( 'jetpack_search_loaded' ); + } + + /** + * Extra tweaks to make Jetpack Search play well with others. + */ + public static function include_compatibility_files() { + if ( class_exists( 'Jetpack' ) ) { + require_once Package::get_installed_path() . 'compatibility/jetpack.php'; + } + } + + /** + * Init functionality required for connection. + */ + protected static function init_before_connection() { + // Set up Search API endpoints. + add_action( 'rest_api_init', array( new REST_Controller(), 'register_rest_routes' ) ); + // The dashboard has to be initialized before connection. + ( new Dashboard() )->init_hooks(); + } + + /** + * Init the search package. + * + * @param int $blog_id WPCOM blog ID. + */ + protected static function init_search( $blog_id ) { + // We could provide CLI to enable search/instant search, so init them regardless of whether the module is active or not. + static::init_cli(); + + $success = false; + if ( ( new Module_Control() )->is_instant_search_enabled() ) { + // Enable Instant search experience. + $success = static::init_instant_search( $blog_id ); + } else { + // Enable the classic search experience. + $success = static::init_classic_search( $blog_id ); + } + + if ( $success ) { + // registers Jetpack Search widget. + add_action( 'widgets_init', array( static::class, 'jetpack_search_widget_init' ) ); + } + + return $success; + } + + /** + * Init Instant Search and its dependencies. + * + * @param int $blog_id WPCOM blog ID. + */ + protected static function init_instant_search( $blog_id ) { + /** + * The filter allows abortion of the Instant Search initialization. + * + * @since 0.11.2 + * + * @param boolean $init_instant_search Default value is true. + */ + if ( ! apply_filters( 'jetpack_search_init_instant_search', true ) ) { + return; + } + + // Enable the instant search experience. + Instant_Search::initialize( $blog_id ); + // Register instant search configurables as WordPress settings. + new Settings(); + // Instantiate "Customberg", the live search configuration interface. + Customberg::instance(); + // Enable configuring instant search within the Customizer. + // Not need to check existence of `WP_Customize_Manager`, because which is not loaded all the time. + new Customizer(); + return true; + } + + /** + * Init Classic Search. + * + * @param int $blog_id WPCOM blog ID. + */ + protected static function init_classic_search( $blog_id ) { + /** + * The filter allows abortion of the Classic Search initialization. + * + * @since 0.11.2 + * + * @param boolean $init_instant_search Default value is true. + */ + if ( ! apply_filters( 'jetpack_search_init_classic_search', true ) ) { + return; + } + Classic_Search::initialize( $blog_id ); + return true; + } + + /** + * Register jetpack-search CLI if `\CLI` exists. + * + * @return void + */ + protected static function init_cli() { + if ( defined( 'WP_CLI' ) && \WP_CLI ) { + \WP_CLI::add_command( 'jetpack-search', __NAMESPACE__ . '\CLI' ); + } + } + + /** + * Register the widget if Jetpack Search is available and enabled. + */ + public static function jetpack_search_widget_init() { + register_widget( 'Automattic\Jetpack\Search\Search_Widget' ); + } + + /** + * Check if site has been connected. + */ + protected static function is_connected() { + return ( new Connection_Manager( Package::SLUG ) )->is_connected(); + } + + /** + * Check if search is supported by current plan. + */ + protected static function is_search_supported() { + return ( new Plan() )->supports_search(); + } + + /** + * Perform necessary initialization steps for classic and instant search in the constructor. + * + * @deprecated + */ + public static function initialize() { + return new WP_Error( + 'invalid-method', + /* translators: %s: Method name. */ + sprintf( __( "Method '%s' not implemented. Must be overridden in subclass.", 'jetpack-search-pkg' ), __METHOD__ ), + array( 'status' => 405 ) + ); + } +} |