PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 3.06.06
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v3.06.06
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/models/FrmEntryMeta.php +150 -190 6.43.06.06 View file →
@@ -4,28 +4,25 @@
4 4 }
5 5
6 6 class FrmEntryMeta {
7 7
8 - /**
9 - * @param int $entry_id
10 - * @param int $field_id
11 - * @param string $meta_key usually set to '' as this parameter is no longer used.
12 - * @param mixed $meta_value
13 - */
14 - public static function add_entry_meta( $entry_id, $field_id, $meta_key, $meta_value ) {
15 - global $wpdb;
8 + /**
9 + * @param string $meta_key
10 + */
11 + public static function add_entry_meta( $entry_id, $field_id, $meta_key = null, $meta_value ) {
12 + global $wpdb;
16 13
17 - if ( FrmAppHelper::is_empty_value( $meta_value ) ) {
18 - // don't save blank fields
19 - return 0;
20 - }
14 + if ( FrmAppHelper::is_empty_value( $meta_value ) ) {
15 + // don't save blank fields
16 + return 0;
17 + }
21 18
22 - $new_values = array(
23 - 'meta_value' => is_array( $meta_value ) ? serialize( array_filter( $meta_value, 'FrmAppHelper::is_not_empty_value' ) ) : trim( $meta_value ),
24 - 'item_id' => $entry_id,
25 - 'field_id' => $field_id,
26 - 'created_at' => current_time( 'mysql', 1 ),
27 - );
19 + $new_values = array(
20 + 'meta_value' => is_array( $meta_value ) ? serialize( array_filter( $meta_value, 'FrmAppHelper::is_not_empty_value' ) ) : trim( $meta_value ),
21 + 'item_id' => $entry_id,
22 + 'field_id' => $field_id,
23 + 'created_at' => current_time( 'mysql', 1 ),
24 + );
28 25
29 26 self::set_value_before_save( $new_values );
30 27 $new_values = apply_filters( 'frm_add_entry_meta', $new_values );
31 28
@@ -38,10 +35,10 @@
38 35 } else {
39 36 $id = 0;
40 37 }
41 38
42 - return $id;
43 - }
39 + return $id;
40 + }
44 41
45 42 /**
46 43 * @param int $entry_id
47 44 * @param int $field_id
@@ -49,21 +46,21 @@
49 46 * @param array|string $meta_value
50 47 *
51 48 * @return bool|false|int
52 49 */
53 - public static function update_entry_meta( $entry_id, $field_id, $meta_key, $meta_value ) {
54 - if ( ! $field_id ) {
55 - return false;
56 - }
50 + public static function update_entry_meta( $entry_id, $field_id, $meta_key = null, $meta_value ) {
51 + if ( ! $field_id ) {
52 + return false;
53 + }
57 54
58 - global $wpdb;
55 + global $wpdb;
59 56
60 - $values = array(
57 + $values = array(
61 58 'item_id' => $entry_id,
62 59 'field_id' => $field_id,
63 60 );
64 - $where_values = $values;
65 - $values['meta_value'] = $meta_value;
61 + $where_values = $values;
62 + $values['meta_value'] = $meta_value;
66 63 self::set_value_before_save( $values );
67 64 $values = apply_filters( 'frm_update_entry_meta', $values );
68 65
69 66 if ( is_array( $values['meta_value'] ) ) {
@@ -74,9 +71,9 @@
74 71 wp_cache_delete( $entry_id, 'frm_entry' );
75 72 self::clear_cache();
76 73
77 74 return $wpdb->update( $wpdb->prefix . 'frm_item_metas', array( 'meta_value' => $meta_value ), $where_values );
78 - }
75 + }
79 76
80 77 /**
81 78 * @since 3.0
82 79 */
@@ -83,9 +80,8 @@
83 80 private static function set_value_before_save( &$values ) {
84 81 $field = FrmField::getOne( $values['field_id'] );
85 82 if ( $field ) {
86 83 $field_obj = FrmFieldFactory::get_field_object( $field );
87 -
88 84 $values['meta_value'] = $field_obj->set_value_before_save( $values['meta_value'] );
89 85 }
90 86 }
91 87
@@ -94,9 +90,9 @@
94 90 */
95 91 private static function get_value_to_save( $atts, &$value ) {
96 92 if ( is_object( $atts['field'] ) ) {
97 93 $field_obj = FrmFieldFactory::get_field_object( $atts['field'] );
98 - $value = $field_obj->get_value_to_save(
94 + $value = $field_obj->get_value_to_save(
99 95 $value,
100 96 array(
101 97 'entry_id' => $atts['entry_id'],
102 98 'field_id' => $atts['field_id'],
@@ -107,9 +103,9 @@
107 103 $value = apply_filters( 'frm_prepare_data_before_db', $value, $atts['field_id'], $atts['entry_id'], array( 'field' => $atts['field'] ) );
108 104 }
109 105
110 106 public static function update_entry_metas( $entry_id, $values ) {
111 - global $wpdb;
107 + global $wpdb;
112 108
113 109 $prev_values = FrmDb::get_col(
114 110 $wpdb->prefix . 'frm_item_metas',
115 111 array(
@@ -118,9 +114,9 @@
118 114 ),
119 115 'field_id'
120 116 );
121 117
122 - foreach ( $values as $field_id => $meta_value ) {
118 + foreach ( $values as $field_id => $meta_value ) {
123 119 $field = false;
124 120 if ( ! empty( $field_id ) ) {
125 121 $field = FrmField::getOne( $field_id );
126 122 }
@@ -159,25 +155,16 @@
159 155 );
160 156 FrmDb::get_where_clause_and_values( $where );
161 157
162 158 // Delete any leftovers
163 - $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'frm_item_metas ' . $where['where'], $where['values'] ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
159 + $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'frm_item_metas ' . $where['where'], $where['values'] ) ); // WPCS: unprepared SQL ok.
164 160 self::clear_cache();
165 - }
161 + }
166 162
167 163 public static function duplicate_entry_metas( $old_id, $new_id ) {
168 164 $metas = self::get_entry_meta_info( $old_id );
169 -
170 - /**
171 - * Allows changing entry duplicate values before save.
172 - *
173 - * @since 5.4.4
174 - *
175 - * @param array $metas The list of entry meta values.
176 - */
177 - $metas = apply_filters( 'frm_before_duplicate_entry_values', $metas );
178 165 foreach ( $metas as $meta ) {
179 - self::add_entry_meta( $new_id, $meta->field_id, '', $meta->meta_value );
166 + self::add_entry_meta( $new_id, $meta->field_id, null, $meta->meta_value );
180 167 unset( $meta );
181 168 }
182 169 self::clear_cache();
183 170 }
@@ -182,13 +169,12 @@
182 169 self::clear_cache();
183 170 }
184 171
185 172 public static function delete_entry_meta( $entry_id, $field_id ) {
186 - global $wpdb;
173 + global $wpdb;
187 174 self::clear_cache();
188 -
189 175 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}frm_item_metas WHERE field_id=%d AND item_id=%d", $field_id, $entry_id ) );
190 - }
176 + }
191 177
192 178 /**
193 179 * Clear entry meta caching
194 180 * Called when a meta is added or changed
@@ -211,113 +197,111 @@
211 197 }
212 198 }
213 199
214 200 public static function get_entry_meta_by_field( $entry_id, $field_id ) {
215 - global $wpdb;
201 + global $wpdb;
216 202
217 203 if ( is_object( $entry_id ) ) {
218 - $entry = $entry_id;
204 + $entry = $entry_id;
219 205 $entry_id = $entry->id;
220 - $cached = $entry;
206 + $cached = $entry;
221 207 } else {
222 208 $entry_id = (int) $entry_id;
223 - $cached = FrmDb::check_cache( $entry_id, 'frm_entry' );
209 + $cached = FrmDb::check_cache( $entry_id, 'frm_entry' );
224 210 }
225 211
226 212 if ( $cached && isset( $cached->metas ) && isset( $cached->metas[ $field_id ] ) ) {
227 213 $result = $cached->metas[ $field_id ];
214 + return stripslashes_deep( $result );
215 + }
228 216
229 - return wp_unslash( $result );
230 - }
231 -
232 217 $get_table = $wpdb->prefix . 'frm_item_metas';
233 - $query = array( 'item_id' => $entry_id );
218 + $query = array( 'item_id' => $entry_id );
234 219 if ( is_numeric( $field_id ) ) {
235 220 $query['field_id'] = $field_id;
236 - } else {
237 - $get_table .= ' it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id';
221 + } else {
222 + $get_table .= ' it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id';
238 223 $query['fi.field_key'] = $field_id;
239 - }
224 + }
240 225
241 226 $result = FrmDb::get_var( $get_table, $query, 'meta_value' );
242 - FrmAppHelper::unserialize_or_decode( $result );
243 - $result = wp_unslash( $result );
227 + $result = maybe_unserialize( $result );
228 + $result = stripslashes_deep( $result );
244 229
245 - return $result;
246 - }
230 + return $result;
231 + }
247 232
248 - public static function get_entry_metas_for_field( $field_id, $order = '', $limit = '', $args = array() ) {
233 + public static function get_entry_metas_for_field( $field_id, $order = '', $limit = '', $args = array() ) {
249 234 $defaults = array(
250 - 'value' => false,
251 - 'unique' => false,
235 + 'value' => false,
236 + 'unique' => false,
252 237 'stripslashes' => true,
253 - 'is_draft' => false,
238 + 'is_draft' => false,
254 239 );
255 - $args = wp_parse_args( $args, $defaults );
240 + $args = wp_parse_args( $args, $defaults );
256 241
257 - $query = array();
242 + $query = array();
258 243 self::meta_field_query( $field_id, $order, $limit, $args, $query );
259 244 $query = implode( ' ', $query );
260 245
261 - $cache_key = 'entry_metas_for_field_' . $field_id . $order . $limit . FrmAppHelper::maybe_json_encode( $args );
262 - $values = FrmDb::check_cache( $cache_key, 'frm_entry', $query, 'get_col' );
246 + $cache_key = 'entry_metas_for_field_' . $field_id . $order . $limit . maybe_serialize( $args );
247 + $values = FrmDb::check_cache( $cache_key, 'frm_entry', $query, 'get_col' );
263 248
264 - if ( ! $args['stripslashes'] ) {
265 - return $values;
266 - }
249 + if ( ! $args['stripslashes'] ) {
250 + return $values;
251 + }
267 252
268 253 foreach ( $values as $k => $v ) {
269 - FrmAppHelper::unserialize_or_decode( $v );
270 - $values[ $k ] = $v;
254 + $values[ $k ] = maybe_unserialize( $v );
271 255 unset( $k, $v );
272 - }
256 + }
273 257
274 - return wp_unslash( $values );
275 - }
258 + return stripslashes_deep( $values );
259 + }
276 260
277 - /**
278 - * @param string $order
279 - * @param string $limit
280 - */
261 + /**
262 + * @param string $order
263 + * @param string $limit
264 + */
281 265 private static function meta_field_query( $field_id, $order, $limit, $args, array &$query ) {
282 - global $wpdb;
283 - $query[] = 'SELECT';
284 - $query[] = $args['unique'] ? 'DISTINCT(em.meta_value)' : 'em.meta_value';
266 + global $wpdb;
267 + $query[] = 'SELECT';
268 + $query[] = $args['unique'] ? 'DISTINCT(em.meta_value)' : 'em.meta_value';
285 269 $query[] = 'FROM ' . $wpdb->prefix . 'frm_item_metas em ';
286 270
287 - if ( ! $args['is_draft'] ) {
271 + if ( ! $args['is_draft'] ) {
288 272 $query[] = 'INNER JOIN ' . $wpdb->prefix . 'frm_items e ON (e.id=em.item_id)';
289 - }
273 + }
290 274
291 275 if ( is_numeric( $field_id ) ) {
292 276 $query[] = $wpdb->prepare( 'WHERE em.field_id=%d', $field_id );
293 277 } else {
294 278 $query[] = $wpdb->prepare( 'LEFT JOIN ' . $wpdb->prefix . 'frm_fields fi ON (em.field_id = fi.id) WHERE fi.field_key=%s', $field_id );
295 - }
279 + }
296 280
297 - if ( ! $args['is_draft'] ) {
298 - $query[] = 'AND e.is_draft=0';
299 - }
281 + if ( ! $args['is_draft'] ) {
282 + $query[] = 'AND e.is_draft=0';
283 + }
300 284
301 - if ( $args['value'] ) {
285 + if ( $args['value'] ) {
302 286 $query[] = $wpdb->prepare( ' AND meta_value=%s', $args['value'] );
303 - }
304 - $query[] = $order . $limit;
305 - }
287 + }
288 + $query[] = $order . $limit;
289 + }
306 290
307 291 public static function get_entry_meta_info( $entry_id ) {
308 292 return FrmDb::get_results( 'frm_item_metas', array( 'item_id' => $entry_id ) );
309 - }
293 + }
310 294
311 295 public static function getAll( $where = array(), $order_by = '', $limit = '', $stripslashes = false ) {
312 - global $wpdb;
313 - $query = 'SELECT it.*, fi.type as field_type, fi.field_key as field_key,
296 + global $wpdb;
297 + $query = 'SELECT it.*, fi.type as field_type, fi.field_key as field_key,
314 298 fi.required as required, fi.form_id as field_form_id, fi.name as field_name, fi.options as fi_options
315 299 FROM ' . $wpdb->prefix . 'frm_item_metas it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id' .
316 300 FrmDb::prepend_and_or_where( ' WHERE ', $where ) . $order_by . $limit;
317 301
318 - $cache_key = 'all_' . FrmAppHelper::maybe_json_encode( $where ) . $order_by . $limit;
319 - $results = FrmDb::check_cache( $cache_key, 'frm_entry', $query, ( $limit == ' LIMIT 1' ? 'get_row' : 'get_results' ) );
302 + $cache_key = 'all_' . maybe_serialize( $where ) . $order_by . $limit;
303 + $results = FrmDb::check_cache( $cache_key, 'frm_entry', $query, ( $limit == ' LIMIT 1' ? 'get_row' : 'get_results' ) );
320 304
321 305 if ( ! $results || ! $stripslashes ) {
322 306 return $results;
323 307 }
@@ -322,70 +306,47 @@
322 306 return $results;
323 307 }
324 308
325 309 foreach ( $results as $k => $result ) {
326 - FrmAppHelper::unserialize_or_decode( $result->meta_value );
327 - $results[ $k ]->meta_value = wp_unslash( $result->meta_value );
310 + $results[ $k ]->meta_value = stripslashes_deep( maybe_unserialize( $result->meta_value ) );
328 311 unset( $k, $result );
329 312 }
330 313
331 314 return $results;
332 - }
315 + }
333 316
334 - public static function getEntryIds( $where = array(), $order_by = '', $limit = '', $unique = true, $args = array() ) {
317 + public static function getEntryIds( $where = array(), $order_by = '', $limit = '', $unique = true, $args = array() ) {
335 318 $defaults = array(
336 319 'is_draft' => false,
337 320 'user_id' => '',
338 321 'group_by' => '',
339 322 );
340 - $args = wp_parse_args( $args, $defaults );
323 + $args = wp_parse_args( $args, $defaults );
341 324
342 - $query = array();
325 + $query = array();
343 326 self::get_ids_query( $where, $order_by, $limit, $unique, $args, $query );
344 327 $query = implode( ' ', $query );
345 328
346 - $cache_key = 'ids_' . FrmAppHelper::maybe_json_encode( $where ) . $order_by . 'l' . $limit . 'u' . $unique . FrmAppHelper::maybe_json_encode( $args );
347 - $type = 'get_' . ( ' LIMIT 1' === $limit ? 'var' : 'col' );
348 - return FrmDb::check_cache( $cache_key, 'frm_entry', $query, $type );
349 - }
329 + $cache_key = 'ids_' . maybe_serialize( $where ) . $order_by . 'l' . $limit . 'u' . $unique . maybe_serialize( $args );
330 + return FrmDb::check_cache( $cache_key, 'frm_entry', $query, ( $limit == ' LIMIT 1' ? 'get_var' : 'get_col' ) );
331 + }
350 332
351 - /**
352 - * Given a query including a form id and its child form ids, output an array of matching entry ids
353 - * If a child entry id is matched, its parent will be returned in its place
354 - *
355 - * @param array $query
356 - * @param array $args
357 - * @return array
358 - */
359 - public static function get_top_level_entry_ids( $query, $args ) {
360 - $args['return_parent_id_if_0_return_id'] = true;
361 - return self::getEntryIds( $query, '', '', true, $args );
362 - }
363 -
364 - /**
365 - * @param string|array $where
366 - * @param string $order_by
367 - * @param string $limit
368 - */
333 + /**
334 + * @param string|array $where
335 + * @param string $order_by
336 + * @param string $limit
337 + */
369 338 private static function get_ids_query( $where, $order_by, $limit, $unique, $args, array &$query ) {
370 - global $wpdb;
371 - $query[] = 'SELECT';
372 - $defaults = array(
373 - 'return_parent_id' => false,
374 - 'return_parent_id_if_0_return_id' => false,
375 - );
376 - $args = array_merge( $defaults, $args );
339 + global $wpdb;
340 + $query[] = 'SELECT';
377 341
378 - if ( $unique ) {
379 - $query[] = 'DISTINCT';
380 - }
342 + $defaults = array( 'return_parent_id' => false );
343 + $args = array_merge( $defaults, $args );
381 344
382 - if ( $args['return_parent_id_if_0_return_id'] ) {
383 - $query[] = 'IF ( e.parent_item_id = 0, it.item_id, e.parent_item_id )';
384 - } elseif ( $args['return_parent_id'] ) {
385 - $query[] = 'e.parent_item_id';
345 + if ( $args['return_parent_id'] ) {
346 + $query[] = $unique ? 'DISTINCT(e.parent_item_id)' : 'e.parent_item_id';
386 347 } else {
387 - $query[] = 'it.item_id';
348 + $query[] = $unique ? 'DISTINCT(it.item_id)' : 'it.item_id';
388 349 }
389 350
390 351 $query[] = 'FROM ' . $wpdb->prefix . 'frm_item_metas it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id';
391 352
@@ -390,33 +351,32 @@
390 351 $query[] = 'FROM ' . $wpdb->prefix . 'frm_item_metas it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id';
391 352
392 353 $query[] = 'INNER JOIN ' . $wpdb->prefix . 'frm_items e ON (e.id=it.item_id)';
393 354 if ( is_array( $where ) ) {
394 - if ( ! $args['is_draft'] ) {
395 - $where['e.is_draft'] = 0;
396 - } elseif ( $args['is_draft'] == 1 ) {
397 - $where['e.is_draft'] = 1;
398 - }
355 + if ( ! $args['is_draft'] ) {
356 + $where['e.is_draft'] = 0;
357 + } else if ( $args['is_draft'] == 1 ) {
358 + $where['e.is_draft'] = 1;
359 + }
399 360
400 361 if ( ! empty( $args['user_id'] ) ) {
401 - $where['e.user_id'] = $args['user_id'];
402 - }
362 + $where['e.user_id'] = $args['user_id'];
363 + }
403 364 $query[] = FrmDb::prepend_and_or_where( ' WHERE ', $where ) . $order_by . $limit;
404 365
405 366 if ( $args['group_by'] ) {
406 367 $query[] = ' GROUP BY ' . sanitize_text_field( $args['group_by'] );
407 368 }
369 + return;
370 + }
408 371
409 - return;
410 - }
411 -
412 372 $draft_where = '';
413 - $user_where = '';
414 - if ( ! $args['is_draft'] ) {
373 + $user_where = '';
374 + if ( ! $args['is_draft'] ) {
415 375 $draft_where = $wpdb->prepare( ' AND e.is_draft=%d', 0 );
416 - } elseif ( $args['is_draft'] == 1 ) {
376 + } else if ( $args['is_draft'] == 1 ) {
417 377 $draft_where = $wpdb->prepare( ' AND e.is_draft=%d', 1 );
418 - }
378 + }
419 379
420 380 if ( ! empty( $args['user_id'] ) ) {
421 381 $user_where = $wpdb->prepare( ' AND e.user_id=%d', $args['user_id'] );
422 382 }
@@ -422,58 +382,58 @@
422 382 }
423 383
424 384 if ( strpos( $where, ' GROUP BY ' ) ) {
425 385 // don't inject WHERE filtering after GROUP BY
426 - $parts = explode( ' GROUP BY ', $where );
427 - $where = $parts[0];
428 - $where .= $draft_where . $user_where;
386 + $parts = explode( ' GROUP BY ', $where );
387 + $where = $parts[0];
388 + $where .= $draft_where . $user_where;
429 389 $where .= ' GROUP BY ' . $parts[1];
430 - } else {
431 - $where .= $draft_where . $user_where;
432 - }
390 + } else {
391 + $where .= $draft_where . $user_where;
392 + }
433 393
434 394 // The query has already been prepared
435 395 $query[] = FrmDb::prepend_and_or_where( ' WHERE ', $where ) . $order_by . $limit;
436 - }
396 + }
437 397
438 - public static function search_entry_metas( $search, $field_id, $operator ) {
439 - $cache_key = 'search_' . FrmAppHelper::maybe_json_encode( $search ) . $field_id . $operator;
440 - $results = wp_cache_get( $cache_key, 'frm_entry' );
441 - if ( false !== $results ) {
442 - return $results;
443 - }
398 + public static function search_entry_metas( $search, $field_id = '', $operator ) {
399 + $cache_key = 'search_' . maybe_serialize( $search ) . $field_id . $operator;
400 + $results = wp_cache_get( $cache_key, 'frm_entry' );
401 + if ( false !== $results ) {
402 + return $results;
403 + }
444 404
445 - global $wpdb;
405 + global $wpdb;
446 406 if ( is_array( $search ) ) {
447 - $where = '';
407 + $where = '';
448 408 foreach ( $search as $field => $value ) {
449 409 if ( $value <= 0 || ! in_array( $field, array( 'year', 'month', 'day' ) ) ) {
450 - continue;
451 - }
410 + continue;
411 + }
452 412
453 - switch ( $field ) {
454 - case 'year':
413 + switch ( $field ) {
414 + case 'year':
455 415 $value = '%' . $value;
456 416 break;
457 - case 'month':
458 - $value .= '%';
417 + case 'month':
418 + $value .= '%';
459 419 break;
460 - case 'day':
420 + case 'day':
461 421 $value = '%' . $value . '%';
462 - }
463 - $where .= $wpdb->prepare( ' meta_value ' . $operator . ' %s and', $value ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
464 - }
422 + }
423 + $where .= $wpdb->prepare( ' meta_value ' . $operator . ' %s and', $value ); // WPCS: unprepared SQL ok.
424 + }
465 425 $where .= $wpdb->prepare( ' field_id=%d', $field_id );
466 426 $query = 'SELECT DISTINCT item_id FROM ' . $wpdb->prefix . 'frm_item_metas' . FrmDb::prepend_and_or_where( ' WHERE ', $where );
467 - } else {
427 + } else {
468 428 if ( $operator == 'LIKE' ) {
469 - $search = '%' . $search . '%';
429 + $search = '%' . $search . '%';
470 430 }
471 - $query = $wpdb->prepare( "SELECT DISTINCT item_id FROM {$wpdb->prefix}frm_item_metas WHERE meta_value {$operator} %s and field_id = %d", $search, $field_id ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
472 - }
431 + $query = $wpdb->prepare( "SELECT DISTINCT item_id FROM {$wpdb->prefix}frm_item_metas WHERE meta_value {$operator} %s and field_id = %d", $search, $field_id ); // WPCS: unprepared SQL ok.
432 + }
473 433
474 - $results = $wpdb->get_col( $query, 0 ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
434 + $results = $wpdb->get_col( $query, 0 ); // WPCS: unprepared SQL ok.
475 435 FrmDb::set_cache( $cache_key, $results, 'frm_entry' );
476 436
477 - return $results;
478 - }
437 + return $results;
438 + }
479 439 }