PluginProbe
WP Ultimate Post Grid / 4.0.1
WP Ultimate Post Grid v4.0.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.0.1, at includes/public/class-wpupg-grid-sanitizer.php

291 lines 14.3 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 <[email protected]>
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_rules[] = 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
209 $sanitized_grid['limit_rules'] = $sanitized_rules;
210 }
211
212 // Filter options.
213 if ( isset( $grid['filters'] ) && is_array( $grid['filters'] ) ) {
214 $sanitized_grid['filters'] = array();
215
216 foreach ( $grid['filters'] as $filter ) {
217 $sanitized_grid['filters'][] = array(
218 'id' => isset( $filter['id'] ) ? sanitize_title( $filter['id'] ) : '',
219 'label' => isset( $filter['label'] ) ? sanitize_text_field( $filter['label'] ) : '',
220 'type' => isset( $filter['type'] ) ? sanitize_key( $filter['type'] ) : '',
221 'options' => apply_filters( 'wpupg_filter_sanitize_options', array(), $filter, $grid ),
222 );
223 }
224 }
225
226 // Filters style options.
227 if ( isset( $grid['filters_style'] ) && is_array( $grid['filters_style'] ) ) {
228 $filters_style = $grid['filters_style'];
229 $sanitized_filters_style = array();
230
231 $options = array( 'block', 'inline', 'left', 'right' );
232 if ( isset( $filters_style['display'] ) && in_array( $filters_style['display'], $options, true ) ) {
233 $sanitized_filters_style['display'] = $filters_style['display'];
234 }
235 $options = array( 'left', 'center', 'right', 'spaced' );
236 if ( isset( $filters_style['alignment'] ) && in_array( $filters_style['alignment'], $options, true ) ) {
237 $sanitized_filters_style['alignment'] = $filters_style['alignment'];
238 }
239 $options = array( 'block', 'inline' );
240 if ( isset( $filters_style['label_display'] ) && in_array( $filters_style['label_display'], $options, true ) ) {
241 $sanitized_filters_style['label_display'] = $filters_style['label_display'];
242 }
243 $options = array( 'normal', 'bold', 'underline', 'italic' );
244 if ( isset( $filters_style['label_style'] ) && in_array( $filters_style['label_style'], $options, true ) ) {
245 $sanitized_filters_style['label_style'] = $filters_style['label_style'];
246 }
247 $options = array( 'left', 'center', 'right' );
248 if ( isset( $filters_style['label_alignment'] ) && in_array( $filters_style['label_alignment'], $options, true ) ) {
249 $sanitized_filters_style['label_alignment'] = $filters_style['label_alignment'];
250 }
251
252 if ( isset( $filters_style['spacing_vertical'] ) ) { $sanitized_filters_style['spacing_vertical'] = intval( $filters_style['spacing_vertical'] ); }
253 if ( isset( $filters_style['spacing_horizontal'] ) ) { $sanitized_filters_style['spacing_horizontal'] = intval( $filters_style['spacing_horizontal'] ); }
254 if ( isset( $filters_style['width'] ) ) { $sanitized_filters_style['width'] = intval( $filters_style['width'] ); }
255 if ( isset( $filters_style['label_font_size'] ) ) { $sanitized_filters_style['label_font_size'] = intval( $filters_style['label_font_size'] ); }
256
257 $sanitized_grid['filters_style'] = $sanitized_filters_style;
258 }
259
260 // Pagination options.
261 if ( isset( $grid['pagination'] ) ) {
262 $sanitized_grid['pagination'] = apply_filters( 'wpupg_pagination_sanitize_options', array(), $grid['pagination'], $grid );
263 }
264
265
266 return apply_filters( 'wpupg_grid_sanitize', $sanitized_grid, $grid );
267 }
268
269 /**
270 * Sanitize HTML content.
271 *
272 * @since 1.0.0
273 * @param mixed $text Text to sanitize.
274 */
275 public static function sanitize_html( $text ) {
276 $allowed_tags = wp_kses_allowed_html( 'post' );
277
278 // Remove blank lines from HTML.
279 $text = str_replace( '<p></p>', '', $text );
280 $text = str_replace( '<p><br></p>', '', $text );
281 $text = str_replace( '<p><br/></p>', '', $text );
282
283 // Allow administrators to use any html they want.
284 if ( current_user_can( 'unfiltered_html' ) ) {
285 return $text;
286 }
287
288 return wp_kses( $text, $allowed_tags );
289 }
290 }
291