File "ActionScheduler_Abstract_ListTable.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/packages/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php
File
size: 13.69 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
if (!class_exists('WP_List_Table')) {
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}
abstract class ActionScheduler_Abstract_ListTable extends WP_List_Table
{
protected $table_name;
protected $package;
protected $items_per_page = 10;
protected $search_by = array();
protected $columns = array();
protected $row_actions = array();
protected $ID = 'ID';
protected $sort_by = array();
protected $filter_by = array();
protected $status_counts = array();
protected $admin_notices = array();
protected $table_header;
protected $bulk_actions = array();
protected function translate($text, $context = '')
{
return $text;
}
protected function get_bulk_actions()
{
$actions = array();
foreach ($this->bulk_actions as $action => $label) {
if (!is_callable(array($this, 'bulk_' . $action))) {
throw new RuntimeException("The bulk action {$action} does not have a callback method");
}
$actions[$action] = $label;
}
return $actions;
}
protected function process_bulk_action()
{
global $wpdb;
$action = $this->current_action();
if (!$action) {
return;
}
check_admin_referer('bulk-' . $this->_args['plural']);
$method = 'bulk_' . $action;
if (array_key_exists($action, $this->bulk_actions) && is_callable(array($this, $method)) && !empty($_GET['ID']) && is_array($_GET['ID'])) {
$ids_sql = '(' . implode(',', array_fill(0, count($_GET['ID']), '%s')) . ')';
$this->{$method}($_GET['ID'], $wpdb->prepare($ids_sql, $_GET['ID']));
}
wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2'), wp_unslash($_SERVER['REQUEST_URI'])));
exit;
}
protected function bulk_delete(array $ids, $ids_sql)
{
$store = ActionScheduler::store();
foreach ($ids as $action_id) {
$store->delete($action_id);
}
}
protected function prepare_column_headers()
{
$this->_column_headers = array($this->get_columns(), get_hidden_columns($this->screen), $this->get_sortable_columns());
}
public function get_sortable_columns()
{
$sort_by = array();
foreach ($this->sort_by as $column) {
$sort_by[$column] = array($column, true);
}
return $sort_by;
}
public function get_columns()
{
$columns = array_merge(array('cb' => '<input type="checkbox" />'), $this->columns);
return $columns;
}
protected function get_items_query_limit()
{
global $wpdb;
$per_page = $this->get_items_per_page($this->package . '_items_per_page', $this->items_per_page);
return $wpdb->prepare('LIMIT %d', $per_page);
}
protected function get_items_offset()
{
$per_page = $this->get_items_per_page($this->package . '_items_per_page', $this->items_per_page);
$current_page = $this->get_pagenum();
if (1 < $current_page) {
$offset = $per_page * ($current_page - 1);
} else {
$offset = 0;
}
return $offset;
}
protected function get_items_query_offset()
{
global $wpdb;
return $wpdb->prepare('OFFSET %d', $this->get_items_offset());
}
protected function get_items_query_order()
{
if (empty($this->sort_by)) {
return '';
}
$orderby = esc_sql($this->get_request_orderby());
$order = esc_sql($this->get_request_order());
return "ORDER BY {$orderby} {$order}";
}
protected function get_request_orderby()
{
$valid_sortable_columns = array_values($this->sort_by);
if (!empty($_GET['orderby']) && in_array($_GET['orderby'], $valid_sortable_columns)) {
$orderby = sanitize_text_field($_GET['orderby']);
} else {
$orderby = $valid_sortable_columns[0];
}
return $orderby;
}
protected function get_request_order()
{
if (!empty($_GET['order']) && 'desc' === strtolower($_GET['order'])) {
$order = 'DESC';
} else {
$order = 'ASC';
}
return $order;
}
protected function get_request_status()
{
$status = !empty($_GET['status']) ? $_GET['status'] : '';
return $status;
}
protected function get_request_search_query()
{
$search_query = !empty($_GET['s']) ? $_GET['s'] : '';
return $search_query;
}
protected function get_table_columns()
{
$columns = array_keys($this->columns);
if (!in_array($this->ID, $columns)) {
$columns[] = $this->ID;
}
return $columns;
}
protected function get_items_query_search()
{
global $wpdb;
if (empty($_GET['s']) || empty($this->search_by)) {
return '';
}
$filter = array();
foreach ($this->search_by as $column) {
$filter[] = $wpdb->prepare('`' . $column . '` like "%%s%"', $wpdb->esc_like($_GET['s']));
}
return implode(' OR ', $filter);
}
protected function get_items_query_filters()
{
global $wpdb;
if (!$this->filter_by || empty($_GET['filter_by']) || !is_array($_GET['filter_by'])) {
return '';
}
$filter = array();
foreach ($this->filter_by as $column => $options) {
if (empty($_GET['filter_by'][$column]) || empty($options[$_GET['filter_by'][$column]])) {
continue;
}
$filter[] = $wpdb->prepare("`{$column}` = %s", $_GET['filter_by'][$column]);
}
return implode(' AND ', $filter);
}
public function prepare_items()
{
global $wpdb;
$this->process_bulk_action();
$this->process_row_actions();
if (!empty($_REQUEST['_wp_http_referer'])) {
wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI'])));
exit;
}
$this->prepare_column_headers();
$limit = $this->get_items_query_limit();
$offset = $this->get_items_query_offset();
$order = $this->get_items_query_order();
$where = array_filter(array($this->get_items_query_search(), $this->get_items_query_filters()));
$columns = '`' . implode('`, `', $this->get_table_columns()) . '`';
if (!empty($where)) {
$where = 'WHERE (' . implode(') AND (', $where) . ')';
} else {
$where = '';
}
$sql = "SELECT {$columns} FROM {$this->table_name} {$where} {$order} {$limit} {$offset}";
$this->set_items($wpdb->get_results($sql, ARRAY_A));
$query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}";
$total_items = $wpdb->get_var($query_count);
$per_page = $this->get_items_per_page($this->package . '_items_per_page', $this->items_per_page);
$this->set_pagination_args(array('total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil($total_items / $per_page)));
}
public function extra_tablenav($which)
{
if (!$this->filter_by || 'top' !== $which) {
return;
}
echo '<div class="alignleft actions">';
foreach ($this->filter_by as $id => $options) {
$default = !empty($_GET['filter_by'][$id]) ? $_GET['filter_by'][$id] : '';
if (empty($options[$default])) {
$default = '';
}
echo '<select name="filter_by[' . esc_attr($id) . ']" class="first" id="filter-by-' . esc_attr($id) . '">';
foreach ($options as $value => $label) {
echo '<option value="' . esc_attr($value) . '" ' . esc_html($value == $default ? 'selected' : '') . '>' . esc_html($label) . '</option>';
}
echo '</select>';
}
submit_button(esc_html__('Filter', 'woocommerce'), '', 'filter_action', false, array('id' => 'post-query-submit'));
echo '</div>';
}
protected function set_items(array $items)
{
$this->items = array();
foreach ($items as $item) {
$this->items[$item[$this->ID]] = array_map('maybe_unserialize', $item);
}
}
public function column_cb($row)
{
return '<input name="ID[]" type="checkbox" value="' . esc_attr($row[$this->ID]) . '" />';
}
protected function maybe_render_actions($row, $column_name)
{
if (empty($this->row_actions[$column_name])) {
return;
}
$row_id = $row[$this->ID];
$actions = '<div class="row-actions">';
$action_count = 0;
foreach ($this->row_actions[$column_name] as $action_key => $action) {
$action_count++;
if (!method_exists($this, 'row_action_' . $action_key)) {
continue;
}
$action_link = !empty($action['link']) ? $action['link'] : add_query_arg(array('row_action' => $action_key, 'row_id' => $row_id, 'nonce' => wp_create_nonce($action_key . '::' . $row_id)));
$span_class = !empty($action['class']) ? $action['class'] : $action_key;
$separator = $action_count < count($this->row_actions[$column_name]) ? ' | ' : '';
$actions .= sprintf('<span class="%s">', esc_attr($span_class));
$actions .= sprintf('<a href="%1$s" title="%2$s">%3$s</a>', esc_url($action_link), esc_attr($action['desc']), esc_html($action['name']));
$actions .= sprintf('%s</span>', $separator);
}
$actions .= '</div>';
return $actions;
}
protected function process_row_actions()
{
$parameters = array('row_action', 'row_id', 'nonce');
foreach ($parameters as $parameter) {
if (empty($_REQUEST[$parameter])) {
return;
}
}
$method = 'row_action_' . $_REQUEST['row_action'];
if ($_REQUEST['nonce'] === wp_create_nonce($_REQUEST['row_action'] . '::' . $_REQUEST['row_id']) && method_exists($this, $method)) {
$this->{$method}($_REQUEST['row_id']);
}
wp_redirect(remove_query_arg(array('row_id', 'row_action', 'nonce'), wp_unslash($_SERVER['REQUEST_URI'])));
exit;
}
public function column_default($item, $column_name)
{
$column_html = esc_html($item[$column_name]);
$column_html .= $this->maybe_render_actions($item, $column_name);
return $column_html;
}
protected function display_header()
{
echo '<h1 class="wp-heading-inline">' . esc_attr($this->table_header) . '</h1>';
if ($this->get_request_search_query()) {
echo '<span class="subtitle">' . esc_attr(sprintf(__('Search results for "%s"', 'woocommerce'), $this->get_request_search_query())) . '</span>';
}
echo '<hr class="wp-header-end">';
}
protected function display_admin_notices()
{
foreach ($this->admin_notices as $notice) {
echo '<div id="message" class="' . $notice['class'] . '">';
echo ' <p>' . wp_kses_post($notice['message']) . '</p>';
echo '</div>';
}
}
protected function display_filter_by_status()
{
$status_list_items = array();
$request_status = $this->get_request_status();
if (!isset($this->status_counts['all'])) {
$this->status_counts = array('all' => array_sum($this->status_counts)) + $this->status_counts;
}
foreach ($this->status_counts as $status_name => $count) {
if (0 === $count) {
continue;
}
if ($status_name === $request_status || empty($request_status) && 'all' === $status_name) {
$status_list_item = '<li class="%1$s"><strong>%3$s</strong> (%4$d)</li>';
} else {
$status_list_item = '<li class="%1$s"><a href="%2$s">%3$s</a> (%4$d)</li>';
}
$status_filter_url = 'all' === $status_name ? remove_query_arg('status') : add_query_arg('status', $status_name);
$status_filter_url = remove_query_arg(array('paged', 's'), $status_filter_url);
$status_list_items[] = sprintf($status_list_item, esc_attr($status_name), esc_url($status_filter_url), esc_html(ucfirst($status_name)), absint($count));
}
if ($status_list_items) {
echo '<ul class="subsubsub">';
echo implode(" | \n", $status_list_items);
echo '</ul>';
}
}
protected function display_table()
{
echo '<form id="' . esc_attr($this->_args['plural']) . '-filter" method="get">';
foreach ($_GET as $key => $value) {
if ('_' === $key[0] || 'paged' === $key || 'ID' === $key) {
continue;
}
echo '<input type="hidden" name="' . esc_attr($key) . '" value="' . esc_attr($value) . '" />';
}
if (!empty($this->search_by)) {
echo $this->search_box($this->get_search_box_button_text(), 'plugin');
}
parent::display();
echo '</form>';
}
public function process_actions()
{
$this->process_bulk_action();
$this->process_row_actions();
if (!empty($_REQUEST['_wp_http_referer'])) {
wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI'])));
exit;
}
}
public function display_page()
{
$this->prepare_items();
echo '<div class="wrap">';
$this->display_header();
$this->display_admin_notices();
$this->display_filter_by_status();
$this->display_table();
echo '</div>';
}
protected function get_search_box_placeholder()
{
return esc_html__('Search', 'woocommerce');
}
}