PluginProbe ʕ •ᴥ•ʔ
Admin Columns / 7.0.19
Admin Columns v7.0.19
7.0.19 2.3.5 2.4 2.4.1 2.4.10 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.6.1 2.5.6.2 2.5.6.3 2.5.6.4 3.0 3.0.1 3.0.2 3.0.3 3.0.5 3.0.7 3.1 3.1.1 3.1.10 3.1.2 3.1.3 3.1.5 3.2.3 3.2.7 3.3.1 3.4.1 3.4.6 3.4.8 4.0.1 4.0.3 4.1.6 4.2.2 4.2.5 4.3 4.3.2 4.4.1 4.4.4 4.4.5 4.5.5 4.6.1 4.7.18 4.7.19 4.7.20 4.7.7 7.0.13 7.0.14 7.0.16 trunk 1.0 1.1 1.1.3 1.2 1.2.1 1.3 1.3.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.5.1 1.4.6 1.4.6.1 1.4.6.2 1.4.6.3 1.4.6.4 1.4.7 1.4.8 1.4.9 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2 2.2.1 2.2.1.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.5.1 2.2.6 2.2.6.1 2.2.6.2 2.2.6.3 2.2.6.4 2.2.7 2.2.8 2.2.8.1 2.2.9 2.3.1 2.3.2 2.3.3
codepress-admin-columns / classes / Form / Element.php
codepress-admin-columns / classes / Form Last commit date
Element 1 month ago Element.php 1 month ago Nonce.php 1 month ago NonceFactory.php 1 month ago PreviewNonce.php 1 month ago
Element.php
211 lines
1 <?php
2
3 namespace AC\Form;
4
5 use AC\Helper;
6 use AC\Renderable;
7
8 abstract class Element implements Renderable
9 {
10
11 protected array $attributes = [];
12
13 /**
14 * Options for element like select
15 */
16 protected array $options = [];
17
18 /**
19 * The elements value
20 * @var mixed
21 */
22 protected $value = null;
23
24 protected string $label = '';
25
26 protected string $description = '';
27
28 /**
29 * Setup element with base name and id
30 */
31 public function __construct(string $name, array $options = [])
32 {
33 $this->set_name($name);
34 $this->set_id($name);
35 $this->set_options($options);
36 }
37
38 protected function render_description(): ?string
39 {
40 if ( ! $this->get_description()) {
41 return null;
42 }
43
44 $template = '<p class="help-msg">%s</p>';
45
46 return sprintf($template, $this->get_description());
47 }
48
49 abstract public function render(): string;
50
51 public function get_attribute(string $key): ?string
52 {
53 if ( ! isset($this->attributes[$key])) {
54 return null;
55 }
56
57 return trim((string)$this->attributes[$key]);
58 }
59
60 public function set_attribute(string $key, string $value): self
61 {
62 if ('value' === $key) {
63 $this->set_value($value);
64
65 return $this;
66 }
67
68 $this->attributes[$key] = $value;
69
70 return $this;
71 }
72
73 public function get_attributes(): array
74 {
75 return $this->attributes;
76 }
77
78 public function set_attributes(array $attributes): self
79 {
80 foreach ($attributes as $key => $value) {
81 $this->set_attribute((string)$key, (string)$value);
82 }
83
84 return $this;
85 }
86
87 /**
88 * Get attributes as string
89 */
90 protected function get_attributes_as_string(array $attributes): string
91 {
92 $output = [];
93
94 foreach ($attributes as $key => $value) {
95 $output[] = $this->get_attribute_as_string((string)$key, (string)$value);
96 }
97
98 return implode(' ', $output);
99 }
100
101 /**
102 * Render an attribute
103 */
104 protected function get_attribute_as_string(string $key, ?string $value = null): string
105 {
106 if (null === $value) {
107 $value = $this->get_attribute($key);
108 }
109
110 return Helper\Html::create()->get_attribute_as_string($key, $value);
111 }
112
113 public function get_name(): ?string
114 {
115 return $this->get_attribute('name');
116 }
117
118 public function set_name(string $name): self
119 {
120 return $this->set_attribute('name', $name);
121 }
122
123 public function get_id(): ?string
124 {
125 return $this->get_attribute('id');
126 }
127
128 public function set_id(string $id): self
129 {
130 return $this->set_attribute('id', $id);
131 }
132
133 /**
134 * @return mixed
135 */
136 public function get_value()
137 {
138 return $this->value;
139 }
140
141 /**
142 * @param mixed $value
143 *
144 * @return $this
145 */
146 public function set_value($value): self
147 {
148 $this->value = $value;
149
150 return $this;
151 }
152
153 public function set_class(string $class): self
154 {
155 $this->set_attribute('class', $class);
156
157 return $this;
158 }
159
160 public function add_class(string $class): self
161 {
162 $parts = explode(' ', (string)$this->get_attribute('class'));
163 $parts[] = $class;
164
165 $this->set_class(implode(' ', $parts));
166
167 return $this;
168 }
169
170 public function get_label(): string
171 {
172 return $this->label;
173 }
174
175 public function set_label(string $label): self
176 {
177 $this->label = $label;
178
179 return $this;
180 }
181
182 public function set_options(array $options): self
183 {
184 $this->options = $options;
185
186 return $this;
187 }
188
189 public function get_options(): array
190 {
191 return $this->options;
192 }
193
194 public function get_description(): string
195 {
196 return $this->description;
197 }
198
199 public function set_description(string $description): self
200 {
201 $this->description = $description;
202
203 return $this;
204 }
205
206 public function __toString(): string
207 {
208 return $this->render();
209 }
210
211 }