/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-webhooks-table-list.php
PHP | 316 lines | 177 code | 45 blank | 94 comment | 13 complexity | 10daddac1711a37f3606e8151f57e9d2 MD5 | raw file
- <?php
- /**
- * WooCommerce Webhooks Table List
- *
- * @package WooCommerce\Admin
- * @version 3.3.0
- */
- defined( 'ABSPATH' ) || exit;
- if ( ! class_exists( 'WP_List_Table' ) ) {
- require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
- }
- /**
- * Webooks table list class.
- */
- class WC_Admin_Webhooks_Table_List extends WP_List_Table {
- /**
- * Initialize the webhook table list.
- */
- public function __construct() {
- parent::__construct(
- array(
- 'singular' => 'webhook',
- 'plural' => 'webhooks',
- 'ajax' => false,
- )
- );
- }
- /**
- * No items found text.
- */
- public function no_items() {
- esc_html_e( 'No webhooks found.', 'woocommerce' );
- }
- /**
- * Get list columns.
- *
- * @return array
- */
- public function get_columns() {
- return array(
- 'cb' => '<input type="checkbox" />',
- 'title' => __( 'Name', 'woocommerce' ),
- 'status' => __( 'Status', 'woocommerce' ),
- 'topic' => __( 'Topic', 'woocommerce' ),
- 'delivery_url' => __( 'Delivery URL', 'woocommerce' ),
- );
- }
- /**
- * Column cb.
- *
- * @param WC_Webhook $webhook Webhook instance.
- * @return string
- */
- public function column_cb( $webhook ) {
- return sprintf( '<input type="checkbox" name="%1$s[]" value="%2$s" />', $this->_args['singular'], $webhook->get_id() );
- }
- /**
- * Return title column.
- *
- * @param WC_Webhook $webhook Webhook instance.
- * @return string
- */
- public function column_title( $webhook ) {
- $edit_link = admin_url( 'admin.php?page=wc-settings&tab=advanced&section=webhooks&edit-webhook=' . $webhook->get_id() );
- $output = '';
- // Title.
- $output .= '<strong><a href="' . esc_url( $edit_link ) . '" class="row-title">' . esc_html( $webhook->get_name() ) . '</a></strong>';
- // Get actions.
- $actions = array(
- /* translators: %s: webhook ID. */
- 'id' => sprintf( __( 'ID: %d', 'woocommerce' ), $webhook->get_id() ),
- 'edit' => '<a href="' . esc_url( $edit_link ) . '">' . esc_html__( 'Edit', 'woocommerce' ) . '</a>',
- /* translators: %s: webhook name */
- 'delete' => '<a class="submitdelete" aria-label="' . esc_attr( sprintf( __( 'Delete "%s" permanently', 'woocommerce' ), $webhook->get_name() ) ) . '" href="' . esc_url(
- wp_nonce_url(
- add_query_arg(
- array(
- 'delete' => $webhook->get_id(),
- ),
- admin_url( 'admin.php?page=wc-settings&tab=advanced§ion=webhooks' )
- ),
- 'delete-webhook'
- )
- ) . '">' . esc_html__( 'Delete permanently', 'woocommerce' ) . '</a>',
- );
- $actions = apply_filters( 'webhook_row_actions', $actions, $webhook );
- $row_actions = array();
- foreach ( $actions as $action => $link ) {
- $row_actions[] = '<span class="' . esc_attr( $action ) . '">' . $link . '</span>';
- }
- $output .= '<div class="row-actions">' . implode( ' | ', $row_actions ) . '</div>';
- return $output;
- }
- /**
- * Return status column.
- *
- * @param WC_Webhook $webhook Webhook instance.
- * @return string
- */
- public function column_status( $webhook ) {
- return $webhook->get_i18n_status();
- }
- /**
- * Return topic column.
- *
- * @param WC_Webhook $webhook Webhook instance.
- * @return string
- */
- public function column_topic( $webhook ) {
- return $webhook->get_topic();
- }
- /**
- * Return delivery URL column.
- *
- * @param WC_Webhook $webhook Webhook instance.
- * @return string
- */
- public function column_delivery_url( $webhook ) {
- return $webhook->get_delivery_url();
- }
- /**
- * Get the status label for webhooks.
- *
- * @param string $status_name Status name.
- * @param int $amount Amount of webhooks.
- * @return array
- */
- private function get_status_label( $status_name, $amount ) {
- $statuses = wc_get_webhook_statuses();
- if ( isset( $statuses[ $status_name ] ) ) {
- return array(
- 'singular' => sprintf( '%s <span class="count">(%s)</span>', esc_html( $statuses[ $status_name ] ), $amount ),
- 'plural' => sprintf( '%s <span class="count">(%s)</span>', esc_html( $statuses[ $status_name ] ), $amount ),
- 'context' => '',
- 'domain' => 'woocommerce',
- );
- }
- return array(
- 'singular' => sprintf( '%s <span class="count">(%s)</span>', esc_html( $status_name ), $amount ),
- 'plural' => sprintf( '%s <span class="count">(%s)</span>', esc_html( $status_name ), $amount ),
- 'context' => '',
- 'domain' => 'woocommerce',
- );
- }
- /**
- * Table list views.
- *
- * @return array
- */
- protected function get_views() {
- $status_links = array();
- $data_store = WC_Data_Store::load( 'webhook' );
- $num_webhooks = $data_store->get_count_webhooks_by_status();
- $total_webhooks = array_sum( (array) $num_webhooks );
- $statuses = array_keys( wc_get_webhook_statuses() );
- $class = empty( $_REQUEST['status'] ) ? ' class="current"' : ''; // WPCS: input var okay. CSRF ok.
- /* translators: %s: count */
- $status_links['all'] = "<a href='admin.php?page=wc-settings&tab=advanced&section=webhooks'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_webhooks, 'posts', 'woocommerce' ), number_format_i18n( $total_webhooks ) ) . '</a>';
- foreach ( $statuses as $status_name ) {
- $class = '';
- if ( empty( $num_webhooks[ $status_name ] ) ) {
- continue;
- }
- if ( isset( $_REQUEST['status'] ) && sanitize_key( wp_unslash( $_REQUEST['status'] ) ) === $status_name ) { // WPCS: input var okay, CSRF ok.
- $class = ' class="current"';
- }
- $label = $this->get_status_label( $status_name, $num_webhooks[ $status_name ] );
- $status_links[ $status_name ] = "<a href='admin.php?page=wc-settings&tab=advanced&section=webhooks&status=$status_name'$class>" . sprintf( translate_nooped_plural( $label, $num_webhooks[ $status_name ] ), number_format_i18n( $num_webhooks[ $status_name ] ) ) . '</a>';
- }
- return $status_links;
- }
- /**
- * Get bulk actions.
- *
- * @return array
- */
- protected function get_bulk_actions() {
- return array(
- 'delete' => __( 'Delete permanently', 'woocommerce' ),
- );
- }
- /**
- * Process bulk actions.
- */
- public function process_bulk_action() {
- $action = $this->current_action();
- $webhooks = isset( $_REQUEST['webhook'] ) ? array_map( 'absint', (array) $_REQUEST['webhook'] ) : array(); // WPCS: input var okay, CSRF ok.
- if ( ! current_user_can( 'manage_woocommerce' ) ) {
- wp_die( esc_html__( 'You do not have permission to edit Webhooks', 'woocommerce' ) );
- }
- if ( 'delete' === $action ) {
- WC_Admin_Webhooks::bulk_delete( $webhooks );
- }
- }
- /**
- * Generate the table navigation above or below the table.
- * Included to remove extra nonce input.
- *
- * @param string $which The location of the extra table nav markup: 'top' or 'bottom'.
- */
- protected function display_tablenav( $which ) {
- echo '<div class="tablenav ' . esc_attr( $which ) . '">';
- if ( $this->has_items() ) {
- echo '<div class="alignleft actions bulkactions">';
- $this->bulk_actions( $which );
- echo '</div>';
- }
- $this->extra_tablenav( $which );
- $this->pagination( $which );
- echo '<br class="clear" />';
- echo '</div>';
- }
- /**
- * Search box.
- *
- * @param string $text Button text.
- * @param string $input_id Input ID.
- */
- public function search_box( $text, $input_id ) {
- if ( empty( $_REQUEST['s'] ) && ! $this->has_items() ) { // WPCS: input var okay, CSRF ok.
- return;
- }
- $input_id = $input_id . '-search-input';
- $search_query = isset( $_REQUEST['s'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ) : ''; // WPCS: input var okay, CSRF ok.
- echo '<p class="search-box">';
- echo '<label class="screen-reader-text" for="' . esc_attr( $input_id ) . '">' . esc_html( $text ) . ':</label>';
- echo '<input type="search" id="' . esc_attr( $input_id ) . '" name="s" value="' . esc_attr( $search_query ) . '" />';
- submit_button(
- $text,
- '',
- '',
- false,
- array(
- 'id' => 'search-submit',
- )
- );
- echo '</p>';
- }
- /**
- * Prepare table list items.
- */
- public function prepare_items() {
- $per_page = $this->get_items_per_page( 'woocommerce_webhooks_per_page' );
- $current_page = $this->get_pagenum();
- // Query args.
- $args = array(
- 'limit' => $per_page,
- 'offset' => $per_page * ( $current_page - 1 ),
- );
- // Handle the status query.
- if ( ! empty( $_REQUEST['status'] ) ) { // WPCS: input var okay, CSRF ok.
- $args['status'] = sanitize_key( wp_unslash( $_REQUEST['status'] ) ); // WPCS: input var okay, CSRF ok.
- }
- if ( ! empty( $_REQUEST['s'] ) ) { // WPCS: input var okay, CSRF ok.
- $args['search'] = sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ); // WPCS: input var okay, CSRF ok.
- }
- $args['paginate'] = true;
- // Get the webhooks.
- $data_store = WC_Data_Store::load( 'webhook' );
- $webhooks = $data_store->search_webhooks( $args );
- $this->items = array_map( 'wc_get_webhook', $webhooks->webhooks );
- // Set the pagination.
- $this->set_pagination_args(
- array(
- 'total_items' => $webhooks->total,
- 'per_page' => $per_page,
- 'total_pages' => $webhooks->max_num_pages,
- )
- );
- }
- }