PluginProbe
Stream – Activity Log & Audit Trail / 3.3.0
Stream – Activity Log & Audit Trail v3.3.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
stream / classes / class-db.php

class-db.php in Stream – Activity Log & Audit Trail 3.3.0, at classes/class-db.php

237 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace WP_Stream;
3
4 class DB {
5 /**
6 * Hold the Driver class
7 *
8 * @var DB_Driver
9 */
10 public $driver;
11
12 /**
13 * Number of records in last request
14 *
15 * @var int
16 */
17 protected $found_records_count = 0;
18
19 /**
20 * Class constructor.
21 *
22 * @param DB_Driver $driver Driver we want to use.
23 */
24 public function __construct( $driver ) {
25 $this->driver = $driver;
26 }
27
28 /**
29 * Insert a record
30 *
31 * @param array $record
32 *
33 * @return int
34 */
35 public function insert( $record ) {
36 if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
37 return false;
38 }
39
40 /**
41 * Filter allows modification of record information
42 *
43 * @param array $record
44 *
45 * @return array
46 */
47 $record = apply_filters( 'wp_stream_record_array', $record );
48
49 array_walk(
50 $record, function( &$value, &$key ) {
51 if ( ! is_array( $value ) ) {
52 $value = strip_tags( $value );
53 }
54 }
55 );
56
57 if ( empty( $record ) ) {
58 return false;
59 }
60
61 $fields = array( 'object_id', 'site_id', 'blog_id', 'user_id', 'user_role', 'created', 'summary', 'ip', 'connector', 'context', 'action', 'meta' );
62 $data = array_intersect_key( $record, array_flip( $fields ) );
63
64 $record_id = $this->driver->insert_record( $data );
65
66 if ( ! $record_id ) {
67 /**
68 * Fires on a record insertion error
69 *
70 * @param array $record
71 * @param mixed $result
72 */
73 do_action( 'wp_stream_record_insert_error', $record, false );
74
75 return false;
76 }
77
78 /**
79 * Fires after a record has been inserted
80 *
81 * @param int $record_id
82 * @param array $record
83 */
84 do_action( 'wp_stream_record_inserted', $record_id, $record );
85
86 return absint( $record_id );
87 }
88
89 /**
90 * Returns array of existing values for requested column.
91 * Used to fill search filters with only used items, instead of all items.
92 *
93 * GROUP BY allows query to find just the first occurrence of each value in the column,
94 * increasing the efficiency of the query.
95 *
96 * @see assemble_records
97 * @since 1.0.4
98 *
99 * @param string $column
100 *
101 * @return array
102 */
103 public function existing_records( $column ) {
104 // Sanitize column
105 $allowed_columns = array( 'ID', 'site_id', 'blog_id', 'object_id', 'user_id', 'user_role', 'created', 'summary', 'connector', 'context', 'action', 'ip' );
106 if ( ! in_array( $column, $allowed_columns, true ) ) {
107 return array();
108 }
109
110 $rows = $this->driver->get_column_values( $column );
111
112 if ( is_array( $rows ) && ! empty( $rows ) ) {
113 $output_array = array();
114
115 foreach ( $rows as $row ) {
116 foreach ( $row as $cell => $value ) {
117 $output_array[ $value ] = $value;
118 }
119 }
120
121 return (array) $output_array;
122 }
123
124 $column = sprintf( 'stream_%s', $column );
125
126 $term_labels = wp_stream_get_instance()->connectors->term_labels;
127 return isset( $term_labels[ $column ] ) ? $term_labels[ $column ] : array();
128 }
129
130 /**
131 * Get stream records
132 *
133 * @param array Query args
134 *
135 * @return array Stream Records
136 */
137 public function get_records( $args ) {
138 $defaults = array(
139 // Search param
140 'search' => null,
141 'search_field' => 'summary',
142 'record_after' => null, // Deprecated, use date_after instead
143 // Date-based filters
144 'date' => null, // Ex: 2015-07-01
145 'date_from' => null, // Ex: 2015-07-01
146 'date_to' => null, // Ex: 2015-07-01
147 'date_after' => null, // Ex: 2015-07-01T15:19:21+00:00
148 'date_before' => null, // Ex: 2015-07-01T15:19:21+00:00
149 // Record ID filters
150 'record' => null,
151 'record__in' => array(),
152 'record__not_in' => array(),
153 // Pagination params
154 'records_per_page' => get_option( 'posts_per_page', 20 ),
155 'paged' => 1,
156 // Order
157 'order' => 'desc',
158 'orderby' => 'date',
159 // Fields selection
160 'fields' => array(),
161 );
162
163 // Additional property fields
164 $properties = array(
165 'user_id' => null,
166 'user_role' => null,
167 'ip' => null,
168 'object_id' => null,
169 'site_id' => null,
170 'blog_id' => null,
171 'connector' => null,
172 'context' => null,
173 'action' => null,
174 );
175
176 /**
177 * Filter allows additional query properties to be added
178 *
179 * @return array Array of query properties
180 */
181 $properties = apply_filters( 'wp_stream_query_properties', $properties );
182
183 // Add property fields to defaults, including their __in/__not_in variations
184 foreach ( $properties as $property => $default ) {
185 if ( ! isset( $defaults[ $property ] ) ) {
186 $defaults[ $property ] = $default;
187 }
188
189 $defaults[ "{$property}__in" ] = array();
190 $defaults[ "{$property}__not_in" ] = array();
191 }
192
193 $args = wp_parse_args( $args, $defaults );
194
195 /**
196 * Filter allows additional arguments to query $args
197 *
198 * @return array Array of query arguments
199 */
200 $args = apply_filters( 'wp_stream_query_args', $args );
201
202 $result = (array) $this->driver->get_records( $args );
203 $this->found_records_count = isset( $result['count'] ) ? $result['count'] : 0;
204
205 return empty( $result['items'] ) ? array() : $result['items'];
206 }
207
208 /**
209 * Helper function, backwards compatibility
210 *
211 * @param array $args Query args
212 *
213 * @return array Stream Records
214 */
215 public function query( $args ) {
216 return $this->get_records( $args );
217 }
218
219 /**
220 * Return the number of records found in last request
221 *
222 * return int
223 */
224 public function get_found_records_count() {
225 return $this->found_records_count;
226 }
227
228 /**
229 * Public getter to return table names
230 *
231 * @return array
232 */
233 public function get_table_names() {
234 return $this->driver->get_table_names();
235 }
236 }
237