PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 2.5.0
Admin and Site Enhancements (ASE) v2.5.0
9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-settings-fields-render.php
admin-site-enhancements / classes Last commit date
class-activation.php 3 years ago class-admin-interface.php 3 years ago class-common-methods.php 3 years ago class-content-management.php 3 years ago class-deactivation.php 3 years ago class-disable-components.php 3 years ago class-security.php 3 years ago class-settings-fields-render.php 3 years ago class-settings-sanitization.php 3 years ago class-settings-sections-fields.php 3 years ago class-utilities.php 3 years ago
class-settings-fields-render.php
433 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 /**
6 * Class related to rendering of settings fields on the admin page
7 *
8 * @since 2.2.0
9 */
10 class Settings_Fields_Render {
11
12 /**
13 * Render checkbox field as a toggle/switcher
14 *
15 * @since 1.0.0
16 */
17 function render_checkbox_toggle( $args ) {
18
19 $options = get_option( ASENHA_SLUG_U );
20
21 $field_name = $args['field_name'];
22 $field_description = $args['field_description'];
23 $field_option_value = ( array_key_exists( $args['field_id'], $options ) ) ? $options[$args['field_id']] : false;
24
25 echo '<input type="checkbox" id="' . esc_attr( $field_name ) . '" class="asenha-field-checkbox" name="' . esc_attr( $field_name ) . '" ' . checked( $field_option_value, true, false ) . '>';
26 echo '<label for="' . esc_attr( $field_name ) . '"></label>';
27
28 // For field with additional options / sub-fields, we add a wrapper to enclose field descriptions
29 if ( array_key_exists( 'field_options_wrapper', $args ) && $args['field_options_wrapper'] ) {
30 // For when the options / sub-fields occupy lengthy vertical space, we add show all / less toggler
31 if ( array_key_exists( 'field_options_moreless', $args ) && $args['field_options_moreless'] ) {
32 echo '<div class="asenha-field-with-options field-show-more">';
33 echo '<a id="' . $args['field_slug'] . '-show-moreless" class="show-more-less show-more" href="#">Expand &#9660;</a>';
34 echo '<div class="asenha-field-options-wrapper wrapper-show-more">';
35 } else {
36 echo '<div class="asenha-field-with-options">';
37 echo '<div class="asenha-field-options-wrapper">';
38 }
39
40 }
41
42 echo '<div class="asenha-field-description">' . wp_kses_post( $field_description ) . '</div>';
43
44 // For field with additional options / sub-fields, we add wrapper for them
45 if ( array_key_exists( 'field_options_wrapper', $args ) && $args['field_options_wrapper'] ) {
46 echo '<div class="asenha-subfields" style="display:none"></div>';
47 }
48
49
50 // For field with additional options / sub-fields, we add a wrapper to enclose field descriptions
51 if ( array_key_exists( 'field_options_wrapper', $args ) && $args['field_options_wrapper'] ) {
52 echo '</div>';
53 echo '</div>';
54 }
55
56 }
57
58 /**
59 * Render checkbox field as sub-field of a toggle/switcher checkbox
60 *
61 * @since 1.9.0
62 */
63 function render_checkbox_plain( $args ) {
64
65 $options = get_option( ASENHA_SLUG_U );
66
67 $field_name = $args['field_name'];
68 $field_label = $args['field_label'];
69 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : false;
70
71 echo '<input type="checkbox" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-checkbox" name="' . esc_attr( $field_name ) . '" ' . checked( $field_option_value, true, false ) . '>';
72 echo '<label for="' . esc_attr( $field_name ) . '" class="asenha-subfield-checkbox-label">' . wp_kses_post( $field_label ) . '</label>';
73
74 }
75
76 /**
77 * Render checkbox field as sub-field of a toggle/switcher checkbox
78 *
79 * @since 1.3.0
80 */
81 function render_checkbox_subfield( $args ) {
82
83 $options = get_option( ASENHA_SLUG_U );
84
85 $field_name = $args['field_name'];
86 $field_label = $args['field_label'];
87 $field_option_value = ( isset( $options[$args['parent_field_id']][$args['field_id']] ) ) ? $options[$args['parent_field_id']][$args['field_id']] : false;
88
89 echo '<input type="checkbox" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-checkbox" name="' . esc_attr( $field_name ) . '" ' . checked( $field_option_value, true, false ) . '>';
90 echo '<label for="' . esc_attr( $field_name ) . '" class="asenha-subfield-checkbox-label">' . wp_kses_post( $field_label ) . '</label>';
91
92 }
93
94 /**
95 * Render text field as sub-field of a toggle/switcher checkbox
96 *
97 * @since 1.4.0
98 */
99 function render_text_subfield( $args ) {
100
101 $options = get_option( ASENHA_SLUG_U );
102
103 $field_id = $args['field_id'];
104 $field_name = $args['field_name'];
105 $field_type = $args['field_type'];
106 $field_prefix = $args['field_prefix'];
107 $field_suffix = $args['field_suffix'];
108 $field_description = $args['field_description'];
109 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : '';
110
111 if ( ! empty( $field_prefix ) && ! empty( $field_suffix ) ) {
112 $field_classname = ' with-prefix with-suffix';
113 } elseif ( ! empty( $field_prefix ) && empty( $field_suffix ) ) {
114 $field_classname = ' with-prefix';
115 } elseif ( empty( $field_prefix ) && ! empty( $field_suffix ) ) {
116 $field_classname = ' with-suffix';
117 } else {
118 $field_classname = '';
119 }
120
121 if ( $field_id == 'custom_login_slug' ) {
122 $placeholder = 'e.g. backend';
123 } elseif ( $field_id == 'redirect_after_login_to_slug' ) {
124 $placeholder = 'e.g. my-account';
125 } elseif ( $field_id == 'redirect_after_logout_to_slug' ) {
126 $placeholder = 'e.g. come-visit-again';
127 } elseif ( $field_id == 'login_fails_allowed' ) {
128 $placeholder = '3';
129 } elseif ( $field_id == 'login_lockout_maxcount' ) {
130 $placeholder = '3';
131 } else {
132 $placeholder = '';
133 }
134
135 echo $field_prefix . '<input type="text" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-text' . esc_attr( $field_classname ) . '" name="' . esc_attr( $field_name ) . '" placeholder="' . esc_attr( $placeholder ) . '" value="' . esc_attr( $field_option_value ) . '">' . $field_suffix;
136 echo '<label for="' . esc_attr( $field_name ) . '" class="asenha-subfield-checkbox-label">' . esc_html( $field_description ) . '</label>';
137
138 }
139
140 /**
141 * Render textarea field as sub-field of a toggle/switcher checkbox
142 *
143 * @since 2.3.0
144 */
145 function render_textarea_subfield( $args ) {
146
147 $options = get_option( ASENHA_SLUG_U );
148
149 $field_id = $args['field_id'];
150 $field_slug = $args['field_slug'];
151 $field_name = $args['field_name'];
152 $field_type = $args['field_type'];
153 $field_prefix = $args['field_prefix'];
154 $field_suffix = $args['field_suffix'];
155 $field_description = $args['field_description'];
156 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : '';
157
158 echo '<textarea rows="30" class="asenha-subfield-textarea" id="' . esc_attr( $field_name ) . '" name="' . esc_attr( $field_name ) . '">' . esc_textarea( $field_option_value ) . '</textarea>';
159 }
160
161 /**
162 * Render sortable menu field
163 *
164 * @since 2.0.0
165 */
166 function render_sortable_menu( $args ) {
167
168 ?>
169 <div class="subfield-description">Drag and drop menu items to the desired position and optionally hide them until "Show All" at the bottom of the admin menu is clicked.</div>
170 <ul id="custom-admin-menu" class="menu ui-sortable">
171 <?php
172
173 global $menu;
174 global $submenu;
175 $options = get_option( ASENHA_SLUG_U );
176
177 // Get hidden menu items
178 if ( array_key_exists( 'custom_menu_hidden', $options ) ) {
179 $hidden_menu = $options['custom_menu_hidden'];
180 $hidden_menu = explode( ',', $hidden_menu );
181 } else {
182 $hidden_menu = array();
183 }
184
185 $i = 1;
186
187 // Check if there's an existing custom menu order data stored in options
188
189 if ( array_key_exists( 'custom_menu_order', $options ) ) {
190
191 $custom_menu = $options['custom_menu_order'];
192 $custom_menu = explode( ',', $custom_menu );
193
194 // Render sortables with data in custom menu order
195
196 foreach ( $custom_menu as $custom_menu_item ) {
197
198 foreach ( $menu as $menu_key => $menu_info ) {
199
200 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
201 $menu_item_id = $menu_info[2];
202 } else {
203 $menu_item_id = $menu_info[5];
204 }
205
206 if ( $custom_menu_item == $menu_item_id ) {
207
208 ?>
209 <li id="<?php echo wp_kses_post( $menu_item_id ); ?>" class="menu-item menu-item-depth-0">
210 <div class="menu-item-bar">
211 <div class="menu-item-handle ui-sortable-handle">
212 <div class="item-title">
213 <span class="menu-item-title">
214 <?php
215
216 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
217 $separator_name = $menu_info[2];
218 $separator_name = str_replace( 'separator', 'Separator-', $separator_name );
219 $separator_name = str_replace( '--last', '-Last', $separator_name );
220 echo '~~ ' . wp_kses_post( $separator_name ) . ' ~~';
221 } else {
222 echo wp_kses_post( $menu_info[0] );
223 }
224
225 ?>
226 </span>
227 <label class="menu-item-checkbox-label">
228 <?php
229 if ( in_array( $custom_menu_item, $hidden_menu ) ) {
230 ?>
231 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo wp_kses_post( $menu_item_id ); ?>" checked>
232 <span>Hide</span>
233 <?php
234 } else {
235 ?>
236 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo wp_kses_post( $menu_item_id ); ?>">
237 <span>Hide</span>
238 <?php
239 }
240 ?>
241 </label>
242 </div>
243 </div>
244 </div>
245 <?php
246
247 $i = 1;
248
249 if ( array_key_exists( $menu_info[2], $submenu ) && @is_countable( $submenu[$menu_info[2]] ) && @sizeof( $submenu[$menu_info[2]] ) > 0 ) {
250 ?>
251 <div class="menu-item-settings wp-clearfix" style="display:none;">
252 <?php
253
254 foreach ( $submenu[$menu_info[2]] as $submenu_item ) {
255
256 $i++;
257
258 // echo $submenu_item[0];
259
260 }
261 ?>
262 </div>
263 <?php
264
265 }
266 ?>
267 </li>
268
269 <?php
270
271 }
272
273 }
274
275 }
276
277 } else {
278
279 // Render sortables with existing items in the admin menu
280
281 foreach ( $menu as $menu_key => $menu_info ) {
282
283 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
284 $menu_item_id = $menu_info[2];
285 } else {
286 $menu_item_id = $menu_info[5];
287 }
288
289 ?>
290 <li id="<?php echo wp_kses_post( $menu_item_id ); ?>" class="menu-item menu-item-depth-0">
291 <div class="menu-item-bar">
292 <div class="menu-item-handle ui-sortable-handle">
293 <div class="item-title">
294 <span class="menu-item-title">
295 <?php
296
297 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
298 $separator_name = $menu_info[2];
299 $separator_name = str_replace( 'separator', 'Separator-', $separator_name );
300 $separator_name = str_replace( '--last', '-Last', $separator_name );
301 echo '~~ ' . wp_kses_post( $separator_name ) . ' ~~';
302 } else {
303 echo wp_kses_post( $menu_info[0] );
304 }
305
306 ?>
307 </span>
308 <label class="menu-item-checkbox-label">
309 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo wp_kses_post( $menu_item_id ); ?>">
310 <span>Hide</span>
311 </label>
312 </div>
313 </div>
314 </div>
315 <?php
316
317 $i = 1;
318
319 if ( array_key_exists( $menu_info[2], $submenu ) && @is_countable( $submenu[$menu_info[2]] ) && @sizeof( $submenu[$menu_info[2]] ) > 0 ) {
320 ?>
321 <div class="menu-item-settings wp-clearfix" style="display:none;">
322 <?php
323
324 foreach ( $submenu[$menu_info[2]] as $submenu_item ) {
325
326 $i++;
327
328 // echo $submenu_item[0];
329
330 }
331 ?>
332 </div>
333 <?php
334
335 }
336 ?>
337 </li>
338
339 <?php
340
341 }
342
343
344 }
345
346
347 ?>
348 </ul>
349 <?php
350
351 $field_id = $args['field_id'];
352 $field_name = $args['field_name'];
353 $field_description = $args['field_description'];
354 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : '';
355
356 // Hidden input field to store custom menu order (from options as is, or sortupdate) upon clicking Save Changes.
357 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-text" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
358
359 $field_id = 'custom_menu_hidden';
360 $field_name = ASENHA_SLUG_U . '['. $field_id .']';
361 $field_option_value = ( isset( $options[$field_id] ) ) ? $options[$field_id] : '';
362
363 // Hidden input field to store hidden menu itmes (from options as is, or 'Hide' checkbox clicks) upon clicking Save Changes.
364 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-text" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
365
366 }
367
368 /**
369 * Render textarea field as sub-field of a toggle/switcher checkbox
370 *
371 * @since 2.3.0
372 */
373 function render_datatable( $args ) {
374
375 global $wpdb;
376
377 $options = get_option( ASENHA_SLUG_U );
378
379 $field_id = $args['field_id'];
380 $field_slug = $args['field_slug'];
381 $field_name = $args['field_name'];
382 $field_type = $args['field_type'];
383 $field_description = $args['field_description'];
384 $table_title = $args['table_title'];
385 $table_name = $args['table_name'];
386 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : '';
387
388 ?>
389 <table id="login-attempts-log" class="wp-list-table widefat striped datatable">
390 <thead>
391 <tr class="datatable-tr">
392 <th class="datatable-th">IP Address<br />Last Username</th>
393 <th class="datatable-th">Attempts<br />Lockouts</th>
394 <th class="datatable-th">Last Attempt On</th>
395 </tr>
396 </thead>
397 <tbody>
398 <?php
399
400 $limit = 1000;
401
402 $sql = $wpdb->prepare( "SELECT * FROM {$table_name} ORDER BY unixtime DESC LIMIT %d", array( $limit ) );
403
404 $entries = $wpdb->get_results( $sql, ARRAY_A );
405
406 foreach( $entries as $entry ) {
407
408 $unixtime = $entry['unixtime'];
409 if ( function_exists( 'wp_date' ) ) {
410 $date = wp_date( 'F j, Y', $unixtime );
411 $time = wp_date( 'H:i:s', $unixtime );
412 } else {
413 $date = date_i18n( 'F j, Y', $unixtime );
414 $time = date_i18n( 'H:i:s', $unixtime );
415 }
416 ?>
417 <tr class="datatable-tr">
418 <td class="datatable-td"><?php echo esc_html( $entry['ip_address'] ); ?><br /><?php echo esc_html( $entry['username'] ); ?></td>
419 <td class="datatable-td"><?php echo esc_html( $entry['fail_count'] ); ?><br /><?php echo esc_html( $entry['lockout_count'] ); ?></td>
420 <td class="datatable-td"><?php echo esc_html( $date ); ?><br /><?php echo esc_html( $time ); ?></td>
421 </tr>
422 <?php
423 }
424
425 ?>
426 </tbody>
427 </table>
428 <?php
429
430 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-datatable" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
431 }
432
433 }