File "class-wp-privacy-requests-table.php"
Full path: /home/kosmetik/public_html/wp-includes/wp-admin/includes/class-wp-privacy-requests-table.php
File
size: 9.79 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
abstract class WP_Privacy_Requests_Table extends WP_List_Table
{
protected $request_type = 'INVALID';
protected $post_type = 'INVALID';
public function get_columns()
{
$columns = array('cb' => '<input type="checkbox" />', 'email' => __('Requester'), 'status' => __('Status'), 'created_timestamp' => __('Requested'), 'next_steps' => __('Next steps'));
return $columns;
}
protected function get_admin_url()
{
$pagenow = str_replace('_', '-', $this->request_type);
if ('remove-personal-data' === $pagenow) {
$pagenow = 'erase-personal-data';
}
return admin_url($pagenow . '.php');
}
protected function get_sortable_columns()
{
$desc_first = isset($_GET['orderby']);
return array('email' => 'requester', 'created_timestamp' => array('requested', $desc_first));
}
protected function get_default_primary_column_name()
{
return 'email';
}
protected function get_request_counts()
{
global $wpdb;
$cache_key = $this->post_type . '-' . $this->request_type;
$counts = wp_cache_get($cache_key, 'counts');
if (false !== $counts) {
return $counts;
}
$query = "\n\t\t\tSELECT post_status, COUNT( * ) AS num_posts\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = %s\n\t\t\tAND post_name = %s\n\t\t\tGROUP BY post_status";
$results = (array) $wpdb->get_results($wpdb->prepare($query, $this->post_type, $this->request_type), ARRAY_A);
$counts = array_fill_keys(get_post_stati(), 0);
foreach ($results as $row) {
$counts[$row['post_status']] = $row['num_posts'];
}
$counts = (object) $counts;
wp_cache_set($cache_key, $counts, 'counts');
return $counts;
}
protected function get_views()
{
$current_status = isset($_REQUEST['filter-status']) ? sanitize_text_field($_REQUEST['filter-status']) : '';
$statuses = _wp_privacy_statuses();
$views = array();
$counts = $this->get_request_counts();
$total_requests = absint(array_sum((array) $counts));
$admin_url = $this->get_admin_url();
$current_link_attributes = empty($current_status) ? ' class="current" aria-current="page"' : '';
$status_label = sprintf(_nx('All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_requests, 'requests'), number_format_i18n($total_requests));
$views['all'] = sprintf('<a href="%s"%s>%s</a>', esc_url($admin_url), $current_link_attributes, $status_label);
foreach ($statuses as $status => $label) {
$post_status = get_post_status_object($status);
if (!$post_status) {
continue;
}
$current_link_attributes = $status === $current_status ? ' class="current" aria-current="page"' : '';
$total_status_requests = absint($counts->{$status});
if (!$total_status_requests) {
continue;
}
$status_label = sprintf(translate_nooped_plural($post_status->label_count, $total_status_requests), number_format_i18n($total_status_requests));
$status_link = add_query_arg('filter-status', $status, $admin_url);
$views[$status] = sprintf('<a href="%s"%s>%s</a>', esc_url($status_link), $current_link_attributes, $status_label);
}
return $views;
}
protected function get_bulk_actions()
{
return array('resend' => __('Resend confirmation requests'), 'complete' => __('Mark requests as completed'), 'delete' => __('Delete requests'));
}
public function process_bulk_action()
{
$action = $this->current_action();
$request_ids = isset($_REQUEST['request_id']) ? wp_parse_id_list(wp_unslash($_REQUEST['request_id'])) : array();
if (empty($request_ids)) {
return;
}
$count = 0;
$failures = 0;
check_admin_referer('bulk-privacy_requests');
switch ($action) {
case 'resend':
foreach ($request_ids as $request_id) {
$resend = _wp_privacy_resend_request($request_id);
if ($resend && !is_wp_error($resend)) {
$count++;
} else {
$failures++;
}
}
if ($failures) {
add_settings_error('bulk_action', 'bulk_action', sprintf(_n('%d confirmation request failed to resend.', '%d confirmation requests failed to resend.', $failures), $failures), 'error');
}
if ($count) {
add_settings_error('bulk_action', 'bulk_action', sprintf(_n('%d confirmation request re-sent successfully.', '%d confirmation requests re-sent successfully.', $count), $count), 'success');
}
break;
case 'complete':
foreach ($request_ids as $request_id) {
$result = _wp_privacy_completed_request($request_id);
if ($result && !is_wp_error($result)) {
$count++;
}
}
add_settings_error('bulk_action', 'bulk_action', sprintf(_n('%d request marked as complete.', '%d requests marked as complete.', $count), $count), 'success');
break;
case 'delete':
foreach ($request_ids as $request_id) {
if (wp_delete_post($request_id, true)) {
$count++;
} else {
$failures++;
}
}
if ($failures) {
add_settings_error('bulk_action', 'bulk_action', sprintf(_n('%d request failed to delete.', '%d requests failed to delete.', $failures), $failures), 'error');
}
if ($count) {
add_settings_error('bulk_action', 'bulk_action', sprintf(_n('%d request deleted successfully.', '%d requests deleted successfully.', $count), $count), 'success');
}
break;
}
}
public function prepare_items()
{
$this->items = array();
$posts_per_page = $this->get_items_per_page($this->request_type . '_requests_per_page');
$args = array('post_type' => $this->post_type, 'post_name__in' => array($this->request_type), 'posts_per_page' => $posts_per_page, 'offset' => isset($_REQUEST['paged']) ? max(0, absint($_REQUEST['paged']) - 1) * $posts_per_page : 0, 'post_status' => 'any', 's' => isset($_REQUEST['s']) ? sanitize_text_field($_REQUEST['s']) : '');
$orderby_mapping = array('requester' => 'post_title', 'requested' => 'post_date');
if (isset($_REQUEST['orderby']) && isset($orderby_mapping[$_REQUEST['orderby']])) {
$args['orderby'] = $orderby_mapping[$_REQUEST['orderby']];
}
if (isset($_REQUEST['order']) && in_array(strtoupper($_REQUEST['order']), array('ASC', 'DESC'), true)) {
$args['order'] = strtoupper($_REQUEST['order']);
}
if (!empty($_REQUEST['filter-status'])) {
$filter_status = isset($_REQUEST['filter-status']) ? sanitize_text_field($_REQUEST['filter-status']) : '';
$args['post_status'] = $filter_status;
}
$requests_query = new WP_Query($args);
$requests = $requests_query->posts;
foreach ($requests as $request) {
$this->items[] = wp_get_user_request($request->ID);
}
$this->items = array_filter($this->items);
$this->set_pagination_args(array('total_items' => $requests_query->found_posts, 'per_page' => $posts_per_page));
}
public function column_cb($item)
{
return sprintf('<input type="checkbox" name="request_id[]" value="%1$s" /><span class="spinner"></span>', esc_attr($item->ID));
}
public function column_status($item)
{
$status = get_post_status($item->ID);
$status_object = get_post_status_object($status);
if (!$status_object || empty($status_object->label)) {
return '-';
}
$timestamp = false;
switch ($status) {
case 'request-confirmed':
$timestamp = $item->confirmed_timestamp;
break;
case 'request-completed':
$timestamp = $item->completed_timestamp;
break;
}
echo '<span class="status-label status-' . esc_attr($status) . '">';
echo esc_html($status_object->label);
if ($timestamp) {
echo ' (' . $this->get_timestamp_as_date($timestamp) . ')';
}
echo '</span>';
}
protected function get_timestamp_as_date($timestamp)
{
if (empty($timestamp)) {
return '';
}
$time_diff = time() - $timestamp;
if ($time_diff >= 0 && $time_diff < DAY_IN_SECONDS) {
return sprintf(__('%s ago'), human_time_diff($timestamp));
}
return date_i18n(get_option('date_format'), $timestamp);
}
public function column_default($item, $column_name)
{
do_action("manage_{$this->screen->id}_custom_column", $column_name, $item);
}
public function column_created_timestamp($item)
{
return $this->get_timestamp_as_date($item->created_timestamp);
}
public function column_email($item)
{
return sprintf('<a href="%1$s">%2$s</a> %3$s', esc_url('mailto:' . $item->email), $item->email, $this->row_actions(array()));
}
public function column_next_steps($item)
{
}
public function single_row($item)
{
$status = $item->status;
echo '<tr id="request-' . esc_attr($item->ID) . '" class="status-' . esc_attr($status) . '">';
$this->single_row_columns($item);
echo '</tr>';
}
public function embed_scripts()
{
}
}