installed plugin Easy Digital Downloads
version 3.1.0.3
This commit is contained in:
@ -0,0 +1,244 @@
|
||||
<?php
|
||||
/**
|
||||
* List Table Base Class.
|
||||
*
|
||||
* @package EDD
|
||||
* @subpackage Admin
|
||||
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 3.0
|
||||
*/
|
||||
namespace EDD\Admin;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
// Load WP_List_Table if not loaded
|
||||
if ( ! class_exists( 'WP_List_Table' ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements a base list table class to be extended by core.
|
||||
*
|
||||
* @since 3.0
|
||||
* @abstract
|
||||
*/
|
||||
abstract class List_Table extends \WP_List_Table {
|
||||
|
||||
/**
|
||||
* Arguments for the data set.
|
||||
*
|
||||
* @since 3.0
|
||||
* @var array
|
||||
*/
|
||||
public $args = array();
|
||||
|
||||
/**
|
||||
* Number of results to show per page.
|
||||
*
|
||||
* @since 3.0
|
||||
* @var int
|
||||
*/
|
||||
public $per_page = 30;
|
||||
|
||||
/**
|
||||
* Counts.
|
||||
*
|
||||
* @since 3.0
|
||||
* @var array
|
||||
*/
|
||||
public $counts = array(
|
||||
'total' => 0
|
||||
);
|
||||
|
||||
/**
|
||||
* Get a request var, or return the default if not set.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param string $var
|
||||
* @param mixed $default
|
||||
* @return mixed Un-sanitized request var
|
||||
*/
|
||||
public function get_request_var( $var = '', $default = false ) {
|
||||
return isset( $_REQUEST[ $var ] )
|
||||
? $_REQUEST[ $var ]
|
||||
: $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a status request var, if set.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param mixed $default
|
||||
* @return string
|
||||
*/
|
||||
protected function get_status( $default = '' ) {
|
||||
return sanitize_key( $this->get_request_var( 'status', $default ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the current page number.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @return int Current page number.
|
||||
*/
|
||||
protected function get_paged() {
|
||||
return absint( $this->get_request_var( 'paged', 1 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the current page number.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @return int Current page number.
|
||||
*/
|
||||
protected function get_search() {
|
||||
return urldecode( trim( $this->get_request_var( 's', '' ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the data to be populated into the list table.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @return array Array of list table data.
|
||||
*/
|
||||
abstract public function get_data();
|
||||
|
||||
/**
|
||||
* Retrieve the view types
|
||||
*
|
||||
* @since 1.4
|
||||
*
|
||||
* @return array $views All the views available
|
||||
*/
|
||||
public function get_views() {
|
||||
|
||||
// Get the current status
|
||||
$current = $this->get_status();
|
||||
|
||||
// Args to remove
|
||||
$remove = array( 'edd-message', 'status', 'paged', '_wpnonce' );
|
||||
|
||||
// Base URL
|
||||
$url = remove_query_arg( $remove, $this->get_base_url() );
|
||||
|
||||
// Is all selected?
|
||||
$class = in_array( $current, array( '', 'all' ), true )
|
||||
? ' class="current"'
|
||||
: '';
|
||||
|
||||
// All
|
||||
$count = ' <span class="count">(' . esc_attr( $this->counts['total'] ) . ')</span>';
|
||||
$label = __( 'All', 'easy-digital-downloads' ) . $count;
|
||||
$views = array(
|
||||
'all' => sprintf( '<a href="%s"%s>%s</a>', esc_url( $url ), $class, $label ),
|
||||
);
|
||||
|
||||
// Remove total from counts array
|
||||
$counts = $this->counts;
|
||||
unset( $counts['total'] );
|
||||
|
||||
// Loop through statuses.
|
||||
if ( ! empty( $counts ) ) {
|
||||
foreach ( $counts as $status => $count ) {
|
||||
$count_url = add_query_arg( array(
|
||||
'status' => sanitize_key( $status ),
|
||||
'paged' => false,
|
||||
), $url );
|
||||
|
||||
$class = ( $current === $status )
|
||||
? ' class="current"'
|
||||
: '';
|
||||
|
||||
$count = ' <span class="count">(' . absint( $this->counts[ $status ] ) . ')</span>';
|
||||
|
||||
$label = edd_get_status_label( $status ) . $count;
|
||||
$views[ $status ] = sprintf( '<a href="%s"%s>%s</a>', esc_url( $count_url ), $class, $label );
|
||||
}
|
||||
}
|
||||
|
||||
return $views;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse pagination query arguments into keys & values that the Query class
|
||||
* can understand and use to retrieve the correct results from the database.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param array $args
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function parse_pagination_args( $args = array() ) {
|
||||
|
||||
// Get pagination values
|
||||
$order = isset( $_GET['order'] ) ? sanitize_text_field( $_GET['order'] ) : 'DESC'; // WPCS: CSRF ok.
|
||||
$orderby = isset( $_GET['orderby'] ) ? sanitize_text_field( $_GET['orderby'] ) : 'id'; // WPCS: CSRF ok.
|
||||
$paged = $this->get_paged();
|
||||
|
||||
// Only perform paged math if numeric and greater than 1
|
||||
if ( ! empty( $paged ) && is_numeric( $paged ) && ( $paged > 1 ) ) {
|
||||
$offset = ceil( $this->per_page * ( $paged - 1 ) );
|
||||
|
||||
// Otherwise, default to the first page of results
|
||||
} else {
|
||||
$offset = 0;
|
||||
}
|
||||
|
||||
// Parse pagination args into passed args
|
||||
$r = wp_parse_args( $args, array(
|
||||
'number' => $this->per_page,
|
||||
'offset' => $offset,
|
||||
'order' => $order,
|
||||
'orderby' => $orderby
|
||||
) );
|
||||
|
||||
// Return args
|
||||
return array_filter( $r );
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the search field.
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param string $text Label for the search box
|
||||
* @param string $input_id ID of the search box
|
||||
*/
|
||||
public function search_box( $text, $input_id ) {
|
||||
|
||||
// Bail if no customers and no search
|
||||
if ( ! $this->get_search() && ! $this->has_items() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$orderby = $this->get_request_var( 'orderby' );
|
||||
$order = $this->get_request_var( 'order' );
|
||||
$input_id = $input_id . '-search-input';
|
||||
|
||||
if ( ! empty( $orderby ) ) {
|
||||
echo '<input type="hidden" name="orderby" value="' . esc_attr( $orderby ) . '" />';
|
||||
}
|
||||
|
||||
if ( ! empty( $order ) ) {
|
||||
echo '<input type="hidden" name="order" value="' . esc_attr( $order ) . '" />';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<p class="search-box">
|
||||
<label class="screen-reader-text" for="<?php echo esc_attr( $input_id ); ?>"><?php echo esc_html( $text ); ?>:</label>
|
||||
<input type="search" id="<?php echo esc_attr( $input_id ); ?>" name="s" value="<?php _admin_search_query(); ?>"/>
|
||||
<?php submit_button( esc_html( $text ), 'button', false, false, array( 'ID' => 'search-submit' ) ); ?>
|
||||
</p>
|
||||
|
||||
<?php
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user