should_display() ) { return; } $admin_bar->add_menu( [ 'id' => 'ep-basic-status', 'title' => '
ElasticPress
', ] ); $admin_bar->add_menu( [ 'parent' => 'ep-basic-status', 'id' => 'ep-basic-status-summary', 'title' => __( 'No calls made to Elasticsearch', 'elasticpress' ), ] ); } /** * Enqueue the style for the admin bar status. */ public function enqueue_style() { wp_enqueue_style( 'ep_general_styles', EP_URL . 'dist/css/general-styles.css', Utils\get_asset_info( 'general-styles', 'dependencies' ), Utils\get_asset_info( 'general-styles', 'version' ) ); } /** * Update the placeholders for the admin bar status. */ public function update_placeholders() { global $wp_query; if ( ! $this->should_display() ) { return; } $queries = $this->get_queries(); $status = $this->get_status( $queries ); $has_main_query = ! empty( $wp_query->query_vars['ep_integrate'] ); $is_main_query_success = $has_main_query && $wp_query->elasticsearch_success; $main_query_status = __( 'No', 'elasticpress' ); if ( $has_main_query ) { $main_query_status = $is_main_query_success ? __( 'Yes', 'elasticpress' ) : __( 'Failed', 'elasticpress' ); } $results = []; $results['main_query'] = sprintf( /* translators: %s: Yes, Failed, or No */ __( 'Main query: %s', 'elasticpress' ), $main_query_status ); $results['total_queries'] = sprintf( /* translators: %s: Total queries */ __( 'Total queries: %s', 'elasticpress' ), count( $queries['filtered'] ) ); $results['failed_queries'] = sprintf( /* translators: %s: Failed queries */ __( 'Failed queries: %s', 'elasticpress' ), count( $queries['failed'] ) ); $results['debugging_article'] = sprintf( '' . __( 'More about debugging', 'elasticpress' ) . '', 'https://www.elasticpress.io/resources/articles/using-the-elasticpress-debugging-add-on-plugin/' ); $status_and_summary = [ 'status' => $status, 'summary' => $results, ]; /** * Filter whether to display the admin bar status. * * @since 5.3.0 * @hook ep_admin_bar_status_and_summary * @param {array} $status_and_summary CSS class of status indicator. (success, warning, or error) * @param {array} $results Array of results to display in the admin bar. * @param {array} $queries Array of filtered and failed queries. * @param {bool} $has_main_query Whether the main query was integrated with Elasticsearch. * @param {bool} $is_main_query_success Whether the main query is successful. * @return {array} New status value */ $filtered_status_and_summary = apply_filters( 'ep_admin_bar_status_and_summary', $status_and_summary, $queries, $has_main_query, $is_main_query_success ); if ( ! isset( $filtered_status_and_summary['status'], $filtered_status_and_summary['summary'] ) ) { _doing_it_wrong( __METHOD__, esc_html__( 'The ep_admin_bar_status_and_summary filter must return an array with the status and summary keys.', 'elasticpress' ), 'ElasticPress 5.3.0' ); return; } $results_output = implode( '
', $filtered_status_and_summary['summary'] ); $final_output = ''; /** * Filter the final output of the admin bar status and summary. * * @since 5.3.0 * @hook ep_admin_bar_status_and_summary_output * @param {string} $final_output The final output of the admin bar status and summary. * @param {array} $filtered_status_and_summary The filtered status and summary. * @param {array} $queries The queries. * @return {string} New final output */ echo apply_filters( 'ep_admin_bar_status_and_summary_output', $final_output, $filtered_status_and_summary, $queries ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Whether to display the admin bar status. * * @return bool */ protected function should_display(): bool { /** * Filter whether to display the admin bar status. * * @since 5.3.0 * @hook ep_admin_bar_should_display * @param {bool} $should_display Whether to display the admin bar status. * @return {bool} New should display value */ return apply_filters( 'ep_admin_bar_should_display', current_user_can( Utils\get_capability( 'admin-bar' ) ) ); } /** * Get the queries. * * @since 5.3.0 * @return array Array of filtered and failed queries. */ protected function get_queries(): array { $queries = \ElasticPress\Elasticsearch::factory()->get_query_log(); $filtered_queries = array_filter( $queries, function ( $query ) { if ( ! isset( $query['request'] ) ) { return false; } return is_wp_error( $query['request'] ) || empty( $query['request']['is_ep_fake_request'] ); } ); $failed_queries = array_filter( $filtered_queries, function ( $query ) { return is_wp_error( $query['request'] ) || ! isset( $query['request']['response'], $query['request']['response']['code'] ) || $query['request']['response']['code'] < 200 || $query['request']['response']['code'] >= 300; } ); return [ 'filtered' => $filtered_queries, 'failed' => $failed_queries, ]; } /** * Get the status. * * @since 5.3.0 * @param array $queries The queries. * @return string The status. * success, error, or empty string. */ protected function get_status( $queries ): string { if ( $queries['filtered'] ) { return 'success'; } if ( $queries['failed'] ) { return 'error'; } return ''; } }