PluginProbe
StreamCast – bring live radio to your site with a sleek player / 2.1.4
StreamCast – bring live radio to your site with a sleek player v2.1.4
2.4.5 2.4.4 trunk 1.0 1.1 2.0.0 2.1.10 2.1.2 2.1.4 2.1.5 2.1.8 2.2.1 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 All 29 releases
streamcast / admin / codestar-framework / classes / comment-options.class.php

comment-options.class.php in StreamCast – bring live radio to your site with a sleek player 2.1.4, at admin/codestar-framework/classes/comment-options.class.php

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