PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.2.18
Adminify – White Label, Admin Menu Editor, Login Customizer v4.2.18
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
adminify / Libs / adminify-framework / fields / group / group.php

group.php in Adminify – White Label, Admin Menu Editor, Login Customizer 4.2.18, at Libs/adminify-framework/fields/group/group.php

169 lines 7.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php if ( ! defined( 'ABSPATH' ) ) { die; } // Cannot access directly.
2
3 use PXLBSAdminify\Inc\Utils;
4 /**
5 *
6 * Field: group
7 *
8 * @since 1.0.0
9 * @version 1.0.0
10 *
11 */
12 if ( ! class_exists( 'ADMINIFY_Field_group' ) ) {
13 class ADMINIFY_Field_group extends ADMINIFY_Fields {
14
15 public function __construct( $field, $value = '', $unique = '', $where = '', $parent = '' ) {
16 parent::__construct( $field, $value, $unique, $where, $parent );
17 }
18
19 public function render() {
20
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 ) );
34
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'] : '';
42
43 if ( preg_match( '/'. preg_quote( '['. $this->field['id'] .']' ) .'/', $this->unique ) ) {
44
45 echo '<div class="adminify-notice adminify-notice-danger">'. esc_html__( 'Error: Field ID conflict.', 'adminify' ) .'</div>';
46
47 } else {
48
49 echo wp_kses_post( $this->field_before() );
50
51 echo '<div class="adminify-cloneable-item adminify-cloneable-hidden" data-depend-id="'. esc_attr( $this->field['id'] ) .'">';
52
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>';
58
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>';
66
67 echo '<div class="adminify-cloneable-content">';
68 foreach ( $this->field['fields'] as $field ) {
69
70 $field_default = ( isset( $field['default'] ) ) ? $field['default'] : '';
71 $field_unique = ( ! empty( $this->unique ) ) ? $this->unique .'['. $this->field['id'] .'][0]' : $this->field['id'] .'[0]';
72
73 ADMINIFY::field( $field, $field_default, '___'. $field_unique, 'field/group' );
74
75 }
76 echo '</div>';
77
78 echo '</div>';
79
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'] ) .'">';
81
82 if ( ! empty( $this->value ) ) {
83
84 $num = 0;
85
86 foreach ( $this->value as $value ) {
87
88 $title = '';
89
90 if ( ! empty( $title_by ) ) {
91
92 $titles = array();
93
94 foreach ( $title_by as $title_key ) {
95 if ( isset( $value[ $title_key ] ) ) {
96 $titles[] = $value[ $title_key ];
97 }
98 }
99
100 $title = join( $title_by_prefix, $titles );
101
102 }
103
104 $title = ( is_array( $title ) ) ? reset( $title ) : $title;
105
106 echo '<div class="adminify-cloneable-item">';
107
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>';
113
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>';
121
122 echo '<div class="adminify-cloneable-content">';
123
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 }
168 }
169