summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.php224
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 )
+ );
+ }
+}