*/
namespace RankMath\Monitor;
use RankMath\Helper;
use MyThemeShop\Admin\List_Table;
use RankMath\Redirections\Cache;
defined( 'ABSPATH' ) || exit;
/**
* Table class.
*/
class Table extends List_Table {
/**
* The Constructor.
*/
public function __construct() {
parent::__construct(
[
'singular' => esc_html__( 'event', 'rank-math' ),
'plural' => esc_html__( 'events', 'rank-math' ),
'no_items' => esc_html__( 'The 404 error log is empty.', 'rank-math' ),
]
);
}
/**
* Prepares the list of items for displaying.
*/
public function prepare_items() {
global $per_page;
$per_page = $this->get_items_per_page( 'rank_math_404_monitor_per_page', 100 );
$search = $this->get_search();
$data = DB::get_logs(
[
'limit' => $per_page,
'order' => $this->get_order(),
'orderby' => $this->get_orderby( 'accessed' ),
'paged' => $this->get_pagenum(),
'search' => $search ? $search : '',
]
);
$this->items = $data['logs'];
foreach ( $this->items as $i => $item ) {
$this->items[ $i ]['uri_decoded'] = urldecode( $item['uri'] );
}
$this->set_pagination_args(
[
'total_items' => $data['count'],
'per_page' => $per_page,
]
);
}
/**
* Extra controls to be displayed between bulk actions and pagination.
*
* @param string $which Where to show nav.
*/
protected function extra_tablenav( $which ) {
if ( empty( $this->items ) ) {
return;
}
?>
', $item['id']
);
}
/**
* Handle the URI column.
*
* @param object $item The current item.
*/
protected function column_uri( $item ) {
return esc_html( $item['uri_decoded'] ) . $this->column_actions( $item );
}
/**
* Handle the referer column.
*
* @param object $item The current item.
*/
protected function column_referer( $item ) {
return '' . esc_html( $item['referer'] ) . '';
}
/**
* Handles the default column output.
*
* @param object $item The current item.
* @param string $column_name The current column name.
*/
public function column_default( $item, $column_name ) {
if ( in_array( $column_name, [ 'times_accessed', 'accessed', 'user_agent' ], true ) ) {
return esc_html( $item[ $column_name ] );
}
return print_r( $item, true );
}
/**
* Generate row actions div.
*
* @param object $item The current item.
*/
public function column_actions( $item ) {
$actions = [];
if ( Helper::get_module( 'redirections' ) ) {
$redirection = Cache::get_by_url( $item['uri_decoded'] );
if ( $redirection ) {
$url = esc_url(
Helper::get_admin_url(
'redirections',
[
'redirection' => $redirection->redirection_id,
'security' => wp_create_nonce( 'redirection_list_action' ),
]
)
);
$actions['view_redirection'] = sprintf( '' . esc_html__( 'View Redirection', 'rank-math' ) . '', $url );
} else {
$url = esc_url(
Helper::get_admin_url(
'redirections',
[
'url' => $item['uri_decoded'],
]
)
);
$actions['redirect'] = sprintf(
'%2$s',
$url, esc_html__( 'Redirect', 'rank-math' )
);
}
}
$actions['delete'] = sprintf(
'' . esc_html__( 'Delete', 'rank-math' ) . '',
Helper::get_admin_url(
'404-monitor',
[
'action' => 'delete',
'log' => $item['id'],
'security' => wp_create_nonce( '404_delete_log' ),
]
)
);
return $this->row_actions( $actions );
}
/**
* Get a list of columns.
*
* @return array
*/
public function get_columns() {
$columns = [
'cb' => '',
'uri' => esc_html__( 'URI', 'rank-math' ),
'referer' => esc_html__( 'Referer', 'rank-math' ),
'user_agent' => esc_html__( 'User-Agent', 'rank-math' ),
'times_accessed' => esc_html__( 'Hits', 'rank-math' ),
'accessed' => esc_html__( 'Access Time', 'rank-math' ),
];
if ( 'simple' === Helper::get_settings( 'general.404_monitor_mode' ) ) {
unset( $columns['referer'], $columns['user_agent'] );
return $columns;
}
unset( $columns['times_accessed'] );
return $columns;
}
/**
* Get a list of sortable columns.
*
* @return array
*/
public function get_sortable_columns() {
return [
'uri' => [ 'uri', false ],
'times_accessed' => [ 'times_accessed', false ],
'accessed' => [ 'accessed', false ],
];
}
/**
* Get an associative array ( option_name => option_title ) with the list
* of bulk actions available on this table.
*
* @return array
*/
public function get_bulk_actions() {
$actions = [
'redirect' => esc_html__( 'Redirect', 'rank-math' ),
'delete' => esc_html__( 'Delete', 'rank-math' ),
];
if ( ! Helper::get_module( 'redirections' ) ) {
unset( $actions['redirect'] );
}
return $actions;
}
}