base-validation-callback.php
2 years ago
is-field-value-unique.php
1 year ago
is-user-email-unique.php
2 years ago
is-user-login-unique.php
2 years ago
is-user-password-valid.php
1 year ago
is-field-value-unique.php
59 lines
| 1 | <?php |
| 2 | |
| 3 | |
| 4 | namespace JFB_Modules\Validation\Ssr; |
| 5 | |
| 6 | use Jet_Form_Builder\Request\Parser_Context; |
| 7 | |
| 8 | // If this file is called directly, abort. |
| 9 | if ( ! defined( 'WPINC' ) ) { |
| 10 | die; |
| 11 | } |
| 12 | |
| 13 | class Is_Field_Value_Unique extends Base_Validation_Callback { |
| 14 | |
| 15 | public function get_id(): string { |
| 16 | return 'is_field_value_unique'; |
| 17 | } |
| 18 | |
| 19 | public function get_label(): string { |
| 20 | return __( 'Is field value unique', 'jet-form-builder' ); |
| 21 | } |
| 22 | |
| 23 | public function is_valid( $value, Parser_Context $context ): bool { |
| 24 | $request = $context->get_request(); |
| 25 | $field_name = $request['_jfb_validation_path'][0]; |
| 26 | $form_id = $request['_jet_engine_booking_form_id']; |
| 27 | |
| 28 | global $wpdb; |
| 29 | $record_ids = $wpdb->get_col( |
| 30 | $wpdb->prepare( |
| 31 | 'SELECT id FROM ' . $wpdb->prefix . 'jet_fb_records WHERE form_id = %d AND status = %s', |
| 32 | $form_id, |
| 33 | 'success' |
| 34 | ) |
| 35 | ); |
| 36 | |
| 37 | if ( ! empty( $record_ids ) ) { |
| 38 | $placeholders = array_fill( 0, count( $record_ids ), '%d' ); |
| 39 | $sql = sprintf( |
| 40 | 'SELECT COUNT(*) FROM ' . $wpdb->prefix . 'jet_fb_records_fields |
| 41 | WHERE record_id IN (%s) |
| 42 | AND field_name = %%s |
| 43 | AND field_value = %%s', |
| 44 | implode( ', ', $placeholders ) |
| 45 | ); |
| 46 | |
| 47 | $params = array_merge( $record_ids, array( $field_name, $value ) ); |
| 48 | |
| 49 | $exists = $wpdb->get_var( $wpdb->prepare( $sql, $params ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared |
| 50 | |
| 51 | if ( $exists ) { |
| 52 | return false; |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | return true; |
| 57 | } |
| 58 | } |
| 59 |