PluginProbe ʕ •ᴥ•ʔ
Robin Image Optimizer – Unlimited Image Optimization, WebP & AVIF / trunk
Robin Image Optimizer – Unlimited Image Optimization, WebP & AVIF vtrunk
2.0.5 trunk 1.3.7 1.4.0 1.4.1 1.4.2 1.4.6 1.5.0 1.5.3 1.5.6 1.5.8 1.6.5 1.6.6 1.6.9 1.7.0 1.7.4 1.8.1 1.8.2 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4
robin-image-optimizer / libs / factory / forms / controls / list.php
robin-image-optimizer / libs / factory / forms / controls Last commit date
customs 5 months ago holders 5 months ago checkbox.php 5 months ago color-and-opacity.php 5 months ago color.php 5 months ago datepicker-range.php 5 months ago dropdown-and-colors.php 5 months ago dropdown.php 5 months ago font.php 5 months ago google-font.php 5 months ago gradient.php 5 months ago hidden.php 5 months ago index.php 5 months ago integer.php 5 months ago list.php 5 months ago multiple-textbox.php 5 months ago paddings-editor.php 5 months ago pattern.php 5 months ago radio-colors.php 5 months ago radio.php 5 months ago textarea.php 5 months ago textbox.php 5 months ago url.php 5 months ago wp-editor.php 5 months ago
list.php
232 lines
1 <?php
2
3 /**
4 * Multiselect List Control
5 *
6 * Main options:
7 * name => a name of the control
8 * value => a value to show in the control
9 * default => a default value of the control if the "value" option is not specified
10 * items => a callback to return items or an array of items to select
11 *
12 * @package factory-forms
13 * @since 1.0.0
14 */
15
16 // Exit if accessed directly
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit;
19 }
20
21 if ( ! class_exists( 'Wbcr_FactoryForms600_ListControl' ) ) {
22
23 class Wbcr_FactoryForms600_ListControl extends Wbcr_FactoryForms600_Control {
24
25 public $type = 'list';
26
27 /**
28 * Returns a set of available items for the list.
29 *
30 * @since 1.0.0
31 * @return mixed[]
32 */
33 private function getItems() {
34
35 $data = $this->getOption( 'data', [] );
36
37 // if the data options is a valid callback for an object method
38 if ( ( is_array( $data ) && count( $data ) == 2 && is_object( $data[0] ) ) || is_string( $data ) ) {
39
40 return call_user_func( $data );
41 }
42
43 // if the data options is an array of values
44 return $data;
45 }
46
47 /**
48 * Returns true, if the data should be loaded via ajax.
49 *
50 * @since 1.0.0
51 * @return bool
52 */
53 protected function isAjax() {
54
55 $data = $this->getOption( 'data', [] );
56
57 return is_array( $data ) && isset( $data['ajax'] );
58 }
59
60 /**
61 * Shows the html markup of the control.
62 *
63 * @since 1.0.0
64 * @return void
65 */
66 public function html() {
67
68 $way = $this->getOption( 'way', 'default' );
69 $this->addHtmlData( 'way', $way );
70
71 if ( $this->isAjax() ) {
72
73 $data = $this->getOption( 'data', [] );
74 $ajax_id = 'factory-list-' . rand( 1000000, 9999999 );
75
76 $value = $this->getValue( null, true );
77
78 if ( empty( $value ) || empty( $value[0] ) ) {
79 $value = [];
80 }
81
82 ?>
83 <div class="factory-ajax-loader <?php echo $ajax_id . '-loader'; ?>"></div>
84 <script>
85 window['<?php echo esc_attr( $ajax_id ); ?>'] = {
86 'loader': '.<?php echo esc_attr( $ajax_id ) . '-loader'; ?>',
87 'url': '<?php echo esc_url( $data['url'] ); ?>',
88 'data': <?php echo json_encode( $data['data'] ); ?>,
89 'selected': <?php echo json_encode( $value ); ?>,
90 'emptyList': '<?php echo esc_html( $this->getOption( 'empty', __( 'The list is empty.', 'robin-image-optimizer' ) ) ); ?>'
91 };
92 </script>
93 <?php
94
95 $this->addHtmlData( 'ajax', true );
96 $this->addHtmlData( 'ajax-data-id', $ajax_id );
97 $this->addCssClass( 'factory-hidden' );
98 }
99
100 if ( 'checklist' == $way ) {
101 $this->checklistHtml();
102 } else {
103 $this->defaultHtml();
104 }
105 }
106
107 /**
108 * Shows the Buttons Dropdown.
109 *
110 * @since 1.0.0
111 * @return void
112 */
113 protected function checklistHtml() {
114 $items = $this->getItems();
115
116 $value = explode( ',', $this->getValue() );
117 if ( empty( $value ) || empty( $value[0] ) ) {
118 $value = [];
119 }
120
121 $name_on_form = $this->getNameOnForm();
122
123 $this->addCssClass( 'factory-checklist-way' );
124 $this->addHtmlData( 'name', $name_on_form );
125
126 $errors_callback = $this->getOption( 'errors' );
127 $errors = ! empty( $errors_callback )
128 ? call_user_func( $errors_callback )
129 : [];
130
131 $is_empty = $this->isAjax() || empty( $items );
132 $emptyList = $this->getOption( 'empty', __( 'The list is empty.', 'robin-image-optimizer' ) );
133
134 if ( $is_empty ) {
135 $this->addCssClass( 'factory-empty' );
136 }
137
138 ?>
139 <ul <?php $this->attrs(); ?>>
140 <?php if ( $is_empty ) { ?>
141 <li><?php echo esc_html( $emptyList ); ?></li>
142 <?php } else { ?>
143 <?php foreach ( $items as $item ) { ?>
144 <li>
145 <label for="factory-checklist-<?php echo esc_attr( $name_on_form ); ?>-<?php echo esc_attr( $item[0] ); ?>" class="
146 <?php
147 if ( ! empty( $errors[ $item[0] ] ) ) {
148 echo 'factory-has-error';
149 }
150 ?>
151 ">
152 <?php if ( ! empty( $errors[ $item[0] ] ) ) { ?>
153 <span class="factory-error">
154 <i class="fa fa-exclamation-triangle"></i>
155 <div class='factory-error-text'><?php echo esc_html( $errors[ $item[0] ] ); ?></div>
156 </span>
157 <?php } else { ?>
158 <span>
159 <input
160 type="checkbox"
161 name="<?php echo esc_attr( $name_on_form ); ?>[]"
162 value="<?php echo esc_attr( $item[0] ); ?>"
163 id="factory-checklist-<?php echo esc_attr( $name_on_form ); ?>-<?php echo esc_attr( $item[0] ); ?>"
164 <?php
165 if ( in_array( $item[0], $value ) ) {
166 echo 'checked="checked"';
167 }
168 ?>
169 />
170 </span>
171 <?php } ?>
172
173 <span><?php echo esc_html( $item[1] ); ?></span>
174 </label>
175 </li>
176 <?php } ?>
177 <?php } ?>
178 </ul>
179 <?php
180 }
181
182 /**
183 * Shows the standart dropdown.
184 *
185 * @since 1.3.1
186 * @return void
187 */
188 protected function defaultHtml() {
189
190 $items = $this->getItems();
191 $value = $this->getValue();
192
193 $name_on_form = $this->getNameOnForm();
194
195 $this->addHtmlAttr( 'id', $name_on_form );
196 $this->addHtmlAttr( 'name', $name_on_form );
197 $this->addCssClass( 'form-control' );
198
199 ?>
200 <select multiple="multiple" <?php $this->attrs(); ?>/>
201 <?php
202 foreach ( $items as $item ) {
203 if ( count( $item ) == 3 ) {
204 ?>
205 <optgroup label="<?php echo esc_attr( $item[1] ); ?>">
206 <?php foreach ( $item[2] as $subitem ) { ?>
207 <?php
208 $selected = ( $subitem[0] == $value )
209 ? 'selected="selected"'
210 : '';
211 ?>
212 <option value='<?php echo esc_attr( $subitem[0] ); ?>' <?php echo $selected; ?>>
213 <?php echo esc_html( $subitem[1] ); ?>
214 </option>
215 <?php } ?>
216 </optgroup>
217 <?php
218 } else {
219 $selected = ( $item[0] == $value )
220 ? 'selected="selected"'
221 : '';
222 ?>
223 <option value='<?php echo esc_attr( $item[0] ); ?>' <?php echo $selected; ?>>
224 <?php echo esc_html( $item[1] ); ?>
225 </option>
226 <?php } ?>
227 <?php } ?>
228 </select>
229 <?php
230 }
231 }
232 }