PluginProbe
Stream – Activity Log & Audit Trail / 3.6.1
Stream – Activity Log & Audit Trail v3.6.1
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.6.1, at classes/class-db.php

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