%s

", esc_html( $options_txt ) ); if ( ! empty( $_REQUEST ) ) { if ( isset( $_REQUEST['submit'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); update_relevanssi_options(); } if ( isset( $_REQUEST['import_options'] ) ) { if ( function_exists( 'relevanssi_import_options' ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); $options = $_REQUEST['relevanssi_settings']; relevanssi_import_options( $options ); } } if ( isset( $_REQUEST['search'] ) ) { relevanssi_search( $_REQUEST['q'] ); } if ( isset( $_REQUEST['dowhat'] ) ) { if ( 'add_stopword' === $_REQUEST['dowhat'] ) { if ( isset( $_REQUEST['term'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_add_stopword( $_REQUEST['term'] ); } if ( isset( $_REQUEST['body_term'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_add_body_stopword( $_REQUEST['body_term'] ); } } } if ( isset( $_REQUEST['addstopword'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_add_stopword( $_REQUEST['addstopword'] ); } if ( isset( $_REQUEST['removestopword'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_remove_stopword( $_REQUEST['removestopword'] ); } if ( isset( $_REQUEST['removeallstopwords'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_remove_all_stopwords(); } if ( isset( $_REQUEST['repopulatestopwords'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); $verbose = true; relevanssi_populate_stopwords( $verbose ); } if ( isset( $_REQUEST['addbodystopword'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_add_body_stopword( $_REQUEST['addbodystopword'] ); } if ( isset( $_REQUEST['removebodystopword'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_remove_body_stopword( $_REQUEST['removebodystopword'] ); } if ( isset( $_REQUEST['removeallbodystopwords'] ) ) { check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); relevanssi_remove_all_body_stopwords(); } } relevanssi_options_form(); echo "
"; } /** * Updates Relevanssi options. * * Checks the option values and updates the options. It's safe to use $_REQUEST here, * check_admin_referer() is done immediately before this function is called. */ function update_relevanssi_options() { // phpcs:disable WordPress.Security.NonceVerification if ( isset( $_REQUEST['relevanssi_content_boost'] ) ) { $boost = floatval( $_REQUEST['relevanssi_content_boost'] ); update_option( 'relevanssi_content_boost', $boost ); } if ( isset( $_REQUEST['relevanssi_title_boost'] ) ) { $boost = floatval( $_REQUEST['relevanssi_title_boost'] ); update_option( 'relevanssi_title_boost', $boost ); } if ( isset( $_REQUEST['relevanssi_comment_boost'] ) ) { $boost = floatval( $_REQUEST['relevanssi_comment_boost'] ); update_option( 'relevanssi_comment_boost', $boost ); } if ( isset( $_REQUEST['relevanssi_min_word_length'] ) ) { $value = intval( $_REQUEST['relevanssi_min_word_length'] ); if ( 0 === $value ) { $value = 3; } update_option( 'relevanssi_min_word_length', $value ); } if ( 'indexing' === $_REQUEST['tab'] ) { if ( ! isset( $_REQUEST['relevanssi_index_author'] ) ) { $_REQUEST['relevanssi_index_author'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_index_excerpt'] ) ) { $_REQUEST['relevanssi_index_excerpt'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_expand_shortcodes'] ) ) { $_REQUEST['relevanssi_expand_shortcodes'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_index_image_files'] ) ) { $_REQUEST['relevanssi_index_image_files'] = 'off'; } } if ( 'searching' === $_REQUEST['tab'] ) { if ( ! isset( $_REQUEST['relevanssi_admin_search'] ) ) { $_REQUEST['relevanssi_admin_search'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_throttle'] ) ) { $_REQUEST['relevanssi_throttle'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_disable_or_fallback'] ) ) { $_REQUEST['relevanssi_disable_or_fallback'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_respect_exclude'] ) ) { $_REQUEST['relevanssi_respect_exclude'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_wpml_only_current'] ) ) { $_REQUEST['relevanssi_wpml_only_current'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_polylang_all_languages'] ) ) { $_REQUEST['relevanssi_polylang_all_languages'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_exact_match_bonus'] ) ) { $_REQUEST['relevanssi_exact_match_bonus'] = 'off'; } } if ( 'logging' === $_REQUEST['tab'] ) { if ( ! isset( $_REQUEST['relevanssi_log_queries'] ) ) { $_REQUEST['relevanssi_log_queries'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_log_queries_with_ip'] ) ) { $_REQUEST['relevanssi_log_queries_with_ip'] = 'off'; } } if ( 'excerpts' === $_REQUEST['tab'] ) { if ( ! isset( $_REQUEST['relevanssi_excerpts'] ) ) { $_REQUEST['relevanssi_excerpts'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_show_matches'] ) ) { $_REQUEST['relevanssi_show_matches'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_hilite_title'] ) ) { $_REQUEST['relevanssi_hilite_title'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_highlight_docs'] ) ) { $_REQUEST['relevanssi_highlight_docs'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_highlight_comments'] ) ) { $_REQUEST['relevanssi_highlight_comments'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_excerpt_custom_fields'] ) ) { $_REQUEST['relevanssi_excerpt_custom_fields'] = 'off'; } if ( ! isset( $_REQUEST['relevanssi_word_boundaries'] ) ) { $_REQUEST['relevanssi_word_boundaries'] = 'off'; } } if ( isset( $_REQUEST['relevanssi_excerpt_length'] ) ) { $value = intval( $_REQUEST['relevanssi_excerpt_length'] ); if ( 0 !== $value ) { update_option( 'relevanssi_excerpt_length', $value ); } } if ( isset( $_REQUEST['relevanssi_synonyms'] ) ) { $linefeeds = array( "\r\n", "\n", "\r" ); $value = str_replace( $linefeeds, ';', $_REQUEST['relevanssi_synonyms'] ); $value = stripslashes( $value ); update_option( 'relevanssi_synonyms', $value ); } if ( isset( $_REQUEST['relevanssi_show_matches'] ) ) { update_option( 'relevanssi_show_matches', $_REQUEST['relevanssi_show_matches'] ); } if ( isset( $_REQUEST['relevanssi_show_matches_text'] ) ) { $value = $_REQUEST['relevanssi_show_matches_text']; $value = str_replace( '"', "'", $value ); update_option( 'relevanssi_show_matches_text', $value ); } $relevanssi_punct = array(); if ( isset( $_REQUEST['relevanssi_punct_quotes'] ) ) { $relevanssi_punct['quotes'] = $_REQUEST['relevanssi_punct_quotes']; } if ( isset( $_REQUEST['relevanssi_punct_hyphens'] ) ) { $relevanssi_punct['hyphens'] = $_REQUEST['relevanssi_punct_hyphens']; } if ( isset( $_REQUEST['relevanssi_punct_ampersands'] ) ) { $relevanssi_punct['ampersands'] = $_REQUEST['relevanssi_punct_ampersands']; } if ( isset( $_REQUEST['relevanssi_punct_decimals'] ) ) { $relevanssi_punct['decimals'] = $_REQUEST['relevanssi_punct_decimals']; } if ( ! empty( $relevanssi_punct ) ) { update_option( 'relevanssi_punctuation', $relevanssi_punct ); } $post_type_weights = array(); $index_post_types = array(); $index_taxonomies_list = array(); $index_terms_list = array(); foreach ( $_REQUEST as $key => $value ) { if ( empty( $value ) ) { $value = 0; } if ( 'relevanssi_weight_' === substr( $key, 0, strlen( 'relevanssi_weight_' ) ) ) { $type = substr( $key, strlen( 'relevanssi_weight_' ) ); $post_type_weights[ $type ] = $value; } if ( 'relevanssi_taxonomy_weight_' === substr( $key, 0, strlen( 'relevanssi_taxonomy_weight_' ) ) ) { $type = 'post_tagged_with_' . substr( $key, strlen( 'relevanssi_taxonomy_weight_' ) ); $post_type_weights[ $type ] = $value; } if ( 'relevanssi_term_weight_' === substr( $key, 0, strlen( 'relevanssi_term_weight_' ) ) ) { $type = 'taxonomy_term_' . substr( $key, strlen( 'relevanssi_term_weight_' ) ); $post_type_weights[ $type ] = $value; } if ( 'relevanssi_index_type_' === substr( $key, 0, strlen( 'relevanssi_index_type_' ) ) ) { $type = substr( $key, strlen( 'relevanssi_index_type_' ) ); if ( 'on' === $value ) { $index_post_types[ $type ] = true; } } if ( 'relevanssi_index_taxonomy_' === substr( $key, 0, strlen( 'relevanssi_index_taxonomy_' ) ) ) { $type = substr( $key, strlen( 'relevanssi_index_taxonomy_' ) ); if ( 'on' === $value ) { $index_taxonomies_list[ $type ] = true; } } if ( 'relevanssi_index_terms_' === substr( $key, 0, strlen( 'relevanssi_index_terms_' ) ) ) { $type = substr( $key, strlen( 'relevanssi_index_terms_' ) ); if ( 'on' === $value ) { $index_terms_list[ $type ] = true; } } } if ( 'indexing' === $_REQUEST['tab'] ) { update_option( 'relevanssi_index_taxonomies_list', array_keys( $index_taxonomies_list ) ); if ( RELEVANSSI_PREMIUM ) { update_option( 'relevanssi_index_terms', array_keys( $index_terms_list ) ); } } if ( count( $post_type_weights ) > 0 ) { update_option( 'relevanssi_post_type_weights', $post_type_weights ); } if ( count( $index_post_types ) > 0 ) { update_option( 'relevanssi_index_post_types', array_keys( $index_post_types ) ); } if ( isset( $_REQUEST['relevanssi_index_fields_select'] ) ) { $fields_option = ''; if ( 'all' === $_REQUEST['relevanssi_index_fields_select'] ) { $fields_option = 'all'; } if ( 'visible' === $_REQUEST['relevanssi_index_fields_select'] ) { $fields_option = 'visible'; } if ( 'some' === $_REQUEST['relevanssi_index_fields_select'] ) { if ( isset( $_REQUEST['relevanssi_index_fields'] ) ) { $fields_option = rtrim( $_REQUEST['relevanssi_index_fields'], " \t\n\r\0\x0B," ); } } update_option( 'relevanssi_index_fields', $fields_option ); } if ( isset( $_REQUEST['relevanssi_trim_logs'] ) ) { $trim_logs = $_REQUEST['relevanssi_trim_logs']; if ( ! is_numeric( $trim_logs ) || $trim_logs < 0 ) { $trim_logs = 0; } update_option( 'relevanssi_trim_logs', $trim_logs ); } if ( isset( $_REQUEST['relevanssi_cat'] ) ) { if ( is_array( $_REQUEST['relevanssi_cat'] ) ) { $csv_cats = implode( ',', $_REQUEST['relevanssi_cat'] ); update_option( 'relevanssi_cat', $csv_cats ); } } else { if ( isset( $_REQUEST['relevanssi_cat_active'] ) ) { update_option( 'relevanssi_cat', '' ); } } if ( isset( $_REQUEST['relevanssi_excat'] ) ) { if ( is_array( $_REQUEST['relevanssi_excat'] ) ) { $array_excats = $_REQUEST['relevanssi_excat']; $cat = get_option( 'relevanssi_cat' ); if ( $cat ) { $array_cats = explode( ',', $cat ); $valid_excats = array(); foreach ( $array_excats as $excat ) { if ( ! in_array( $excat, $array_cats, true ) ) { $valid_excats[] = $excat; } } } else { // No category restrictions, so everything's good. $valid_excats = $array_excats; } $csv_excats = implode( ',', $valid_excats ); update_option( 'relevanssi_excat', $csv_excats ); } } else { if ( isset( $_REQUEST['relevanssi_excat_active'] ) ) { update_option( 'relevanssi_excat', '' ); } } if ( isset( $_REQUEST['relevanssi_admin_search'] ) ) { update_option( 'relevanssi_admin_search', $_REQUEST['relevanssi_admin_search'] ); } if ( isset( $_REQUEST['relevanssi_excerpts'] ) ) { update_option( 'relevanssi_excerpts', $_REQUEST['relevanssi_excerpts'] ); } if ( isset( $_REQUEST['relevanssi_excerpt_type'] ) ) { update_option( 'relevanssi_excerpt_type', $_REQUEST['relevanssi_excerpt_type'] ); } if ( isset( $_REQUEST['relevanssi_excerpt_allowable_tags'] ) ) { update_option( 'relevanssi_excerpt_allowable_tags', $_REQUEST['relevanssi_excerpt_allowable_tags'] ); } if ( isset( $_REQUEST['relevanssi_log_queries'] ) ) { update_option( 'relevanssi_log_queries', $_REQUEST['relevanssi_log_queries'] ); } if ( isset( $_REQUEST['relevanssi_log_queries_with_ip'] ) ) { update_option( 'relevanssi_log_queries_with_ip', $_REQUEST['relevanssi_log_queries_with_ip'] ); } if ( isset( $_REQUEST['relevanssi_highlight'] ) ) { update_option( 'relevanssi_highlight', $_REQUEST['relevanssi_highlight'] ); } if ( isset( $_REQUEST['relevanssi_highlight_docs'] ) ) { update_option( 'relevanssi_highlight_docs', $_REQUEST['relevanssi_highlight_docs'] ); } if ( isset( $_REQUEST['relevanssi_highlight_comments'] ) ) { update_option( 'relevanssi_highlight_comments', $_REQUEST['relevanssi_highlight_comments'] ); } if ( isset( $_REQUEST['relevanssi_txt_col'] ) ) { update_option( 'relevanssi_txt_col', $_REQUEST['relevanssi_txt_col'] ); } if ( isset( $_REQUEST['relevanssi_bg_col'] ) ) { update_option( 'relevanssi_bg_col', $_REQUEST['relevanssi_bg_col'] ); } if ( isset( $_REQUEST['relevanssi_css'] ) ) { update_option( 'relevanssi_css', $_REQUEST['relevanssi_css'] ); } if ( isset( $_REQUEST['relevanssi_class'] ) ) { update_option( 'relevanssi_class', $_REQUEST['relevanssi_class'] ); } if ( isset( $_REQUEST['relevanssi_expst'] ) ) { update_option( 'relevanssi_exclude_posts', trim( $_REQUEST['relevanssi_expst'], ' ,' ) ); } if ( isset( $_REQUEST['relevanssi_hilite_title'] ) ) { update_option( 'relevanssi_hilite_title', $_REQUEST['relevanssi_hilite_title'] ); } if ( isset( $_REQUEST['relevanssi_index_comments'] ) ) { update_option( 'relevanssi_index_comments', $_REQUEST['relevanssi_index_comments'] ); } if ( isset( $_REQUEST['relevanssi_index_author'] ) ) { update_option( 'relevanssi_index_author', $_REQUEST['relevanssi_index_author'] ); } if ( isset( $_REQUEST['relevanssi_index_excerpt'] ) ) { update_option( 'relevanssi_index_excerpt', $_REQUEST['relevanssi_index_excerpt'] ); } if ( isset( $_REQUEST['relevanssi_index_image_files'] ) ) { update_option( 'relevanssi_index_image_files', $_REQUEST['relevanssi_index_image_files'] ); } if ( isset( $_REQUEST['relevanssi_fuzzy'] ) ) { update_option( 'relevanssi_fuzzy', $_REQUEST['relevanssi_fuzzy'] ); } if ( isset( $_REQUEST['relevanssi_expand_shortcodes'] ) ) { update_option( 'relevanssi_expand_shortcodes', $_REQUEST['relevanssi_expand_shortcodes'] ); } if ( isset( $_REQUEST['relevanssi_implicit_operator'] ) ) { update_option( 'relevanssi_implicit_operator', $_REQUEST['relevanssi_implicit_operator'] ); } if ( isset( $_REQUEST['relevanssi_omit_from_logs'] ) ) { update_option( 'relevanssi_omit_from_logs', $_REQUEST['relevanssi_omit_from_logs'] ); } if ( isset( $_REQUEST['relevanssi_disable_or_fallback'] ) ) { update_option( 'relevanssi_disable_or_fallback', $_REQUEST['relevanssi_disable_or_fallback'] ); } if ( isset( $_REQUEST['relevanssi_respect_exclude'] ) ) { update_option( 'relevanssi_respect_exclude', $_REQUEST['relevanssi_respect_exclude'] ); } if ( isset( $_REQUEST['relevanssi_throttle'] ) ) { update_option( 'relevanssi_throttle', $_REQUEST['relevanssi_throttle'] ); } if ( isset( $_REQUEST['relevanssi_wpml_only_current'] ) ) { update_option( 'relevanssi_wpml_only_current', $_REQUEST['relevanssi_wpml_only_current'] ); } if ( isset( $_REQUEST['relevanssi_polylang_all_languages'] ) ) { update_option( 'relevanssi_polylang_all_languages', $_REQUEST['relevanssi_polylang_all_languages'] ); } if ( isset( $_REQUEST['relevanssi_word_boundaries'] ) ) { update_option( 'relevanssi_word_boundaries', $_REQUEST['relevanssi_word_boundaries'] ); } if ( isset( $_REQUEST['relevanssi_default_orderby'] ) ) { update_option( 'relevanssi_default_orderby', $_REQUEST['relevanssi_default_orderby'] ); } if ( isset( $_REQUEST['relevanssi_excerpt_custom_fields'] ) ) { update_option( 'relevanssi_excerpt_custom_fields', $_REQUEST['relevanssi_excerpt_custom_fields'] ); } if ( isset( $_REQUEST['relevanssi_exact_match_bonus'] ) ) { update_option( 'relevanssi_exact_match_bonus', $_REQUEST['relevanssi_exact_match_bonus'] ); } if ( function_exists( 'relevanssi_update_premium_options' ) ) { relevanssi_update_premium_options(); } // phpcs:enable } /** * Prints out the 'User searches' page. */ function relevanssi_search_stats() { $relevanssi_hide_branding = get_option( 'relevanssi_hide_branding' ); if ( 'on' === $relevanssi_hide_branding ) { $options_txt = __( 'User searches', 'relevanssi' ); } else { $options_txt = __( 'Relevanssi User Searches', 'relevanssi' ); } if ( isset( $_REQUEST['relevanssi_reset'] ) && current_user_can( 'manage_options' ) ) { check_admin_referer( 'relevanssi_reset_logs', '_relresnonce' ); if ( isset( $_REQUEST['relevanssi_reset_code'] ) ) { if ( 'reset' === $_REQUEST['relevanssi_reset_code'] ) { $verbose = true; relevanssi_truncate_logs( $verbose ); } } } wp_enqueue_style( 'dashboard' ); wp_print_styles( 'dashboard' ); wp_enqueue_script( 'dashboard' ); wp_print_scripts( 'dashboard' ); printf( "

