Automattic\WooCommerce\Internal\ProductDownloads\ApprovedDirectories

Register::list()publicWC 1.0

Lists currently approved directories.

Returned array will have the following structure:

[
	'total_urls'  => 12345,
	'total_pages' => 123,
	'urls'        => [],  # StoredUrl[]
]

Method of the class: Register{}

No Hooks.

Return

Array.

Usage

$Register = new Register();
$Register->list( $args ): array;
$args(array) (required)

Controls pagination and ordering.

  • enabled(null|true|false)
    Controls if only enabled (true), disabled (false) or all rules (null) should be listed.

  • order(string)
    Ordering ('ASC' for ascending, 'DESC' for descending).

  • order_by(string)
    Field to order by (one of 'url_id' or 'url').

  • page(int)
    The page of results to retrieve.

  • per_page(int)
    The number of results to retrieve per page.

  • search(string)
    Term to search for.

Register::list() code WC 7.1.0

public function list( array $args ): array {
	global $wpdb;

	$args = array_merge(
		array(
			'enabled'  => null,
			'order'    => 'ASC',
			'order_by' => 'url',
			'page'     => 1,
			'per_page' => 20,
			'search'   => '',
		),
		$args
	);

	$table    = $this->get_table();
	$paths    = array();
	$order    = in_array( $args['order'], array( 'ASC', 'DESC' ), true ) ? $args['order'] : 'ASC';
	$order_by = in_array( $args['order_by'], array( 'url_id', 'url' ), true ) ? $args['order_by'] : 'url';
	$page     = absint( $args['page'] );
	$per_page = absint( $args['per_page'] );
	$enabled  = is_bool( $args['enabled'] ) ? $args['enabled'] : null;
	$search   = '%' . $wpdb->esc_like( sanitize_text_field( $args['search'] ) ) . '%';

	if ( $page < 1 ) {
		$page = 1;
	}

	if ( $per_page < 1 ) {
		$per_page = 1;
	}

	$where     = array();
	$where_sql = '';

	if ( ! empty( $search ) ) {
		$where[] = $wpdb->prepare( 'url LIKE %s', $search );
	}

	if ( is_bool( $enabled ) ) {
		$where[] = 'enabled = ' . (int) $enabled;
	}

	if ( ! empty( $where ) ) {
		$where_sql = 'WHERE ' . join( ' AND ', $where );
	}

	// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
	$results = $wpdb->get_results(
		$wpdb->prepare(
			"
				SELECT   url_id, url, enabled
				FROM     {$table}
				{$where_sql}
				ORDER BY {$order_by} {$order}
				LIMIT    %d, %d
			",
			( $page - 1 ) * $per_page,
			$per_page
		)
	);

	$total_rows = (int) $wpdb->get_var( "SELECT COUNT( * ) FROM {$table} {$where_sql}" );
	// phpcs:enable

	foreach ( $results as $single_result ) {
		$paths[] = new StoredUrl( $single_result->url_id, $single_result->url, $single_result->enabled );
	}

	return array(
		'total_urls'           => $total_rows,
		'total_pages'          => (int) ceil( $total_rows / $per_page ),
		'approved_directories' => $paths,
	);
}