PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.1.6
Adminify – White Label, Admin Menu Editor, Login Customizer v3.1.6
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 / lib / adminify-framework / classes / comment-options.class.php

comment-options.class.php in Adminify – White Label, Admin Menu Editor, Login Customizer 3.1.6, at lib/adminify-framework/classes/comment-options.class.php

295 lines 10.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php if ( ! defined( 'ABSPATH' ) ) {
2 die; } // Cannot access directly.
3 /**
4 *
5 * Comment Metabox Class
6 *
7 * @since 1.0.0
8 * @version 1.0.0
9 */
10 if ( ! class_exists( 'ADMINIFY_Comment_Metabox' ) ) {
11 class ADMINIFY_Comment_Metabox extends ADMINIFY_Abstract {
12
13 // constans
14 public $unique = '';
15 public $abstract = 'comment_metabox';
16 public $pre_fields = [];
17 public $sections = [];
18 public $args = [
19 'title' => '',
20 'data_type' => 'serialize',
21 'priority' => 'default',
22 'show_reset' => false,
23 'show_restore' => false,
24 'nav' => 'normal',
25 'theme' => 'dark',
26 'class' => '',
27 'defaults' => [],
28 ];
29
30 // run comment metabox construct
31 public function __construct( $key, $params = [] ) {
32 $this->unique = $key;
33 $this->args = apply_filters( "adminify_{$this->unique}_args", wp_parse_args( $params['args'], $this->args ), $this );
34 $this->sections = apply_filters( "adminify_{$this->unique}_sections", $params['sections'], $this );
35 $this->pre_fields = $this->pre_fields( $this->sections );
36
37 add_action( 'add_meta_boxes_comment', [ $this, 'add_comment_meta_box' ] );
38 add_action( 'edit_comment', [ $this, 'save_comment_meta_box' ] );
39
40 if ( ! empty( $this->args['class'] ) ) {
41 add_filter( 'postbox_classes_comment_' . $this->unique, [ $this, 'add_comment_metabox_classes' ] );
42 }
43 }
44
45 // instance
46 public static function instance( $key, $params = [] ) {
47 return new self( $key, $params );
48 }
49
50 public function pre_fields( $sections ) {
51 $result = [];
52
53 foreach ( $sections as $key => $section ) {
54 if ( ! empty( $section['fields'] ) ) {
55 foreach ( $section['fields'] as $field ) {
56 $result[] = $field;
57 }
58 }
59 }
60
61 return $result;
62 }
63
64 public function add_comment_metabox_classes( $classes ) {
65 if ( ! empty( $this->args['class'] ) ) {
66 $classes[] = $this->args['class'];
67 }
68
69 return $classes;
70 }
71
72 // add comment metabox
73 public function add_comment_meta_box( $post_type ) {
74 add_meta_box( $this->unique, $this->args['title'], [ $this, 'add_comment_meta_box_content' ], 'comment', 'normal', $this->args['priority'], $this->args );
75 }
76
77 // get default value
78 public function get_default( $field ) {
79 $default = ( isset( $field['default'] ) ) ? $field['default'] : '';
80 $default = ( isset( $this->args['defaults'][ $field['id'] ] ) ) ? $this->args['defaults'][ $field['id'] ] : $default;
81
82 return $default;
83 }
84
85 // get meta value
86 public function get_meta_value( $comment_id, $field ) {
87 $value = null;
88
89 if ( ! empty( $comment_id ) && ! empty( $field['id'] ) ) {
90 if ( $this->args['data_type'] !== 'serialize' ) {
91 $meta = get_comment_meta( $comment_id, $field['id'] );
92 $value = ( isset( $meta[0] ) ) ? $meta[0] : null;
93 } else {
94 $meta = get_comment_meta( $comment_id, $this->unique, true );
95 $value = ( isset( $meta[ $field['id'] ] ) ) ? $meta[ $field['id'] ] : null;
96 }
97 }
98
99 $default = ( isset( $field['id'] ) ) ? $this->get_default( $field ) : '';
100 $value = ( isset( $value ) ) ? $value : $default;
101
102 return $value;
103 }
104
105 // add comment metabox content
106 public function add_comment_meta_box_content( $comment, $callback ) {
107 $has_nav = ( count( $this->sections ) > 1 ) ? true : false;
108 $show_all = ( ! $has_nav ) ? ' adminify-show-all' : '';
109 $errors = ( is_object( $comment ) ) ? get_comment_meta( $comment->comment_ID, '_adminify_errors_' . $this->unique, true ) : [];
110 $errors = ( ! empty( $errors ) ) ? $errors : [];
111 $theme = ( $this->args['theme'] ) ? ' adminify-theme-' . $this->args['theme'] : '';
112 $nav_type = ( $this->args['nav'] === 'inline' ) ? 'inline' : 'normal';
113
114 if ( is_object( $comment ) && ! empty( $errors ) ) {
115 delete_comment_meta( $comment->comment_ID, '_adminify_errors_' . $this->unique );
116 }
117
118 wp_nonce_field( 'adminify_comment_metabox_nonce', 'adminify_comment_metabox_nonce' . $this->unique );
119
120 echo '<div class="adminify adminify-comment-metabox' . esc_attr( $theme ) . '">';
121
122 echo '<div class="adminify-wrapper' . esc_attr( $show_all ) . '">';
123
124 if ( $has_nav ) {
125 echo '<div class="adminify-nav adminify-nav-' . esc_attr( $nav_type ) . ' adminify-nav-metabox">';
126
127 echo '<ul>';
128
129 $tab_key = 1;
130
131 foreach ( $this->sections as $section ) {
132 $tab_icon = ( ! empty( $section['icon'] ) ) ? '<i class="adminify-tab-icon ' . esc_attr( $section['icon'] ) . '"></i>' : '';
133 $tab_error = ( ! empty( $errors['sections'][ $tab_key ] ) ) ? '<i class="adminify-label-error adminify-error">!</i>' : '';
134
135 echo '<li><a href="#">' . wp_kses_post( $tab_icon ) . esc_attr( $section['title'] ) . wp_kses_post( $tab_error ) . '</a></li>';
136
137 $tab_key++;
138 }
139
140 echo '</ul>';
141
142 echo '</div>';
143 }
144
145 echo '<div class="adminify-content">';
146
147 echo '<div class="adminify-sections">';
148
149 $section_key = 1;
150
151 foreach ( $this->sections as $section ) {
152 $section_onload = ( ! $has_nav ) ? ' adminify-onload' : '';
153 $section_class = ( ! empty( $section['class'] ) ) ? ' ' . $section['class'] : '';
154 $section_title = ( ! empty( $section['title'] ) ) ? $section['title'] : '';
155 $section_icon = ( ! empty( $section['icon'] ) ) ? '<i class="adminify-section-icon ' . esc_attr( $section['icon'] ) . '"></i>' : '';
156
157 echo '<div class="adminify-section hidden' . esc_attr( $section_onload . $section_class ) . '">';
158
159 echo ( $section_title || $section_icon ) ? '<div class="adminify-section-title"><h3>' . wp_kses_post( $section_icon . $section_title ) . '</h3></div>' : '';
160 echo ( ! empty( $section['description'] ) ) ? '<div class="adminify-field adminify-section-description">' . wp_kses_post( $section['description'] ) . '</div>' : '';
161
162 if ( ! empty( $section['fields'] ) ) {
163 foreach ( $section['fields'] as $field ) {
164 if ( ! empty( $field['id'] ) && ! empty( $errors['fields'][ $field['id'] ] ) ) {
165 $field['_error'] = $errors['fields'][ $field['id'] ];
166 }
167
168 if ( ! empty( $field['id'] ) ) {
169 $field['default'] = $this->get_default( $field );
170 }
171
172 ADMINIFY::field( $field, $this->get_meta_value( $comment->comment_ID, $field ), $this->unique, 'comment_metabox' );
173 }
174 } else {
175 echo '<div class="adminify-no-option">' . esc_html__( 'No data available.', 'adminify' ) . '</div>';
176 }
177
178 echo '</div>';
179
180 $section_key++;
181 }
182
183 echo '</div>';
184
185 if ( ! empty( $this->args['show_restore'] ) || ! empty( $this->args['show_reset'] ) ) {
186 echo '<div class="adminify-sections-reset">';
187 echo '<label>';
188 echo '<input type="checkbox" name="' . esc_attr( $this->unique ) . '[_reset]" />';
189 echo '<span class="button adminify-button-reset">' . esc_html__( 'Reset', 'adminify' ) . '</span>';
190 echo '<span class="button adminify-button-cancel">' . sprintf( '<small>( %s )</small> %s', esc_html__( 'update post', 'adminify' ), esc_html__( 'Cancel', 'adminify' ) ) . '</span>';
191 echo '</label>';
192 echo '</div>';
193 }
194
195 echo '</div>';
196
197 echo ( $has_nav && $nav_type === 'normal' ) ? '<div class="adminify-nav-background"></div>' : '';
198
199 echo '<div class="clear"></div>';
200
201 echo '</div>';
202
203 echo '</div>';
204 }
205
206 // save comment metabox
207 public function save_comment_meta_box( $comment_id ) {
208 $count = 1;
209 $data = [];
210 $errors = [];
211 $noncekey = 'adminify_comment_metabox_nonce' . $this->unique;
212 $nonce = ( ! empty( $_POST[ $noncekey ] ) ) ? sanitize_text_field( wp_unslash( $_POST[ $noncekey ] ) ) : '';
213
214 if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ! wp_verify_nonce( $nonce, 'adminify_comment_metabox_nonce' ) ) {
215 return $comment_id;
216 }
217
218 if ( ! empty( $_POST[ $this->unique ] ) ) {
219 $request = sanitize_text_field( wp_unslash( $_POST[ $this->unique ] ) );
220 } else {
221 $request = [];
222 }
223
224 if ( ! empty( $request ) ) {
225 foreach ( $this->sections as $section ) {
226 if ( ! empty( $section['fields'] ) ) {
227 foreach ( $section['fields'] as $field ) {
228 if ( ! empty( $field['id'] ) ) {
229 $field_id = $field['id'];
230 $field_value = isset( $request[ $field_id ] ) ? $request[ $field_id ] : '';
231
232 // Sanitize "post" request of field.
233 if ( ! isset( $field['sanitize'] ) ) {
234 if ( is_array( $field_value ) ) {
235 $data[ $field_id ] = wp_kses_post_deep( $field_value );
236 } else {
237 $data[ $field_id ] = wp_kses_post( $field_value );
238 }
239 } elseif ( isset( $field['sanitize'] ) && is_callable( $field['sanitize'] ) ) {
240 $data[ $field_id ] = call_user_func( $field['sanitize'], $field_value );
241 } else {
242 $data[ $field_id ] = $field_value;
243 }
244
245 // Validate "post" request of field.
246 if ( isset( $field['validate'] ) && is_callable( $field['validate'] ) ) {
247 $has_validated = call_user_func( $field['validate'], $field_value );
248
249 if ( ! empty( $has_validated ) ) {
250 $errors['sections'][ $count ] = true;
251 $errors['fields'][ $field_id ] = $has_validated;
252 $data[ $field_id ] = $this->get_meta_value( $comment_id, $field );
253 }
254 }
255 }
256 }
257 }
258
259 $count++;
260 }
261 }
262
263 $data = apply_filters( "adminify_{$this->unique}_save", $data, $comment_id, $this );
264
265 do_action( "adminify_{$this->unique}_save_before", $data, $comment_id, $this );
266
267 if ( empty( $data ) || ! empty( $request['_reset'] ) ) {
268 if ( $this->args['data_type'] !== 'serialize' ) {
269 foreach ( $data as $key => $value ) {
270 delete_comment_meta( $comment_id, $key );
271 }
272 } else {
273 delete_comment_meta( $comment_id, $this->unique );
274 }
275 } else {
276 if ( $this->args['data_type'] !== 'serialize' ) {
277 foreach ( $data as $key => $value ) {
278 update_comment_meta( $comment_id, $key, $value );
279 }
280 } else {
281 update_comment_meta( $comment_id, $this->unique, $data );
282 }
283
284 if ( ! empty( $errors ) ) {
285 update_comment_meta( $comment_id, '_adminify_errors_' . $this->unique, $errors );
286 }
287 }
288
289 do_action( "adminify_{$this->unique}_saved", $data, $comment_id, $this );
290
291 do_action( "adminify_{$this->unique}_save_after", $data, $comment_id, $this );
292 }
293 }
294 }
295