Automattic\WooCommerce\Internal\Admin\Reports

HposLegacyOrderReportQueryBuilder::build_where_meta_predicates │ private │ WC 1.0

Build the WHERE fragment for caller-supplied where_meta predicates.

Method of the class: HposLegacyOrderReportQueryBuilder{}

No Hooks.

Returns

string. WHERE fragment.

Usage

// private - for code of main (parent) class only
$result = $this->build_where_meta_predicates( $where_meta );
$where_meta(array) (required)
The original where_meta argument.

HposLegacyOrderReportQueryBuilder::build_where_meta_predicates() code WC 11.2.1

private function build_where_meta_predicates( $where_meta ) {
	$schema   = $this->get_report_schema();
	$relation = $where_meta['relation'] ?? 'AND';

	$clause = ' AND (';
	$first  = true;

	foreach ( $where_meta as $value ) {
		if ( ! is_array( $value ) ) {
			continue;
		}

		$where_value = $this->prepare_predicate_value( $value, 'meta_value' );
		if ( '' === $where_value ) {
			continue;
		}

		if ( ! $first ) {
			$clause .= ' ' . $relation;
		}
		$first = false;

		$meta_key = $value['meta_key'];
		$key      = sanitize_key( is_array( $meta_key ) ? $meta_key[0] . '_array' : $meta_key );

		if ( isset( $value['type'] ) && 'order_item_meta' === $value['type'] ) {
			if ( is_array( $meta_key ) ) {
				$clause .= " ( order_item_meta_{$key}.meta_key   IN ('" . implode( "','", $meta_key ) . "')";
			} else {
				$clause .= " ( order_item_meta_{$key}.meta_key   = '{$meta_key}'";
			}
			$clause .= " AND order_item_meta_{$key}.meta_value {$where_value} )";
		} elseif ( ! is_array( $meta_key ) && isset( $schema['where_meta_column'][ $meta_key ] ) ) {
			$clause .= ' ( ' . $schema['where_meta_column'][ $meta_key ] . " {$where_value} )";
		} elseif ( ! is_array( $meta_key ) && isset( $schema['address_column'][ $meta_key ] ) ) {
			list( $address_type, $column ) = $schema['address_column'][ $meta_key ];
			$clause                       .= " ( address_{$address_type}.{$column} {$where_value} )";
		} else {
			if ( is_array( $meta_key ) ) {
				$clause .= " ( meta_{$key}.meta_key   IN ('" . implode( "','", $meta_key ) . "')";
			} else {
				$clause .= " ( meta_{$key}.meta_key   = '{$meta_key}'";
			}
			$clause .= " AND meta_{$key}.meta_value {$where_value} )";
		}
	}

	return $clause . ')';
}