PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 3.2.0
Admin and Site Enhancements (ASE) v3.2.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
557 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, array() );
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, array() );
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, array() );
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, array() );
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, array() );
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 '<div class="asenha-subfield-textarea-wrapper">';
159
160 echo '<textarea rows="30" class="asenha-subfield-textarea" id="' . esc_attr( $field_name ) . '" name="' . esc_attr( $field_name ) . '">' . esc_textarea( $field_option_value ) . '</textarea>';
161
162 if ( ! empty( $field_description ) ) {
163
164 echo '<div class="asenha-subfield-textarea-description">' . wp_kses_post( $field_description ) . '</div>';
165
166 }
167
168 echo '</div>';
169
170 }
171
172 /**
173 * Render sortable menu field
174 *
175 * @since 2.0.0
176 */
177 function render_sortable_menu( $args ) {
178
179 ?>
180 <div class="subfield-description">Drag and drop menu items to the desired position. Optionally change item titles or hide some items until "Show All" at the bottom of the admin menu is clicked.</div>
181 <ul id="custom-admin-menu" class="menu ui-sortable">
182 <?php
183
184 global $menu;
185 global $submenu;
186 $common_methods = new Common_Methods;
187 $options = get_option( ASENHA_SLUG_U, array() );
188
189 // Set menu items to be excluded from title renaming. These are from WordPress core.
190 $renaming_not_allowed = array( 'menu-dashboard', 'menu-pages', 'menu-posts', 'menu-media', 'menu-comments', 'menu-appearance', 'menu-plugins', 'menu-users', 'menu-tools', 'menu-settings' );
191
192 // Get custom menu item titles
193 if ( array_key_exists( 'custom_menu_titles', $options ) ) {
194 $custom_menu_titles = $options['custom_menu_titles'];
195 $custom_menu_titles = explode( ',', $custom_menu_titles );
196 } else {
197 $custom_menu_titles = array();
198 }
199
200 // Get hidden menu items
201 if ( array_key_exists( 'custom_menu_hidden', $options ) ) {
202 $hidden_menu = $options['custom_menu_hidden'];
203 $hidden_menu = explode( ',', $hidden_menu );
204 } else {
205 $hidden_menu = array();
206 }
207
208 $i = 1;
209
210 // Check if there's an existing custom menu order data stored in options
211
212 if ( array_key_exists( 'custom_menu_order', $options ) ) {
213
214 $custom_menu = $options['custom_menu_order'];
215 $custom_menu = explode( ',', $custom_menu );
216
217 $menu_key_in_use = array();
218
219 // Render sortables with data in custom menu order
220
221 foreach ( $custom_menu as $custom_menu_item ) {
222
223 foreach ( $menu as $menu_key => $menu_info ) {
224
225 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
226 $menu_item_id = $menu_info[2];
227 } else {
228 $menu_item_id = $menu_info[5];
229 }
230
231 if ( $custom_menu_item == $menu_item_id ) {
232
233 ?>
234 <li id="<?php echo esc_attr( $menu_item_id ); ?>" class="menu-item menu-item-depth-0">
235 <div class="menu-item-bar">
236 <div class="menu-item-handle ui-sortable-handle">
237 <div class="item-title">
238 <span class="menu-item-title">
239 <?php
240
241 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
242 $separator_name = $menu_info[2];
243 $separator_name = str_replace( 'separator', 'Separator-', $separator_name );
244 $separator_name = str_replace( '--last', '-Last', $separator_name );
245 echo '~~ ' . esc_html( $separator_name ) . ' ~~';
246 } else {
247 if ( in_array( $menu_item_id, $renaming_not_allowed ) ) {
248 // echo wp_kses_post( $menu_info[0] );
249 echo wp_kses_post( $common_methods->strip_html_tags_and_content( $menu_info[0] ) );
250 } else {
251
252 // Get defaul/custom menu item title
253 foreach ( $custom_menu_titles as $custom_menu_title ) {
254
255 // At this point, $custom_menu_title value looks like toplevel_page_snippets__Code Snippets
256
257 $custom_menu_title = explode( '__', $custom_menu_title );
258
259 if ( $custom_menu_title[0] == $menu_item_id ) {
260 $menu_item_title = $common_methods->strip_html_tags_and_content( $custom_menu_title[1] ); // e.g. Code Snippets
261 break; // stop foreach loop so $menu_item_title is not overwritten in the next iteration
262 } else {
263 $menu_item_title = $common_methods->strip_html_tags_and_content( $menu_info[0] );
264 }
265
266 }
267
268 ?>
269 <input type="text" value="<?php echo wp_kses_post( $menu_item_title ); ?>" class="menu-item-custom-title" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>">
270 <?php
271 }
272 }
273
274 ?>
275 </span>
276 <label class="menu-item-checkbox-label">
277 <?php
278 if ( in_array( $custom_menu_item, $hidden_menu ) ) {
279 ?>
280 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>" checked>
281 <span>Hide</span>
282 <?php
283 } else {
284 ?>
285 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>">
286 <span>Hide</span>
287 <?php
288 }
289 ?>
290 </label>
291 </div>
292 </div>
293 </div>
294 <?php
295
296 $i = 1;
297
298 if ( array_key_exists( $menu_info[2], $submenu ) && @is_countable( $submenu[$menu_info[2]] ) && @sizeof( $submenu[$menu_info[2]] ) > 0 ) {
299 ?>
300 <div class="menu-item-settings wp-clearfix" style="display:none;">
301 <?php
302
303 foreach ( $submenu[$menu_info[2]] as $submenu_item ) {
304
305 $i++;
306
307 // echo $submenu_item[0];
308
309 }
310 ?>
311 </div>
312 <?php
313
314 }
315 ?>
316 </li>
317
318 <?php
319
320 $menu_key_in_use[] = $menu_key;
321
322 }
323
324 }
325
326 }
327
328 // Render the rest of the current menu towards the end of the sortables
329
330 foreach ( $menu as $menu_key => $menu_info ) {
331
332 if ( ! in_array( $menu_key, $menu_key_in_use ) ) {
333
334 $menu_item_id = $menu_info[5];
335 $menu_item_title = $menu_info[0];
336
337 // Exclude Show All/Less toggles
338
339 if ( false === strpos( $menu_item_id, 'toplevel_page_asenha_' ) ) {
340
341 ?>
342 <li id="<?php echo esc_attr( $menu_item_id ); ?>" class="menu-item menu-item-depth-0">
343 <div class="menu-item-bar">
344 <div class="menu-item-handle ui-sortable-handle">
345 <div class="item-title">
346 <span class="menu-item-title">
347 <input type="text" value="<?php echo wp_kses_post( $menu_item_title ); ?>" class="menu-item-custom-title" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>">
348 </span>
349 <label class="menu-item-checkbox-label">
350 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>">
351 <span>Hide</span>
352 </label>
353 </div>
354 </div>
355 </div>
356 <?php
357
358 }
359
360 $i = 1;
361
362 if ( array_key_exists( $menu_info[2], $submenu ) && @is_countable( $submenu[$menu_info[2]] ) && @sizeof( $submenu[$menu_info[2]] ) > 0 ) {
363 ?>
364 <div class="menu-item-settings wp-clearfix" style="display:none;">
365 <?php
366
367 foreach ( $submenu[$menu_info[2]] as $submenu_item ) {
368
369 $i++;
370
371 // echo $submenu_item[0];
372
373 }
374 ?>
375 </div>
376 <?php
377
378 }
379 ?>
380 </li>
381
382 <?php
383
384 }
385
386 }
387
388 } else {
389
390 // Render sortables with existing items in the admin menu
391
392 foreach ( $menu as $menu_key => $menu_info ) {
393
394 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
395 $menu_item_id = $menu_info[2];
396 } else {
397 $menu_item_id = $menu_info[5];
398 }
399
400 ?>
401 <li id="<?php echo esc_attr( $menu_item_id ); ?>" class="menu-item menu-item-depth-0">
402 <div class="menu-item-bar">
403 <div class="menu-item-handle ui-sortable-handle">
404 <div class="item-title">
405 <span class="menu-item-title">
406 <?php
407
408 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
409 $separator_name = $menu_info[2];
410 $separator_name = str_replace( 'separator', 'Separator-', $separator_name );
411 $separator_name = str_replace( '--last', '-Last', $separator_name );
412 echo '~~ ' . esc_html( $separator_name ) . ' ~~';
413 } else {
414 if ( in_array( $menu_item_id, $renaming_not_allowed ) ) {
415 echo wp_kses_post( $common_methods->strip_html_tags_and_content( $menu_info[0] ) );
416 } else {
417 ?>
418 <input type="text" value="<?php echo wp_kses_post( $common_methods->strip_html_tags_and_content( $menu_info[0] ) ); ?>" class="menu-item-custom-title" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>">
419 <?php
420 }
421 }
422
423 ?>
424 </span>
425 <label class="menu-item-checkbox-label">
426 <input type="checkbox" class="menu-item-checkbox" data-menu-item-id="<?php echo esc_attr( $menu_item_id ); ?>">
427 <span>Hide</span>
428 </label>
429 </div>
430 </div>
431 </div>
432 <?php
433
434 $i = 1;
435
436 if ( array_key_exists( $menu_info[2], $submenu ) && @is_countable( $submenu[$menu_info[2]] ) && @sizeof( $submenu[$menu_info[2]] ) > 0 ) {
437 ?>
438 <div class="menu-item-settings wp-clearfix" style="display:none;">
439 <?php
440
441 foreach ( $submenu[$menu_info[2]] as $submenu_item ) {
442
443 $i++;
444
445 // echo $submenu_item[0];
446
447 }
448 ?>
449 </div>
450 <?php
451
452 }
453 ?>
454 </li>
455
456 <?php
457
458 }
459
460
461 }
462
463
464 ?>
465 </ul>
466 <?php
467
468 $field_id = $args['field_id'];
469 $field_name = $args['field_name'];
470 $field_description = $args['field_description'];
471 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : '';
472
473 // Hidden input field to store custom menu order (from options as is, or sortupdate) upon clicking Save Changes.
474 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-text" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
475
476 $field_id = 'custom_menu_titles';
477 $field_name = ASENHA_SLUG_U . '['. $field_id .']';
478 $field_option_value = ( isset( $options[$field_id] ) ) ? $options[$field_id] : '';
479
480 // Hidden input field to store custom menu titles (from options as is, or custom values entered on each non-WP-default menu items.
481 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-text" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
482
483 $field_id = 'custom_menu_hidden';
484 $field_name = ASENHA_SLUG_U . '['. $field_id .']';
485 $field_option_value = ( isset( $options[$field_id] ) ) ? $options[$field_id] : '';
486
487 // Hidden input field to store hidden menu itmes (from options as is, or 'Hide' checkbox clicks) upon clicking Save Changes.
488 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-text" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
489
490 }
491
492 /**
493 * Render textarea field as sub-field of a toggle/switcher checkbox
494 *
495 * @since 2.3.0
496 */
497 function render_datatable( $args ) {
498
499 global $wpdb;
500
501 $options = get_option( ASENHA_SLUG_U, array() );
502
503 $field_id = $args['field_id'];
504 $field_slug = $args['field_slug'];
505 $field_name = $args['field_name'];
506 $field_type = $args['field_type'];
507 $field_description = $args['field_description'];
508 $table_title = $args['table_title'];
509 $table_name = $args['table_name'];
510 $field_option_value = ( isset( $options[$args['field_id']] ) ) ? $options[$args['field_id']] : '';
511
512 ?>
513 <table id="login-attempts-log" class="wp-list-table widefat striped datatable">
514 <thead>
515 <tr class="datatable-tr">
516 <th class="datatable-th">IP Address<br />Last Username</th>
517 <th class="datatable-th">Attempts<br />Lockouts</th>
518 <th class="datatable-th">Last Attempt On</th>
519 </tr>
520 </thead>
521 <tbody>
522 <?php
523
524 $limit = 1000;
525
526 $sql = $wpdb->prepare( "SELECT * FROM {$table_name} ORDER BY unixtime DESC LIMIT %d", array( $limit ) );
527
528 $entries = $wpdb->get_results( $sql, ARRAY_A );
529
530 foreach( $entries as $entry ) {
531
532 $unixtime = $entry['unixtime'];
533 if ( function_exists( 'wp_date' ) ) {
534 $date = wp_date( 'F j, Y', $unixtime );
535 $time = wp_date( 'H:i:s', $unixtime );
536 } else {
537 $date = date_i18n( 'F j, Y', $unixtime );
538 $time = date_i18n( 'H:i:s', $unixtime );
539 }
540 ?>
541 <tr class="datatable-tr">
542 <td class="datatable-td"><?php echo esc_html( $entry['ip_address'] ); ?><br /><?php echo esc_html( $entry['username'] ); ?></td>
543 <td class="datatable-td"><?php echo esc_html( $entry['fail_count'] ); ?><br /><?php echo esc_html( $entry['lockout_count'] ); ?></td>
544 <td class="datatable-td"><?php echo esc_html( $date ); ?><br /><?php echo esc_html( $time ); ?></td>
545 </tr>
546 <?php
547 }
548
549 ?>
550 </tbody>
551 </table>
552 <?php
553
554 echo '<input type="hidden" id="' . esc_attr( $field_name ) . '" class="asenha-subfield-datatable" name="' . esc_attr( $field_name ) . '" value="' . esc_attr( $field_option_value ) . '">';
555 }
556
557 }