You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
3.5 KiB
PHP

<?php
/**
* URL Inspection features.
*
* @since 3.0.8
* @package RankMathPro
* @subpackage RankMathPro
* @author Rank Math <support@rankmath.com>
*/
namespace RankMathPro\Analytics;
use RankMath\Helper;
use RankMath\Traits\Hooker;
use RankMathPro\Analytics\DB;
/**
* Url_Inspection class.
*/
class Url_Inspection {
use Hooker;
/**
* The Constructor.
*/
public function __construct() {
$this->filter( 'rank_math/analytics/url_inspection_map_properties', 'map_inspection_properties', 10, 2 );
$this->action( 'rank_math/analytics/get_inspections_query', 'add_filter_params', 10, 2 );
$this->action( 'rank_math/analytics/get_inspections_count_query', 'add_filter_params', 10, 2 );
$this->filter( 'rank_math/analytics/post_data', 'add_index_verdict_data', 10, 2 );
// Enqueue.
$this->action( 'rank_math/admin/enqueue_scripts', 'enqueue_scripts' );
}
/**
* Filter to alter the where clause used in the get_inspections function.
*
* @param string $where WHERE clause.
* @param array $params Parameters.
*
* @return string
*/
public function add_filter_params( $query, $params ) {
if ( empty( $params['indexingFilter'] ) ) {
return;
}
$table = DB::inspections()->table;
$query->where( "$table.coverage_state", $params['indexingFilter'] );
}
/**
* Map properties in the API result to columns in the database.
*
* @param array $normalized Normalized data.
* @param array $incoming Incoming data from the API.
*
* @return array
*/
public function map_inspection_properties( $normalized, $incoming ) {
$handler = \RankMath\Google\Url_Inspection::get();
$handler->assign_inspection_value( $incoming, 'richResultsResult.detectedItems', 'rich_results_items', $normalized );
$handler->assign_inspection_value( $incoming, 'indexStatusResult.lastCrawlTime', 'last_crawl_time', $normalized );
// Store the raw response, too.
$normalized['raw_api_response'] = wp_json_encode( $incoming );
return $normalized;
}
/**
* Get stats for "Presence on Google" widget.
*/
public static function get_presence_stats() {
return DB::get_presence_stats();
}
/**
* Get stats for "Top Statuses" widget.
*/
public static function get_status_stats() {
return DB::get_status_stats();
}
/**
* Change user perference.
*
* @param array $data array.
* @param WP_REST_Request $request post object.
* @return array $data sorted array.
*/
public function add_index_verdict_data( $data, \WP_REST_Request $request ) {
if ( ! Helper::can_add_index_status() ) {
return $data;
}
$data['indexStatus'] = DB::get_index_verdict( $data['page'] );
return $data;
}
/**
* Enqueue scripts.
*/
public function enqueue_scripts() {
$screen = get_current_screen();
if ( 'rank-math_page_rank-math-analytics' !== $screen->id ) {
return;
}
$submit_url = add_query_arg(
[
'page' => 'instant-indexing',
'tab' => 'console',
'apiaction' => 'update',
'_wpnonce' => wp_create_nonce( 'giapi-action' ),
'apipostid[]' => '',
],
admin_url( 'admin.php' )
);
$settings = get_option( 'rank-math-options-instant-indexing', [] );
Helper::add_json(
'instantIndexingSupport',
[
'isPluginActive' => is_plugin_active( 'fast-indexing-api/instant-indexing.php' ),
'isGoogleConfigured' => ! empty( $settings['json_key'] ),
'submitUrl' => $submit_url,
]
);
}
}