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

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