PluginProbe
Elementor Website Builder – more than just a page builder / 4.2.0
Elementor Website Builder – more than just a page builder v4.2.0
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / includes / settings / controls.php

controls.php in Elementor Website Builder – more than just a page builder 4.2.0, at includes/settings/controls.php

284 lines 7.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit; // Exit if accessed directly.
6 }
7
8 /**
9 * Elementor settings controls.
10 *
11 * Elementor settings controls handler class responsible for creating the final
12 * HTML for various input field types used in Elementor settings pages.
13 *
14 * @since 1.0.0
15 */
16 class Settings_Controls {
17
18 /**
19 * Render settings control.
20 *
21 * Generates the final HTML on the frontend for any given field based on
22 * the field type (text, select, checkbox, raw HTML, etc.).
23 *
24 * @since 1.0.0
25 * @access public
26 * @static
27 *
28 * @param array $field Optional. Field data. Default is an empty array.
29 */
30 public static function render( $field = [] ) {
31 if ( empty( $field ) || empty( $field['id'] ) ) {
32 return;
33 }
34
35 $defaults = [
36 'type' => '',
37 'attributes' => [],
38 'std' => '',
39 'desc' => '',
40 ];
41
42 $field = array_merge( $defaults, $field );
43
44 $method_name = $field['type'];
45
46 if ( ! method_exists( __CLASS__, $method_name ) ) {
47 $method_name = 'text';
48 }
49
50 self::$method_name( $field );
51 }
52
53 /**
54 * Render text control.
55 *
56 * Generates the final HTML for text controls.
57 *
58 * @since 2.0.0
59 * @access private
60 * @static
61 *
62 * @param array $field Field data.
63 */
64 private static function text( array $field ) {
65 if ( empty( $field['attributes']['class'] ) ) {
66 $field['attributes']['class'] = 'regular-text';
67 }
68
69 ?>
70 <input type="<?php echo esc_attr( $field['type'] ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( get_option( $field['id'], $field['std'] ) ); ?>" <?php Utils::print_html_attributes( $field['attributes'] ); ?>/>
71 <?php
72 if ( ! empty( $field['sub_desc'] ) ) :
73 echo wp_kses_post( $field['sub_desc'] );
74 endif;
75 ?>
76 <?php if ( ! empty( $field['desc'] ) ) : ?>
77 <p class="description"><?php echo wp_kses_post( $field['desc'] ); ?></p>
78 <?php
79 endif;
80 }
81
82 /**
83 * Render checkbox control.
84 *
85 * Generates the final HTML for checkbox controls.
86 *
87 * @since 2.0.0
88 * @access private
89 * @static
90 *
91 * @param array $field Field data.
92 */
93 private static function checkbox( array $field ) {
94 ?>
95 <label>
96 <input type="<?php echo esc_attr( $field['type'] ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( $field['value'] ); ?>"<?php checked( $field['value'], get_option( $field['id'], $field['std'] ) ); ?> />
97 <?php
98 if ( ! empty( $field['sub_desc'] ) ) :
99 echo wp_kses_post( $field['sub_desc'] );
100 endif;
101 ?>
102 </label>
103 <?php if ( ! empty( $field['desc'] ) ) : ?>
104 <p class="description"><?php echo wp_kses_post( $field['desc'] ); ?></p>
105 <?php
106 endif;
107 }
108
109 /**
110 * Render checkbox list control.
111 *
112 * Generates the final HTML for checkbox list controls.
113 *
114 * @since 2.0.0
115 * @access private
116 * @static
117 *
118 * @param array $field Field data.
119 */
120 private static function checkbox_list( array $field ) {
121 $old_value = get_option( $field['id'], $field['std'] );
122 if ( ! is_array( $old_value ) ) {
123 $old_value = [];
124 }
125
126 foreach ( $field['options'] as $option_key => $option_value ) :
127 ?>
128 <label>
129 <input type="checkbox" name="<?php echo esc_attr( $field['id'] ); ?>[]" value="<?php echo esc_attr( $option_key ); ?>"<?php checked( in_array( $option_key, $old_value ), true ); ?> />
130 <?php echo wp_kses_post( $option_value ); ?>
131 </label><br />
132 <?php endforeach; ?>
133 <?php if ( ! empty( $field['desc'] ) ) : ?>
134 <p class="description"><?php echo wp_kses_post( $field['desc'] ); ?></p>
135 <?php
136 endif;
137 }
138
139 /**
140 * Render select control.
141 *
142 * Generates the final HTML for select controls.
143 *
144 * @since 2.0.0
145 * @access private
146 * @static
147 *
148 * @param array $field Field data.
149 */
150 private static function select( array $field ) {
151 $old_value = get_option( $field['id'], $field['std'] );
152 ?>
153 <select name="<?php echo esc_attr( $field['id'] ); ?>">
154 <?php if ( ! empty( $field['show_select'] ) ) : ?>
155 <option value=""> <?php echo esc_html__( 'Select', 'elementor' ); ?> </option>
156 <?php endif; ?>
157
158 <?php foreach ( $field['options'] as $value => $label ) : ?>
159 <option value="<?php echo esc_attr( $value ); ?>"<?php esc_attr( selected( $value, $old_value ) ); ?>><?php echo esc_html( $label ); ?></option>
160 <?php endforeach; ?>
161 </select>
162
163 <?php if ( ! empty( $field['desc'] ) ) : ?>
164 <p class="description"><?php echo wp_kses_post( $field['desc'] ); ?></p>
165 <?php
166 endif;
167 }
168
169 /**
170 * Render checkbox list control for CPT.
171 *
172 * Generates the final HTML for checkbox list controls populated with Custom Post Types.
173 *
174 * @since 2.0.0
175 * @access private
176 * @static
177 *
178 * @param array $field Field data.
179 */
180 private static function checkbox_list_cpt( array $field ) {
181 $defaults = [
182 'exclude' => [],
183 ];
184 $field = array_merge( $defaults, $field );
185
186 $post_types_objects = get_post_types(
187 [
188 'public' => true,
189 ], 'objects'
190 );
191
192 /**
193 * Filters the list of post type objects used by Elementor.
194 *
195 * @since 2.8.0
196 *
197 * @param array $post_types_objects List of post type objects used by Elementor.
198 */
199 $post_types_objects = apply_filters( 'elementor/settings/controls/checkbox_list_cpt/post_type_objects', $post_types_objects );
200
201 $field['options'] = [];
202 foreach ( $post_types_objects as $cpt_slug => $post_type ) {
203 if ( in_array( $cpt_slug, $field['exclude'], true ) ) {
204 continue;
205 }
206
207 $field['options'][ $cpt_slug ] = $post_type->labels->name;
208 }
209
210 self::checkbox_list( $field );
211 }
212
213 /**
214 * Render checkbox list control for user roles.
215 *
216 * Generates the final HTML for checkbox list controls populated with user roles.
217 *
218 * @since 2.0.0
219 * @access private
220 * @static
221 *
222 * @param array $field Field data.
223 */
224 private static function checkbox_list_roles( array $field ) {
225 $defaults = [
226 'exclude' => [],
227 ];
228 $field = array_merge( $defaults, $field );
229
230 $field['options'] = [];
231 $roles = get_editable_roles();
232
233 if ( is_multisite() ) {
234 $roles = [
235 'super_admin' => [
236 'name' => esc_html__( 'Super Admin', 'elementor' ),
237 ],
238 ] + $roles;
239 }
240
241 foreach ( $roles as $role_slug => $role_data ) {
242 if ( in_array( $role_slug, $field['exclude'] ) ) {
243 continue;
244 }
245
246 $field['options'][ $role_slug ] = $role_data['name'];
247 }
248
249 self::checkbox_list( $field );
250 }
251
252 /**
253 * Render raw HTML control.
254 *
255 * Generates the final HTML for raw HTML controls.
256 *
257 * @since 2.0.0
258 * @access private
259 * @static
260 *
261 * @param array $field Field data.
262 */
263 private static function raw_html( array $field ) {
264 if ( empty( $field['html'] ) ) {
265 return;
266 }
267 ?>
268 <div id="<?php echo esc_attr( $field['id'] ); ?>">
269
270 <?php // PHPCS - This is a Raw HTML control, it is not escaped on purpose. ?>
271 <div><?php echo $field['html']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></div>
272 <?php
273 if ( ! empty( $field['sub_desc'] ) ) :
274 echo wp_kses_post( $field['sub_desc'] );
275 endif;
276 ?>
277 <?php if ( ! empty( $field['desc'] ) ) : ?>
278 <p class="description"><?php echo wp_kses_post( $field['desc'] ); ?></p>
279 <?php endif; ?>
280 </div>
281 <?php
282 }
283 }
284