%s

", esc_html( $options_txt ) ); if ( 'on' === get_option( 'relevanssi_log_queries' ) ) { relevanssi_query_log(); } else { printf( '

%s

', esc_html__( 'Enable query logging to see stats here.', 'relevanssi' ) ); } } /** * Prints out the 'Admin search' page. */ function relevanssi_admin_search_page() { global $relevanssi_variables; $relevanssi_hide_branding = get_option( 'relevanssi_hide_branding' ); $options_txt = __( 'Admin Search', 'relevanssi' ); wp_enqueue_style( 'dashboard' ); wp_print_styles( 'dashboard' ); wp_enqueue_script( 'dashboard' ); wp_print_scripts( 'dashboard' ); printf( "

%s

", esc_html( $options_txt ) ); require_once dirname( $relevanssi_variables['file'] ) . '/lib/tabs/search-page.php'; relevanssi_search_tab(); } /** * Truncates the Relevanssi logs. * * @global object $wpdb The WP database interface. * @global array $relevanssi_variables The global Relevanssi variables array. * * @param boolean $verbose If true, prints out a notice. Default true. * * @return boolean True if success, false if failure. */ function relevanssi_truncate_logs( $verbose = true ) { global $wpdb, $relevanssi_variables; $result = $wpdb->query( 'TRUNCATE ' . $relevanssi_variables['log_table'] ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared if ( $verbose ) { if ( false !== $result ) { printf( "
%s
", esc_html__( 'Logs clear!', 'relevanssi' ) ); } else { printf( "
%s
", esc_html__( 'Clearing the logs failed.', 'relevanssi' ) ); } } return $result; } /** * Shows the query log with the most common queries * * Uses relevanssi_total_queries() and relevanssi_date_queries() to fetch the data. */ function relevanssi_query_log() { /** * Adjusts the number of days to show the logs in User searches page. * * @param int Number of days, default 1. */ $days1 = apply_filters( 'relevanssi_1day', 1 ); /** * Adjusts the number of days to show the logs in User searches page. * * @param int Number of days, default 7. */ $days7 = apply_filters( 'relevanssi_7days', 7 ); /** * Adjusts the number of days to show the logs in User searches page. * * @param int Number of days, default 30. */ $days30 = apply_filters( 'relevanssi_30days', 30 ); printf( '

