Order_Repository::handle_order_by( string $order_by )

Handles the order_by clauses for events


Parameters

$order_by

(string) (Required) The key used to order items.


Top ↑

Source

File: src/Tickets/Commerce/Repositories/Order_Repository.php

	public function handle_order_by( $order_by ) {
		$check_orderby = $order_by;

		if ( ! is_array( $check_orderby ) ) {
			$check_orderby = explode( ' ', $check_orderby );
		}

		$after = false;
		$loop  = 0;

		foreach ( $check_orderby as $key => $value ) {
			$order_by      = is_numeric( $key ) ? $value : $key;
			$default_order = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' );
			$order         = is_numeric( $key ) ? $default_order : $value;

			// Let the first applied ORDER BY clause override the existing ones, then stack the ORDER BY clauses.
			$override = $loop === 0;

			switch ( $order_by ) {
				case 'purchaser_full_name':
					$this->order_by_purchaser_full_name( $order, $after, $override );
					break;
				case 'purchaser_email':
					$this->order_by_purchaser_email( $order, $after, $override );
					break;
				case 'total_value':
					$this->order_by_total_value( $order, $after, $override );
					break;
				case 'status':
					$this->order_by_status( $order, $after, $override );
					break;
				case 'gateway':
					$this->order_by_gateway( $order, $after, $override );
					break;
				case 'gateway_id':
					$this->order_by_gateway_id( $order, $after, $override );
					break;
				case '__none':
					unset( $this->query_args['orderby'] );
					unset( $this->query_args['order'] );
					break;
				default:
					$after = $after || 1 === $loop;
					if ( empty( $this->query_args['orderby'] ) ) {
						// In some versions of WP, [ $order_by, $order ] doesn't work as expected. Using explict value setting instead.
						$this->query_args['orderby'] = $order_by;
						$this->query_args['order']   = $order;
					} else {
						$add = [ $order_by => $order ];
						// Make sure all `orderby` clauses have the shape `<orderby> => <order>`.
						$normalized = [];

						if ( ! is_array( $this->query_args['orderby'] ) ) {
							$this->query_args['orderby'] = [
								$this->query_args['orderby'] => $this->query_args['order']
							];
						}

						foreach ( $this->query_args['orderby'] as $k => $v ) {
							$the_order_by                = is_numeric( $k ) ? $v : $k;
							$the_order                   = is_numeric( $k ) ? $default_order : $v;
							$normalized[ $the_order_by ] = $the_order;
						}
						$this->query_args['orderby'] = $normalized;
						$this->query_args['orderby'] = array_merge( $this->query_args['orderby'], $add );
					}
			}
		}
	}

Top ↑

Changelog

Changelog
Version Description
5.5.0 Introduced.