summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/customberg/class-customberg.php')
-rw-r--r--plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/customberg/class-customberg.php145
1 files changed, 145 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/customberg/class-customberg.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/customberg/class-customberg.php
new file mode 100644
index 00000000..cafe88e3
--- /dev/null
+++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-search/src/customberg/class-customberg.php
@@ -0,0 +1,145 @@
+<?php
+/**
+ * A class that adds a search customization interface to wp-admin.
+ *
+ * @package automattic/jetpack-search
+ */
+
+namespace Automattic\Jetpack\Search;
+
+use Automattic\Jetpack\Assets;
+use Automattic\Jetpack\Connection\Manager as Connection_Manager;
+use Automattic\Jetpack\Status;
+use Automattic\Jetpack\Tracking;
+
+/**
+ * Responsible for adding a search customization interface to wp-admin.
+ *
+ * @package Automattic\Jetpack\Search
+ */
+class Customberg {
+ /**
+ * The singleton instance of this class.
+ *
+ * @var Customberg
+ */
+ protected static $instance;
+
+ /**
+ * Get the singleton instance of the class.
+ *
+ * @return Customberg
+ */
+ public static function instance() {
+ if ( ! isset( self::$instance ) ) {
+ self::$instance = new static();
+ self::$instance->init_hooks();
+ }
+
+ return self::$instance;
+ }
+
+ /**
+ * Adds action hooks.
+ */
+ public function init_hooks() {
+ add_action( 'admin_menu', array( $this, 'add_wp_admin_page' ), 999 );
+ }
+
+ /**
+ * Adds a wp-admin page without adding a sidebar submenu item.
+ */
+ public function add_wp_admin_page() {
+ if ( ! $this->should_add_page() ) {
+ return;
+ }
+
+ // Intentionally omits adding a submenu via the first null argument.
+ $hook = add_submenu_page(
+ null,
+ __( 'Search Settings', 'jetpack-search-pkg' ),
+ __( 'Search', 'jetpack-search-pkg' ),
+ 'manage_options', // Must be an admin.
+ 'jetpack-search-configure',
+ array( $this, 'jetpack_search_admin_page' )
+ );
+
+ add_action( "admin_print_scripts-$hook", array( $this, 'load_assets' ) );
+ add_action( 'admin_footer', array( 'Automattic\Jetpack\Search\Helper', 'print_instant_search_sidebar' ) );
+ }
+
+ /**
+ * Prints the dashboard container.
+ */
+ public function jetpack_search_admin_page() {
+ // TODO: Spin this function off into a static helper function in a helper class for code reuse.
+ $static_url = apply_filters( 'jetpack_static_url', '//en.wordpress.com/i/loading/loading-64.gif' );
+ ?>
+ <div id="jp-search-configure" class="jp-search-configure-dashboard" style="height: calc(100vh - 100px);">
+ <div class="hide-if-no-js" style="height: 100%;">
+ <img class="jp-search-loader" width="32" height="32" alt="<?php esc_attr_e( 'Loading&hellip;', 'jetpack-search-pkg' ); ?>" src="<?php echo esc_url( $static_url ); ?>" style="
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ "/>
+ </div>
+ <div class="hide-if-js"><?php esc_html_e( 'Your Search customization page requires JavaScript to function properly.', 'jetpack-search-pkg' ); ?></div>
+ </div>
+ <?php
+ }
+
+ /**
+ * Loads assets for the customization experience.
+ */
+ public function load_assets() {
+ $this->load_assets_with_parameters( Package::get_installed_path() );
+ }
+
+ /**
+ * Loads script and style assets according to parameters provided.
+ *
+ * @param string $package_base_path - Base path for the search package.
+ */
+ public function load_assets_with_parameters( $package_base_path ) {
+ Tracking::register_tracks_functions_scripts( true );
+
+ Assets::register_script(
+ 'jp-search-configure',
+ 'build/customberg/jp-search-configure.js',
+ $package_base_path . '/src', // A full path to a file or a directory inside a plugin.
+ array(
+ 'css_dependencies' => array(
+ 'wp-components',
+ 'wp-block-editor',
+ ),
+ 'in_footer' => true,
+ 'textdomain' => 'jetpack-search-pkg',
+ )
+ );
+ Assets::enqueue_script( 'jp-search-configure' );
+
+ // Use wp_add_inline_script instead of wp_localize_script, see https://core.trac.wordpress.org/ticket/25280.
+ wp_add_inline_script( 'jp-search-configure', 'var JetpackInstantSearchOptions=JSON.parse(decodeURIComponent("' . rawurlencode( wp_json_encode( Helper::generate_initial_javascript_state() ) ) . '"));', 'before' );
+ wp_add_inline_script(
+ 'jp-search-configure',
+ "window.jetpackSearchConfigureInit( 'jp-search-configure' )"
+ );
+ }
+
+ /**
+ * Determine if the requisite page should be added to wp-admin.
+ *
+ * @return boolean
+ */
+ protected function should_add_page() {
+ $is_offline_mode = ( new Status() )->is_offline_mode();
+ $is_connected = ( new Connection_Manager( Package::SLUG ) )->is_connected();
+ $supports_search = ( new Plan() )->supports_instant_search();
+
+ return (
+ ! $is_offline_mode && // Must be online.
+ $is_connected && // Must be connected.
+ $supports_search // Must have plan supporting Jetpack (Instant) Search.
+ );
+ }
+}