diff options
Diffstat (limited to 'plugins/jetpack/modules/omnisearch/omnisearch-core.php')
-rw-r--r-- | plugins/jetpack/modules/omnisearch/omnisearch-core.php | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/omnisearch/omnisearch-core.php b/plugins/jetpack/modules/omnisearch/omnisearch-core.php new file mode 100644 index 00000000..1b19a466 --- /dev/null +++ b/plugins/jetpack/modules/omnisearch/omnisearch-core.php @@ -0,0 +1,181 @@ +<?php + +// Include this here so that other plugins can extend it if they like. +require_once( dirname(__FILE__) . '/omnisearch-posts.php' ); + +class Jetpack_Omnisearch { + static $instance; + static $num_results = 5; + + function __construct() { + self::$instance = $this; + add_action( 'wp_loaded', array( $this, 'wp_loaded' ) ); + add_action( 'admin_init', array( $this, 'add_providers' ) ); + add_action( 'jetpack_admin_menu', array( $this, 'jetpack_admin_menu' ) ); + add_action( 'admin_menu', array( $this, 'admin_menu' ), 20 ); + if( ! jetpack_is_mobile() ) { + add_action( 'admin_bar_menu', array( $this, 'admin_bar_search' ), 4 ); + } + add_filter( 'omnisearch_num_results', array( $this, 'omnisearch_num_results' ) ); + } + + static function add_providers() { + // omnisearch-posts.php is included above, so that other plugins can more easily extend it. + new Jetpack_Omnisearch_Posts; + new Jetpack_Omnisearch_Posts( 'page' ); + + require_once( dirname(__FILE__) . '/omnisearch-comments.php' ); + new Jetpack_Omnisearch_Comments; + + if ( current_user_can( 'install_plugins' ) ) { + require_once( dirname(__FILE__) . '/omnisearch-plugins.php' ); + new Jetpack_Omnisearch_Plugins; + } + + do_action( 'omnisearch_add_providers' ); + } + + static function omnisearch_num_results( $num ) { + return self::$num_results; + } + + function wp_loaded() { + $deps = null; + if ( wp_style_is( 'genericons', 'registered' ) ) { + $deps = array( 'genericons' ); + } + + wp_register_style( 'omnisearch-admin', plugins_url( 'omnisearch.css', __FILE__ ), $deps ); + wp_register_style( 'omnisearch-jetpack', plugins_url( 'omnisearch-jetpack.css', __FILE__ ) ); + } + + function jetpack_admin_menu() { + remove_submenu_page( 'index.php', 'omnisearch' ); + $this->slug = add_submenu_page( 'jetpack', __('Omnisearch', 'jetpack'), __('Omnisearch', 'jetpack'), 'edit_posts', 'omnisearch', array( $this, 'omnisearch_page' ) ); + add_action( "admin_print_styles-{$this->slug}", array( $this, 'admin_print_styles_jetpack' ) ); + } + + function admin_menu() { + $this->slug = add_dashboard_page( __('Omnisearch', 'jetpack'), __('Omnisearch', 'jetpack'), 'edit_posts', 'omnisearch', array( $this, 'omnisearch_page' ) ); + add_action( "admin_print_styles-{$this->slug}", array( $this, 'admin_print_styles' ) ); + } + + function admin_print_styles() { + wp_enqueue_style( 'omnisearch-admin' ); + } + + function admin_print_styles_jetpack() { + wp_enqueue_style( 'omnisearch-admin' ); + wp_enqueue_style( 'omnisearch-jetpack' ); + } + + function omnisearch_page() { + $results = array(); + $s = isset( $_GET['s'] ) ? $_GET['s'] : ''; + if( $s ) { + $results = apply_filters( 'omnisearch_results', $results, $s ); + } + ?> + <div class="wrap"> + <h2 class="page-title"><?php esc_html_e('Omnisearch', 'jetpack'); ?> <small><?php esc_html_e('search everything', 'jetpack'); ?></small></h2> + <br class="clear" /> + <?php echo self::get_omnisearch_form( array( + 'form_class' => 'omnisearch-form', + 'search_class' => 'omnisearch', + 'search_placeholder' => '', + 'submit_class' => 'omnisearch-submit', + 'alternate_submit' => true, + ) ); ?> + <?php if( ! empty( $results ) ): ?> + <h3 id="results-title"><?php esc_html_e('Results:', 'jetpack'); ?></h3> + <div class="jump-to"><strong><?php esc_html_e('Jump to:', 'jetpack'); ?></strong> + <?php foreach( $results as $label => $result ) : ?> + <a href="#result-<?php echo sanitize_title( $label ); ?>"><?php echo esc_html( $label ); ?></a> + <?php endforeach; ?> + </div> + <br class="clear" /> + <script>var search_term = '<?php echo esc_js( $s ); ?>', num_results = <?php echo intval( apply_filters( 'omnisearch_num_results', 5 ) ); ?>;</script> + <ul class="omnisearch-results"> + <?php foreach( $results as $label => $result ) : ?> + <li id="result-<?php echo sanitize_title( $label ); ?>" data-label="<?php echo esc_attr( $label ); ?>"> + <?php echo $result; ?> + <a class="back-to-top" href="#results-title"><?php esc_html_e('Back to Top ↑', 'jetpack'); ?></a> + </li> + <?php endforeach; ?> + </ul> + <?php endif; ?> + </div><!-- /wrap --> + <?php + } + + function admin_bar_search( $wp_admin_bar ) { + if( ! is_admin() || ! current_user_can( 'edit_posts' ) ) + return; + + $form = self::get_omnisearch_form( array( + 'form_id' => 'adminbarsearch', + 'search_id' => 'adminbar-search', + 'search_class' => 'adminbar-input', + 'submit_class' => 'adminbar-button', + ) ); + + $form .= "<style> + #adminbar-search::-webkit-input-placeholder, + #adminbar-search:-moz-placeholder, + #adminbar-search::-moz-placeholder, + #adminbar-search:-ms-input-placeholder { + text-shadow: none; + } + </style>"; + + $wp_admin_bar->add_menu( array( + 'parent' => 'top-secondary', + 'id' => 'search', + 'title' => $form, + 'meta' => array( + 'class' => 'admin-bar-search', + 'tabindex' => -1, + ) + ) ); + } + + static function get_omnisearch_form( $args = array() ) { + $defaults = array( + 'form_id' => null, + 'form_class' => null, + 'search_class' => null, + 'search_id' => null, + 'search_value' => isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : null, + 'search_placeholder' => __( 'Search Everything', 'jetpack' ), + 'submit_class' => 'button', + 'submit_value' => __( 'Search', 'jetpack' ), + 'alternate_submit' => false, + ); + extract( array_map( 'esc_attr', wp_parse_args( $args, $defaults ) ) ); + + $rand = rand(); + if( empty( $form_id ) ) + $form_id = "omnisearch_form_$rand"; + if( empty( $search_id ) ) + $search_id = "omnisearch_search_$rand"; + + ob_start(); + ?> + + <form action="<?php echo esc_url( admin_url( 'admin.php' ) ); ?>" method="get" class="<?php echo $form_class; ?>" id="<?php echo $form_id; ?>"> + <input type="hidden" name="page" value="omnisearch" /> + <input name="s" type="search" class="<?php echo $search_class; ?>" id="<?php echo $search_id; ?>" value="<?php echo $search_value; ?>" placeholder="<?php echo $search_placeholder; ?>" /> + <?php if ( $alternate_submit ) : ?> + <button type="submit" class="<?php echo $submit_class; ?>"><span><?php echo $submit_value; ?></span></button> + <?php else : ?> + <input type="submit" class="<?php echo $submit_class; ?>" value="<?php echo $submit_value; ?>" /> + <?php endif; ?> + </form> + + <?php + return apply_filters( 'get_omnisearch_form', ob_get_clean(), $args, $defaults ); + } + +} +new Jetpack_Omnisearch; + |