%s

', esc_html__( 'Total Searches', 'relevanssi' ) ); printf( "
%s
", relevanssi_total_queries( __( 'Totals', 'relevanssi' ) ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo '
'; printf( '

%s

', esc_html__( 'Common Queries', 'relevanssi' ) ); /** * Filters the number of rows to show. * * @param int Number of top results to show, default 20. */ $limit = apply_filters( 'relevanssi_user_searches_limit', 20 ); // Translators: %d is the number of queries to show. printf( '

%s

', esc_html( sprintf( __( 'Here you can see the %d most common user search queries, how many times those queries were made and how many results were found for those queries.', 'relevanssi' ), $limit ) ) ); echo "
"; if ( 1 === $days1 ) { relevanssi_date_queries( $days1, __( 'Today and yesterday', 'relevanssi' ) ); } else { // Translators: number of days to show. relevanssi_date_queries( $days1, sprintf( __( 'Last %d days', 'relevanssi' ), $days1 ) ); } echo '
'; echo "
"; // Translators: number of days to show. relevanssi_date_queries( $days7, sprintf( __( 'Last %d days', 'relevanssi' ), $days7 ) ); echo '
'; echo "
"; // Translators: number of days to show. relevanssi_date_queries( $days30, sprintf( __( 'Last %d days', 'relevanssi' ), $days30 ) ); echo '
'; echo '
'; printf( '

