PageRenderTime 27ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/blog/wp-content/plugins/jetpack/modules/omnisearch/omnisearch-core.php

https://gitlab.com/ibnukipa/cakra
PHP | 228 lines | 157 code | 26 blank | 45 comment | 14 complexity | 85651e52f38a8698da9c3a573d48f009 MD5 | raw file
  1. <?php
  2. // Include this here so that other plugins can extend it if they like.
  3. require_once( dirname(__FILE__) . '/omnisearch-posts.php' );
  4. class Jetpack_Omnisearch {
  5. static $instance;
  6. static $num_results = 5;
  7. function __construct() {
  8. self::$instance = $this;
  9. add_action( 'wp_loaded', array( $this, 'wp_loaded' ) );
  10. add_action( 'admin_init', array( $this, 'add_providers' ) );
  11. add_action( 'jetpack_admin_menu', array( $this, 'jetpack_admin_menu' ) );
  12. add_action( 'admin_menu', array( $this, 'admin_menu' ), 20 );
  13. if( ! jetpack_is_mobile() ) {
  14. add_action( 'admin_bar_menu', array( $this, 'admin_bar_search' ), 4 );
  15. }
  16. add_filter( 'omnisearch_num_results', array( $this, 'omnisearch_num_results' ) );
  17. }
  18. static function add_providers() {
  19. // omnisearch-posts.php is included above, so that other plugins can more easily extend it.
  20. new Jetpack_Omnisearch_Posts;
  21. new Jetpack_Omnisearch_Posts( 'page' );
  22. require_once( dirname(__FILE__) . '/omnisearch-comments.php' );
  23. new Jetpack_Omnisearch_Comments;
  24. if ( current_user_can( 'upload_files' ) ) {
  25. require_once( dirname(__FILE__) . '/omnisearch-media.php' );
  26. new Jetpack_Omnisearch_Media;
  27. }
  28. if ( current_user_can( 'install_plugins' ) ) {
  29. require_once( dirname(__FILE__) . '/omnisearch-plugins.php' );
  30. new Jetpack_Omnisearch_Plugins;
  31. }
  32. /**
  33. * Fires after each default omnisearch provider has been required.
  34. *
  35. * Can be used to add your own Omnisearch provider.
  36. *
  37. * @module minileven
  38. *
  39. * @since 2.3.2
  40. */
  41. do_action( 'omnisearch_add_providers' );
  42. }
  43. static function omnisearch_num_results( $num ) {
  44. return self::$num_results;
  45. }
  46. function wp_loaded() {
  47. $deps = null;
  48. if ( wp_style_is( 'genericons', 'registered' ) ) {
  49. $deps = array( 'genericons' );
  50. }
  51. if( is_rtl() ) {
  52. wp_register_style( 'omnisearch-admin', plugins_url( 'rtl/omnisearch-rtl.css', __FILE__ ), $deps );
  53. } else {
  54. wp_register_style( 'omnisearch-admin', plugins_url( 'omnisearch.css', __FILE__ ), $deps );
  55. }
  56. }
  57. function jetpack_admin_menu() {
  58. remove_submenu_page( 'index.php', 'omnisearch' );
  59. $this->slug = add_submenu_page( 'jetpack', __( 'Omnisearch', 'jetpack' ), __( 'Omnisearch', 'jetpack' ), 'edit_posts', 'omnisearch', array( $this, 'omnisearch_page' ) );
  60. add_action( "admin_print_styles-{$this->slug}", array( $this, 'admin_print_styles_jetpack' ) );
  61. }
  62. function admin_menu() {
  63. $this->slug = add_dashboard_page( __( 'Omnisearch', 'jetpack' ), __( 'Omnisearch', 'jetpack' ), 'edit_posts', 'omnisearch', array( $this, 'omnisearch_page' ) );
  64. add_action( "admin_print_styles-{$this->slug}", array( $this, 'admin_print_styles' ) );
  65. }
  66. function admin_print_styles() {
  67. wp_enqueue_style( 'omnisearch-admin' );
  68. }
  69. function admin_print_styles_jetpack() {
  70. wp_enqueue_style( 'omnisearch-admin' );
  71. wp_enqueue_style( 'omnisearch-jetpack' );
  72. }
  73. function omnisearch_page() {
  74. $results = array();
  75. $s = isset( $_GET['s'] ) ? $_GET['s'] : '';
  76. if ( $s ) {
  77. /**
  78. * Filter the results returned for a given Omnisearch search query.
  79. *
  80. * @module minileven
  81. *
  82. * @since 2.3.0
  83. *
  84. * @param array $results Array of Omnisearch results.
  85. * @param string $s Search parameter.
  86. */
  87. $results = apply_filters( 'omnisearch_results', $results, $s );
  88. }
  89. /**
  90. * Filter the number of results displayed for each Omnisearch searched section.
  91. *
  92. * @module minileven
  93. *
  94. * @since 2.3.0
  95. *
  96. * @param int 5 Number of results displayed for each Omnisearch searched section.
  97. */
  98. $num_results = intval( apply_filters( 'omnisearch_num_results', 5 ) );
  99. ?>
  100. <div class="wrap">
  101. <h2 class="page-title"><?php esc_html_e( 'Omnisearch', 'jetpack' ); ?> <small><?php esc_html_e( 'search everything', 'jetpack' ); ?></small></h2>
  102. <br class="clear" />
  103. <?php echo self::get_omnisearch_form( array(
  104. 'form_class' => 'omnisearch-form',
  105. 'search_class' => 'omnisearch',
  106. 'search_placeholder' => '',
  107. 'submit_class' => 'omnisearch-submit',
  108. 'alternate_submit' => true,
  109. ) ); ?>
  110. <?php if( ! empty( $results ) ): ?>
  111. <h3 id="results-title"><?php esc_html_e( 'Results:', 'jetpack' ); ?></h3>
  112. <div class="jump-to"><strong><?php esc_html_e( 'Jump to:', 'jetpack' ); ?></strong>
  113. <?php foreach( $results as $label => $result ) : ?>
  114. <a href="#result-<?php echo sanitize_title( $label ); ?>"><?php echo esc_html( $label ); ?></a>
  115. <?php endforeach; ?>
  116. </div>
  117. <br class="clear" />
  118. <script>var search_term = '<?php echo esc_js( $s ); ?>', num_results = <?php echo $num_results; ?>;</script>
  119. <ul class="omnisearch-results">
  120. <?php foreach( $results as $label => $result ) : ?>
  121. <li id="result-<?php echo sanitize_title( $label ); ?>" data-label="<?php echo esc_attr( $label ); ?>">
  122. <?php echo $result; ?>
  123. <a class="back-to-top" href="#results-title"><?php esc_html_e( 'Back to Top &uarr;', 'jetpack' ); ?></a>
  124. </li>
  125. <?php endforeach; ?>
  126. </ul>
  127. <?php endif; ?>
  128. </div><!-- /wrap -->
  129. <?php
  130. }
  131. function admin_bar_search( $wp_admin_bar ) {
  132. if( ! is_admin() || ! current_user_can( 'edit_posts' ) )
  133. return;
  134. $form = self::get_omnisearch_form( array(
  135. 'form_id' => 'adminbarsearch',
  136. 'search_id' => 'adminbar-search',
  137. 'search_class' => 'adminbar-input',
  138. 'submit_class' => 'adminbar-button',
  139. ) );
  140. $form .= "<style>
  141. #adminbar-search::-webkit-input-placeholder,
  142. #adminbar-search:-moz-placeholder,
  143. #adminbar-search::-moz-placeholder,
  144. #adminbar-search:-ms-input-placeholder {
  145. text-shadow: none;
  146. }
  147. </style>";
  148. $wp_admin_bar->add_menu( array(
  149. 'parent' => 'top-secondary',
  150. 'id' => 'search',
  151. 'title' => $form,
  152. 'meta' => array(
  153. 'class' => 'admin-bar-search',
  154. 'tabindex' => -1,
  155. )
  156. ) );
  157. }
  158. static function get_omnisearch_form( $args = array() ) {
  159. $defaults = array(
  160. 'form_id' => null,
  161. 'form_class' => null,
  162. 'search_class' => null,
  163. 'search_id' => null,
  164. 'search_value' => isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : null,
  165. 'search_placeholder' => __( 'Search Everything', 'jetpack' ),
  166. 'submit_class' => 'button',
  167. 'submit_value' => __( 'Search', 'jetpack' ),
  168. 'alternate_submit' => false,
  169. );
  170. extract( array_map( 'esc_attr', wp_parse_args( $args, $defaults ) ) );
  171. $rand = rand();
  172. if( empty( $form_id ) )
  173. $form_id = "omnisearch_form_$rand";
  174. if( empty( $search_id ) )
  175. $search_id = "omnisearch_search_$rand";
  176. ob_start();
  177. ?>
  178. <form action="<?php echo esc_url( admin_url( 'admin.php' ) ); ?>" method="get" class="<?php echo $form_class; ?>" id="<?php echo $form_id; ?>">
  179. <input type="hidden" name="page" value="omnisearch" />
  180. <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; ?>" />
  181. <?php if ( $alternate_submit ) : ?>
  182. <button type="submit" class="<?php echo $submit_class; ?>"><span><?php echo $submit_value; ?></span></button>
  183. <?php else : ?>
  184. <input type="submit" class="<?php echo $submit_class; ?>" value="<?php echo $submit_value; ?>" />
  185. <?php endif; ?>
  186. </form>
  187. <?php
  188. /**
  189. * Filters the Omnisearch search form output.
  190. *
  191. * @module minileven
  192. *
  193. * @since 2.3.0
  194. *
  195. * @param string ob_get_clean() Omnisearch search form output.
  196. * @param array $args Array of arguments to pass to the form to overwrite the default form parameters.
  197. * @param array $defaults Array of default form parameters.
  198. */
  199. return apply_filters( 'get_omnisearch_form', ob_get_clean(), $args, $defaults );
  200. }
  201. }
  202. new Jetpack_Omnisearch;