| @@ -5,14 +5,11 @@ | ||
| 5 | 5 | |
| 6 | 6 | class FrmEntryMeta { |
| 7 | 7 | |
| 8 | 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 | |
| 9 | + * @param string $meta_key | |
| 13 | 10 | */ |
| 14 | - public static function add_entry_meta( $entry_id, $field_id, $meta_key, $meta_value ) { | |
| 11 | + public static function add_entry_meta( $entry_id, $field_id, $meta_key = null, $meta_value ) { | |
| 15 | 12 | global $wpdb; |
| 16 | 13 | |
| 17 | 14 | if ( FrmAppHelper::is_empty_value( $meta_value ) ) { |
| 18 | 15 | // don't save blank fields |
| @@ -49,9 +46,9 @@ | ||
| 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 ) { | |
| 50 | + public static function update_entry_meta( $entry_id, $field_id, $meta_key = null, $meta_value ) { | |
| 54 | 51 | if ( ! $field_id ) { |
| 55 | 52 | return false; |
| 56 | 53 | } |
| 57 | 54 | |
| @@ -159,25 +156,16 @@ | ||
| 159 | 156 | ); |
| 160 | 157 | FrmDb::get_where_clause_and_values( $where ); |
| 161 | 158 | |
| 162 | 159 | // 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 | |
| 160 | + $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'frm_item_metas ' . $where['where'], $where['values'] ) ); // WPCS: unprepared SQL ok. | |
| 164 | 161 | self::clear_cache(); |
| 165 | 162 | } |
| 166 | 163 | |
| 167 | 164 | public static function duplicate_entry_metas( $old_id, $new_id ) { |
| 168 | 165 | $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 | 166 | foreach ( $metas as $meta ) { |
| 179 | - self::add_entry_meta( $new_id, $meta->field_id, '', $meta->meta_value ); | |
| 167 | + self::add_entry_meta( $new_id, $meta->field_id, null, $meta->meta_value ); | |
| 180 | 168 | unset( $meta ); |
| 181 | 169 | } |
| 182 | 170 | self::clear_cache(); |
| 183 | 171 | } |
| @@ -343,23 +331,10 @@ | ||
| 343 | 331 | self::get_ids_query( $where, $order_by, $limit, $unique, $args, $query ); |
| 344 | 332 | $query = implode( ' ', $query ); |
| 345 | 333 | |
| 346 | 334 | $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 | - } | |
| 350 | 335 | |
| 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 ); | |
| 336 | + return FrmDb::check_cache( $cache_key, 'frm_entry', $query, ( $limit == ' LIMIT 1' ? 'get_var' : 'get_col' ) ); | |
| 362 | 337 | } |
| 363 | 338 | |
| 364 | 339 | /** |
| 365 | 340 | * @param string|array $where |
| @@ -367,25 +342,17 @@ | ||
| 367 | 342 | * @param string $limit |
| 368 | 343 | */ |
| 369 | 344 | private static function get_ids_query( $where, $order_by, $limit, $unique, $args, array &$query ) { |
| 370 | 345 | global $wpdb; |
| 371 | - $query[] = 'SELECT'; | |
| 372 | - $defaults = array( | |
| 373 | - 'return_parent_id' => false, | |
| 374 | - 'return_parent_id_if_0_return_id' => false, | |
| 375 | - ); | |
| 346 | + $query[] = 'SELECT'; | |
| 347 | + | |
| 348 | + $defaults = array( 'return_parent_id' => false ); | |
| 376 | 349 | $args = array_merge( $defaults, $args ); |
| 377 | 350 | |
| 378 | - if ( $unique ) { | |
| 379 | - $query[] = 'DISTINCT'; | |
| 380 | - } | |
| 381 | - | |
| 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'; | |
| 351 | + if ( $args['return_parent_id'] ) { | |
| 352 | + $query[] = $unique ? 'DISTINCT(e.parent_item_id)' : 'e.parent_item_id'; | |
| 386 | 353 | } else { |
| 387 | - $query[] = 'it.item_id'; | |
| 354 | + $query[] = $unique ? 'DISTINCT(it.item_id)' : 'it.item_id'; | |
| 388 | 355 | } |
| 389 | 356 | |
| 390 | 357 | $query[] = 'FROM ' . $wpdb->prefix . 'frm_item_metas it LEFT OUTER JOIN ' . $wpdb->prefix . 'frm_fields fi ON it.field_id=fi.id'; |
| 391 | 358 | |
| @@ -422,10 +389,10 @@ | ||
| 422 | 389 | } |
| 423 | 390 | |
| 424 | 391 | if ( strpos( $where, ' GROUP BY ' ) ) { |
| 425 | 392 | // don't inject WHERE filtering after GROUP BY |
| 426 | - $parts = explode( ' GROUP BY ', $where ); | |
| 427 | - $where = $parts[0]; | |
| 393 | + $parts = explode( ' GROUP BY ', $where ); | |
| 394 | + $where = $parts[0]; | |
| 428 | 395 | $where .= $draft_where . $user_where; |
| 429 | 396 | $where .= ' GROUP BY ' . $parts[1]; |
| 430 | 397 | } else { |
| 431 | 398 | $where .= $draft_where . $user_where; |
| @@ -434,9 +401,9 @@ | ||
| 434 | 401 | // The query has already been prepared |
| 435 | 402 | $query[] = FrmDb::prepend_and_or_where( ' WHERE ', $where ) . $order_by . $limit; |
| 436 | 403 | } |
| 437 | 404 | |
| 438 | - public static function search_entry_metas( $search, $field_id, $operator ) { | |
| 405 | + public static function search_entry_metas( $search, $field_id = '', $operator ) { | |
| 439 | 406 | $cache_key = 'search_' . FrmAppHelper::maybe_json_encode( $search ) . $field_id . $operator; |
| 440 | 407 | $results = wp_cache_get( $cache_key, 'frm_entry' ); |
| 441 | 408 | if ( false !== $results ) { |
| 442 | 409 | return $results; |
| @@ -459,9 +426,9 @@ | ||
| 459 | 426 | break; |
| 460 | 427 | case 'day': |
| 461 | 428 | $value = '%' . $value . '%'; |
| 462 | 429 | } |
| 463 | - $where .= $wpdb->prepare( ' meta_value ' . $operator . ' %s and', $value ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared | |
| 430 | + $where .= $wpdb->prepare( ' meta_value ' . $operator . ' %s and', $value ); // WPCS: unprepared SQL ok. | |
| 464 | 431 | } |
| 465 | 432 | $where .= $wpdb->prepare( ' field_id=%d', $field_id ); |
| 466 | 433 | $query = 'SELECT DISTINCT item_id FROM ' . $wpdb->prefix . 'frm_item_metas' . FrmDb::prepend_and_or_where( ' WHERE ', $where ); |
| 467 | 434 | } else { |
| @@ -467,12 +434,12 @@ | ||
| 467 | 434 | } else { |
| 468 | 435 | if ( $operator == 'LIKE' ) { |
| 469 | 436 | $search = '%' . $search . '%'; |
| 470 | 437 | } |
| 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 | |
| 438 | + $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. | |
| 472 | 439 | } |
| 473 | 440 | |
| 474 | - $results = $wpdb->get_col( $query, 0 ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared | |
| 441 | + $results = $wpdb->get_col( $query, 0 ); // WPCS: unprepared SQL ok. | |
| 475 | 442 | FrmDb::set_cache( $cache_key, $results, 'frm_entry' ); |
| 476 | 443 | |
| 477 | 444 | return $results; |
| 478 | 445 | } |