PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.2.4.1
Adminify – White Label, Admin Menu Editor, Login Customizer v3.2.4.1
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
← All changes | Libs/adminify-framework/fields/group/group.php +108 -127 4.2.113.2.4.1 View file →
@@ -1,7 +1,6 @@
1 -<?php if ( ! defined( 'ABSPATH' ) ) { die; } // Cannot access directly.
2 -
3 -use PXLBSAdminify\Inc\Utils;
1 +<?php if ( ! defined( 'ABSPATH' ) ) {
2 + die; } // Cannot access directly.
4 3 /**
5 4 *
6 5 * Field: group
7 6 *
@@ -6,163 +5,145 @@
6 5 * Field: group
7 6 *
8 7 * @since 1.0.0
9 8 * @version 1.0.0
10 - *
11 9 */
12 10 if ( ! class_exists( 'ADMINIFY_Field_group' ) ) {
13 - class ADMINIFY_Field_group extends ADMINIFY_Fields {
11 + class ADMINIFY_Field_group extends ADMINIFY_Fields {
14 12
15 - public function __construct( $field, $value = '', $unique = '', $where = '', $parent = '' ) {
16 - parent::__construct( $field, $value, $unique, $where, $parent );
17 - }
13 + public function __construct( $field, $value = '', $unique = '', $where = '', $parent = '' ) {
14 + parent::__construct( $field, $value, $unique, $where, $parent );
15 + }
18 16
19 - public function render() {
17 + public function render() {
18 + $args = wp_parse_args(
19 + $this->field,
20 + [
21 + 'max' => 0,
22 + 'min' => 0,
23 + 'fields' => [],
24 + 'button_title' => esc_html__( 'Add New', 'adminify' ),
25 + 'accordion_title_prefix' => '',
26 + 'accordion_title_number' => false,
27 + 'accordion_title_auto' => true,
28 + 'accordion_title_by' => [],
29 + 'accordion_title_by_prefix' => ' ',
30 + ]
31 + );
20 32
21 - $args = wp_parse_args( $this->field, array(
22 - 'max' => 0,
23 - 'min' => 0,
24 - 'min_text' => '',
25 - 'max_text' => '',
26 - 'fields' => array(),
27 - 'button_title' => esc_html__( 'Add New', 'adminify' ),
28 - 'accordion_title_prefix' => '',
29 - 'accordion_title_number' => false,
30 - 'accordion_title_auto' => true,
31 - 'accordion_title_by' => array(),
32 - 'accordion_title_by_prefix' => ' ',
33 - ) );
33 + $title_prefix = ( ! empty( $args['accordion_title_prefix'] ) ) ? $args['accordion_title_prefix'] : '';
34 + $title_number = ( ! empty( $args['accordion_title_number'] ) ) ? true : false;
35 + $title_auto = ( ! empty( $args['accordion_title_auto'] ) ) ? true : false;
36 + $title_first = ( isset( $this->field['fields'][0]['id'] ) ) ? $this->field['fields'][0]['id'] : $this->field['fields'][1]['id'];
37 + $title_by = ( is_array( $args['accordion_title_by'] ) ) ? $args['accordion_title_by'] : (array) $args['accordion_title_by'];
38 + $title_by = ( empty( $title_by ) ) ? [ $title_first ] : $title_by;
39 + $title_by_prefix = ( ! empty( $args['accordion_title_by_prefix'] ) ) ? $args['accordion_title_by_prefix'] : '';
34 40
35 - $title_prefix = ( ! empty( $args['accordion_title_prefix'] ) ) ? $args['accordion_title_prefix'] : '';
36 - $title_number = ( ! empty( $args['accordion_title_number'] ) ) ? true : false;
37 - $title_auto = ( ! empty( $args['accordion_title_auto'] ) ) ? true : false;
38 - $title_first = ( isset( $this->field['fields'][0]['id'] ) ) ? $this->field['fields'][0]['id'] : $this->field['fields'][1]['id'];
39 - $title_by = ( is_array( $args['accordion_title_by'] ) ) ? $args['accordion_title_by'] : (array) $args['accordion_title_by'];
40 - $title_by = ( empty( $title_by ) ) ? array( $title_first ) : $title_by;
41 - $title_by_prefix = ( ! empty( $args['accordion_title_by_prefix'] ) ) ? $args['accordion_title_by_prefix'] : '';
41 + if ( preg_match( '/' . preg_quote( '[' . $this->field['id'] . ']' ) . '/', $this->unique ) ) {
42 + echo '<div class="adminify-notice adminify-notice-danger">' . esc_html__( 'Error: Field ID conflict.', 'adminify' ) . '</div>';
43 + } else {
44 + echo wp_kses_post( $this->field_before() );
42 45
43 - if ( preg_match( '/'. preg_quote( '['. $this->field['id'] .']' ) .'/', $this->unique ) ) {
46 + echo '<div class="adminify-cloneable-item adminify-cloneable-hidden" data-depend-id="' . esc_attr( $this->field['id'] ) . '">';
44 47
45 - echo '<div class="adminify-notice adminify-notice-danger">'. esc_html__( 'Error: Field ID conflict.', 'adminify' ) .'</div>';
48 + echo '<div class="adminify-cloneable-helper">';
49 + echo '<i class="adminify-cloneable-sort fas fa-arrows-alt"></i>';
50 + echo '<i class="adminify-cloneable-clone far fa-clone"></i>';
51 + echo '<i class="adminify-cloneable-remove adminify-confirm fas fa-times" data-confirm="' . esc_html__( 'Are you sure to delete this item?', 'adminify' ) . '"></i>';
52 + echo '</div>';
46 53
47 - } else {
54 + echo '<h4 class="adminify-cloneable-title">';
55 + echo '<span class="adminify-cloneable-text">';
56 + echo ( $title_number ) ? '<span class="adminify-cloneable-title-number"></span>' : '';
57 + echo ( $title_prefix ) ? '<span class="adminify-cloneable-title-prefix">' . esc_attr( $title_prefix ) . '</span>' : '';
58 + echo ( $title_auto ) ? '<span class="adminify-cloneable-value"><span class="adminify-cloneable-placeholder"></span></span>' : '';
59 + echo '</span>';
60 + echo '</h4>';
48 61
49 - echo wp_kses_post( $this->field_before() );
62 + echo '<div class="adminify-cloneable-content">';
63 + foreach ( $this->field['fields'] as $field ) {
64 + $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
65 + $field_unique = ( ! empty( $this->unique ) ) ? $this->unique . '[' . $this->field['id'] . '][0]' : $this->field['id'] . '[0]';
50 66
51 - echo '<div class="adminify-cloneable-item adminify-cloneable-hidden" data-depend-id="'. esc_attr( $this->field['id'] ) .'">';
67 + ADMINIFY::field( $field, $field_default, '___' . $field_unique, 'field/group' );
68 + }
69 + echo '</div>';
52 70
53 - echo '<div class="adminify-cloneable-helper">';
54 - echo '<i class="adminify-cloneable-sort fas fa-arrows-alt"></i>';
55 - echo '<i class="adminify-cloneable-clone far fa-clone"></i>';
56 - echo '<i class="adminify-cloneable-remove adminify-confirm fas fa-times" data-confirm="'. esc_html__( 'Are you sure to delete this item?', 'adminify' ) .'"></i>';
57 - echo '</div>';
71 + echo '</div>';
58 72
59 - echo '<h4 class="adminify-cloneable-title">';
60 - echo '<span class="adminify-cloneable-text">';
61 - echo ( $title_number ) ? '<span class="adminify-cloneable-title-number"></span>' : '';
62 - echo ( $title_prefix ) ? '<span class="adminify-cloneable-title-prefix">'. esc_attr( $title_prefix ) .'</span>' : '';
63 - echo ( $title_auto ) ? '<span class="adminify-cloneable-value"><span class="adminify-cloneable-placeholder"></span></span>' : '';
64 - echo '</span>';
65 - echo '</h4>';
73 + echo '<div class="adminify-cloneable-wrapper adminify-data-wrapper" data-title-by="' . esc_attr( json_encode( $title_by ) ) . '" data-title-by-prefix="' . esc_attr( $title_by_prefix ) . '" data-title-number="' . esc_attr( $title_number ) . '" data-field-id="[' . esc_attr( $this->field['id'] ) . ']" data-max="' . esc_attr( $args['max'] ) . '" data-min="' . esc_attr( $args['min'] ) . '">';
66 74
67 - echo '<div class="adminify-cloneable-content">';
68 - foreach ( $this->field['fields'] as $field ) {
75 + if ( ! empty( $this->value ) ) {
76 + $num = 0;
69 77
70 - $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
71 - $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .'][0]' : $this->field['id'] .'[0]';
78 + foreach ( $this->value as $value ) {
79 + $title = '';
72 80
73 - ADMINIFY::field( $field, $field_default, '___'. $field_unique, 'field/group' );
81 + if ( ! empty( $title_by ) ) {
82 + $titles = [];
74 83
75 - }
76 - echo '</div>';
84 + foreach ( $title_by as $title_key ) {
85 + if ( isset( $value[ $title_key ] ) ) {
86 + $titles[] = $value[ $title_key ];
87 + }
88 + }
77 89
78 - echo '</div>';
90 + $title = join( $title_by_prefix, $titles );
91 + }
79 92
80 - echo '<div class="adminify-cloneable-wrapper adminify-data-wrapper" data-title-by="'. esc_attr( wp_json_encode( $title_by ) ) .'" data-title-by-prefix="'. esc_attr( $title_by_prefix ) .'" data-title-number="'. esc_attr( $title_number ) .'" data-field-id="['. esc_attr( $this->field['id'] ) .']" data-max="'. esc_attr( $args['max'] ) .'" data-min="'. esc_attr( $args['min'] ) .'">';
93 + $title = ( is_array( $title ) ) ? reset( $title ) : $title;
81 94
82 - if ( ! empty( $this->value ) ) {
95 + echo '<div class="adminify-cloneable-item">';
83 96
84 - $num = 0;
97 + echo '<div class="adminify-cloneable-helper">';
98 + echo '<i class="adminify-cloneable-sort fas fa-arrows-alt"></i>';
99 + echo '<i class="adminify-cloneable-clone far fa-clone"></i>';
100 + echo '<i class="adminify-cloneable-remove adminify-confirm fas fa-times" data-confirm="' . esc_html__( 'Are you sure to delete this item?', 'adminify' ) . '"></i>';
101 + echo '</div>';
85 102
86 - foreach ( $this->value as $value ) {
103 + echo '<h4 class="adminify-cloneable-title">';
104 + echo '<span class="adminify-cloneable-text">';
105 + echo ( $title_number ) ? '<span class="adminify-cloneable-title-number">' . esc_attr( $num + 1 ) . '.</span>' : '';
106 + echo ( $title_prefix ) ? '<span class="adminify-cloneable-title-prefix">' . esc_attr( $title_prefix ) . '</span>' : '';
107 + echo ( $title_auto ) ? '<span class="adminify-cloneable-value">' . esc_attr( $title ) . '</span>' : '';
108 + echo '</span>';
109 + echo '</h4>';
87 110
88 - $title = '';
111 + echo '<div class="adminify-cloneable-content">';
89 112
90 - if ( ! empty( $title_by ) ) {
113 + foreach ( $this->field['fields'] as $field ) {
114 + $field_unique = ( ! empty( $this->unique ) ) ? $this->unique . '[' . $this->field['id'] . '][' . $num . ']' : $this->field['id'] . '[' . $num . ']';
115 + $field_value = ( isset( $field['id'] ) && isset( $value[ $field['id'] ] ) ) ? $value[ $field['id'] ] : '';
91 116
92 - $titles = array();
117 + ADMINIFY::field( $field, $field_value, $field_unique, 'field/group' );
118 + }
93 119
94 - foreach ( $title_by as $title_key ) {
95 - if ( isset( $value[ $title_key ] ) ) {
96 - $titles[] = $value[ $title_key ];
97 - }
98 - }
120 + echo '</div>';
99 121
100 - $title = join( $title_by_prefix, $titles );
122 + echo '</div>';
101 123
102 - }
124 + $num++;
125 + }
126 + }
103 127
104 - $title = ( is_array( $title ) ) ? reset( $title ) : $title;
128 + echo '</div>';
105 129
106 - echo '<div class="adminify-cloneable-item">';
130 + echo '<div class="adminify-cloneable-alert adminify-cloneable-max">' . esc_html__( 'You cannot add more.', 'adminify' ) . '</div>';
131 + echo '<div class="adminify-cloneable-alert adminify-cloneable-min">' . esc_html__( 'You cannot remove more.', 'adminify' ) . '</div>';
132 + echo '<a href="#" class="button button-primary adminify-cloneable-add">' . wp_kses_post( $args['button_title'] ) . '</a>';
107 133
108 - echo '<div class="adminify-cloneable-helper">';
109 - echo '<i class="adminify-cloneable-sort fas fa-arrows-alt"></i>';
110 - echo '<i class="adminify-cloneable-clone far fa-clone"></i>';
111 - echo '<i class="adminify-cloneable-remove adminify-confirm fas fa-times" data-confirm="'. esc_html__( 'Are you sure to delete this item?', 'adminify' ) .'"></i>';
112 - echo '</div>';
134 + echo wp_kses_post( $this->field_after() );
135 + }
136 + }
113 137
114 - echo '<h4 class="adminify-cloneable-title">';
115 - echo '<span class="adminify-cloneable-text">';
116 - echo ( $title_number ) ? '<span class="adminify-cloneable-title-number">'. esc_attr( $num+1 ) .'.</span>' : '';
117 - echo ( $title_prefix ) ? '<span class="adminify-cloneable-title-prefix">'. esc_attr( $title_prefix ) .'</span>' : '';
118 - echo ( $title_auto ) ? '<span class="adminify-cloneable-value">' . esc_attr( $title ) .'</span>' : '';
119 - echo '</span>';
120 - echo '</h4>';
138 + public function enqueue() {
139 + if ( ! wp_script_is( 'jquery-ui-accordion' ) ) {
140 + wp_enqueue_script( 'jquery-ui-accordion' );
141 + }
121 142
122 - echo '<div class="adminify-cloneable-content">';
143 + if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
144 + wp_enqueue_script( 'jquery-ui-sortable' );
145 + }
146 + }
123 147
124 - foreach ( $this->field['fields'] as $field ) {
125 -
126 - $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .']['. $num .']' : $this->field['id'] .'['. $num .']';
127 - $field_value = ( isset( $field['id'] ) && isset( $value[$field['id']] ) ) ? $value[$field['id']] : '';
128 -
129 - ADMINIFY::field( $field, $field_value, $field_unique, 'field/group' );
130 -
131 - }
132 -
133 - echo '</div>';
134 -
135 - echo '</div>';
136 -
137 - $num++;
138 -
139 - }
140 -
141 - }
142 -
143 - echo '</div>';
144 -
145 - echo '<div class="adminify-cloneable-alert adminify-cloneable-max">'. Utils::kses_custom($args['max_text'] ) .'</div>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- kses_custom() is a wp_kses() wrapper; output already escaped.
146 - echo '<div class="adminify-cloneable-alert adminify-cloneable-min">'. esc_html__( 'You cannot remove more.', 'adminify' ) .'</div>';
147 - echo '<a href="#" class="button button-primary adminify-cloneable-add">'. esc_html( $args['button_title'] ) .'</a>';
148 -
149 - echo wp_kses_post( $this->field_after() );
150 -
151 - }
152 -
153 - }
154 -
155 - public function enqueue() {
156 -
157 - if ( ! wp_script_is( 'jquery-ui-accordion' ) ) {
158 - wp_enqueue_script( 'jquery-ui-accordion' );
159 - }
160 -
161 - if ( ! wp_script_is( 'jquery-ui-sortable' ) ) {
162 - wp_enqueue_script( 'jquery-ui-sortable' );
163 - }
164 -
165 - }
166 -
167 - }
148 + }
168 149 }