PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.2.71
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.2.71
1.2.72 1.2.71 1.2.70 1.2.69 1.2.68 1.2.67 1.2.66 1.2.65 1.2.64 1.2.63 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 All 172 releases
userswp / includes / class-validation.php

class-validation.php in UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP 1.2.71, at includes/class-validation.php

399 lines 17.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Validation related functions
4 *
5 * All UsersWP form validation handled here.
6 *
7 * @since 1.0.0
8 * @author GeoDirectory Team <info@wpgeodirectory.com>
9 */
10 class UsersWP_Validation {
11
12 /**
13 * Validates the submitted form data.
14 *
15 * @since 1.0.0
16 * @package userswp
17 *
18 * @param array $data Submitted form data
19 * @param string $type Form type.
20 * @param array|bool $fields Fields applicable for validation.
21 * @param string $extra_where Extra where query.
22 *
23 * @return array|mixed|WP_Error Validated form data.
24 */
25 public function validate_fields( $data, $type, $fields = false, $extra_where = '' ) {
26 $errors = new WP_Error();
27
28 $errors = apply_filters('uwp_validate_fields_before', $errors, $data, $type);
29
30 $error_code = $errors->get_error_code();
31 if (!empty($error_code)) {
32 return $errors;
33 }
34
35 if (!$fields) {
36 global $wpdb;
37 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
38 if ($type == 'register') {
39 if ( isset( $data['uwp_register_form_id'] ) && ! empty( $data['uwp_register_form_id'] ) ) {
40 $form_id = (int) $data['uwp_register_form_id'];
41 } else {
42 $form_id = 1;
43 }
44 $fields = get_register_validate_form_fields($form_id);
45 } elseif ($type == 'change') {
46 $fields = get_change_validate_form_fields();
47 } elseif ($type == 'account') {
48 $fields = get_account_form_fields( $extra_where );
49 } else {
50 $fields = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = %s AND field_type != 'fieldset' AND field_type != 'file' AND is_active = '1' ORDER BY sort_order ASC", array($type)));
51 }
52 }
53
54 $validated_data = array();
55
56 $email_field = uwp_get_custom_field_info('email','account');
57 $email_extra = array();
58 if (isset($email_field->extra_fields) && $email_field->extra_fields != '') {
59 $email_extra = unserialize($email_field->extra_fields);
60 }
61
62 $enable_confirm_email_field = isset($email_extra['confirm_email']) ? $email_extra['confirm_email'] : '0';
63
64 $password_field = uwp_get_custom_field_info('password','account');
65 $enable_password = isset($data['password']) && !empty($password_field) && $password_field->is_active ? 1 : 0;
66 $password_extra = array();
67 if (!empty($password_field) && isset($password_field->extra_fields) && $password_field->extra_fields != '') {
68 $password_extra = unserialize($password_field->extra_fields);
69 }
70
71 $enable_confirm_password_field = isset($password_extra['confirm_password']) ? $password_extra['confirm_password'] : '0';
72
73 $enable_old_password = uwp_get_option('change_enable_old_password', false);
74 $user_id = get_current_user_id();
75 if($user_id && 1 == get_user_meta($user_id, 'is_uwp_social_login_no_password', true)){
76 $enable_old_password = 0;
77 }
78
79 if ($type == 'account' || $type == 'change') {
80 if (!is_user_logged_in()) {
81 $errors->add('not_logged_in', __('<strong>Error</strong>: Permission denied.', 'userswp'));
82 return $errors;
83 }
84 }
85
86 if (!empty($fields)) {
87 foreach ($fields as $field) {
88
89 if (!isset($data[$field->htmlvar_name]) && $field->is_required != 1) {
90 continue;
91 }
92
93
94 if ($type == 'register') {
95
96 if ($enable_password != '1') {
97 if ( ($field->htmlvar_name == 'password') OR ($field->htmlvar_name == 'confirm_password') ) {
98 continue;
99 }
100 }
101
102 if ($enable_confirm_email_field != '1') {
103 if ( $field->htmlvar_name == 'confirm_email' ) {
104 continue;
105 }
106 }
107 }
108
109 $value = isset($data[$field->htmlvar_name]) ? $data[$field->htmlvar_name] : '';
110 $sanitized_value = $value;
111 $sanitized = false;
112
113 // sanitize our default fields
114 switch($field->htmlvar_name) {
115
116 case 'uwp_register_username':
117 case 'username':
118 case 'uwp_login_username':
119 case 'uwp_reset_username':
120 $sanitized_value = sanitize_user($value);
121 $sanitized = true;
122 break;
123
124 case 'uwp_register_first_name':
125 case 'uwp_register_last_name':
126 case 'first_name':
127 case 'last_name':
128 $sanitized_value = sanitize_text_field($value);
129 $sanitized = true;
130 break;
131
132 case 'uwp_register_email':
133 case 'uwp_forgot_email':
134 case 'email':
135 case 'confirm_email':
136 if ($type == 'forgot' && $field->htmlvar_name == 'email') {
137 $sanitized_value = is_email($value) ? sanitize_email($value) : sanitize_user($value);
138 } else {
139 $sanitized_value = sanitize_email($value);
140 }
141 $sanitized = true;
142 break;
143
144 }
145
146 if (!$sanitized && !empty($value)) {
147 // sanitize by field type
148 switch($field->field_type) {
149
150 case 'text':
151 $sanitized_value = sanitize_text_field($value);
152 break;
153
154 case 'checkbox':
155 $sanitized_value = sanitize_text_field($value);
156 break;
157
158 case 'textarea':
159 $sanitized_value = sanitize_textarea_field($value);
160 break;
161
162 case 'email':
163 $sanitized_value = sanitize_email($value);
164 break;
165
166 case 'multiselect':
167 $sanitized_value = array_map( 'sanitize_text_field', $value );
168 break;
169
170 case 'datepicker':
171 $sanitized_value = sanitize_text_field($value);
172 $extra_fields = unserialize($field->extra_fields);
173
174 if ($extra_fields['date_format'] == '')
175 $extra_fields['date_format'] = 'yy-mm-dd';
176
177 $date_format = $extra_fields['date_format'];
178
179 if (!empty($sanitized_value)) {
180 $date_value = uwp_date($sanitized_value, 'Y-m-d', $date_format);
181 $sanitized_value = strtotime($date_value);
182 }
183 break;
184
185 case 'editor':
186 $sanitized_value = wp_kses_post( strip_shortcodes( $value ) );
187 break;
188
189 case 'url':
190 $sanitized_value = sanitize_url( wp_unslash( $value ) );
191 break;
192
193 case 'file':
194 $sanitized_value = sanitize_text_field( $value );
195
196 // Validate the file path.
197 if ( $sanitized_value && validate_file( $sanitized_value ) !== 0 ) {
198 $sanitized_value = '';
199 }
200 break;
201
202 default:
203 $sanitized_value = sanitize_text_field($value);
204 }
205 }
206
207 if ($field->is_required == 1 && $sanitized_value == '' && $field->field_type != 'file') {
208 if (isset($GLOBALS['current_screen']) && !is_customize_preview()) {
209 //do nothing since admin edit fields can be empty
210 } else {
211 if ($field->required_msg) {
212 $errors->add('empty_'.$field->htmlvar_name, sprintf(__('<strong>Error</strong>: %s %s', 'userswp'), $field->site_title, $field->required_msg));
213 return $errors;
214 } else {
215 $errors->add('empty_'.$field->htmlvar_name, sprintf(__('<strong>Error</strong>: %s cannot be empty.', 'userswp'), $field->site_title));
216 return $errors;
217 }
218 }
219 }
220
221 if ($type == 'forgot' && $field->htmlvar_name == 'email') {
222 if (!empty($sanitized_value) && !is_email($sanitized_value) && !validate_username($sanitized_value)) {
223 $incorrect_username_or_email_error_msg = apply_filters('uwp_incorrect_username_or_email_error_msg', __('<strong>Error</strong>: Please enter a valid username or email address.', 'userswp'));
224 $errors->add('invalid_username_or_email', $incorrect_username_or_email_error_msg);
225 return $errors;
226 }
227 } elseif ($field->field_type == 'email' && !empty($sanitized_value) && !is_email($sanitized_value)) {
228 $incorrect_email_error_msg = apply_filters('uwp_incorrect_email_error_msg', __('<strong>Error</strong>: The email address isn&#8217;t correct.', 'userswp'));
229 $errors->add('invalid_email', $incorrect_email_error_msg);
230 return $errors;
231 }
232
233 //register email
234 if ($type == 'register' && $field->htmlvar_name == 'email' && email_exists($sanitized_value)) {
235 $errors->add('email_exists', __('<strong>Error</strong>: This email is already registered, please choose another one.', 'userswp'));
236 return $errors;
237 }
238
239 //forgot email
240 if ($field->htmlvar_name == 'uwp_forgot_email' && !email_exists($sanitized_value)) {
241 $errors->add('email_exists', __('<strong>Error</strong>: This email doesn\'t exists.', 'userswp'));
242 return $errors;
243 }
244
245 $incorrect_username_error_msg = apply_filters('uwp_incorrect_username_error_msg', __('<strong>Error</strong>: This username is invalid because it uses illegal characters. Please enter a valid username.', 'userswp'));
246
247 // Check the username for register
248 if ('register' == $type && $field->htmlvar_name == 'username') {
249 if (!empty($sanitized_value) && !validate_username($sanitized_value)) {
250 $errors->add('invalid_username', $incorrect_username_error_msg);
251 return $errors;
252 }
253 if (username_exists($sanitized_value)) {
254 $errors->add('username_exists', __('<strong>Error</strong>: This username is already registered. Please choose another one.', 'userswp'));
255 return $errors;
256 }
257 $username_length = uwp_get_option( 'register_username_length', 4);
258 $username_length_max = uwp_get_option( 'register_username_length_max', 20);
259
260 if(!empty($sanitized_value) && (strlen($sanitized_value) < $username_length || strlen($sanitized_value) > $username_length_max)) {
261 $errors->add('username_length', sprintf(__('<strong>Error</strong>: Username must be between %s and %s characters.', 'userswp'), $username_length, $username_length_max));
262 return $errors;
263 }
264 }
265
266 // check for the TOS and GDPR validation.
267 if ('register' == $type && ($field->htmlvar_name == 'register_gdpr' || $field->htmlvar_name == 'register_tos' )) {
268
269 if($field->htmlvar_name == 'register_gdpr'){
270 $msg = __('You must read and accept our GDPR policy.', 'userswp');
271 $is_page = uwp_get_option('register_gdpr_page', false);
272 } else {
273 $msg = __('You must accept our terms and conditions.', 'userswp');
274 $is_page = uwp_get_option('register_terms_page', false);
275 }
276
277 if(isset($sanitized_value) && 1 != $sanitized_value && $is_page){
278
279 if ($field->required_msg) {
280 $errors->add('empty_'.$field->htmlvar_name, __($field->required_msg, 'userswp'));
281 return $errors;
282 } else {
283 $errors->add('empty_'.$field->htmlvar_name, $msg);
284 return $errors;
285 }
286 }
287 }
288
289 // Check the username for login
290 if ($type != 'account' && $field->htmlvar_name == 'username') {
291 if (!empty($sanitized_value) && !is_email($sanitized_value) && !validate_username($sanitized_value)) {
292 $errors->add('invalid_username', $incorrect_username_error_msg);
293 return $errors;
294 }
295 }
296
297
298 $validated_data[$field->htmlvar_name] = $sanitized_value;
299
300 }
301 }
302
303 $error_code = $errors->get_error_code();
304 if (!empty($error_code)) {
305 return $errors;
306 }
307
308 if ( $type == 'change' && $enable_old_password == '1' ) {
309 $old_pass = isset($data['old_password']) ? $data['old_password'] : "";
310 //check old password
311 if( empty( $old_pass ) ) {
312 $errors->add( 'empty_password', __( '<strong>Error</strong>: Please enter your old password', 'userswp' ) );
313 return $errors;
314 }
315
316 $user = get_user_by( 'id', get_current_user_id() );
317 if ( !wp_check_password( $old_pass, $user->data->user_pass, $user->ID) ) {
318 $errors->add( 'invalid_password', __( '<strong>Error</strong>: Incorrect old password', 'userswp' ) );
319 return $errors;
320 }
321
322 if( $old_pass == $data['password'] ) {
323 $errors->add( 'invalid_password', __( '<strong>Error</strong>: The old password and the new password are the same', 'userswp' ) );
324 return $errors;
325 }
326
327 }
328
329 if (($type == 'register' && $enable_confirm_email_field == '1')) {
330 //check confirm email
331 if( empty( $data['email'] ) ) {
332 $errors->add( 'empty_email', __( '<strong>Error</strong>: Please enter your Email', 'userswp' ) );
333 return $errors;
334 }
335
336 if( !isset($data['confirm_email']) || empty( $data['confirm_email'] ) ) {
337 $errors->add( 'empty_confirm_email', __( '<strong>Error</strong>: Please fill Confirm Email field', 'userswp' ) );
338 return $errors;
339 }
340
341 if( $data['email'] != $data['confirm_email'] ) {
342 $errors->add( 'email_mismatch', __( '<strong>Error</strong>: Email and Confirm email not match', 'userswp' ) );
343 return $errors;
344 }
345
346 }
347
348 if ($type == 'change' || $type == 'reset' || $type == 'login' || ($type == 'register' && $enable_password == '1')) {
349 //check password
350 if( empty( $data['password'] ) ) {
351 $errors->add( 'empty_password', __( 'Please enter a password', 'userswp' ) );
352 }
353
354 $password_min_length = uwp_get_option( 'register_password_min_length');
355 $password_min_length = !empty($password_min_length) ? (int)$password_min_length : 8;
356
357 $password_max_length = uwp_get_option( 'register_password_max_length');
358 $password_max_length = !empty($password_max_length) ? (int)$password_max_length : 15;
359
360 if ($type != 'login' && (strlen($data['password']) < $password_min_length || strlen($data['password']) > $password_max_length )) {
361 if(strlen($data['password']) > $password_max_length) {
362 $errors->add('pass_match', sprintf(__('<strong>Error</strong>: Password must be %s characters or less.', 'userswp'), $password_max_length));
363 } else{
364 $errors->add('pass_match', sprintf(__('<strong>Error</strong>: Password must be %s characters or more.', 'userswp'), $password_min_length));
365 }
366 }
367
368 $validated_data['password'] = isset($data['password']) ? $data['password'] : '';
369 }
370
371 $error_code = $errors->get_error_code();
372 if (!empty($error_code)) {
373 return $errors;
374 }
375
376 if (($type == 'register' && $enable_password == '1') || $type == 'reset' || $type == 'change') {
377
378 if (($type == 'register' && $enable_confirm_password_field != '1')) {
379 $validated_data['password'] = $data['password'];
380 } else {
381 //check password
382 if ($data['password'] != $data['confirm_password']) {
383 $errors->add('pass_match', __('<strong>Error</strong>: Passwords do not match.', 'userswp'));
384 }
385
386 $validated_data['password'] = isset($data['password']) ? $data['password'] : '';
387 }
388 }
389
390
391 $error_code = $errors->get_error_code();
392 if (!empty($error_code)) {
393 return $errors;
394 }
395
396 return $validated_data;
397 }
398
399 }