Automattic\WooCommerce\Internal\StockNotifications\Admin
ListTable::prepare_items
Query the DB and attach items.
Method of the class: ListTable{}
No Hooks.
Returns
void. Nothing (null).
Usage
$ListTable = new ListTable(); $ListTable->prepare_items();
ListTable::prepare_items() ListTable::prepare items code WC 11.2.2
public function prepare_items() {
$per_page = (int) get_user_meta( get_current_user_id(), 'stock_notifications_per_page', true );
$per_page = $per_page > 0 ? $per_page : 10;
// Table columns.
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$this->_column_headers = array( $columns, $hidden, $sortable );
// Setup params.
$paged = isset( $_REQUEST['paged'] ) ? max( 0, (int) wp_unslash( $_REQUEST['paged'] ) - 1 ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
$orderby = ( isset( $_REQUEST['orderby'] ) && in_array( wp_unslash( $_REQUEST['orderby'] ), array_keys( $this->get_sortable_columns() ), true ) ) ? wc_clean( wp_unslash( $_REQUEST['orderby'] ) ) : 'id'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$order = ( isset( $_REQUEST['order'] ) && in_array( wp_unslash( $_REQUEST['order'] ), array( 'asc', 'desc' ), true ) ) ? wc_clean( wp_unslash( $_REQUEST['order'] ) ) : 'desc'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
// Query args.
$query_args = array(
'order_by' => array( $orderby => $order ),
'limit' => $per_page,
'offset' => $paged * $per_page,
);
// Search.
if ( isset( $_REQUEST['s'] ) && ! empty( $_REQUEST['s'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query_args['user_email'] = EmailNormalizer::normalize( sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
}
// Views.
if ( ! empty( $_REQUEST['status'] ) && 'active_customer_stock_notifications' === $_REQUEST['status'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query_args['status'] = NotificationStatus::ACTIVE;
} elseif ( ! empty( $_REQUEST['status'] ) && 'sent_customer_stock_notifications' === $_REQUEST['status'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query_args['status'] = NotificationStatus::SENT;
} elseif ( ! empty( $_REQUEST['status'] ) && 'cancelled_customer_stock_notifications' === $_REQUEST['status'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query_args['status'] = NotificationStatus::CANCELLED;
} elseif ( ! empty( $_REQUEST['status'] ) && 'pending_customer_stock_notifications' === $_REQUEST['status'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query_args['status'] = NotificationStatus::PENDING;
}
// Filters.
if ( ! empty( $_GET['m'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$filter = absint( wp_unslash( $_GET['m'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$month = substr( (string) $filter, 4, 6 );
$year = substr( (string) $filter, 0, 4 ); // This will break at year 10.000 AC :).
$start_timestamp = mktime( 0, 0, 0, (int) $month, 1, (int) $year );
$query_args['start_date'] = gmdate( 'Y-m-d H:i:s', $start_timestamp );
$end_timestamp = mktime( 0, 0, 0, (int) $month + 1, 1, (int) $year );
$query_args['end_date'] = gmdate( 'Y-m-d H:i:s', $end_timestamp );
}
if ( ! empty( $_GET['customer_stock_notifications_product_filter'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$filter = absint( wp_unslash( $_GET['customer_stock_notifications_product_filter'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$product = wc_get_product( $filter );
if ( $product instanceof \WC_Product ) {
$target_ids = $this->eligibility_service->get_target_product_ids( $product );
$query_args['product_id'] = $target_ids;
} else {
NotificationsPage::add_notice( __( 'Invalid product selected.', 'woocommerce' ), 'error' );
}
}
if ( ! empty( $_GET['customer_stock_notifications_customer_filter'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$filter = absint( wp_unslash( $_GET['customer_stock_notifications_customer_filter'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$query_args['user_id'] = array( $filter );
}
$query_args['return'] = 'objects';
$this->items = $this->data_store->query( $query_args );
// Count total items.
$query_args['return'] = 'count';
unset( $query_args['limit'] );
unset( $query_args['offset'] );
$this->total_items = $this->data_store->query( $query_args );
// Count active.
$query_args['status'] = NotificationStatus::ACTIVE;
$this->total_active_items = $this->data_store->query( $query_args );
// Count sent.
$query_args['status'] = NotificationStatus::SENT;
$this->total_sent_items = $this->data_store->query( $query_args );
// Count cancelled.
$query_args['status'] = NotificationStatus::CANCELLED;
$this->total_cancelled_items = $this->data_store->query( $query_args );
// Count pending.
$query_args['status'] = NotificationStatus::PENDING;
$this->total_pending_items = $this->data_store->query( $query_args );
// Configure pagination.
$this->set_pagination_args(
array(
'total_items' => $this->total_items, // Total items defined above.
'per_page' => $per_page, // Per page constant defined at top of method.
'total_pages' => ceil( $this->total_items / $per_page ), // Calculate pages count.
)
);
}