| @@ -2,13 +2,8 @@ | ||
| 2 | 2 | namespace WP_Stream; |
| 3 | 3 | |
| 4 | 4 | class Query { |
| 5 | 5 | /** |
| 6 | - * @var DB | |
| 7 | - */ | |
| 8 | - public $db; | |
| 9 | - | |
| 10 | - /** | |
| 11 | 6 | * Hold the number of records found |
| 12 | 7 | * |
| 13 | 8 | * @var int |
| 14 | 9 | */ |
| @@ -14,17 +9,8 @@ | ||
| 14 | 9 | */ |
| 15 | 10 | public $found_records = 0; |
| 16 | 11 | |
| 17 | 12 | /** |
| 18 | - * Class constructor. | |
| 19 | - * | |
| 20 | - * @param DB $db The parent database class. | |
| 21 | - */ | |
| 22 | - public function __construct( $db ) { | |
| 23 | - $this->db = $db; | |
| 24 | - } | |
| 25 | - | |
| 26 | - /** | |
| 27 | 13 | * Query records |
| 28 | 14 | * |
| 29 | 15 | * @param array Query args |
| 30 | 16 | * |
| @@ -32,72 +18,8 @@ | ||
| 32 | 18 | */ |
| 33 | 19 | public function query( $args ) { |
| 34 | 20 | global $wpdb; |
| 35 | 21 | |
| 36 | - $defaults = array( | |
| 37 | - // Search param | |
| 38 | - 'search' => null, | |
| 39 | - 'search_field' => 'summary', | |
| 40 | - 'record_after' => null, // Deprecated, use date_after instead | |
| 41 | - // Date-based filters | |
| 42 | - 'date' => null, // Ex: 2015-07-01 | |
| 43 | - 'date_from' => null, // Ex: 2015-07-01 | |
| 44 | - 'date_to' => null, // Ex: 2015-07-01 | |
| 45 | - 'date_after' => null, // Ex: 2015-07-01T15:19:21+00:00 | |
| 46 | - 'date_before' => null, // Ex: 2015-07-01T15:19:21+00:00 | |
| 47 | - // Record ID filters | |
| 48 | - 'record' => null, | |
| 49 | - 'record__in' => array(), | |
| 50 | - 'record__not_in' => array(), | |
| 51 | - // Pagination params | |
| 52 | - 'records_per_page' => get_option( 'posts_per_page', 20 ), | |
| 53 | - 'paged' => 1, | |
| 54 | - // Order | |
| 55 | - 'order' => 'desc', | |
| 56 | - 'orderby' => 'date', | |
| 57 | - // Fields selection | |
| 58 | - 'fields' => array(), | |
| 59 | - ); | |
| 60 | - | |
| 61 | - // Additional property fields | |
| 62 | - $properties = array( | |
| 63 | - 'user_id' => null, | |
| 64 | - 'user_role' => null, | |
| 65 | - 'ip' => null, | |
| 66 | - 'object_id' => null, | |
| 67 | - 'site_id' => null, | |
| 68 | - 'blog_id' => null, | |
| 69 | - 'connector' => null, | |
| 70 | - 'context' => null, | |
| 71 | - 'action' => null, | |
| 72 | - ); | |
| 73 | - | |
| 74 | - /** | |
| 75 | - * Filter allows additional query properties to be added | |
| 76 | - * | |
| 77 | - * @return array Array of query properties | |
| 78 | - */ | |
| 79 | - $properties = apply_filters( 'wp_stream_query_properties', $properties ); | |
| 80 | - | |
| 81 | - // Add property fields to defaults, including their __in/__not_in variations | |
| 82 | - foreach ( $properties as $property => $default ) { | |
| 83 | - if ( ! isset( $defaults[ $property ] ) ) { | |
| 84 | - $defaults[ $property ] = $default; | |
| 85 | - } | |
| 86 | - | |
| 87 | - $defaults[ "{$property}__in" ] = array(); | |
| 88 | - $defaults[ "{$property}__not_in" ] = array(); | |
| 89 | - } | |
| 90 | - | |
| 91 | - $args = wp_parse_args( $args, $defaults ); | |
| 92 | - | |
| 93 | - /** | |
| 94 | - * Filter allows additional arguments to query $args | |
| 95 | - * | |
| 96 | - * @return array Array of query arguments | |
| 97 | - */ | |
| 98 | - $args = apply_filters( 'wp_stream_query_args', $args ); | |
| 99 | - | |
| 100 | 22 | $join = ''; |
| 101 | 23 | $where = ''; |
| 102 | 24 | |
| 103 | 25 | /** |
| @@ -123,9 +45,9 @@ | ||
| 123 | 45 | $where .= $wpdb->prepare( " AND $wpdb->stream.user_role = %s", $args['user_role'] ); |
| 124 | 46 | } |
| 125 | 47 | |
| 126 | 48 | if ( ! empty( $args['search'] ) ) { |
| 127 | - $field = ! empty( $args['search_field'] ) ? $args['search_field'] : 'summary'; | |
| 49 | + $field = ! empty( $args['search_field'] ) ? $args['search_field'] : 'summary'; | |
| 128 | 50 | |
| 129 | 51 | // Sanitize field |
| 130 | 52 | $allowed_fields = array( 'ID', 'site_id', 'blog_id', 'object_id', 'user_id', 'user_role', 'created', 'summary', 'connector', 'context', 'action', 'ip' ); |
| 131 | 53 | if ( in_array( $field, $allowed_fields, true ) ) { |
| @@ -151,8 +73,13 @@ | ||
| 151 | 73 | |
| 152 | 74 | /** |
| 153 | 75 | * PARSE DATE PARAM FAMILY |
| 154 | 76 | */ |
| 77 | + if ( ! empty( $args['date'] ) ) { | |
| 78 | + $args['date_from'] = $args['date']; | |
| 79 | + $args['date_to'] = $args['date']; | |
| 80 | + } | |
| 81 | + | |
| 155 | 82 | if ( ! empty( $args['date_from'] ) ) { |
| 156 | 83 | $date = get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $args['date_from'] . ' 00:00:00' ) ) ); |
| 157 | 84 | $where .= $wpdb->prepare( " AND DATE($wpdb->stream.created) >= %s", $date ); |
| 158 | 85 | } |
| @@ -171,13 +98,8 @@ | ||
| 171 | 98 | $date = get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $args['date_before'] ) ) ); |
| 172 | 99 | $where .= $wpdb->prepare( " AND DATE($wpdb->stream.created) < %s", $date ); |
| 173 | 100 | } |
| 174 | 101 | |
| 175 | - if ( ! empty( $args['date'] ) ) { | |
| 176 | - $args['date_from'] = date( 'Y-m-d', strtotime( $args['date'] ) ) . ' 00:00:00'; | |
| 177 | - $args['date_to'] = date( 'Y-m-d', strtotime( $args['date'] ) ) . ' 23:59:59'; | |
| 178 | - } | |
| 179 | - | |
| 180 | 102 | /** |
| 181 | 103 | * PARSE __IN PARAM FAMILY |
| 182 | 104 | */ |
| 183 | 105 | $ins = array(); |
| @@ -304,51 +226,14 @@ | ||
| 304 | 226 | * @return string |
| 305 | 227 | */ |
| 306 | 228 | $query = apply_filters( 'wp_stream_db_query', $query, $args ); |
| 307 | 229 | |
| 230 | + $result = array(); | |
| 308 | 231 | /** |
| 309 | 232 | * QUERY THE DATABASE FOR RESULTS |
| 310 | 233 | */ |
| 311 | - $results = $wpdb->get_results( $query ); // @codingStandardsIgnoreLine $query already prepared | |
| 234 | + $result['items'] = $wpdb->get_results( $query ); // @codingStandardsIgnoreLine $query already prepared | |
| 235 | + $result['count'] = $result['items'] ? absint( $wpdb->get_var( 'SELECT FOUND_ROWS()' ) ) : 0; | |
| 312 | 236 | |
| 313 | - // Hold the number of records found | |
| 314 | - $this->found_records = absint( $wpdb->get_var( 'SELECT FOUND_ROWS()' ) ); | |
| 315 | - | |
| 316 | - // Add meta to the records, when applicable | |
| 317 | - if ( empty( $fields ) || in_array( 'meta', $fields, true ) ) { | |
| 318 | - $results = $this->add_record_meta( $results ); | |
| 319 | - } | |
| 320 | - | |
| 321 | - return (array) $results; | |
| 322 | - } | |
| 323 | - | |
| 324 | - /** | |
| 325 | - * Add meta to a set of records | |
| 326 | - * | |
| 327 | - * @param array $records | |
| 328 | - * | |
| 329 | - * @return array | |
| 330 | - */ | |
| 331 | - public function add_record_meta( $records ) { | |
| 332 | - global $wpdb; | |
| 333 | - | |
| 334 | - $record_ids = array_map( 'absint', wp_list_pluck( $records, 'ID' ) ); | |
| 335 | - | |
| 336 | - if ( empty( $record_ids ) ) { | |
| 337 | - return (array) $records; | |
| 338 | - } | |
| 339 | - | |
| 340 | - $sql_meta = sprintf( | |
| 341 | - "SELECT * FROM $wpdb->streammeta WHERE record_id IN ( %s )", | |
| 342 | - implode( ',', $record_ids ) | |
| 343 | - ); | |
| 344 | - | |
| 345 | - $meta = $wpdb->get_results( $sql_meta ); // @codingStandardsIgnoreLine prepare okay | |
| 346 | - $ids_f = array_flip( $record_ids ); | |
| 347 | - | |
| 348 | - foreach ( $meta as $meta_record ) { | |
| 349 | - $records[ $ids_f[ $meta_record->record_id ] ]->meta[ $meta_record->meta_key ] = maybe_unserialize( $meta_record->meta_value ); | |
| 350 | - } | |
| 351 | - | |
| 352 | - return (array) $records; | |
| 237 | + return $result; | |
| 353 | 238 | } |
| 354 | 239 | } |