PluginProbe
WP Ultimate Post Grid / 4.1.1
WP Ultimate Post Grid v4.1.1
4.1.1 trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.8 1.9 2.0 2.1 2.2 2.3 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.2 3.0.0 3.3.0 3.4.0 3.5.0 3.6.0 3.7.0 All 32 releases
wp-ultimate-post-grid / includes / public / class-wpupg-grid-sanitizer.php

class-wpupg-grid-sanitizer.php in WP Ultimate Post Grid 4.1.1, at includes/public/class-wpupg-grid-sanitizer.php

297 lines 14.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Sanitize grid input fields.
4 *
5 * @link https://bootstrapped.ventures
6 * @since 3.0.0
7 *
8 * @package WP_Ultimate_Post_Grid
9 * @subpackage WP_Ultimate_Post_Grid/includes/public
10 */
11
12 /**
13 * Sanitize grid input fields.
14 *
15 * @since 3.0.0
16 * @package WP_Ultimate_Post_Grid
17 * @subpackage WP_Ultimate_Post_Grid/includes/public
18 * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19 */
20 class WPUPG_Grid_Sanitizer {
21
22 /**
23 * Sanitize grid array.
24 *
25 * @since 3.0.0
26 * @param array $grid Array containing all grid input data.
27 */
28 public static function sanitize( $grid ) {
29 $sanitized_grid = array();
30
31 // Always set version to version of save.
32 $sanitized_grid['version'] = WPUPG_VERSION;
33
34 // Boolean fields.
35 if ( isset( $grid['post_status_require_permission'] ) ) { $sanitized_grid['post_status_require_permission'] = $grid['post_status_require_permission'] ? true : false; }
36 if ( isset( $grid['order_custom_key_numeric'] ) ) { $sanitized_grid['order_custom_key_numeric'] = $grid['order_custom_key_numeric'] ? true : false; }
37 if ( isset( $grid['centered'] ) ) { $sanitized_grid['centered'] = $grid['centered'] ? true : false; }
38 if ( isset( $grid['rtl_mode'] ) ) { $sanitized_grid['rtl_mode'] = $grid['rtl_mode'] ? true : false; }
39 if ( isset( $grid['filters_enabled'] ) ) { $sanitized_grid['filters_enabled'] = $grid['filters_enabled'] ? true : false; }
40 if ( isset( $grid['images_only'] ) ) { $sanitized_grid['images_only'] = $grid['images_only'] ? true : false; }
41 if ( isset( $grid['terms_images_only'] ) ) { $sanitized_grid['terms_images_only'] = $grid['terms_images_only'] ? true : false; }
42 if ( isset( $grid['terms_hide_empty'] ) ) { $sanitized_grid['terms_hide_empty'] = $grid['terms_hide_empty'] ? true : false; }
43 if ( isset( $grid['limit_terms'] ) ) { $sanitized_grid['limit_terms'] = $grid['limit_terms'] ? true : false; }
44 if ( isset( $grid['limit_posts'] ) ) { $sanitized_grid['limit_posts'] = $grid['limit_posts'] ? true : false; }
45 if ( isset( $grid['layout_mobile_different'] ) ) { $sanitized_grid['layout_mobile_different'] = $grid['layout_mobile_different'] ? true : false; }
46 if ( isset( $grid['layout_tablet_different'] ) ) { $sanitized_grid['layout_tablet_different'] = $grid['layout_tablet_different'] ? true : false; }
47 if ( isset( $grid['link'] ) ) { $sanitized_grid['link'] = $grid['link'] ? true : false; }
48 if ( isset( $grid['deeplinking'] ) ) { $sanitized_grid['deeplinking'] = $grid['deeplinking'] ? true : false; }
49 if ( isset( $grid['deeplinking_jump'] ) ) { $sanitized_grid['deeplinking_jump'] = $grid['deeplinking_jump'] ? true : false; }
50 if ( isset( $grid['metadata'] ) ) { $sanitized_grid['metadata'] = $grid['metadata'] ? true : false; }
51
52 // Number fields.
53 if ( isset( $grid['layout_desktop_sizing_columns'] ) ) { $sanitized_grid['layout_desktop_sizing_columns'] = intval( $grid['layout_desktop_sizing_columns'] ); }
54 if ( isset( $grid['layout_desktop_sizing_fixed'] ) ) { $sanitized_grid['layout_desktop_sizing_fixed'] = intval( $grid['layout_desktop_sizing_fixed'] ); }
55 if ( isset( $grid['layout_desktop_sizing_margin'] ) ) { $sanitized_grid['layout_desktop_sizing_margin'] = intval( $grid['layout_desktop_sizing_margin'] ); }
56 if ( isset( $grid['layout_mobile_sizing_columns'] ) ) { $sanitized_grid['layout_mobile_sizing_columns'] = intval( $grid['layout_mobile_sizing_columns'] ); }
57 if ( isset( $grid['layout_mobile_sizing_fixed'] ) ) { $sanitized_grid['layout_mobile_sizing_fixed'] = intval( $grid['layout_mobile_sizing_fixed'] ); }
58 if ( isset( $grid['layout_mobile_sizing_margin'] ) ) { $sanitized_grid['layout_mobile_sizing_margin'] = intval( $grid['layout_mobile_sizing_margin'] ); }
59 if ( isset( $grid['layout_tablet_sizing_columns'] ) ) { $sanitized_grid['layout_tablet_sizing_columns'] = intval( $grid['layout_tablet_sizing_columns'] ); }
60 if ( isset( $grid['layout_tablet_sizing_fixed'] ) ) { $sanitized_grid['layout_tablet_sizing_fixed'] = intval( $grid['layout_tablet_sizing_fixed'] ); }
61 if ( isset( $grid['layout_tablet_sizing_margin'] ) ) { $sanitized_grid['layout_tablet_sizing_margin'] = intval( $grid['layout_tablet_sizing_margin'] ); }
62 if ( isset( $grid['limit_posts_number'] ) ) { $sanitized_grid['limit_posts_number'] = intval( $grid['limit_posts_number'] ); }
63 if ( isset( $grid['limit_posts_offset'] ) ) { $sanitized_grid['limit_posts_offset'] = intval( $grid['limit_posts_offset'] ); }
64
65 // Text fields.
66 if ( isset( $grid['name'] ) ) { $sanitized_grid['name'] = sanitize_text_field( $grid['name'] ); }
67 if ( isset( $grid['slug'] ) ) { $sanitized_grid['slug'] = sanitize_title( $grid['slug'] ); }
68 if ( isset( $grid['order_custom_key'] ) ) { $sanitized_grid['order_custom_key'] = sanitize_text_field( $grid['order_custom_key'] ); }
69 if ( isset( $grid['template'] ) ) { $sanitized_grid['template'] = sanitize_key( $grid['template'] ); }
70 if ( isset( $grid['metadata_name'] ) ) { $sanitized_grid['metadata_name'] = sanitize_text_field( $grid['metadata_name'] ); }
71 if ( isset( $grid['metadata_description'] ) ) { $sanitized_grid['metadata_description'] = sanitize_text_field( $grid['metadata_description'] ); }
72
73 // HTML.
74 if ( isset( $grid['empty_message'] ) ) { $sanitized_grid['empty_message'] = self::sanitize_html( $grid['empty_message'] ); }
75 if ( isset( $grid['responsive_toggle_style_closed'] ) ) { $sanitized_grid['responsive_toggle_style_closed'] = self::sanitize_html( $grid['responsive_toggle_style_closed'] ); }
76 if ( isset( $grid['responsive_toggle_style_open'] ) ) { $sanitized_grid['responsive_toggle_style_open'] = self::sanitize_html( $grid['responsive_toggle_style_open'] ); }
77
78 // Post types.
79 if ( isset( $grid['post_types'] ) ) {
80 $sanitized_grid['post_types'] = array_map( function( $post_type ) {
81 return sanitize_key( $post_type );
82 }, $grid['post_types'] );
83 }
84
85 // Taxonomies.
86 if ( isset( $grid['taxonomies'] ) ) {
87 $sanitized_grid['taxonomies'] = array_map( function( $taxonomy ) {
88 return sanitize_key( $taxonomy );
89 }, $grid['taxonomies'] );
90 }
91
92 if ( isset( $grid['post_status'] ) ) {
93 $sanitized_grid['post_status'] = array_map( function( $post_status ) {
94 return sanitize_key( $post_status );
95 }, $grid['post_status'] );
96 }
97
98 // Language.
99 if ( isset( $grid['language'] ) ) {
100 $sanitized_grid['language'] = false === $grid['language'] ? $grid['language'] : sanitize_text_field( $grid['language'] );
101 }
102
103 // Limited options fields.
104 $options = array( 'restrict', 'exclude' );
105 if ( isset( $grid['limit_terms_type'] ) && in_array( $grid['limit_terms_type'], $options, true ) ) {
106 $sanitized_grid['limit_terms_type'] = $grid['limit_terms_type'];
107 }
108
109 $options = array( 'masonry', 'fitRows', 'fitRowsHeight' );
110 if ( isset( $grid['layout_mode'] ) && in_array( $grid['layout_mode'], $options, true ) ) {
111 $sanitized_grid['layout_mode'] = $grid['layout_mode'];
112 }
113
114 $options = array( 'fixed', 'columns', 'ignore' );
115 if ( isset( $grid['layout_desktop_sizing'] ) && in_array( $grid['layout_desktop_sizing'], $options, true ) ) {
116 $sanitized_grid['layout_desktop_sizing'] = $grid['layout_desktop_sizing'];
117 }
118 if ( isset( $grid['layout_mobile_sizing'] ) && in_array( $grid['layout_mobile_sizing'], $options, true ) ) {
119 $sanitized_grid['layout_mobile_sizing'] = $grid['layout_mobile_sizing'];
120 }
121 if ( isset( $grid['layout_tablet_sizing'] ) && in_array( $grid['layout_tablet_sizing'], $options, true ) ) {
122 $sanitized_grid['layout_tablet_sizing'] = $grid['layout_tablet_sizing'];
123 }
124
125 $options = array( 'AND', 'OR' );
126 if ( isset( $grid['filters_relation'] ) && in_array( $grid['filters_relation'], $options, true ) ) {
127 $sanitized_grid['filters_relation'] = $grid['filters_relation'];
128 }
129
130 $options = array( 'all', 'empty', 'empty_on_load' );
131 if ( isset( $grid['filters_no_selection'] ) && in_array( $grid['filters_no_selection'], $options, true ) ) {
132 $sanitized_grid['filters_no_selection'] = $grid['filters_no_selection'];
133 }
134
135 $options = array( 'arrow', 'triangle', 'plus', 'custom' );
136 if ( isset( $grid['responsive_toggle_style'] ) && in_array( $grid['responsive_toggle_style'], $options, true ) ) {
137 $sanitized_grid['responsive_toggle_style'] = $grid['responsive_toggle_style'];
138 }
139
140
141
142 $options = array( 'all', 'exclude', 'only' );
143 if ( isset( $grid['password_protected'] ) && in_array( $grid['password_protected'], $options, true ) ) {
144 $sanitized_grid['password_protected'] = $grid['password_protected'];
145 }
146
147 $options = array( 'desc', 'asc' );
148 if ( isset( $grid['order'] ) && in_array( $grid['order'], $options, true ) ) {
149 $sanitized_grid['order'] = $grid['order'];
150 }
151
152 $options = array( 'title', 'date', 'modified', 'author', 'comment_count', 'rand', 'menu_order', 'custom' );
153 if ( isset( $grid['order_by'] ) && in_array( $grid['order_by'], $options, true ) ) {
154 $sanitized_grid['order_by'] = $grid['order_by'];
155 }
156
157 $options = array( 'desc', 'asc' );
158 if ( isset( $grid['terms_order'] ) && in_array( $grid['terms_order'], $options, true ) ) {
159 $sanitized_grid['terms_order'] = $grid['terms_order'];
160 }
161
162 $options = array( 'name', 'slug', 'term_id', 'description', 'count' );
163 if ( isset( $grid['terms_order_by'] ) && in_array( $grid['terms_order_by'], $options, true ) ) {
164 $sanitized_grid['terms_order_by'] = $grid['terms_order_by'];
165 }
166
167 $options = array( 'posts', 'terms' );
168 if ( isset( $grid['type'] ) && in_array( $grid['type'], $options, true ) ) {
169 $sanitized_grid['type'] = $grid['type'];
170 }
171
172 $options = array( 'none', 'pages', 'infinite_load', 'load_more', 'load_filter' );
173 if ( isset( $grid['pagination_type'] ) && in_array( $grid['pagination_type'], $options, true ) ) {
174 $sanitized_grid['pagination_type'] = $grid['pagination_type'];
175 }
176
177 $options = array( 'post', 'image' );
178 if ( isset( $grid['link_type'] ) && in_array( $grid['link_type'], $options, true ) ) {
179 $sanitized_grid['link_type'] = $grid['link_type'];
180 }
181
182 $options = array( '_self', '_blank' );
183 if ( isset( $grid['link_target'] ) && in_array( $grid['link_target'], $options, true ) ) {
184 $sanitized_grid['link_target'] = $grid['link_target'];
185 }
186
187 $options = array( 'default', 'latest_post', 'oldest_post', 'random_post' );
188 if ( isset( $grid['use_image'] ) && in_array( $grid['use_image'], $options, true ) ) {
189 $sanitized_grid['use_image'] = $grid['use_image'];
190 }
191
192 // Limit terms.
193 if ( isset( $grid['limit_terms_terms'] ) ) {
194 $sanitized_grid['limit_terms_terms'] = array_map( 'intval', $grid['limit_terms_terms'] );
195 }
196
197 // Limit posts.
198 if ( isset( $grid['limit_rules'] ) && is_array( $grid['limit_rules'] ) ) {
199 $sanitized_rules = array();
200
201 foreach ( $grid['limit_rules'] as $limit_rule ) {
202 $sanitized_rule = array(
203 'field' => sanitize_text_field( $limit_rule['field'] ),
204 'values' => array_map( 'sanitize_text_field', $limit_rule['values'] ),
205 'type' => sanitize_key( $limit_rule['type'] ),
206 );
207
208 if ( isset( $limit_rule['order_mode'] ) && in_array( $limit_rule['order_mode'], array( 'grid_order', 'favorite_order' ), true ) ) {
209 $sanitized_rule['order_mode'] = $limit_rule['order_mode'];
210 }
211
212 $sanitized_rules[] = $sanitized_rule;
213 }
214
215 $sanitized_grid['limit_rules'] = $sanitized_rules;
216 }
217
218 // Filter options.
219 if ( isset( $grid['filters'] ) && is_array( $grid['filters'] ) ) {
220 $sanitized_grid['filters'] = array();
221
222 foreach ( $grid['filters'] as $filter ) {
223 $sanitized_grid['filters'][] = array(
224 'id' => isset( $filter['id'] ) ? sanitize_title( $filter['id'] ) : '',
225 'label' => isset( $filter['label'] ) ? sanitize_text_field( $filter['label'] ) : '',
226 'type' => isset( $filter['type'] ) ? sanitize_key( $filter['type'] ) : '',
227 'options' => apply_filters( 'wpupg_filter_sanitize_options', array(), $filter, $grid ),
228 );
229 }
230 }
231
232 // Filters style options.
233 if ( isset( $grid['filters_style'] ) && is_array( $grid['filters_style'] ) ) {
234 $filters_style = $grid['filters_style'];
235 $sanitized_filters_style = array();
236
237 $options = array( 'block', 'inline', 'left', 'right' );
238 if ( isset( $filters_style['display'] ) && in_array( $filters_style['display'], $options, true ) ) {
239 $sanitized_filters_style['display'] = $filters_style['display'];
240 }
241 $options = array( 'left', 'center', 'right', 'spaced' );
242 if ( isset( $filters_style['alignment'] ) && in_array( $filters_style['alignment'], $options, true ) ) {
243 $sanitized_filters_style['alignment'] = $filters_style['alignment'];
244 }
245 $options = array( 'block', 'inline' );
246 if ( isset( $filters_style['label_display'] ) && in_array( $filters_style['label_display'], $options, true ) ) {
247 $sanitized_filters_style['label_display'] = $filters_style['label_display'];
248 }
249 $options = array( 'normal', 'bold', 'underline', 'italic' );
250 if ( isset( $filters_style['label_style'] ) && in_array( $filters_style['label_style'], $options, true ) ) {
251 $sanitized_filters_style['label_style'] = $filters_style['label_style'];
252 }
253 $options = array( 'left', 'center', 'right' );
254 if ( isset( $filters_style['label_alignment'] ) && in_array( $filters_style['label_alignment'], $options, true ) ) {
255 $sanitized_filters_style['label_alignment'] = $filters_style['label_alignment'];
256 }
257
258 if ( isset( $filters_style['spacing_vertical'] ) ) { $sanitized_filters_style['spacing_vertical'] = intval( $filters_style['spacing_vertical'] ); }
259 if ( isset( $filters_style['spacing_horizontal'] ) ) { $sanitized_filters_style['spacing_horizontal'] = intval( $filters_style['spacing_horizontal'] ); }
260 if ( isset( $filters_style['width'] ) ) { $sanitized_filters_style['width'] = intval( $filters_style['width'] ); }
261 if ( isset( $filters_style['label_font_size'] ) ) { $sanitized_filters_style['label_font_size'] = intval( $filters_style['label_font_size'] ); }
262
263 $sanitized_grid['filters_style'] = $sanitized_filters_style;
264 }
265
266 // Pagination options.
267 if ( isset( $grid['pagination'] ) ) {
268 $sanitized_grid['pagination'] = apply_filters( 'wpupg_pagination_sanitize_options', array(), $grid['pagination'], $grid );
269 }
270
271
272 return apply_filters( 'wpupg_grid_sanitize', $sanitized_grid, $grid );
273 }
274
275 /**
276 * Sanitize HTML content.
277 *
278 * @since 1.0.0
279 * @param mixed $text Text to sanitize.
280 */
281 public static function sanitize_html( $text ) {
282 $allowed_tags = wp_kses_allowed_html( 'post' );
283
284 // Remove blank lines from HTML.
285 $text = str_replace( '<p></p>', '', $text );
286 $text = str_replace( '<p><br></p>', '', $text );
287 $text = str_replace( '<p><br/></p>', '', $text );
288
289 // Allow administrators to use any html they want.
290 if ( current_user_can( 'unfiltered_html' ) ) {
291 return $text;
292 }
293
294 return wp_kses( $text, $allowed_tags );
295 }
296 }
297