%s

', esc_html__( 'Unsuccessful Queries', 'relevanssi' ) ); echo "
"; relevanssi_date_queries( 1, __( 'Today and yesterday', 'relevanssi' ), 'bad' ); echo '
'; echo "
"; relevanssi_date_queries( 7, __( 'Last 7 days', 'relevanssi' ), 'bad' ); echo '
'; echo "
"; // Translators: number of days to show. relevanssi_date_queries( $days30, sprintf( __( 'Last %d days', 'relevanssi' ), $days30 ), 'bad' ); echo '
'; if ( current_user_can( 'manage_options' ) ) { echo '
'; printf( '

%s

', esc_html__( 'Reset Logs', 'relevanssi' ) ); print( "
" ); wp_nonce_field( 'relevanssi_reset_logs', '_relresnonce', true, true ); printf( '

', // Translators: do not translate "reset". esc_html__( 'To reset the logs, type "reset" into the box here and click the Reset button', 'relevanssi' ), esc_html__( 'Reset', 'relevanssi' ) ); } echo '
'; } /** * Shows the total number of searches on 'User searches' page. * * @global object $wpdb The WP database interface. * @global array $relevanssi_variables The global Relevanssi variables array. * * @param string $title The title that is printed out on top of the results. */ function relevanssi_total_queries( $title ) { global $wpdb, $relevanssi_variables; $log_table = $relevanssi_variables['log_table']; $count = array(); $titles = array(); $titles[0] = __( 'Today and yesterday', 'relevanssi' ); $titles[1] = __( 'Last 7 days', 'relevanssi' ); $titles[2] = __( 'Last 30 days', 'relevanssi' ); $titles[3] = __( 'Forever', 'relevanssi' ); $count[0] = $wpdb->get_var( "SELECT COUNT(id) FROM $log_table WHERE TIMESTAMPDIFF(DAY, time, NOW()) <= 1;" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared $count[1] = $wpdb->get_var( "SELECT COUNT(id) FROM $log_table WHERE TIMESTAMPDIFF(DAY, time, NOW()) <= 7;" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared $count[2] = $wpdb->get_var( "SELECT COUNT(id) FROM $log_table WHERE TIMESTAMPDIFF(DAY, time, NOW()) <= 30;" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared $count[3] = $wpdb->get_var( "SELECT COUNT(id) FROM $log_table;" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared printf( '', esc_html( $title ), esc_html__( 'When', 'relevanssi' ), esc_html__( 'Searches', 'relevanssi' ) ); foreach ( $count as $key => $searches ) { $when = $titles[ $key ]; printf( "", esc_html( $when ), intval( $searches ) ); } echo '
%1$s
%2$s%3$s
%s%d
'; } /** * Shows the most common search queries on different time periods. * * @global object $wpdb The WP database interface. * @global array $relevanssi_variables The global Relevanssi variables array. * * @param int $days The number of days to show. * @param string $title The title that is printed out on top of the results. * @param string $version If 'good', show the searches that found something; if * 'bad', show the searches that didn't find anything. Default 'good'. */ function relevanssi_date_queries( $days, $title, $version = 'good' ) { global $wpdb, $relevanssi_variables; $log_table = $relevanssi_variables['log_table']; /** Documented in lib/interface.php. */ $limit = apply_filters( 'relevanssi_user_searches_limit', 20 ); if ( 'good' === $version ) { $queries = $wpdb->get_results( $wpdb->prepare( 'SELECT COUNT(DISTINCT(id)) as cnt, query, hits ' . "FROM $log_table " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared 'WHERE TIMESTAMPDIFF(DAY, time, NOW()) <= %d GROUP BY query ORDER BY cnt DESC LIMIT %d', $days, $limit ) ); } if ( 'bad' === $version ) { $queries = $wpdb->get_results( $wpdb->prepare( 'SELECT COUNT(DISTINCT(id)) as cnt, query, hits ' . "FROM $log_table " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared 'WHERE TIMESTAMPDIFF(DAY, time, NOW()) <= %d AND hits = 0 GROUP BY query ORDER BY cnt DESC LIMIT %d', $days, $limit ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared } if ( count( $queries ) > 0 ) { printf( "", esc_html( $title ), esc_html__( 'Query', 'relevanssi' ), esc_html__( 'Hits', 'relevanssi' ) ); $url = get_bloginfo( 'url' ); foreach ( $queries as $query ) { $search_parameter = rawurlencode( $query->query ); /** * Filters the query URL for the user searches page. * * @param string Query URL. */ $query_url = apply_filters( 'relevanssi_user_searches_query_url', $url . '/?s=' . $search_parameter ); printf( "", esc_attr( $query_url ), esc_attr( $query->query ), intval( $query->cnt ), intval( $query->hits ) ); } echo '
%s
%s#%s
%s%d%d
'; } } /** * Returns 'checked' if the option is enabled. * * @param string $option Value to check. * * @return string If the option is 'on', returns 'checked', otherwise returns an * empty string. */ function relevanssi_check( $option ) { $checked = ''; if ( 'on' === $option ) { $checked = 'checked'; } return $checked; } /** * Returns 'selected' if the option matches a value. * * @param string $option Value to check. * @param string $value The 'selected' value. * * @return string If the option matches the value, returns 'selected', otherwise * returns an empty string. */ function relevanssi_select( $option, $value ) { $selected = ''; if ( $option === $value ) { $selected = 'selected'; } return $selected; } /** * Prints out the Relevanssi options form. * * @global object $wpdb The WP database interface. * @global array $relevanssi_variables The global Relevanssi variables array. */ function relevanssi_options_form() { global $relevanssi_variables, $wpdb; wp_enqueue_style( 'dashboard' ); wp_print_styles( 'dashboard' ); wp_enqueue_script( 'dashboard' ); wp_print_scripts( 'dashboard' ); echo "
"; echo "
"; wp_nonce_field( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' ); $display_save_button = true; $active_tab = 'overview'; if ( isset( $_REQUEST['tab'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification $active_tab = $_REQUEST['tab']; // phpcs:ignore WordPress.Security.NonceVerification } if ( 'stopwords' === $active_tab ) { $display_save_button = false; } printf( "", esc_attr( $active_tab ) ); $this_page = '?page=' . plugin_basename( $relevanssi_variables['file'] ); ?> ' class='button button-primary' />
__( 'Click OK to copy Relevanssi options to all subsites', 'relevanssi' ), 'confirm_stopwords' => __( 'Are you sure you want to remove all stopwords?', 'relevanssi' ), 'truncating_index' => __( 'Wiping out the index...', 'relevanssi' ), 'done' => __( 'Done.', 'relevanssi' ), 'indexing_users' => __( 'Indexing users...', 'relevanssi' ), 'indexing_taxonomies' => __( 'Indexing the following taxonomies:', 'relevanssi' ), 'indexing_attachments' => __( 'Indexing attachments...', 'relevanssi' ), 'counting_posts' => __( 'Counting posts...', 'relevanssi' ), 'counting_terms' => __( 'Counting taxonomy terms...', 'relevanssi' ), 'counting_users' => __( 'Counting users...', 'relevanssi' ), 'counting_attachments' => __( 'Counting attachments...', 'relevanssi' ), 'posts_found' => __( 'posts found.', 'relevanssi' ), 'terms_found' => __( 'taxonomy terms found.', 'relevanssi' ), 'users_found' => __( 'users found.', 'relevanssi' ), 'attachments_found' => __( 'attachments found.', 'relevanssi' ), 'taxonomy_disabled' => __( 'Taxonomy term indexing is disabled.', 'relevanssi' ), 'user_disabled' => __( 'User indexing is disabled.', 'relevanssi' ), 'indexing_complete' => __( 'Indexing complete.', 'relevanssi' ), 'excluded_posts' => __( 'posts excluded.', 'relevanssi' ), 'options_changed' => __( 'Settings have changed, please save the options before indexing.', 'relevanssi' ), 'reload_state' => __( 'Reload the page to refresh the state of the index.', 'relevanssi' ), 'pdf_reset_confirm' => __( 'Are you sure you want to delete all attachment content from the index?', 'relevanssi' ), 'pdf_reset_done' => __( 'Relevanssi attachment data wiped clean.', 'relevanssi' ), 'pdf_reset_problems' => __( 'There were problems wiping the Relevanssi attachment data clean.', 'relevanssi' ), 'hour' => __( 'hour', 'relevanssi' ), 'hours' => __( 'hours', 'relevanssi' ), 'about' => __( 'about', 'relevanssi' ), 'sixty_min' => __( 'about an hour', 'relevanssi' ), 'ninety_min' => __( 'about an hour and a half', 'relevanssi' ), 'minute' => __( 'minute', 'relevanssi' ), 'minutes' => __( 'minutes', 'relevanssi' ), 'underminute' => __( 'less than a minute', 'relevanssi' ), 'notimeremaining' => __( "we're done!", 'relevanssi' ), ); wp_localize_script( 'relevanssi_admin_js', 'relevanssi', $localizations ); $nonce = array( 'indexing_nonce' => wp_create_nonce( 'relevanssi_indexing_nonce' ), 'searching_nonce' => wp_create_nonce( 'relevanssi_admin_search_nonce' ), ); if ( ! RELEVANSSI_PREMIUM ) { wp_localize_script( 'relevanssi_admin_js', 'nonce', $nonce ); } /** * Sets the indexing limit, ie. how many posts are indexed at once. * * Relevanssi starts by indexing this many posts at once. If the process * goes fast enough, Relevanssi will then increase the limit and if the * process is slow, the limit will be decreased. If necessary, you can * use the relevanssi_indexing_adjust filter hook to disable that * adjustment. * * @param int The indexing limit, default 10. */ $indexing_limit = apply_filters( 'relevanssi_indexing_limit', 10 ); /** * Sets the indexing adjustment. * * Relevanssi will adjust the number of posts indexed at once to speed * up the process if it goes fast and to slow down, if the posts are * slow to index. You can use this filter to stop that behaviour, making * Relevanssi index posts at constant pace. That's generally slower, but * more reliable. * * @param boolean Should the limit be adjusted, default true. */ $indexing_adjust = apply_filters( 'relevanssi_indexing_adjust', true ); wp_localize_script( 'relevanssi_admin_js', 'relevanssi_params', array( 'indexing_limit' => $indexing_limit, 'indexing_adjust' => $indexing_adjust, ) ); } /** * Prints out the form fields for tag and category weights. */ function relevanssi_form_tag_weight() { $taxonomy_weights = get_option( 'relevanssi_post_type_weights' ); $tag_value = 1; if ( isset( $taxonomy_weights['post_tag'] ) ) { $tag_value = $taxonomy_weights['post_tag']; } $category_value = 1; if ( isset( $taxonomy_weights['category'] ) ) { $category_value = $taxonomy_weights['category']; } ?>