PluginProbe
Stream – Activity Log & Audit Trail / 3.7.0
Stream – Activity Log & Audit Trail v3.7.0
4.4.0 4.3.0 4.2.2 4.2.1 trunk 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.1 3.1.1 3.10.0 3.2.0 3.2.1 3.2.2 3.2.3 All 50 releases
← All changes | classes/class-query.php +47 -11 3.2.33.7.0 View file →
@@ -1,7 +1,16 @@
1 1 <?php
2 +/**
3 + * Queries the database for stream records.
4 + *
5 + * @package WP_Stream
6 + */
7 +
2 8 namespace WP_Stream;
3 9
10 +/**
11 + * Class - Query
12 + */
4 13 class Query {
5 14 /**
6 15 * Hold the number of records found
7 16 *
@@ -11,9 +20,9 @@
11 20
12 21 /**
13 22 * Query records
14 23 *
15 - * @param array Query args
24 + * @param array $args Arguments to filter the records by.
16 25 *
17 26 * @return array Stream Records
18 27 */
19 28 public function query( $args ) {
@@ -47,9 +56,9 @@
47 56
48 57 if ( ! empty( $args['search'] ) ) {
49 58 $field = ! empty( $args['search_field'] ) ? $args['search_field'] : 'summary';
50 59
51 - // Sanitize field
60 + // Sanitize field.
52 61 $allowed_fields = array( 'ID', 'site_id', 'blog_id', 'object_id', 'user_id', 'user_role', 'created', 'summary', 'connector', 'context', 'action', 'ip' );
53 62 if ( in_array( $field, $allowed_fields, true ) ) {
54 63 $where .= $wpdb->prepare( " AND $wpdb->stream.{$field} LIKE %s", "%{$args['search']}%" ); // @codingStandardsIgnoreLine can't prepare column name
55 64 }
@@ -79,24 +88,24 @@
79 88 $args['date_to'] = $args['date'];
80 89 }
81 90
82 91 if ( ! empty( $args['date_from'] ) ) {
83 - $date = get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $args['date_from'] . ' 00:00:00' ) ) );
92 + $date = get_gmt_from_date( gmdate( 'Y-m-d H:i:s', strtotime( $args['date_from'] . ' 00:00:00' ) ) );
84 93 $where .= $wpdb->prepare( " AND DATE($wpdb->stream.created) >= %s", $date );
85 94 }
86 95
87 96 if ( ! empty( $args['date_to'] ) ) {
88 - $date = get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $args['date_to'] . ' 23:59:59' ) ) );
97 + $date = get_gmt_from_date( gmdate( 'Y-m-d H:i:s', strtotime( $args['date_to'] . ' 23:59:59' ) ) );
89 98 $where .= $wpdb->prepare( " AND DATE($wpdb->stream.created) <= %s", $date );
90 99 }
91 100
92 101 if ( ! empty( $args['date_after'] ) ) {
93 - $date = get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $args['date_after'] ) ) );
102 + $date = get_gmt_from_date( gmdate( 'Y-m-d H:i:s', strtotime( $args['date_after'] ) ) );
94 103 $where .= $wpdb->prepare( " AND DATE($wpdb->stream.created) > %s", $date );
95 104 }
96 105
97 106 if ( ! empty( $args['date_before'] ) ) {
98 - $date = get_gmt_from_date( date( 'Y-m-d H:i:s', strtotime( $args['date_before'] ) ) );
107 + $date = get_gmt_from_date( gmdate( 'Y-m-d H:i:s', strtotime( $args['date_before'] ) ) );
99 108 $where .= $wpdb->prepare( " AND DATE($wpdb->stream.created) < %s", $date );
100 109 }
101 110
102 111 /**
@@ -193,9 +202,9 @@
193 202 $selects = array();
194 203
195 204 if ( ! empty( $fields ) ) {
196 205 foreach ( $fields as $field ) {
197 - // We'll query the meta table later
206 + // We'll query the meta table later.
198 207 if ( 'meta' === $field ) {
199 208 continue;
200 209 }
201 210
@@ -207,11 +216,21 @@
207 216
208 217 $select = implode( ', ', $selects );
209 218
210 219 /**
220 + * Filters query WHERE statement as an alternative to filtering
221 + * the $query using the hook below.
222 + *
223 + * @param string $where WHERE statement.
224 + *
225 + * @return string
226 + */
227 + $where = apply_filters( 'wp_stream_db_query_where', $where );
228 +
229 + /**
211 230 * BUILD THE FINAL QUERY
212 231 */
213 - $query = "SELECT SQL_CALC_FOUND_ROWS {$select}
232 + $query = "SELECT {$select}
214 233 FROM $wpdb->stream
215 234 {$join}
216 235 WHERE 1=1 {$where}
217 236 {$orderby}
@@ -226,14 +245,31 @@
226 245 * @return string
227 246 */
228 247 $query = apply_filters( 'wp_stream_db_query', $query, $args );
229 248
230 - $result = array();
249 + // Build result count query.
250 + $count_query = "SELECT COUNT(*) as found
251 + FROM $wpdb->stream
252 + {$join}
253 + WHERE 1=1 {$where}";
254 +
231 255 /**
256 + * Filter allows the result count query to be modified before execution.
257 + *
258 + * @param string $query
259 + * @param array $args
260 + *
261 + * @return string
262 + */
263 + $count_query = apply_filters( 'wp_stream_db_count_query', $count_query, $args );
264 +
265 + /**
232 266 * QUERY THE DATABASE FOR RESULTS
233 267 */
234 - $result['items'] = $wpdb->get_results( $query ); // @codingStandardsIgnoreLine $query already prepared
235 - $result['count'] = $result['items'] ? absint( $wpdb->get_var( 'SELECT FOUND_ROWS()' ) ) : 0;
268 + $result = array(
269 + 'items' => $wpdb->get_results( $query ), // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
270 + 'count' => absint( $wpdb->get_var( $count_query ) ), // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
271 + );
236 272
237 273 return $result;
238 274 }
239 275 }