PluginProbe ʕ •ᴥ•ʔ
Kirki – Freeform Page Builder, Website Builder & Customizer / trunk
Kirki – Freeform Page Builder, Website Builder & Customizer vtrunk
6.3.0 6.2.5 6.2.4 6.2.3 6.2.2 6.2.1 6.2.0 6.1.1 6.1.0 6.0.14 6.0.13 6.0.12 6.0.11 6.0.10 6.0.9 6.0.8 6.0.7 6.0.6 6.0.5 6.0.4 6.0.3 6.0.2 6.0.1 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 4.0.19 4.0.20 4.0.21 4.0.22 4.0.23 4.0.24 4.1 4.2.0 5.0.0 5.1.0 5.1.1 5.2.0 5.2.1 5.2.2 5.2.3 6.0.0 trunk 3.0.40 3.0.41 3.0.42 3.0.43 3.0.44 3.0.45 3.1.0 3.1.1 3.1.2
kirki / libraries / framework / Validation / Rules / UniqueRule.php
kirki / libraries / framework / Validation / Rules Last commit date
ArrayRule.php 1 month ago BooleanRule.php 1 month ago ConditionalRule.php 1 month ago DateRule.php 1 month ago ExistsRule.php 1 month ago FileRule.php 1 month ago InRule.php 1 month ago NotInRule.php 1 month ago NullableRule.php 1 month ago NumericRule.php 1 month ago ObjectRule.php 1 month ago ProhibitedIfRule.php 1 month ago ProhibitedRule.php 1 month ago ProhibitedUnlessRule.php 1 month ago RequiredIfRule.php 1 month ago RequiredRule.php 1 month ago RequiredUnlessRule.php 1 month ago SameAsRule.php 1 month ago SometimesRule.php 1 month ago StringRule.php 1 month ago UniqueRule.php 1 month ago
UniqueRule.php
101 lines
1 <?php
2
3 /**
4 * Unique rule class.
5 *
6 * @package Framework
7 * @subpackage Validation
8 * @since 1.0.0
9 */
10 namespace Kirki\Framework\Validation\Rules;
11
12 use Exception;
13 use Kirki\Framework\Supports\Arr;
14 use Kirki\Framework\Supports\Facades\DB;
15 use Kirki\Framework\Validation\ValidationRule;
16 use function Kirki\Framework\Polyfill\array_last;
17 \defined('ABSPATH') || exit;
18 /**
19 * Validates that the given value does not already exist in a database table column.
20 */
21 class UniqueRule extends ValidationRule
22 {
23 /**
24 * The rule name.
25 *
26 * @var string
27 *
28 * @since 1.0.0
29 */
30 protected string $rule = 'unique';
31 /**
32 * The constraints.
33 *
34 * @var array
35 *
36 * @since 1.0.0
37 */
38 protected array $constraints = [];
39 /**
40 * Validate the rule.
41 *
42 * @return bool
43 *
44 * @since 1.0.0
45 */
46 public function validate() : bool
47 {
48 if ($this->record_exists()) {
49 return $this->fails($this->default_messages['default']);
50 }
51 return \true;
52 }
53 /**
54 * Check whether a matching record already exists in the table.
55 *
56 * @return bool
57 *
58 * @since 1.0.0
59 */
60 protected function record_exists()
61 {
62 [$table, $column, $ignore_id] = $this->table_column_and_ignore_id();
63 $query = DB::table($table)->where($column, $this->value);
64 if ($ignore_id !== null) {
65 $query->where('id', '!=', $ignore_id);
66 }
67 try {
68 $query->sole();
69 return \true;
70 } catch (Exception $error) {
71 return \false;
72 }
73 }
74 /**
75 * Resolve the prefixed table name, column, and ignored id from the rule arguments.
76 *
77 * @return array
78 *
79 * @since 1.0.0
80 */
81 protected function table_column_and_ignore_id()
82 {
83 $arguments = Arr::wrap($this->args);
84 $table = $arguments[0];
85 $column = !empty($arguments[1]) ? $arguments[1] : array_last(\explode('.', $this->name));
86 $ignore_id = $arguments[2] ?? null;
87 return [$table, $column, $ignore_id];
88 }
89 /**
90 * Get the error messages.
91 *
92 * @return array
93 *
94 * @since 1.0.0
95 */
96 public function messages()
97 {
98 return $this->process_messages($this->messages);
99 }
100 }
101