Handle match parameter in customers report data store.
Note: before/after and min/max ranges are always ‘AND’.
This commit is contained in:
parent
97e6f795e9
commit
a75a33c32f
|
@ -109,23 +109,33 @@ class WC_Admin_Reports_Customers_Data_Store extends WC_Admin_Reports_Data_Store
|
||||||
'last_active' => 'date_last_active',
|
'last_active' => 'date_last_active',
|
||||||
'last_order' => 'date_last_order',
|
'last_order' => 'date_last_order',
|
||||||
);
|
);
|
||||||
|
$match_operator = $this->get_match_operator( $query_args );
|
||||||
|
$where_time_clauses = array();
|
||||||
|
|
||||||
// TODO: handle any/or match?
|
|
||||||
foreach ( $date_param_mapping as $query_param => $column_name ) {
|
foreach ( $date_param_mapping as $query_param => $column_name ) {
|
||||||
|
$subclauses = array();
|
||||||
$before_arg = $query_param . '_before';
|
$before_arg = $query_param . '_before';
|
||||||
$after_arg = $query_param . '_after';
|
$after_arg = $query_param . '_after';
|
||||||
|
|
||||||
if ( ! empty( $query_args[ $before_arg ] ) ) {
|
if ( ! empty( $query_args[ $before_arg ] ) ) {
|
||||||
$datetime = new DateTime( $query_args[ $before_arg ] );
|
$datetime = new DateTime( $query_args[ $before_arg ] );
|
||||||
$datetime_str = $datetime->format( WC_Admin_Reports_Interval::$sql_datetime_format );
|
$datetime_str = $datetime->format( WC_Admin_Reports_Interval::$sql_datetime_format );
|
||||||
$sql_query['where_time_clause'] .= " AND {$table_name}.{$column_name} <= '$datetime_str'";
|
$subclauses[] = "{$table_name}.{$column_name} <= '$datetime_str'";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! empty( $query_args[ $after_arg ] ) ) {
|
if ( ! empty( $query_args[ $after_arg ] ) ) {
|
||||||
$datetime = new DateTime( $query_args[ $after_arg ] );
|
$datetime = new DateTime( $query_args[ $after_arg ] );
|
||||||
$datetime_str = $datetime->format( WC_Admin_Reports_Interval::$sql_datetime_format );
|
$datetime_str = $datetime->format( WC_Admin_Reports_Interval::$sql_datetime_format );
|
||||||
$sql_query['where_time_clause'] .= " AND {$table_name}.{$column_name} >= '$datetime_str'";
|
$subclauses[] = "{$table_name}.{$column_name} <= '$datetime_str'";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $subclauses ) {
|
||||||
|
$where_time_clauses[] = '(' . implode( ' AND ', $subclauses ) . ')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $where_time_clauses ) {
|
||||||
|
$sql_query['where_time_clause'] = implode( " {$match_operator} ", $where_time_clauses );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $sql_query;
|
return $sql_query;
|
||||||
|
@ -157,7 +167,10 @@ class WC_Admin_Reports_Customers_Data_Store extends WC_Admin_Reports_Data_Store
|
||||||
|
|
||||||
foreach ( $exact_match_params as $exact_match_param ) {
|
foreach ( $exact_match_params as $exact_match_param ) {
|
||||||
if ( ! empty( $query_args[ $exact_match_param ] ) ) {
|
if ( ! empty( $query_args[ $exact_match_param ] ) ) {
|
||||||
$where_clauses[] = $wpdb->prepare( "{$order_product_lookup_table}.{$exact_match_param} = %s", $query_args[ $exact_match_param ] );
|
$where_clauses[] = $wpdb->prepare(
|
||||||
|
"{$order_product_lookup_table}.{$exact_match_param} = %s",
|
||||||
|
$query_args[ $exact_match_param ]
|
||||||
|
); // WPCS: unprepared SQL ok.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,20 +186,27 @@ class WC_Admin_Reports_Customers_Data_Store extends WC_Admin_Reports_Data_Store
|
||||||
$max_param = $numeric_param . '_max';
|
$max_param = $numeric_param . '_max';
|
||||||
|
|
||||||
if ( isset( $query_args[ $min_param ] ) ) {
|
if ( isset( $query_args[ $min_param ] ) ) {
|
||||||
$subclauses[] = $wpdb->prepare( "{$order_product_lookup_table}.{$numeric_param} >= {$sql_format}", $query_args[ $min_param ] );
|
$subclauses[] = $wpdb->prepare(
|
||||||
|
"{$order_product_lookup_table}.{$numeric_param} >= {$sql_format}",
|
||||||
|
$query_args[ $min_param ]
|
||||||
|
); // WPCS: unprepared SQL ok.
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isset( $query_args[ $max_param ] ) ) {
|
if ( isset( $query_args[ $max_param ] ) ) {
|
||||||
$subclauses[] = $wpdb->prepare( "{$order_product_lookup_table}.{$numeric_param} <= {$sql_format}", $query_args[ $max_param ] );
|
$subclauses[] = $wpdb->prepare(
|
||||||
|
"{$order_product_lookup_table}.{$numeric_param} <= {$sql_format}",
|
||||||
|
$query_args[ $max_param ]
|
||||||
|
); // WPCS: unprepared SQL ok.
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $subclauses ) {
|
if ( $subclauses ) {
|
||||||
$where_clauses[] = '(' . implode( " {$match_operator} ", $subclauses ) . ')';
|
$where_clauses[] = '(' . implode( ' AND ', $subclauses ) . ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $where_clauses ) {
|
if ( $where_clauses ) {
|
||||||
$sql_query_params['where_clause'] = implode( " {$match_operator} ", $where_clauses );
|
$preceding_match = empty( $sql_query_params['where_time_clause'] ) ? '' : " {$match_operator} ";
|
||||||
|
$sql_query_params['where_clause'] = $preceding_match . implode( " {$match_operator} ", $where_clauses );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $sql_query_params;
|
return $sql_query_params;
|
||||||
|
|
Loading…
Reference in New Issue