*/ namespace RankMath\Monitor; use RankMath\Helper; use RankMath\Module; use MyThemeShop\Admin\Page; use MyThemeShop\Helpers\Str; use MyThemeShop\Helpers\Arr; use MyThemeShop\Helpers\Param; use MyThemeShop\Helpers\WordPress; defined( 'ABSPATH' ) || exit; /** * Admin class. */ class Admin extends Module { /** * The Constructor. * * @codeCoverageIgnore */ public function __construct() { $directory = dirname( __FILE__ ); $this->config( [ 'id' => '404-monitor', 'directory' => $directory, 'table' => 'RankMath\Monitor\Table', 'help' => [ 'title' => esc_html__( '404 Monitor', 'rank-math' ), 'view' => $directory . '/views/help.php', ], 'screen_options' => [ 'id' => 'rank_math_404_monitor_per_page', 'default' => 100, ], ] ); parent::__construct(); if ( $this->page->is_current_page() ) { $this->action( 'init', 'init' ); } if ( Helper::has_cap( '404_monitor' ) ) { $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 11 ); $this->filter( 'rank_math/settings/general', 'add_settings' ); } } /** * Initialize. * * @codeCoverageIgnore */ public function init() { $action = WordPress::get_request_action(); if ( false === $action || ! in_array( $action, [ 'delete', 'clear_log' ], true ) ) { return; } if ( ! check_admin_referer( 'bulk-events' ) ) { check_admin_referer( '404_delete_log', 'security' ); } $action = 'do_' . $action; $this->$action(); } /** * Delete selected log. */ protected function do_delete() { $log = Param::request( 'log', '', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); if ( empty( $log ) ) { return; } $count = DB::delete_log( $log ); if ( $count > 0 ) { Helper::add_notification( /* translators: delete counter */ sprintf( esc_html__( '%d log(s) deleted.', 'rank-math' ), $count ), [ 'type' => 'success' ] ); } } /** * Clear logs. */ protected function do_clear_log() { $count = DB::get_count(); DB::clear_logs(); Helper::add_notification( /* translators: delete counter */ sprintf( esc_html__( 'Log cleared - %d items deleted.', 'rank-math' ), $count ), [ 'type' => 'success' ] ); } /** * Register admin page. * * @codeCoverageIgnore */ public function register_admin_page() { $dir = $this->directory . '/views/'; $uri = untrailingslashit( plugin_dir_url( __FILE__ ) ); $this->page = new Page( 'rank-math-404-monitor', esc_html__( '404 Monitor', 'rank-math' ), [ 'position' => 12, 'parent' => 'rank-math', 'capability' => 'rank_math_404_monitor', 'render' => $dir . 'main.php', 'classes' => [ 'rank-math-page' ], 'help' => [ '404-overview' => [ 'title' => esc_html__( 'Overview', 'rank-math' ), 'view' => $dir . 'help-tab-overview.php', ], '404-screen-content' => [ 'title' => esc_html__( 'Screen Content', 'rank-math' ), 'view' => $dir . 'help-tab-screen-content.php', ], '404-actions' => [ 'title' => esc_html__( 'Available Actions', 'rank-math' ), 'view' => $dir . 'help-tab-actions.php', ], '404-bulk' => [ 'title' => esc_html__( 'Bulk Actions', 'rank-math' ), 'view' => $dir . 'help-tab-bulk.php', ], ], 'assets' => [ 'styles' => [ 'rank-math-common' => '' ], 'scripts' => [ 'rank-math-404-monitor' => $uri . '/assets/404-monitor.js' ], ], ]); if ( $this->page->is_current_page() ) { Helper::add_json( 'logConfirmClear', esc_html__( 'Are you sure you wish to delete all 404 error logs?', 'rank-math' ) ); Helper::add_json( 'redirectionsUri', Helper::get_admin_url( 'redirections' ) ); } } /** * Add module settings into general optional panel. * * @codeCoverageIgnore * * @param array $tabs Array of option panel tabs. * * @return array */ public function add_settings( $tabs ) { Arr::insert( $tabs, [ '404-monitor' => [ 'icon' => 'dashicons dashicons-no', 'title' => esc_html__( '404 Monitor', 'rank-math' ), /* translators: 1. Link to kb article 2. Link to redirection setting scree */ 'desc' => sprintf( esc_html__( 'The 404 monitor lets you see the URLs where visitors and search engine crawlers run into 404 not found errors on your site. %1$s. Turn on %2$s too to redirect the faulty URLs easily.', 'rank-math' ), '' . esc_html__( 'Learn more', 'rank-math' ) . '', '' . esc_html__( 'Redirections', 'rank-math' ) . '' ), 'file' => $this->directory . '/views/options.php', ], ], 7 ); return $tabs; } /** * Add stats into admin dashboard. * * @codeCoverageIgnore */ public function dashboard_widget() { $data = DB::get_stats(); ?>