Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/woocomme.../src/Admin/API/Reports
File: DataStore.php
* @return array
[1000] Fix | Delete
*/
[1001] Fix | Delete
protected function get_fields( $query_args ) {
[1002] Fix | Delete
if ( isset( $query_args['fields'] ) && is_array( $query_args['fields'] ) ) {
[1003] Fix | Delete
return $query_args['fields'];
[1004] Fix | Delete
}
[1005] Fix | Delete
return array_keys( $this->report_columns );
[1006] Fix | Delete
}
[1007] Fix | Delete
[1008] Fix | Delete
/**
[1009] Fix | Delete
* Returns a comma separated list of the field names prepared to be used for a selection after a join with `default_results`.
[1010] Fix | Delete
*
[1011] Fix | Delete
* @param array $fields Array of fields name.
[1012] Fix | Delete
* @param array $default_results_fields Fields to load from `default_results` table.
[1013] Fix | Delete
* @param array $outer_selections Array of fields that are not selected in the inner query.
[1014] Fix | Delete
* @return string
[1015] Fix | Delete
*/
[1016] Fix | Delete
protected function format_join_selections( $fields, $default_results_fields, $outer_selections = array() ) {
[1017] Fix | Delete
foreach ( $fields as $i => $field ) {
[1018] Fix | Delete
foreach ( $default_results_fields as $default_results_field ) {
[1019] Fix | Delete
if ( $field === $default_results_field ) {
[1020] Fix | Delete
$field = esc_sql( $field );
[1021] Fix | Delete
$fields[ $i ] = "default_results.{$field} AS {$field}";
[1022] Fix | Delete
}
[1023] Fix | Delete
}
[1024] Fix | Delete
if ( in_array( $field, $outer_selections, true ) && array_key_exists( $field, $this->report_columns ) ) {
[1025] Fix | Delete
$fields[ $i ] = $this->report_columns[ $field ];
[1026] Fix | Delete
}
[1027] Fix | Delete
}
[1028] Fix | Delete
return implode( ', ', $fields );
[1029] Fix | Delete
}
[1030] Fix | Delete
[1031] Fix | Delete
/**
[1032] Fix | Delete
* Fills ORDER BY clause of SQL request based on user supplied parameters.
[1033] Fix | Delete
*
[1034] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1035] Fix | Delete
*/
[1036] Fix | Delete
protected function add_order_by_sql_params( $query_args ) {
[1037] Fix | Delete
if ( isset( $query_args['orderby'] ) ) {
[1038] Fix | Delete
$order_by_clause = $this->normalize_order_by( esc_sql( $query_args['orderby'] ) );
[1039] Fix | Delete
} else {
[1040] Fix | Delete
$order_by_clause = '';
[1041] Fix | Delete
}
[1042] Fix | Delete
[1043] Fix | Delete
$this->clear_sql_clause( 'order_by' );
[1044] Fix | Delete
$this->add_sql_clause( 'order_by', $order_by_clause );
[1045] Fix | Delete
$this->add_orderby_order_clause( $query_args, $this );
[1046] Fix | Delete
}
[1047] Fix | Delete
[1048] Fix | Delete
/**
[1049] Fix | Delete
* Fills FROM and WHERE clauses of SQL request for 'Intervals' section of data response based on user supplied parameters.
[1050] Fix | Delete
*
[1051] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1052] Fix | Delete
* @param string $table_name Name of the db table relevant for the date constraint.
[1053] Fix | Delete
*/
[1054] Fix | Delete
protected function add_intervals_sql_params( $query_args, $table_name ) {
[1055] Fix | Delete
$this->clear_sql_clause( array( 'from', 'where_time', 'where' ) );
[1056] Fix | Delete
[1057] Fix | Delete
$this->add_time_period_sql_params( $query_args, $table_name );
[1058] Fix | Delete
[1059] Fix | Delete
if ( isset( $query_args['interval'] ) && '' !== $query_args['interval'] ) {
[1060] Fix | Delete
$interval = $query_args['interval'];
[1061] Fix | Delete
$this->clear_sql_clause( 'select' );
[1062] Fix | Delete
$this->add_sql_clause( 'select', TimeInterval::db_datetime_format( $interval, $table_name, $this->date_column_name ) );
[1063] Fix | Delete
}
[1064] Fix | Delete
}
[1065] Fix | Delete
[1066] Fix | Delete
/**
[1067] Fix | Delete
* Get join and where clauses for refunds based on user supplied parameters.
[1068] Fix | Delete
*
[1069] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1070] Fix | Delete
* @return array
[1071] Fix | Delete
*/
[1072] Fix | Delete
protected function get_refund_subquery( $query_args ) {
[1073] Fix | Delete
global $wpdb;
[1074] Fix | Delete
$table_name = $wpdb->prefix . 'wc_order_stats';
[1075] Fix | Delete
$sql_query = array(
[1076] Fix | Delete
'where_clause' => '',
[1077] Fix | Delete
'from_clause' => '',
[1078] Fix | Delete
);
[1079] Fix | Delete
[1080] Fix | Delete
if ( ! isset( $query_args['refunds'] ) ) {
[1081] Fix | Delete
return $sql_query;
[1082] Fix | Delete
}
[1083] Fix | Delete
[1084] Fix | Delete
if ( 'all' === $query_args['refunds'] ) {
[1085] Fix | Delete
$sql_query['where_clause'] .= 'parent_id != 0';
[1086] Fix | Delete
}
[1087] Fix | Delete
[1088] Fix | Delete
if ( 'none' === $query_args['refunds'] ) {
[1089] Fix | Delete
$sql_query['where_clause'] .= 'parent_id = 0';
[1090] Fix | Delete
}
[1091] Fix | Delete
[1092] Fix | Delete
if ( 'full' === $query_args['refunds'] || 'partial' === $query_args['refunds'] ) {
[1093] Fix | Delete
$operator = 'full' === $query_args['refunds'] ? '=' : '!=';
[1094] Fix | Delete
$sql_query['from_clause'] .= " JOIN {$table_name} parent_order_stats ON {$table_name}.parent_id = parent_order_stats.order_id";
[1095] Fix | Delete
$sql_query['where_clause'] .= "parent_order_stats.status {$operator} '{$this->normalize_order_status( 'refunded' )}'";
[1096] Fix | Delete
}
[1097] Fix | Delete
[1098] Fix | Delete
return $sql_query;
[1099] Fix | Delete
}
[1100] Fix | Delete
[1101] Fix | Delete
/**
[1102] Fix | Delete
* Returns an array of products belonging to given categories.
[1103] Fix | Delete
*
[1104] Fix | Delete
* @param array $categories List of categories IDs.
[1105] Fix | Delete
* @return array|stdClass
[1106] Fix | Delete
*/
[1107] Fix | Delete
protected function get_products_by_cat_ids( $categories ) {
[1108] Fix | Delete
$terms = get_terms(
[1109] Fix | Delete
array(
[1110] Fix | Delete
'taxonomy' => 'product_cat',
[1111] Fix | Delete
'include' => $categories,
[1112] Fix | Delete
)
[1113] Fix | Delete
);
[1114] Fix | Delete
[1115] Fix | Delete
if ( is_wp_error( $terms ) || empty( $terms ) ) {
[1116] Fix | Delete
return array();
[1117] Fix | Delete
}
[1118] Fix | Delete
[1119] Fix | Delete
$args = array(
[1120] Fix | Delete
'category' => wc_list_pluck( $terms, 'slug' ),
[1121] Fix | Delete
'limit' => -1,
[1122] Fix | Delete
'return' => 'ids',
[1123] Fix | Delete
);
[1124] Fix | Delete
return wc_get_products( $args );
[1125] Fix | Delete
}
[1126] Fix | Delete
[1127] Fix | Delete
/**
[1128] Fix | Delete
* Get WHERE filter by object ids subquery.
[1129] Fix | Delete
*
[1130] Fix | Delete
* @param string $select_table Select table name.
[1131] Fix | Delete
* @param string $select_field Select table object ID field name.
[1132] Fix | Delete
* @param string $filter_table Lookup table name.
[1133] Fix | Delete
* @param string $filter_field Lookup table object ID field name.
[1134] Fix | Delete
* @param string $compare Comparison string (IN|NOT IN).
[1135] Fix | Delete
* @param string $id_list Comma separated ID list.
[1136] Fix | Delete
*
[1137] Fix | Delete
* @return string
[1138] Fix | Delete
*/
[1139] Fix | Delete
protected function get_object_where_filter( $select_table, $select_field, $filter_table, $filter_field, $compare, $id_list ) {
[1140] Fix | Delete
global $wpdb;
[1141] Fix | Delete
if ( empty( $id_list ) ) {
[1142] Fix | Delete
return '';
[1143] Fix | Delete
}
[1144] Fix | Delete
[1145] Fix | Delete
$lookup_name = isset( $wpdb->$filter_table ) ? $wpdb->$filter_table : $wpdb->prefix . $filter_table;
[1146] Fix | Delete
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[1147] Fix | Delete
return " {$select_table}.{$select_field} {$compare} (
[1148] Fix | Delete
SELECT
[1149] Fix | Delete
DISTINCT {$filter_table}.{$select_field}
[1150] Fix | Delete
FROM
[1151] Fix | Delete
{$filter_table}
[1152] Fix | Delete
WHERE
[1153] Fix | Delete
{$filter_table}.{$filter_field} IN ({$id_list})
[1154] Fix | Delete
)";
[1155] Fix | Delete
// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
[1156] Fix | Delete
}
[1157] Fix | Delete
[1158] Fix | Delete
/**
[1159] Fix | Delete
* Returns an array of ids of allowed products, based on query arguments from the user.
[1160] Fix | Delete
*
[1161] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1162] Fix | Delete
* @return array
[1163] Fix | Delete
*/
[1164] Fix | Delete
protected function get_included_products_array( $query_args ) {
[1165] Fix | Delete
$included_products = array();
[1166] Fix | Delete
$operator = $this->get_match_operator( $query_args );
[1167] Fix | Delete
[1168] Fix | Delete
if ( isset( $query_args['category_includes'] ) && is_array( $query_args['category_includes'] ) && count( $query_args['category_includes'] ) > 0 ) {
[1169] Fix | Delete
$included_products = $this->get_products_by_cat_ids( $query_args['category_includes'] );
[1170] Fix | Delete
[1171] Fix | Delete
// If no products were found in the specified categories, we will force an empty set
[1172] Fix | Delete
// by matching a product ID of -1, unless the filters are OR/any and products are specified.
[1173] Fix | Delete
if ( empty( $included_products ) ) {
[1174] Fix | Delete
$included_products = array( '-1' );
[1175] Fix | Delete
}
[1176] Fix | Delete
}
[1177] Fix | Delete
[1178] Fix | Delete
if ( isset( $query_args['product_includes'] ) && is_array( $query_args['product_includes'] ) && count( $query_args['product_includes'] ) > 0 ) {
[1179] Fix | Delete
if ( count( $included_products ) > 0 ) {
[1180] Fix | Delete
if ( 'AND' === $operator ) {
[1181] Fix | Delete
// AND results in an intersection between products from selected categories and manually included products.
[1182] Fix | Delete
$included_products = array_intersect( $included_products, $query_args['product_includes'] );
[1183] Fix | Delete
} elseif ( 'OR' === $operator ) {
[1184] Fix | Delete
// OR results in a union of products from selected categories and manually included products.
[1185] Fix | Delete
$included_products = array_merge( $included_products, $query_args['product_includes'] );
[1186] Fix | Delete
}
[1187] Fix | Delete
} else {
[1188] Fix | Delete
$included_products = $query_args['product_includes'];
[1189] Fix | Delete
}
[1190] Fix | Delete
}
[1191] Fix | Delete
[1192] Fix | Delete
return $included_products;
[1193] Fix | Delete
}
[1194] Fix | Delete
[1195] Fix | Delete
/**
[1196] Fix | Delete
* Returns comma separated ids of allowed products, based on query arguments from the user.
[1197] Fix | Delete
*
[1198] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1199] Fix | Delete
* @return string
[1200] Fix | Delete
*/
[1201] Fix | Delete
protected function get_included_products( $query_args ) {
[1202] Fix | Delete
$included_products = $this->get_included_products_array( $query_args );
[1203] Fix | Delete
return implode( ',', $included_products );
[1204] Fix | Delete
}
[1205] Fix | Delete
[1206] Fix | Delete
/**
[1207] Fix | Delete
* Returns comma separated ids of allowed variations, based on query arguments from the user.
[1208] Fix | Delete
*
[1209] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1210] Fix | Delete
* @return string
[1211] Fix | Delete
*/
[1212] Fix | Delete
protected function get_included_variations( $query_args ) {
[1213] Fix | Delete
return $this->get_filtered_ids( $query_args, 'variation_includes' );
[1214] Fix | Delete
}
[1215] Fix | Delete
[1216] Fix | Delete
/**
[1217] Fix | Delete
* Returns comma separated ids of excluded variations, based on query arguments from the user.
[1218] Fix | Delete
*
[1219] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1220] Fix | Delete
* @return string
[1221] Fix | Delete
*/
[1222] Fix | Delete
protected function get_excluded_variations( $query_args ) {
[1223] Fix | Delete
return $this->get_filtered_ids( $query_args, 'variation_excludes' );
[1224] Fix | Delete
}
[1225] Fix | Delete
[1226] Fix | Delete
/**
[1227] Fix | Delete
* Returns an array of ids of disallowed products, based on query arguments from the user.
[1228] Fix | Delete
*
[1229] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1230] Fix | Delete
* @return array
[1231] Fix | Delete
*/
[1232] Fix | Delete
protected function get_excluded_products_array( $query_args ) {
[1233] Fix | Delete
$excluded_products = array();
[1234] Fix | Delete
$operator = $this->get_match_operator( $query_args );
[1235] Fix | Delete
[1236] Fix | Delete
if ( isset( $query_args['category_excludes'] ) && is_array( $query_args['category_excludes'] ) && count( $query_args['category_excludes'] ) > 0 ) {
[1237] Fix | Delete
$excluded_products = $this->get_products_by_cat_ids( $query_args['category_excludes'] );
[1238] Fix | Delete
}
[1239] Fix | Delete
[1240] Fix | Delete
if ( isset( $query_args['product_excludes'] ) && is_array( $query_args['product_excludes'] ) && count( $query_args['product_excludes'] ) > 0 ) {
[1241] Fix | Delete
$excluded_products = array_merge( $excluded_products, $query_args['product_excludes'] );
[1242] Fix | Delete
}
[1243] Fix | Delete
[1244] Fix | Delete
return $excluded_products;
[1245] Fix | Delete
}
[1246] Fix | Delete
[1247] Fix | Delete
/**
[1248] Fix | Delete
* Returns comma separated ids of excluded products, based on query arguments from the user.
[1249] Fix | Delete
*
[1250] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1251] Fix | Delete
* @return string
[1252] Fix | Delete
*/
[1253] Fix | Delete
protected function get_excluded_products( $query_args ) {
[1254] Fix | Delete
$excluded_products = $this->get_excluded_products_array( $query_args );
[1255] Fix | Delete
return implode( ',', $excluded_products );
[1256] Fix | Delete
}
[1257] Fix | Delete
[1258] Fix | Delete
/**
[1259] Fix | Delete
* Returns comma separated ids of included categories, based on query arguments from the user.
[1260] Fix | Delete
*
[1261] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1262] Fix | Delete
* @return string
[1263] Fix | Delete
*/
[1264] Fix | Delete
protected function get_included_categories( $query_args ) {
[1265] Fix | Delete
return $this->get_filtered_ids( $query_args, 'category_includes' );
[1266] Fix | Delete
}
[1267] Fix | Delete
[1268] Fix | Delete
/**
[1269] Fix | Delete
* Returns comma separated ids of included coupons, based on query arguments from the user.
[1270] Fix | Delete
*
[1271] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1272] Fix | Delete
* @param string $field Field name in the parameter list.
[1273] Fix | Delete
* @return string
[1274] Fix | Delete
*/
[1275] Fix | Delete
protected function get_included_coupons( $query_args, $field = 'coupon_includes' ) {
[1276] Fix | Delete
return $this->get_filtered_ids( $query_args, $field );
[1277] Fix | Delete
}
[1278] Fix | Delete
[1279] Fix | Delete
/**
[1280] Fix | Delete
* Returns comma separated ids of excluded coupons, based on query arguments from the user.
[1281] Fix | Delete
*
[1282] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1283] Fix | Delete
* @return string
[1284] Fix | Delete
*/
[1285] Fix | Delete
protected function get_excluded_coupons( $query_args ) {
[1286] Fix | Delete
return $this->get_filtered_ids( $query_args, 'coupon_excludes' );
[1287] Fix | Delete
}
[1288] Fix | Delete
[1289] Fix | Delete
/**
[1290] Fix | Delete
* Returns comma separated ids of included orders, based on query arguments from the user.
[1291] Fix | Delete
*
[1292] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1293] Fix | Delete
* @return string
[1294] Fix | Delete
*/
[1295] Fix | Delete
protected function get_included_orders( $query_args ) {
[1296] Fix | Delete
return $this->get_filtered_ids( $query_args, 'order_includes' );
[1297] Fix | Delete
}
[1298] Fix | Delete
[1299] Fix | Delete
/**
[1300] Fix | Delete
* Returns comma separated ids of excluded orders, based on query arguments from the user.
[1301] Fix | Delete
*
[1302] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1303] Fix | Delete
* @return string
[1304] Fix | Delete
*/
[1305] Fix | Delete
protected function get_excluded_orders( $query_args ) {
[1306] Fix | Delete
return $this->get_filtered_ids( $query_args, 'order_excludes' );
[1307] Fix | Delete
}
[1308] Fix | Delete
[1309] Fix | Delete
/**
[1310] Fix | Delete
* Returns comma separated ids of included users, based on query arguments from the user.
[1311] Fix | Delete
*
[1312] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1313] Fix | Delete
* @return string
[1314] Fix | Delete
*/
[1315] Fix | Delete
protected function get_included_users( $query_args ) {
[1316] Fix | Delete
return $this->get_filtered_ids( $query_args, 'user_includes' );
[1317] Fix | Delete
}
[1318] Fix | Delete
[1319] Fix | Delete
/**
[1320] Fix | Delete
* Returns comma separated ids of excluded users, based on query arguments from the user.
[1321] Fix | Delete
*
[1322] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1323] Fix | Delete
* @return string
[1324] Fix | Delete
*/
[1325] Fix | Delete
protected function get_excluded_users( $query_args ) {
[1326] Fix | Delete
return $this->get_filtered_ids( $query_args, 'user_excludes' );
[1327] Fix | Delete
}
[1328] Fix | Delete
[1329] Fix | Delete
/**
[1330] Fix | Delete
* Returns order status subquery to be used in WHERE SQL query, based on query arguments from the user.
[1331] Fix | Delete
*
[1332] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1333] Fix | Delete
* @param string $operator AND or OR, based on match query argument.
[1334] Fix | Delete
* @return string
[1335] Fix | Delete
*/
[1336] Fix | Delete
protected function get_status_subquery( $query_args, $operator = 'AND' ) {
[1337] Fix | Delete
global $wpdb;
[1338] Fix | Delete
[1339] Fix | Delete
$subqueries = array();
[1340] Fix | Delete
$excluded_statuses = array();
[1341] Fix | Delete
if ( isset( $query_args['status_is'] ) && is_array( $query_args['status_is'] ) && count( $query_args['status_is'] ) > 0 ) {
[1342] Fix | Delete
$allowed_statuses = array_map( array( $this, 'normalize_order_status' ), esc_sql( $query_args['status_is'] ) );
[1343] Fix | Delete
if ( $allowed_statuses ) {
[1344] Fix | Delete
$subqueries[] = "{$wpdb->prefix}wc_order_stats.status IN ( '" . implode( "','", $allowed_statuses ) . "' )";
[1345] Fix | Delete
}
[1346] Fix | Delete
}
[1347] Fix | Delete
[1348] Fix | Delete
if ( isset( $query_args['status_is_not'] ) && is_array( $query_args['status_is_not'] ) && count( $query_args['status_is_not'] ) > 0 ) {
[1349] Fix | Delete
$excluded_statuses = array_map( array( $this, 'normalize_order_status' ), $query_args['status_is_not'] );
[1350] Fix | Delete
}
[1351] Fix | Delete
[1352] Fix | Delete
if ( ( ! isset( $query_args['status_is'] ) || empty( $query_args['status_is'] ) )
[1353] Fix | Delete
&& ( ! isset( $query_args['status_is_not'] ) || empty( $query_args['status_is_not'] ) )
[1354] Fix | Delete
) {
[1355] Fix | Delete
$excluded_statuses = array_map( array( $this, 'normalize_order_status' ), $this->get_excluded_report_order_statuses() );
[1356] Fix | Delete
}
[1357] Fix | Delete
[1358] Fix | Delete
if ( $excluded_statuses ) {
[1359] Fix | Delete
$subqueries[] = "{$wpdb->prefix}wc_order_stats.status NOT IN ( '" . implode( "','", $excluded_statuses ) . "' )";
[1360] Fix | Delete
}
[1361] Fix | Delete
[1362] Fix | Delete
return implode( " $operator ", $subqueries );
[1363] Fix | Delete
}
[1364] Fix | Delete
[1365] Fix | Delete
/**
[1366] Fix | Delete
* Add order status SQL clauses if included in query.
[1367] Fix | Delete
*
[1368] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1369] Fix | Delete
* @param string $table_name Database table name.
[1370] Fix | Delete
* @param SqlQuery $sql_query Query object.
[1371] Fix | Delete
*/
[1372] Fix | Delete
protected function add_order_status_clause( $query_args, $table_name, &$sql_query ) {
[1373] Fix | Delete
global $wpdb;
[1374] Fix | Delete
$order_status_filter = $this->get_status_subquery( $query_args );
[1375] Fix | Delete
if ( $order_status_filter ) {
[1376] Fix | Delete
$sql_query->add_sql_clause( 'join', "JOIN {$wpdb->prefix}wc_order_stats ON {$table_name}.order_id = {$wpdb->prefix}wc_order_stats.order_id" );
[1377] Fix | Delete
$sql_query->add_sql_clause( 'where', "AND ( {$order_status_filter} )" );
[1378] Fix | Delete
}
[1379] Fix | Delete
}
[1380] Fix | Delete
[1381] Fix | Delete
/**
[1382] Fix | Delete
* Add order by SQL clause if included in query.
[1383] Fix | Delete
*
[1384] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1385] Fix | Delete
* @param SqlQuery $sql_query Query object.
[1386] Fix | Delete
* @return string Order by clause.
[1387] Fix | Delete
*/
[1388] Fix | Delete
protected function add_order_by_clause( $query_args, &$sql_query ) {
[1389] Fix | Delete
$order_by_clause = '';
[1390] Fix | Delete
[1391] Fix | Delete
$sql_query->clear_sql_clause( array( 'order_by' ) );
[1392] Fix | Delete
if ( isset( $query_args['orderby'] ) ) {
[1393] Fix | Delete
$order_by_clause = $this->normalize_order_by( esc_sql( $query_args['orderby'] ) );
[1394] Fix | Delete
$sql_query->add_sql_clause( 'order_by', $order_by_clause );
[1395] Fix | Delete
}
[1396] Fix | Delete
[1397] Fix | Delete
// Return ORDER BY clause to allow adding the sort field(s) to query via a JOIN.
[1398] Fix | Delete
return $order_by_clause;
[1399] Fix | Delete
}
[1400] Fix | Delete
[1401] Fix | Delete
/**
[1402] Fix | Delete
* Add order by order SQL clause.
[1403] Fix | Delete
*
[1404] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1405] Fix | Delete
* @param SqlQuery $sql_query Query object.
[1406] Fix | Delete
*/
[1407] Fix | Delete
protected function add_orderby_order_clause( $query_args, &$sql_query ) {
[1408] Fix | Delete
if ( isset( $query_args['order'] ) ) {
[1409] Fix | Delete
$sql_query->add_sql_clause( 'order_by', esc_sql( $query_args['order'] ) );
[1410] Fix | Delete
} else {
[1411] Fix | Delete
$sql_query->add_sql_clause( 'order_by', 'DESC' );
[1412] Fix | Delete
}
[1413] Fix | Delete
}
[1414] Fix | Delete
[1415] Fix | Delete
/**
[1416] Fix | Delete
* Returns customer subquery to be used in WHERE SQL query, based on query arguments from the user.
[1417] Fix | Delete
*
[1418] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1419] Fix | Delete
* @return string
[1420] Fix | Delete
*/
[1421] Fix | Delete
protected function get_customer_subquery( $query_args ) {
[1422] Fix | Delete
global $wpdb;
[1423] Fix | Delete
[1424] Fix | Delete
$customer_filter = '';
[1425] Fix | Delete
if ( isset( $query_args['customer_type'] ) ) {
[1426] Fix | Delete
if ( 'new' === strtolower( $query_args['customer_type'] ) ) {
[1427] Fix | Delete
$customer_filter = " {$wpdb->prefix}wc_order_stats.returning_customer = 0";
[1428] Fix | Delete
} elseif ( 'returning' === strtolower( $query_args['customer_type'] ) ) {
[1429] Fix | Delete
$customer_filter = " {$wpdb->prefix}wc_order_stats.returning_customer = 1";
[1430] Fix | Delete
}
[1431] Fix | Delete
}
[1432] Fix | Delete
[1433] Fix | Delete
return $customer_filter;
[1434] Fix | Delete
}
[1435] Fix | Delete
[1436] Fix | Delete
/**
[1437] Fix | Delete
* Returns product attribute subquery elements used in JOIN and WHERE clauses,
[1438] Fix | Delete
* based on query arguments from the user.
[1439] Fix | Delete
*
[1440] Fix | Delete
* @param array $query_args Parameters supplied by the user.
[1441] Fix | Delete
* @return array
[1442] Fix | Delete
*/
[1443] Fix | Delete
protected function get_attribute_subqueries( $query_args ) {
[1444] Fix | Delete
global $wpdb;
[1445] Fix | Delete
[1446] Fix | Delete
$sql_clauses = array(
[1447] Fix | Delete
'join' => array(),
[1448] Fix | Delete
'where' => array(),
[1449] Fix | Delete
);
[1450] Fix | Delete
$match_operator = $this->get_match_operator( $query_args );
[1451] Fix | Delete
$post_meta_comparators = array(
[1452] Fix | Delete
'=' => 'attribute_is',
[1453] Fix | Delete
'!=' => 'attribute_is_not',
[1454] Fix | Delete
);
[1455] Fix | Delete
[1456] Fix | Delete
foreach ( $post_meta_comparators as $comparator => $arg ) {
[1457] Fix | Delete
if ( ! isset( $query_args[ $arg ] ) || ! is_array( $query_args[ $arg ] ) ) {
[1458] Fix | Delete
continue;
[1459] Fix | Delete
}
[1460] Fix | Delete
foreach ( $query_args[ $arg ] as $attribute_term ) {
[1461] Fix | Delete
// We expect tuples.
[1462] Fix | Delete
if ( ! is_array( $attribute_term ) || 2 !== count( $attribute_term ) ) {
[1463] Fix | Delete
continue;
[1464] Fix | Delete
}
[1465] Fix | Delete
[1466] Fix | Delete
$term_id = '';
[1467] Fix | Delete
// If the tuple is numeric, assume these are IDs.
[1468] Fix | Delete
if ( is_numeric( $attribute_term[0] ) && is_numeric( $attribute_term[1] ) ) {
[1469] Fix | Delete
$attribute_id = intval( $attribute_term[0] );
[1470] Fix | Delete
$term_id = intval( $attribute_term[1] );
[1471] Fix | Delete
[1472] Fix | Delete
// Invalid IDs.
[1473] Fix | Delete
if ( 0 === $attribute_id || 0 === $term_id ) {
[1474] Fix | Delete
continue;
[1475] Fix | Delete
}
[1476] Fix | Delete
[1477] Fix | Delete
// @todo: Use wc_get_attribute () instead ?
[1478] Fix | Delete
$attr_taxonomy = wc_attribute_taxonomy_name_by_id( $attribute_id );
[1479] Fix | Delete
// Invalid attribute ID.
[1480] Fix | Delete
if ( empty( $attr_taxonomy ) ) {
[1481] Fix | Delete
continue;
[1482] Fix | Delete
}
[1483] Fix | Delete
[1484] Fix | Delete
$attr_term = get_term_by( 'id', $term_id, $attr_taxonomy );
[1485] Fix | Delete
// Invalid term ID.
[1486] Fix | Delete
if ( false === $attr_term ) {
[1487] Fix | Delete
continue;
[1488] Fix | Delete
}
[1489] Fix | Delete
[1490] Fix | Delete
$meta_key = sanitize_title( $attr_taxonomy );
[1491] Fix | Delete
$meta_value = $attr_term->slug;
[1492] Fix | Delete
} else {
[1493] Fix | Delete
// Assume these are a custom attribute slug/value pair.
[1494] Fix | Delete
$meta_key = esc_sql( $attribute_term[0] );
[1495] Fix | Delete
$meta_value = esc_sql( $attribute_term[1] );
[1496] Fix | Delete
$attr_term = get_term_by( 'slug', $meta_value, $meta_key );
[1497] Fix | Delete
if ( false !== $attr_term ) {
[1498] Fix | Delete
$term_id = $attr_term->term_id;
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function