Automattic\WooCommerce\Internal\StockNotifications\Admin

ListTable::prepare_items │ public │ WC 1.0

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() 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.
		)
	);
}