PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.0.22
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.0.22
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-forms.php

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

2,709 lines 103.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Form related functions
4 *
5 * This class defines all code necessary to handle UsersWP forms like login. register etc.
6 *
7 * @since 1.0.0
8 * @author GeoDirectory Team <info@wpgeodirectory.com>
9 */
10 class UsersWP_Forms {
11
12 protected $generated_password;
13
14 /**
15 * Initialize UsersWP notices.
16 *
17 * @since 1.0.0
18 * @package userswp
19 *
20 * @return void
21 */
22 public function init_notices() {
23 global $uwp_notices;
24 $uwp_notices = array();
25 }
26
27 /**
28 * Handles all UsersWP forms.
29 *
30 * @since 1.0.0
31 * @package userswp
32 *
33 * @return void
34 */
35 public function handler()
36 {
37 global $uwp_notices;
38
39 ob_start();
40
41 $errors = null;
42 $message = null;
43 $redirect = false;
44 $processed = false;
45 $type = null;
46
47 $login_page_url = wp_login_url();
48
49 if (isset($_POST['uwp_register_nonce'])) {
50 $auto_login = uwp_get_option('uwp_registration_action', false);
51 $errors = $this->process_register($_POST, $_FILES);
52 if (!is_wp_error($errors)) {
53 $message = $errors;
54 }
55 $force_redirect = apply_filters('uwp_registration_force_redirect', false, $_POST, $_FILES);
56 if ($auto_login == 'auto_approve_login' || $force_redirect) {
57 $reg_redirect_page_id = uwp_get_option('register_redirect_to', '');
58 if(isset( $_REQUEST['redirect_to'] )){
59 $reg_redirect_to = esc_url($_REQUEST['redirect_to']);
60 } elseif ( isset($reg_redirect_page_id) && (int)$reg_redirect_page_id > 0) {
61 $reg_redirect_to = get_permalink($reg_redirect_page_id);
62 } else {
63 $reg_redirect_to = home_url('/');
64 }
65 $redirect = apply_filters('uwp_register_redirect', $reg_redirect_to);
66 }
67 $processed = true;
68 $type = 'register';
69 } elseif (isset($_POST['uwp_login_nonce'])) {
70 $errors = $this->process_login($_POST);
71 $redirect_page_id = uwp_get_option('login_redirect_to', -1);
72 if (isset($redirect_page_id) && (int)$redirect_page_id > 0) {
73 $redirect_to = get_permalink($redirect_page_id);
74 } elseif(isset( $_REQUEST['redirect_to'] ) && !empty($data['redirect_to'])){
75 $redirect_to = esc_url($_REQUEST['redirect_to']);
76 } else {
77 $redirect_to = home_url('/');
78 }
79 $redirect = apply_filters('uwp_login_redirect', $redirect_to);
80 $processed = true;
81 $type = 'login';
82 } elseif (isset($_POST['uwp_forgot_nonce'])) {
83 $errors = $this->process_forgot($_POST);
84 $message = __('Please check your email.', 'userswp');
85 $processed = true;
86 } elseif (isset($_POST['uwp_change_nonce'])) {
87 $errors = $this->process_change($_POST);
88 $message = __('Password changed successfully', 'userswp');
89 $processed = true;
90 } elseif (isset($_POST['uwp_reset_submit'])) {
91 $errors = $this->process_reset($_POST);
92 $message = sprintf(__('Password updated successfully. Please <a href="%s">login</a> with your new password', 'userswp'), $login_page_url);
93 $processed = true;
94 } elseif (isset($_POST['uwp_account_nonce'])) {
95 $errors = $this->process_account($_POST, $_FILES);
96 $message = __('Account updated successfully.', 'userswp');
97 $processed = true;
98 } elseif (isset($_POST['uwp_avatar_submit'])) {
99 $errors = $this->process_upload_submit($_POST, $_FILES, 'avatar');
100 if (!is_wp_error($errors)) {
101 $redirect = $errors;
102 }
103 $message = __('Avatar cropped successfully.', 'userswp');
104 $processed = true;
105 } elseif (isset($_POST['uwp_banner_submit'])) {
106 $errors = $this->process_upload_submit($_POST, $_FILES, 'banner');
107 if (!is_wp_error($errors)) {
108 $redirect = $errors;
109 }
110 $message = __('Banner cropped successfully.', 'userswp');
111 $processed = true;
112 } elseif (isset($_POST['uwp_avatar_crop'])) {
113 $errors = $this->process_image_crop($_POST, 'avatar', true);
114 if (!is_wp_error($errors)) {
115 $redirect = $errors;
116 }
117 $message = __('Avatar cropped successfully.', 'userswp');
118 $processed = true;
119 } elseif (isset($_POST['uwp_banner_crop'])) {
120 $errors = $this->process_image_crop($_POST, 'banner', true);
121 if (!is_wp_error($errors)) {
122 $redirect = $errors;
123 }
124 $message = __('Banner cropped successfully.', 'userswp');
125 $processed = true;
126 }
127
128 if ($processed) {
129 if (is_wp_error($errors)) {
130 echo '<div class="uwp-alert-error text-center">';
131 echo $errors->get_error_message();
132 echo '</div>';
133 } else {
134 if ($redirect) {
135 wp_safe_redirect($redirect);
136 exit();
137 } else {
138 echo '<div class="uwp-alert-success text-center">';
139 echo $message;
140 echo '</div>';
141 }
142 }
143 }
144
145 if($type){
146 $uwp_notices[] = array($type => ob_get_contents());
147 }else{
148 $uwp_notices[] = ob_get_contents();
149 }
150
151
152 ob_end_clean();
153
154 }
155
156 public function output_dashboard_links($options){
157 if(!empty($options)){
158 echo "<select onchange='window.location = jQuery(this).val();'>";
159 $this->output_options($options);
160 echo "<select>";
161 }
162 }
163
164 public function output_options($options){
165 if(!empty($options)){
166 foreach($options as $key => $link){
167
168 if(!isset($link['text']) && isset($link[0]) && is_array($link[0])){
169 $this->output_options($link);
170 }else{
171 if(!empty($link['optgroup']) && $link['optgroup']=='open'){
172 echo "<optgroup label='".esc_attr($link['text'])."'>";
173 }elseif(!empty($link['optgroup']) && $link['optgroup']=='close'){
174 echo "</optgroup>";
175 }elseif(!empty($link['text'])){
176 $disabled = !empty($link['disabled']) ? 'disabled' : '';
177 $selected = !empty($link['selected']) ? 'selected' : '';
178 $value = !empty($link['url']) ? esc_url($link['url']) : '';
179 $display_none = !empty($link['display_none']) ? 'style="display:none;"' : '';
180 echo "<option $disabled $selected value='$value' $display_none>";
181 echo esc_attr($link['text']);
182 echo "</option>";
183 }
184 }
185 }
186 }
187 }
188
189 /**
190 * Displays UsersWP notices in forms.
191 *
192 * @since 1.0.0
193 * @package userswp
194 *
195 * @param string $type Form type
196 *
197 * @return void
198 */
199 public function display_notices($type) {
200 global $uwp_notices;
201
202 if (is_array($uwp_notices)) {
203 foreach ($uwp_notices as $notice) {
204
205 // If the notification is type specific then only output on that type
206 if(is_array($notice)){
207 foreach($notice as $key => $val){
208 if( $key == $type ){ echo $val; }
209 }
210 }else{
211 if (!empty($notice)) {
212 echo $notice;
213 }
214 }
215
216 }
217
218 }
219
220 if ($type == 'change') {
221 $user_id = get_current_user_id();
222 $password_nag = get_user_option('default_password_nag', $user_id);
223
224 if ($password_nag) {
225 $change_page = uwp_get_page_id('change_page', false);
226 $remove_nag_url = add_query_arg('uwp_remove_nag', 'yes', get_permalink($change_page));
227
228 if (isset($_GET['uwp_remove_nag']) && $_GET['uwp_remove_nag'] == 'yes') {
229 delete_user_meta( $user_id, 'default_password_nag' );
230 $message = sprintf(__('We have removed the system generated password warning for you. From this point forward you can continue to access our site as usual. To go to home page, <a href="%s">click here</a>.', 'userswp'), home_url('/'));
231 echo '<div class="uwp-alert-success text-center">';
232 echo $message;
233 echo '</div>';
234 } else {
235 $message = sprintf(__('<strong>Warning</strong>: It seems like you are using a system generated password. Please change the password in this page. If this is not a problem for you, you can remove this warning by <a href="%s">clicking here</a>.', 'userswp'), $remove_nag_url);
236 echo '<div class="uwp-alert-warning text-center">';
237 echo $message;
238 echo '</div>';
239 }
240 }
241 }
242 }
243
244 /**
245 * Processes register form submission.
246 *
247 * @since 1.0.0
248 * @package userswp
249 *
250 * @param array $data Submitted $_POST data
251 * @param array $files Submitted $_FILES data
252 *
253 * @return bool|WP_Error|string
254 */
255 public function process_register($data = array(), $files = array()) {
256
257 $errors = new WP_Error();
258 $file_obj = new UsersWP_Files();
259
260 if( ! isset( $data['uwp_register_nonce'] ) || ! wp_verify_nonce( $data['uwp_register_nonce'], 'uwp-register-nonce' ) ) {
261 return false;
262 }
263
264 if (!get_option('users_can_register')) {
265 $errors->add('register_disabled', __('<strong>ERROR</strong>: User registration is currently not allowed.', 'userswp'));
266 return $errors;
267 }
268
269 $reg_terms_page_id = uwp_get_option('register_terms_page', '');
270 $reg_terms_page_id = apply_filters('uwp_reg_terms_page_id', $reg_terms_page_id);
271 if (!empty($reg_terms_page_id)) {
272 if (!isset($data['agree_terms']) || $data['agree_terms'] != 'yes') {
273 $errors->add('accept_tos', __('<strong>ERROR</strong>: You must accept our terms and conditions.', 'userswp'));
274 return $errors;
275 }
276 }
277
278 do_action('uwp_before_validate', 'register');
279
280 $result = uwp_validate_fields($data, 'register');
281
282 $result = apply_filters('uwp_validate_result', $result, 'register', $data);
283
284 if (is_wp_error($result)) {
285 return $result;
286 }
287
288 $uploads_result = $file_obj->uwp_validate_uploads($files, 'register');
289
290 if (is_wp_error($uploads_result)) {
291 return $uploads_result;
292 }
293
294 do_action('uwp_after_validate', 'register');
295
296 $result = array_merge( $result, $uploads_result );
297
298 $error_code = $errors->get_error_code();
299 if (!empty($error_code)) {
300 return $errors;
301 }
302
303 if (isset($result['password']) && !empty($result['password'])) {
304 $password = $result['password'];
305 $generated_password = false;
306 } else {
307 $password = wp_generate_password();
308 $this->generated_password = $password;
309 $generated_password = true;
310 }
311
312 $first_name = "";
313 if (isset($result['uwp_account_first_name']) && !empty($result['uwp_account_first_name'])) {
314 $first_name = $result['uwp_account_first_name'];
315 }
316
317 $last_name = "";
318 if (isset($result['uwp_account_last_name']) && !empty($result['uwp_account_last_name'])) {
319 $last_name = $result['uwp_account_last_name'];
320 }
321
322 if (isset($result['uwp_account_display_name']) && !empty($result['uwp_account_display_name'])) {
323 $display_name = $result['uwp_account_display_name'];
324 } else {
325 if (!empty($first_name) || !empty($last_name)) {
326 $display_name = $first_name . ' ' . $last_name;
327 } else {
328 $display_name = $result['uwp_account_username'];
329 }
330 }
331
332 $description = "";
333 if (isset($result['uwp_account_bio']) && !empty($result['uwp_account_bio'])) {
334 $description = $result['uwp_account_bio'];
335 }
336
337
338 $args = array(
339 'user_login' => $result['uwp_account_username'],
340 'user_email' => $result['uwp_account_email'],
341 'user_pass' => $password,
342 'display_name' => $display_name,
343 'first_name' => $first_name,
344 'last_name' => $last_name,
345 'description' => $description
346 );
347
348 $user_id = wp_insert_user( $args );
349
350 if (!$user_id) {
351 $errors->add('registerfail', sprintf(__('<strong>Error</strong>: Something went wrong.', 'userswp'), get_option('admin_email')));
352 return $errors;
353 }
354
355 $result = apply_filters('uwp_before_extra_fields_save', $result, 'register', $user_id);
356
357 $save_result = $this->uwp_save_user_extra_fields($user_id, $result, 'register');
358
359 $save_result = apply_filters('uwp_after_extra_fields_save', $save_result, $result, 'register', $user_id);
360
361 if (is_wp_error($save_result)) {
362 return $save_result;
363 }
364
365 if (!$save_result) {
366 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong. Please contact site admin.', 'userswp'));
367 }
368
369 $error_code = $errors->get_error_code();
370 if (!empty($error_code)) {
371 return $errors;
372 }
373
374 do_action('uwp_after_custom_fields_save', 'register', $data, $result, $user_id);
375
376 $reg_action = uwp_get_option('uwp_registration_action', false);
377
378 if ($reg_action == 'require_email_activation' && !$generated_password) {
379
380 $email = new UsersWP_Mails();
381 $send_result = $email->send( 'activate', $user_id );
382
383 if (!$send_result) {
384 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong when sending email. Please contact site admin.', 'userswp'));
385 }
386 } else {
387 $email = new UsersWP_Mails();
388 $send_result = $email->send( 'register', $user_id );
389
390 if (!$send_result) {
391 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong when sending email. Please contact site admin.', 'userswp'));
392 }
393 }
394
395 if ($reg_action != 'require_admin_review') {
396 $register_admin_notify = uwp_get_option('register_admin_notify', '');
397 if ($register_admin_notify == '1') {
398 $admin_register_send_result = $email->send_admin_email('register_admin', $user_id);
399 if (is_wp_error($admin_register_send_result)) {
400 return $admin_register_send_result;
401 }
402 }
403
404 }
405
406
407 $error_code = $errors->get_error_code();
408 if (!empty($error_code)) {
409 return $errors;
410 }
411
412 if ($reg_action == 'auto_approve_login') {
413 $res = wp_signon(
414 array(
415 'user_login' => $result['uwp_account_username'],
416 'user_password' => $password,
417 'remember' => false
418 )
419 );
420
421 if (is_wp_error($res)) {
422 $errors->add('invalid_userorpass', __('<strong>Error</strong>: Invalid username or Password.', 'userswp'));
423 return $errors;
424 } else {
425 $reg_redirect_page_id = uwp_get_option('register_redirect_to', '');
426 if(isset( $_REQUEST['redirect_to'] )) {
427 $reg_redirect_to = esc_url($_REQUEST['redirect_to']);
428 } elseif (empty($reg_redirect_page_id)) {
429 $reg_redirect_to = home_url('/');
430 } else {
431 $reg_redirect_to = get_permalink($reg_redirect_page_id);
432 }
433 $redirect = apply_filters('uwp_register_redirect', $reg_redirect_to);
434 wp_redirect($redirect);
435 exit();
436 }
437 } else {
438 if ($reg_action == 'require_email_activation') {
439 global $wp;
440 $resend_link = uwp_current_page_url();
441 $resend_link = add_query_arg(
442 array(
443 'user_id' => $user_id,
444 'action' => 'uwp_resend',
445 '_nonce' => wp_create_nonce('uwp_resend'),
446 ),
447 $resend_link
448 );
449 return sprintf(__('An email has been sent to your registered email address. Please click the activation link to proceed. %sResend%s.', 'userswp'), '<a href="'.$resend_link.'"">', '</a>');
450 } elseif ($reg_action == 'require_admin_review' && defined('UWP_MOD_VERSION')) {
451 update_user_meta( $user_id, 'uwp_mod', '1' );
452
453 $email = new UsersWP_Mails();
454 $send_result = $email->send( 'mod_pending', $user_id );
455 $user_data = get_user_by('id', $user_id);
456 $send_result = apply_filters('uwp_forms_check_for_send_mail_errors', $send_result, $user_data, $errors);
457 if (is_wp_error($send_result)) {
458 return $send_result;
459 }
460
461 $admin_send_result = $email->send_admin_email('mod_admin', $user_id);
462 if (is_wp_error($admin_send_result)) {
463 return $admin_send_result;
464 }
465
466 return __('Your account is under moderation. We will email you once its approved.', 'userswp');
467 } else {
468
469 $login_page_url = wp_login_url();
470
471 if ($generated_password) {
472 return sprintf(__('Account registered successfully. A password has been generated and mailed to your registered Email ID. Please login %shere%s.', 'userswp'), '<a href="'.$login_page_url.'">', '</a>');
473 } else {
474 return sprintf(__('Account registered successfully. Please login %shere%s', 'userswp'), '<a href="'.$login_page_url.'">', '</a>');
475 }
476 }
477 }
478
479
480 }
481
482 /**
483 * Processes login form submission.
484 *
485 * @since 1.0.0
486 * @package userswp
487 *
488 * @param array $data Submitted $_POST data
489 *
490 * @return bool|WP_Error|string
491 */
492 public function process_login($data) {
493
494 $errors = new WP_Error();
495
496 if( ! isset( $data['uwp_login_nonce'] ) || ! wp_verify_nonce( $data['uwp_login_nonce'], 'uwp-login-nonce' ) ) {
497 return false;
498 }
499
500 do_action('uwp_before_validate', 'login');
501
502 $result = uwp_validate_fields($data, 'login');
503
504 $result = apply_filters('uwp_validate_result', $result, 'login', $data);
505
506 if (is_wp_error($result)) {
507 return $result;
508 }
509
510 do_action('uwp_after_validate', 'login');
511
512 if (isset($data['remember_me']) && $data['remember_me'] == 'forever') {
513 $remember_me = true;
514 } else {
515 $remember_me = false;
516 }
517
518 remove_action( 'authenticate', 'gglcptch_login_check', 21, 1 );
519
520 $res = wp_signon(
521 array(
522 'user_login' => $result['uwp_login_username'],
523 'user_password' => $result['password'],
524 'remember' => $remember_me
525 )
526 );
527
528 add_action( 'authenticate', 'gglcptch_login_check', 21, 1 );
529
530 if (is_wp_error($res)) {
531 $errors->add('invalid_userorpass', __('<strong>Error</strong>: Invalid username or Password.', 'userswp'));
532 return $errors;
533 } else {
534 $redirect_page_id = uwp_get_option('login_redirect_to', -1);
535 if (isset($_REQUEST['redirect_to']) && !empty($_REQUEST['redirect_to'])) {
536 $redirect_to = esc_url($_REQUEST['redirect_to']);
537 } elseif (isset($data['redirect_to']) && !empty($data['redirect_to'])) {
538 $redirect_to = esc_url($data['redirect_to']);
539 } elseif (isset($redirect_page_id) && (int)$redirect_page_id > 0) {
540 $redirect_to = get_permalink($redirect_page_id);
541 } else {
542 if ( current_user_can('manage_options') ) {
543 $redirect_to = admin_url();
544 } else {
545 $redirect_to = home_url('/');
546 }
547 }
548
549 $redirect_to = apply_filters('uwp_login_redirect', $redirect_to);
550 wp_redirect($redirect_to);
551 exit();
552 }
553 }
554
555 /**
556 * Processes forgot password form submission.
557 *
558 * @since 1.0.0
559 * @package userswp
560 *
561 * @param array $data Submitted $_POST data
562 *
563 * @return bool|WP_Error|string
564 */
565 public function process_forgot($data) {
566
567 $errors = new WP_Error();
568
569 if( ! isset( $data['uwp_forgot_nonce'] ) || ! wp_verify_nonce( $data['uwp_forgot_nonce'], 'uwp-forgot-nonce' ) ) {
570 return false;
571 }
572
573 do_action('uwp_before_validate', 'forgot');
574
575 $result = uwp_validate_fields($data, 'forgot');
576
577 $result = apply_filters('uwp_validate_result', $result, 'forgot', $data);
578
579 if (is_wp_error($result)) {
580 return $result;
581 }
582
583 do_action('uwp_after_validate', 'forgot');
584
585
586 $user_data = get_user_by('email', $data['uwp_forgot_email']);
587
588 // make sure user account is active before account reset
589 $mod_value = get_user_meta( $user_data->ID, 'uwp_mod', true );
590 if ($mod_value == 'email_unconfirmed') {
591 $errors->add('activate_account', __('<strong>Error</strong>: Your account is not activated yet. Please activate your account first.', 'userswp'));
592 }
593
594 $error_code = $errors->get_error_code();
595 if (!empty($error_code)) {
596 return $errors;
597 }
598
599 $email = new UsersWP_Mails();
600 $send_result = $email->send( 'forgot', $user_data->ID );
601
602 $send_result = apply_filters('uwp_forms_check_for_send_mail_errors', $send_result, $user_data, $errors);
603 if (is_wp_error($send_result)) {
604 return $send_result;
605 }
606
607 return true;
608 }
609
610 /**
611 * Processes change password form submission.
612 *
613 * @since 1.0.0
614 * @package userswp
615 *
616 * @param array $data Submitted $_POST data
617 *
618 * @return bool|WP_Error|string
619 */
620 public function process_change($data) {
621
622 $errors = new WP_Error();
623
624 if( ! isset( $data['uwp_change_nonce'] ) || ! wp_verify_nonce( $data['uwp_change_nonce'], 'uwp-change-nonce' ) ) {
625 return false;
626 }
627
628 do_action('uwp_before_validate', 'change');
629
630 $result = uwp_validate_fields($data, 'change');
631
632 $result = apply_filters('uwp_validate_result', $result, 'change', $data);
633
634 if (is_wp_error($result)) {
635 return $result;
636 }
637
638 do_action('uwp_after_validate', 'change');
639
640 $user_data = get_user_by('id', get_current_user_id());
641
642 if (is_wp_error($user_data)) {
643 return $user_data;
644 }
645
646 $email = new UsersWP_Mails();
647 $send_result = $email->send( 'change', $user_data->ID );
648
649 $send_result = apply_filters('uwp_forms_check_for_send_mail_errors', $send_result, $user_data, $errors);
650 if (is_wp_error($send_result)) {
651 return $send_result;
652 }
653
654 wp_set_password( $data['uwp_change_password'], $user_data->ID );
655 wp_set_auth_cookie( $user_data->ID, false);
656
657 return true;
658 }
659
660 /**
661 * Processes reset password form submission.
662 *
663 * @since 1.0.0
664 * @package userswp
665 *
666 * @param array $data Submitted $_POST data
667 *
668 * @return bool|WP_Error|string
669 */
670 public function process_reset($data) {
671
672 $errors = new WP_Error();
673
674 if( ! isset( $data['uwp_reset_nonce'] ) || ! wp_verify_nonce( $data['uwp_reset_nonce'], 'uwp-reset-nonce' ) ) {
675 return false;
676 }
677
678 do_action('uwp_before_validate', 'reset');
679
680 $result = uwp_validate_fields($data, 'reset');
681
682 $result = apply_filters('uwp_validate_result', $result, 'reset', $data);
683
684 if (is_wp_error($result)) {
685 return $result;
686 }
687
688 do_action('uwp_after_validate', 'reset');
689
690 $login = $data['uwp_reset_username'];
691 $key = $data['uwp_reset_key'];
692 $user_data = check_password_reset_key( $key, $login );
693
694 if (is_wp_error($user_data)) {
695 return $user_data;
696 }
697
698 $email = new UsersWP_Mails();
699 $send_result = $email->send( 'reset', $user_data->ID );
700
701 $send_result = apply_filters('uwp_forms_check_for_send_mail_errors', $send_result, $user_data, $errors);
702 if (is_wp_error($send_result)) {
703 return $send_result;
704 }
705
706 wp_set_password( $data['uwp_reset_password'], $user_data->ID );
707
708 return true;
709 }
710
711 /**
712 * Modifies the mail extras based on the notification type.
713 *
714 * @since 1.0.0
715 * @package userswp
716 * @subpackage userswp/includes
717 * @param string $extras Unmodified mail extras.
718 * @param string $type Notification type.
719 * @return string Modified mail extras.
720 */
721 public function init_mail_extras($extras, $type, $user_id) {
722 switch ($type) {
723 case "activate":
724 $extras = $this->generate_activate_message($user_id);
725 break;
726 case "register":
727 $extras = $this->generate_register_message($user_id);
728 break;
729 case "forgot":
730 $extras = $this->generate_forgot_message($user_id);
731 }
732 return $extras;
733 }
734
735 /**
736 * Modifies the admin mail extras based on the notification type.
737 *
738 * @since 1.0.0
739 * @package userswp
740 * @subpackage userswp/includes
741 * @param string $extras Unmodified mail extras.
742 * @param string $type Notification type.
743 * @return string Modified mail extras.
744 */
745 public function init_admin_mail_extras($extras, $type, $user_id) {
746 switch ($type) {
747 case "register_admin":
748 $user_data = get_userdata($user_id);
749 $extras = __('<p><b>' . __('User Information :', 'userswp') . '</b></p>
750 <p>' . __('First Name:', 'userswp') . ' ' . $user_data->first_name . '</p>
751 <p>' . __('Last Name:', 'userswp') . ' ' . $user_data->last_name . '</p>
752 <p>' . __('Username:', 'userswp') . ' ' . $user_data->user_login . '</p>
753 <p>' . __('Email:', 'userswp') . ' ' . $user_data->user_email . '</p>');
754 break;
755 }
756 return $extras;
757 }
758
759 /**
760 * Generates activate email message.
761 *
762 * @since 1.0.0
763 * @package userswp
764 *
765 * @param int $user_id User ID.
766 *
767 * @return bool|string Message.
768 */
769 public function generate_activate_message($user_id) {
770
771 $user_data = get_userdata($user_id);
772 global $wpdb;
773 $key = wp_generate_password( 20, false );
774 do_action( 'uwp_activation_key', $user_data->user_login, $key );
775
776 global $wp_hasher;
777 if ( empty( $wp_hasher ) ) {
778 require_once ABSPATH . 'wp-includes/class-phpass.php';
779 $wp_hasher = new PasswordHash( 8, true );
780 }
781 $hashed = $wp_hasher->HashPassword( $key );
782 $wpdb->update( $wpdb->users, array( 'user_activation_key' => time().":".$hashed ), array( 'user_login' => $user_data->user_login ) );
783 update_user_meta( $user_id, 'uwp_mod', 'email_unconfirmed' );
784 $message = __('To activate your account, visit the following address:', 'userswp') . "\r\n\r\n";
785 $act_url = add_query_arg(
786 array(
787 'uwp_activate' => 'yes',
788 'key' => $key,
789 'login' => $user_data->user_login
790 ),
791 site_url()
792 );
793
794 $message .= "<a href='".$act_url."' target='_blank'>".$act_url."</a>" . "\r\n";
795
796 $activate_message = '<p><b>' . __('Please activate your account :', 'userswp') . '</b></p><p>' . $message . '</p>';
797
798 return apply_filters('uwp_activation_mail_message', $activate_message, $user_id);
799
800 }
801
802 /**
803 * Generates register email message.
804 *
805 * @since 1.0.0
806 * @package userswp
807 *
808 * @param int $user_id User ID.
809 *
810 * @return bool|string Message.
811 */
812 public function generate_register_message($user_id) {
813
814 $user_data = get_userdata($user_id);
815 if(isset($this->generated_password) && !empty($this->generated_password)) {
816 if(!uwp_get_option('change_disable_password_nag')) {
817 update_user_meta($user_id, 'default_password_nag', true); //Set up the Password change nag.
818 }
819 $message_pass = $this->generated_password;
820 $this->generated_password = false;
821 } else {
822 $message_pass = __("Password you entered", 'userswp');
823 }
824 $message = __('<p><b>' . __('Your login Information :', 'userswp') . '</b></p>
825 <p>' . __('Username:', 'userswp') . ' ' . $user_data->user_login . '</p>
826 <p>' . __('Password:', 'userswp') . ' ' . $message_pass . '</p>');
827
828 return apply_filters('uwp_register_mail_message', $message, $user_id, $this->generated_password);
829
830 }
831
832 /**
833 * Generates forgot password email message.
834 *
835 * @since 1.0.0
836 * @package userswp
837 *
838 * @param int $user_id User ID.
839 *
840 * @return bool|string Message.
841 */
842 public function generate_forgot_message($user_id) {
843
844 $user_data = get_userdata($user_id);
845 global $wpdb, $wp_hasher;
846
847 $allow = apply_filters('allow_password_reset', true, $user_data->ID);
848 if ( ! $allow )
849 return false;
850 else if ( is_wp_error($allow) )
851 return false;
852
853 $as_password = apply_filters('uwp_forgot_message_as_password', false);
854
855 if ($as_password) {
856 $new_pass = wp_generate_password(12, false);
857 wp_set_password($new_pass, $user_data->ID);
858 if(!uwp_get_option('change_disable_password_nag')) {
859 update_user_meta($user_data->ID, 'default_password_nag', true); //Set up the Password change nag.
860 }
861 $message = '<p><b>' . __('Your login Information :', 'userswp') . '</b></p>';
862 $message .= '<p>' . sprintf(__('Username: %s', 'userswp'), $user_data->user_login) . "</p>";
863 $message .= '<p>' . sprintf(__('Password: %s', 'userswp'), $new_pass) . "</p>";
864
865 } else {
866 $key = wp_generate_password( 20, false );
867 do_action( 'retrieve_password_key', $user_data->user_login, $key );
868
869 if ( empty( $wp_hasher ) ) {
870 require_once ABSPATH . 'wp-includes/class-phpass.php';
871 $wp_hasher = new PasswordHash( 8, true );
872 }
873 $hashed = $wp_hasher->HashPassword( $key );
874 $wpdb->update( $wpdb->users, array( 'user_activation_key' => time().":".$hashed ), array( 'user_login' => $user_data->user_login ) );
875 $message = '<p>' .__('You have requested to reset your password for the following account:', 'userswp') . "</p>";
876 $message .= home_url( '/' ) . "</p>";
877 $message .= '<p>' .sprintf(__('Username: %s', 'userswp'), $user_data->user_login) . "</p>";
878 $message .= '<p>' .__('If this was by mistake, just ignore this email and nothing will happen.', 'userswp') . "</p>";
879 $message .= '<p>' .__('To reset your password, click the following link and follow the instructions.', 'userswp') . "</p>";
880 $message = apply_filters('uwp_forgot_password_message', $message, $user_data);
881 $reset_page = uwp_get_page_id('reset_page', false);
882 if ($reset_page) {
883 $reset_link = add_query_arg( array(
884 'key' => $key,
885 'login' => rawurlencode($user_data->user_login),
886 ), get_permalink($reset_page) );
887 $message .= "<a href='".$reset_link."' target='_blank'>".$reset_link."</a>" . "\r\n";
888 } else {
889 $message .= site_url("reset?key=$key&login=" . rawurlencode($user_data->user_login), 'login') . "\r\n";
890 }
891 }
892
893
894 return $message;
895
896 }
897
898 /**
899 * Processes account form submission.
900 *
901 * @since 1.0.0
902 * @package userswp
903 *
904 * @param array $data Submitted $_POST data
905 * @param array $files Submitted $_FILES data
906 *
907 * @return bool|WP_Error|string
908 */
909 public function process_account($data = array(), $files = array()) {
910
911 $file_obj = new UsersWP_Files();
912
913 $current_user_id = get_current_user_id();
914 if (!$current_user_id) {
915 return false;
916 }
917
918 $errors = new WP_Error();
919
920 if( ! isset( $data['uwp_account_nonce'] ) || ! wp_verify_nonce( $data['uwp_account_nonce'], 'uwp-account-nonce' ) ) {
921 return false;
922 }
923
924 do_action('uwp_before_validate', 'account');
925
926 $result = uwp_validate_fields($data, 'account');
927
928 $result = apply_filters('uwp_validate_result', $result, 'account', $data);
929
930 if (is_wp_error($result)) {
931 return $result;
932 }
933
934 $uploads_result = $file_obj->uwp_validate_uploads($files, 'account');
935
936 if (is_wp_error($uploads_result)) {
937 return $uploads_result;
938 }
939
940 do_action('uwp_after_validate', 'account');
941
942 //unset if value is empty for files
943 foreach ($uploads_result as $upload_file_key => $upload_file_value) {
944 if (empty($upload_file_value)) {
945 unset($uploads_result[$upload_file_key]);
946 }
947 }
948
949 $result = array_merge( $result, $uploads_result );
950
951
952 $args = array(
953 'ID' => $current_user_id
954 );
955
956 if (isset($result['uwp_account_email'])) {
957 $args['user_email'] = $result['uwp_account_email'];
958 }
959
960 if (isset($result['uwp_account_first_name']) && isset($result['uwp_account_last_name'])) {
961 $args['display_name'] = $result['uwp_account_first_name'] . ' ' . $result['uwp_account_last_name'];
962 }
963
964 if (isset($result['uwp_account_first_name'])) {
965 $args['first_name'] = $result['uwp_account_first_name'];
966 }
967
968 if (isset($result['uwp_account_last_name'])) {
969 $args['last_name'] = $result['uwp_account_last_name'];
970 }
971
972 if (isset($result['uwp_account_bio'])) {
973 $args['description'] = $result['uwp_account_bio'];
974 }
975
976 if (isset($result['uwp_account_display_name']) && !empty($result['uwp_account_display_name'])) {
977 $args['display_name'] = $result['uwp_account_display_name'];
978 }
979
980 if (isset($result['password'])) {
981 $args['user_pass'] = $result['password'];
982 }
983
984 $user_id = wp_update_user( $args );
985
986 if (!$user_id) {
987 $errors->add('registerfail', sprintf(__('<strong>Error</strong>: Something went wrong.', 'userswp'), get_option('admin_email')));
988 return $errors;
989 }
990
991 $res = $this->uwp_save_user_extra_fields($user_id, $result, 'account');
992
993 if (!$res) {
994 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong. Please contact site admin.', 'userswp'));
995 }
996
997 $error_code = $errors->get_error_code();
998 if (!empty($error_code)) {
999 return $errors;
1000 }
1001
1002
1003 if (uwp_get_option('enable_account_update_notification') == '1') {
1004 $user_data = get_user_by('id', $user_id);
1005
1006 $email = new UsersWP_Mails();
1007 $send_result = $email->send( 'account', $user_data->ID );
1008
1009 $send_result = apply_filters('uwp_forms_check_for_send_mail_errors', $send_result, $user_data, $errors);
1010 if (is_wp_error($send_result)) {
1011 return $send_result;
1012 }
1013
1014 }
1015
1016 return true;
1017
1018 }
1019
1020 /**
1021 * Processes avatar and banner uploads form submission.
1022 *
1023 * @since 1.0.0
1024 * @package userswp
1025 *
1026 * @param array $data Submitted $_POST data
1027 * @param array $files Submitted $_FILES data
1028 *
1029 * @return bool|WP_Error|string File url to crop.
1030 */
1031 public function process_upload_submit($data = array(), $files = array(), $type = 'avatar') {
1032
1033 $file_obj = new UsersWP_Files();
1034
1035 $current_user_id = get_current_user_id();
1036 if (!$current_user_id) {
1037 return false;
1038 }
1039
1040 if( ! isset( $data['uwp_upload_nonce'] ) || ! wp_verify_nonce( $data['uwp_upload_nonce'], 'uwp-upload-nonce' ) ) {
1041 return false;
1042 }
1043
1044 do_action('uwp_before_validate', $type);
1045
1046 $result = $file_obj->uwp_validate_uploads($files, $type);
1047
1048 $result = apply_filters('uwp_validate_result', $result, $type, $data);
1049
1050 if (is_wp_error($result)) {
1051 return $result;
1052 }
1053
1054 $profile_url = uwp_build_profile_tab_url($current_user_id);
1055
1056 $url = add_query_arg(
1057 array(
1058 'uwp_crop' => $result['uwp_'.$type.'_file'],
1059 'type' => $type
1060 ),
1061 $profile_url);
1062
1063 return $url;
1064
1065 }
1066
1067 /**
1068 * Processes avatar and banner uploads image crop.
1069 *
1070 * @since 1.0.0
1071 * @since 1.0.12 New param $unlink_prev_img introduced.
1072 * @package userswp
1073 *
1074 * @param array $data Submitted $_POST data
1075 * @param string $type Image type. Default 'avatar'.
1076 * @param bool $unlink_prev_img True to remove previous image. Default false;
1077 *
1078 * @return bool|WP_Error|string Profile url.
1079 */
1080 public function process_image_crop($data = array(), $type = 'avatar', $unlink_prev_img = false) {
1081
1082 if (!is_user_logged_in()) {
1083 return false;
1084 }
1085
1086 // If is current user's profile (profile.php)
1087 if ( is_admin() && defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE ) {
1088 $user_id = get_current_user_id();
1089 // If is another user's profile page
1090 } elseif (is_admin() && ! empty($_GET['user_id']) && is_numeric($_GET['user_id']) ) {
1091 $user_id = $_GET['user_id'];
1092 // Otherwise something is wrong.
1093 } else {
1094 $user_id = get_current_user_id();
1095 }
1096 $image_url = $data['uwp_crop'];
1097
1098 $errors = new WP_Error();
1099 if (empty($image_url)) {
1100 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong. Please contact site admin.', 'userswp'));
1101 }
1102
1103 $error_code = $errors->get_error_code();
1104 if (!empty($error_code)) {
1105 return $errors;
1106 }
1107
1108 if ($image_url) {
1109 if ($type == 'avatar') {
1110 $full_width = apply_filters('uwp_avatar_image_width', 150);
1111 } else {
1112 $full_width = apply_filters('uwp_banner_image_width', uwp_get_option('profile_banner_width', 1000));
1113 }
1114
1115 $image_url = esc_url($image_url);
1116 add_filter( 'upload_dir', 'uwp_handle_multisite_profile_image', 10, 1 );
1117 $uploads = wp_upload_dir();
1118 remove_filter( 'upload_dir', 'uwp_handle_multisite_profile_image' );
1119 $upload_url = $uploads['baseurl'];
1120 $upload_path = $uploads['basedir'];
1121 $image_url = str_replace($upload_url, $upload_path, $image_url);
1122 $ext = pathinfo($image_url, PATHINFO_EXTENSION); // to get extension
1123 $name =pathinfo($image_url, PATHINFO_FILENAME); //file name without extension
1124 $thumb_image_name = $name.'_uwp_'.$type.'_thumb'.'.'.$ext;
1125 $thumb_image_location = str_replace($name.'.'.$ext, $thumb_image_name, $image_url);
1126 //Get the new coordinates to crop the image.
1127 $x = $data["x"];
1128 $y = $data["y"];
1129 $w = $data["w"];
1130 $h = $data["h"];
1131 //Scale the image based on cropped width setting
1132 $scale = $full_width/$w;
1133 //$scale = 1; // no scaling
1134 $cropped = uwp_resizeThumbnailImage($thumb_image_location, $image_url,$x, $y, $w, $h,$scale);
1135 $cropped = str_replace($upload_path, $upload_url, $cropped);
1136
1137 // Remove previous avatar/banner
1138 $unlink_img = '';
1139 if ($unlink_prev_img) {
1140 if ($type == 'avatar') {
1141 $previous_img = uwp_get_usermeta($user_id, 'uwp_account_avatar_thumb');
1142 } else if ($type == 'banner') {
1143 $previous_img = uwp_get_usermeta($user_id, 'uwp_account_banner_thumb');
1144 } else {
1145 $previous_img = '';
1146 }
1147
1148 if ($previous_img) {
1149 $unlink_img = untrailingslashit($upload_path) . '/' . ltrim($previous_img, '/');
1150 }
1151 }
1152
1153 // remove the uploads path for easy migrations
1154 $cropped = str_replace($upload_url, '', $cropped);
1155 if ($type == 'avatar') {
1156 uwp_update_usermeta($user_id, 'uwp_account_avatar_thumb', $cropped);
1157 } else {
1158 uwp_update_usermeta($user_id, 'uwp_account_banner_thumb', $cropped);
1159 }
1160
1161 if ($unlink_img && $unlink_img != $thumb_image_location && is_file($unlink_img) && file_exists($unlink_img)) {
1162 @unlink($unlink_img);
1163 $unlink_ori_img = str_replace('_uwp_'.$type.'_thumb'.'.', '.', $unlink_img);
1164 if (is_file($unlink_ori_img) && file_exists($unlink_ori_img)) {
1165 @unlink($unlink_ori_img);
1166 }
1167 }
1168 }
1169
1170 if (is_admin()) {
1171 if ($user_id == get_current_user_id()) {
1172 $profile_url = admin_url( 'profile.php' );
1173 } else {
1174 $profile_url = admin_url( 'user-edit.php?user_id='.$user_id );
1175 }
1176 } else {
1177 $profile_url = uwp_build_profile_tab_url($user_id);
1178 }
1179 return $profile_url;
1180
1181 }
1182
1183 /**
1184 * Saves UsersWP related user custom fields.
1185 *
1186 * @since 1.0.0
1187 * @package userswp
1188 *
1189 * @param int $user_id User ID.
1190 * @param array $data Result array.
1191 * @param string $type Form type.
1192 *
1193 * @return bool True when success. False when failure.
1194 */
1195 public function uwp_save_user_extra_fields($user_id, $data, $type) {
1196
1197 if (empty($user_id) || empty($data) || empty($type)) {
1198 return false;
1199 }
1200
1201 // custom user fields not applicable for login and forgot
1202 if ($type == 'login' || $type == 'forgot') {
1203 return true;
1204 }
1205
1206
1207 if ($type == 'account' || $type == 'register') {
1208 if (isset($data['password'])) {
1209 unset($data['password']);
1210 }
1211 }
1212
1213 if ($type == 'register') {
1214 if (isset($data['uwp_account_username'])) {
1215 unset($data['uwp_account_username']);
1216 }
1217 if (isset($data['uwp_account_email'])) {
1218 unset($data['uwp_account_email']);
1219 }
1220 if (isset($data['uwp_account_display_name'])) {
1221 unset($data['uwp_account_display_name']);
1222 }
1223 if (isset($data['uwp_account_first_name'])) {
1224 unset($data['uwp_account_first_name']);
1225 }
1226 if (isset($data['uwp_account_last_name'])) {
1227 unset($data['uwp_account_last_name']);
1228 }
1229 if (isset($data['uwp_account_bio'])) {
1230 unset($data['uwp_account_bio']);
1231 }
1232 }
1233
1234 if (empty($data)) {
1235 // no extra fields. so just return
1236 return true;
1237 } else {
1238 foreach($data as $key => $value) {
1239 uwp_update_usermeta($user_id, $key, $value);
1240 }
1241 return true;
1242 }
1243 }
1244
1245 /**
1246 * Logs the error message.
1247 *
1248 * @since 1.0.0
1249 * @package userswp
1250 *
1251 * @param array|object|string $log Error message.
1252 *
1253 * @return void
1254 */
1255 public static function uwp_error_log($log){
1256
1257 $should_log = apply_filters( 'uwp_log_errors', WP_DEBUG);
1258 if ( true === $should_log ) {
1259 if ( is_array( $log ) || is_object( $log ) ) {
1260 error_log( print_r( $log, true ) );
1261 } else {
1262 error_log( $log );
1263 }
1264 }
1265 }
1266
1267 /**
1268 *
1269 *
1270 * @since 1.0.0
1271 * @since 1.0.12 Unlink file.
1272 * @package userswp
1273 * @return void
1274 */
1275 public function uwp_upload_file_remove() {
1276
1277 $htmlvar = strip_tags(esc_sql($_POST['htmlvar']));
1278 $user_id = (int) strip_tags(esc_sql($_POST['uid']));
1279 $permission = false;
1280 if ($user_id == get_current_user_id()) {
1281 $permission = true;
1282 } else {
1283 if (current_user_can('manage_options')) {
1284 $permission = true;
1285 }
1286 }
1287 if ($permission) {
1288 // Remove file
1289 if ($htmlvar == "uwp_account_banner_thumb") {
1290 $file = uwp_get_usermeta($user_id, 'uwp_account_banner_thumb');
1291 $type = 'banner';
1292 } elseif ($htmlvar == "uwp_account_avatar_thumb") {
1293 $file = uwp_get_usermeta($user_id, 'uwp_account_avatar_thumb');
1294 $type = 'avatar';
1295 } else {
1296 $file = '';
1297 $type = '';
1298 }
1299
1300 uwp_update_usermeta($user_id, $htmlvar, '');
1301
1302 if ($file) {
1303 $uploads = wp_upload_dir();
1304 $upload_path = $uploads['basedir'];
1305 $unlink_file = untrailingslashit($upload_path) . '/' . ltrim($file, '/');
1306
1307 if (is_file($unlink_file) && file_exists($unlink_file)) {
1308 @unlink($unlink_file);
1309 $unlink_ori_file = str_replace('_uwp_'.$type.'_thumb'.'.', '.', $unlink_file);
1310 if (is_file($unlink_ori_file) && file_exists($unlink_ori_file)) {
1311 @unlink($unlink_ori_file);
1312 }
1313 }
1314 }
1315 }
1316 die();
1317 }
1318
1319
1320 /**
1321 * Form field template for datepicker field type.
1322 *
1323 * @since 1.0.0
1324 * @package userswp
1325 *
1326 * @param string $html Form field html
1327 * @param object $field Field info.
1328 * @param string $value Form field default value.
1329 * @param string $form_type Form type
1330 *
1331 * @return string Modified form field html.
1332 */
1333 public function uwp_form_input_datepicker($html, $field, $value, $form_type){
1334
1335 // Check if there is a field specific filter.
1336 if(has_filter("uwp_form_input_html_datepicker_{$field->htmlvar_name}")){
1337 $html = apply_filters("uwp_form_input_html_datepicker_{$field->htmlvar_name}", $html, $field, $value, $form_type);
1338 }
1339
1340 // If no html then we run the standard output.
1341 if(empty($html)) {
1342
1343 ob_start(); // Start buffering;
1344
1345 $extra_fields = unserialize($field->extra_fields);
1346
1347 if ($extra_fields['date_format'] == '')
1348 $extra_fields['date_format'] = 'yy-mm-dd';
1349
1350 $date_format = $extra_fields['date_format'];
1351 $jquery_date_format = $date_format;
1352
1353 if (!empty($value) && !is_string($value)) {
1354 $value = date('Y-m-d', $value);
1355 }
1356
1357
1358 // check if we need to change the format or not
1359 $date_format_len = strlen(str_replace(' ', '', $date_format));
1360 if($date_format_len>5){// if greater then 5 then it's the old style format.
1361
1362 $search = array('dd','d','DD','mm','m','MM','yy'); //jQuery UI datepicker format
1363 $replace = array('d','j','l','m','n','F','Y');//PHP date format
1364
1365 $date_format = str_replace($search, $replace, $date_format);
1366 }else{
1367 $jquery_date_format = uwp_date_format_php_to_jqueryui( $jquery_date_format );
1368 }
1369 if($value=='0000-00-00'){$value='';}//if date not set, then mark it empty
1370 $value = uwp_date($value, 'Y-m-d', $date_format);
1371 ?>
1372 <script type="text/javascript">
1373
1374 jQuery(function () {
1375
1376 jQuery("#<?php echo $field->htmlvar_name;?>").datepicker({changeMonth: true, changeYear: true
1377 <?php if($field->htmlvar_name == 'uwp_account_dob'){ echo ", yearRange: '1900:+0'"; } else { echo ", yearRange: '1900:2050'"; }?>
1378 <?php echo apply_filters("uwp_datepicker_extra_{$field->htmlvar_name}",'');?>});
1379
1380 jQuery("#<?php echo $field->htmlvar_name;?>").datepicker("option", "dateFormat", '<?php echo $jquery_date_format;?>');
1381
1382 <?php if(!empty($value)){?>
1383 var parsedDate = jQuery.datepicker.parseDate('yy-mm-dd', '<?php echo $value;?>');
1384 jQuery("#<?php echo $field->htmlvar_name;?>").datepicker("setDate", parsedDate);
1385 <?php } ?>
1386
1387 });
1388
1389 </script>
1390 <div id="<?php echo $field->htmlvar_name;?>_row"
1391 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_row clearfix uwp_clear uwp-fieldset-details">
1392
1393 <?php
1394 $site_title = uwp_get_form_label($field);
1395 if (!is_admin()) { ?>
1396 <label>
1397 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1398 <?php if ($field->is_required) echo '<span>*</span>';?>
1399 </label>
1400 <?php } ?>
1401
1402 <input name="<?php echo $field->htmlvar_name;?>"
1403 id="<?php echo $field->htmlvar_name;?>"
1404 placeholder="<?php echo $site_title; ?>"
1405 title="<?php echo $site_title; ?>"
1406 type="text"
1407 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
1408 value="<?php echo esc_attr($value);?>" class="uwp_textfield"/>
1409
1410 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1411 <?php if ($field->is_required) { ?>
1412 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1413 <?php } ?>
1414 </div>
1415
1416 <?php
1417 $html = ob_get_clean();
1418 }
1419
1420 return $html;
1421 }
1422
1423 /**
1424 * Form field template for time field type.
1425 *
1426 * @since 1.0.0
1427 * @package userswp
1428 *
1429 * @param string $html Form field html
1430 * @param object $field Field info.
1431 * @param string $value Form field default value.
1432 * @param string $form_type Form type
1433 *
1434 * @return string Modified form field html.
1435 */
1436 public function uwp_form_input_time($html, $field, $value, $form_type){
1437
1438 if(has_filter("uwp_form_input_html_time_{$field->htmlvar_name}")){
1439
1440 $html = apply_filters("uwp_form_input_html_time_{$field->htmlvar_name}",$html, $field, $value, $form_type);
1441 }
1442
1443 // If no html then we run the standard output.
1444 if(empty($html)) {
1445
1446 ob_start(); // Start buffering;
1447
1448 if ($value != '')
1449 $value = date('H:i', strtotime($value));
1450 ?>
1451 <script type="text/javascript">
1452 jQuery(document).ready(function () {
1453
1454 jQuery('#<?php echo $field->htmlvar_name;?>').timepicker({
1455 showPeriod: true,
1456 showLeadingZero: true
1457 });
1458 });
1459 </script>
1460 <div id="<?php echo $field->htmlvar_name;?>_row"
1461 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_row clearfix uwp_clear uwp-fieldset-details">
1462
1463 <?php
1464 $site_title = uwp_get_form_label($field);
1465 if (!is_admin()) { ?>
1466 <label>
1467 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1468 <?php if ($field->is_required) echo '<span>*</span>';?>
1469 </label>
1470 <?php } ?>
1471
1472 <input readonly="readonly" name="<?php echo $field->htmlvar_name;?>"
1473 id="<?php echo $field->htmlvar_name;?>"
1474 value="<?php echo esc_attr($value);?>"
1475 placeholder="<?php echo $site_title; ?>"
1476 type="text"
1477 class="uwp_textfield"/>
1478
1479 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1480 <?php if ($field->is_required) { ?>
1481 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1482 <?php } ?>
1483 </div>
1484 <?php
1485 $html = ob_get_clean();
1486 }
1487
1488 return $html;
1489 }
1490
1491 /**
1492 * Form field template for select field type.
1493 *
1494 * @since 1.0.0
1495 * @package userswp
1496 *
1497 * @param string $html Form field html
1498 * @param object $field Field info.
1499 * @param string $value Form field default value.
1500 * @param string $form_type Form type
1501 *
1502 * @return string Modified form field html.
1503 */
1504 public function uwp_form_input_select($html, $field, $value, $form_type){
1505
1506 // Check if there is a field specific filter.
1507 if(has_filter("uwp_form_input_html_select_{$field->htmlvar_name}")){
1508 $html = apply_filters("uwp_form_input_html_select_{$field->htmlvar_name}", $html, $field, $value, $form_type);
1509 }
1510
1511 // Check if there is a field type specific filter.
1512 if(has_filter("uwp_form_input_html_select_{$field->field_type_key}")){
1513 $html = apply_filters("uwp_form_input_html_select_{$field->field_type_key}", $html, $field, $value, $form_type);
1514 }
1515
1516 // If no html then we run the standard output.
1517 if(empty($html)) {
1518
1519 ob_start(); // Start buffering;
1520
1521 ?>
1522 <div id="<?php echo $field->htmlvar_name;?>_row"
1523 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_row uwp_clear">
1524
1525 <?php
1526 $site_title = uwp_get_form_label($field);
1527 if (!is_admin()) { ?>
1528 <label>
1529 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1530 <?php if ($field->is_required) echo '<span>*</span>';?>
1531 </label>
1532 <?php } ?>
1533
1534 <?php
1535 $option_values_arr = uwp_string_values_to_options($field->option_values, true);
1536 $select_options = '';
1537 if (!empty($option_values_arr)) {
1538 foreach ($option_values_arr as $option_row) {
1539 if (isset($option_row['optgroup']) && ($option_row['optgroup'] == 'start' || $option_row['optgroup'] == 'end')) {
1540 $option_label = isset($option_row['label']) ? $option_row['label'] : '';
1541
1542 $select_options .= $option_row['optgroup'] == 'start' ? '<optgroup label="' . esc_attr($option_label) . '">' : '</optgroup>';
1543 } else {
1544 $option_label = isset($option_row['label']) ? $option_row['label'] : '';
1545 $option_value = isset($option_row['value']) ? $option_row['value'] : '';
1546 $selected = $option_value == $value ? 'selected="selected"' : '';
1547
1548 $select_options .= '<option value="' . esc_attr($option_value) . '" ' . $selected . '>' . $option_label . '</option>';
1549 }
1550 }
1551 }
1552 ?>
1553 <select name="<?php echo $field->htmlvar_name;?>" id="<?php echo $field->htmlvar_name;?>"
1554 class="uwp_textfield"
1555 title="<?php echo $site_title; ?>"
1556 data-placeholder="<?php echo __('Choose', 'userswp') . ' ' . $site_title . '&hellip;';?>"
1557 ><?php echo $select_options;?>
1558 </select>
1559 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1560 <?php if ($field->is_required) { ?>
1561 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1562 <?php } ?>
1563 </div>
1564
1565 <?php
1566 $html = ob_get_clean();
1567 }
1568
1569 return $html;
1570 }
1571
1572 /**
1573 * Form field template for multiselect field type.
1574 *
1575 * @since 1.0.0
1576 * @package userswp
1577 *
1578 * @param string $html Form field html
1579 * @param object $field Field info.
1580 * @param string $value Form field default value.
1581 * @param string $form_type Form type
1582 *
1583 * @return string Modified form field html.
1584 */
1585 public function uwp_form_input_multiselect($html, $field, $value, $form_type){
1586
1587 // Check if there is a field specific filter.
1588 if(has_filter("uwp_form_input_html_multiselect_{$field->htmlvar_name}")){
1589 $html = apply_filters("uwp_form_input_html_multiselect_{$field->htmlvar_name}", $html, $field, $value, $form_type);
1590 }
1591
1592
1593 if(empty($html)) {
1594
1595 ob_start(); // Start buffering;
1596
1597 $multi_display = 'select';
1598 if (!empty($field->extra_fields)) {
1599 $multi_display = unserialize($field->extra_fields);
1600 }
1601 ?>
1602 <div id="<?php echo $field->htmlvar_name;?>_row"
1603 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_row uwp_clear">
1604
1605 <?php
1606 $site_title = uwp_get_form_label($field);
1607 if (!is_admin()) { ?>
1608 <label>
1609 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1610 <?php if ($field->is_required) echo '<span>*</span>';?>
1611 </label>
1612 <?php } ?>
1613
1614 <input type="hidden" name="<?php echo $field->htmlvar_name;?>" value=""/>
1615 <?php if ($multi_display == 'select') { ?>
1616 <div class="uwp_multiselect_list">
1617 <select name="<?php echo $field->htmlvar_name;?>[]"
1618 id="<?php echo $field->htmlvar_name;?>"
1619 title="<?php echo $site_title; ?>"
1620 multiple="multiple" class="uwp_chosen_select"
1621 data-placeholder="<?php echo $site_title; ?>"
1622 >
1623 <?php
1624 } else {
1625 ?>
1626 <ul class="uwp_multi_choice">
1627 <?php
1628 }
1629
1630 $option_values_arr = uwp_string_values_to_options($field->option_values, true);
1631 $select_options = '';
1632 if (!empty($option_values_arr)) {
1633 foreach ($option_values_arr as $option_row) {
1634 if (isset($option_row['optgroup']) && ($option_row['optgroup'] == 'start' || $option_row['optgroup'] == 'end')) {
1635 $option_label = isset($option_row['label']) ? $option_row['label'] : '';
1636
1637 if ($multi_display == 'select') {
1638 $select_options .= $option_row['optgroup'] == 'start' ? '<optgroup label="' . esc_attr($option_label) . '">' : '</optgroup>';
1639 } else {
1640 $select_options .= $option_row['optgroup'] == 'start' ? '<li>' . $option_label . '</li>' : '';
1641 }
1642 } else {
1643 $option_label = isset($option_row['label']) ? $option_row['label'] : '';
1644 $option_value = isset($option_row['value']) ? $option_row['value'] : '';
1645 $selected = $option_value == $value ? 'selected="selected"' : '';
1646 $checked = '';
1647
1648 if ((!is_array($value) && trim($value) != '') || (is_array($value) && !empty($value))) {
1649 if (!is_array($value)) {
1650 $value_array = explode(',', $value);
1651 } else {
1652 $value_array = $value;
1653 }
1654
1655 if (is_array($value_array)) {
1656 if (in_array($option_value, $value_array)) {
1657 $selected = 'selected="selected"';
1658 $checked = 'checked="checked"';
1659 }
1660 }
1661 }
1662
1663 if ($multi_display == 'select') {
1664 $select_options .= '<option value="' . esc_attr($option_value) . '" ' . $selected . '>' . $option_label . '</option>';
1665 } else {
1666 $select_options .= '<li><input name="' . $field->name . '[]" ' . $checked . ' value="' . esc_attr($option_value) . '" class="uwp-' . $multi_display . '" type="' . $multi_display . '" />&nbsp;' . $option_label . ' </li>';
1667 }
1668 }
1669 }
1670 }
1671 echo $select_options;
1672
1673 if ($multi_display == 'select') { ?></select></div>
1674 <?php } else { ?>
1675 </ul>
1676 <?php } ?>
1677 <?php if ($field->is_required) { ?>
1678 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1679 <?php } ?>
1680 </div>
1681 <?php
1682 $html = ob_get_clean();
1683 }
1684
1685 return $html;
1686 }
1687
1688 /**
1689 * Form field template for file field type.
1690 *
1691 * @since 1.0.0
1692 * @package userswp
1693 *
1694 * @param string $html Form field html
1695 * @param object $field Field info.
1696 * @param string $value Form field default value.
1697 * @param string $form_type Form type
1698 *
1699 * @return string Modified form field html.
1700 */
1701 public function uwp_form_input_file($html, $field, $value, $form_type){
1702
1703 $file_obj = new UsersWP_Files();
1704
1705 // Check if there is a field specific filter.
1706 if(has_filter("uwp_form_input_html_file_{$field->htmlvar_name}")){
1707 $html = apply_filters("uwp_form_input_html_file_{$field->htmlvar_name}", $html, $field, $value, $form_type);
1708 }
1709
1710 // If no html then we run the standard output.
1711 if(empty($html)) {
1712
1713 ob_start(); // Start buffering;
1714
1715 ?>
1716 <div id="<?php echo $field->htmlvar_name;?>_row"
1717 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
1718
1719 <?php
1720 $site_title = uwp_get_form_label($field);
1721 if (!is_admin()) { ?>
1722 <label>
1723 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1724 <?php if ($field->is_required) echo '<span>*</span>';?>
1725 </label>
1726 <?php } ?>
1727
1728 <?php echo $file_obj->uwp_file_upload_preview($field, $value); ?>
1729 <input name="<?php echo $field->htmlvar_name; ?>"
1730 class="<?php echo $field->css_class; ?>"
1731 placeholder="<?php echo $site_title; ?>"
1732 title="<?php echo $site_title; ?>"
1733 <?php
1734 if ($field->is_required == 1 ) { echo 'data-is-required="1"'; }
1735 if ($field->is_required == 1 && !$value) { echo 'required="required"'; }
1736 ?>
1737 type="<?php echo $field->field_type; ?>">
1738 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1739 <?php if ($field->is_required) { ?>
1740 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1741 <?php } ?>
1742 </div>
1743
1744 <?php
1745 $html = ob_get_clean();
1746 }
1747
1748 return $html;
1749 }
1750
1751 /**
1752 * Form field template for checkbox field type.
1753 *
1754 * @since 1.0.0
1755 * @package userswp
1756 *
1757 * @param string $html Form field html
1758 * @param object $field Field info.
1759 * @param string $value Form field default value.
1760 * @param string $form_type Form type
1761 *
1762 * @return string Modified form field html.
1763 */
1764 public function uwp_form_input_checkbox($html, $field, $value, $form_type){
1765
1766 // Check if there is a field specific filter.
1767 if(has_filter("uwp_form_input_html_checkbox_{$field->htmlvar_name}")){
1768 $html = apply_filters("uwp_form_input_html_checkbox_{$field->htmlvar_name}", $html, $field, $value, $form_type);
1769 }
1770
1771 // If no html then we run the standard output.
1772 if(empty($html)) {
1773
1774 ob_start(); // Start buffering;
1775 $site_title = uwp_get_form_label($field);
1776 ?>
1777 <div id="<?php echo $field->htmlvar_name;?>_row"
1778 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
1779 <input type="hidden" name="<?php echo $field->htmlvar_name; ?>" value="0" />
1780 <input name="<?php echo $field->htmlvar_name; ?>"
1781 class="<?php echo $field->css_class; ?>"
1782 placeholder="<?php echo $site_title; ?>"
1783 title="<?php echo $site_title; ?>"
1784 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
1785 <?php if ($value == '1') { echo 'checked="checked"'; } ?>
1786 type="<?php echo $field->field_type; ?>"
1787 value="1">
1788 <?php
1789 echo (trim($site_title)) ? $site_title : '&nbsp;';
1790 ?>
1791 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1792 <?php if ($field->is_required) { ?>
1793 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1794 <?php } ?>
1795 </div>
1796
1797 <?php
1798 $html = ob_get_clean();
1799 }
1800
1801 return $html;
1802 }
1803
1804 /**
1805 * Form field template for radio field type.
1806 *
1807 * @since 1.0.0
1808 * @package userswp
1809 *
1810 * @param string $html Form field html
1811 * @param object $field Field info.
1812 * @param string $value Form field default value.
1813 * @param string $form_type Form type
1814 *
1815 * @return string Modified form field html.
1816 */
1817 public function uwp_form_input_radio($html, $field, $value, $form_type){
1818
1819 // Check if there is a field specific filter.
1820 if(has_filter("uwp_form_input_html_radio_{$field->htmlvar_name}")){
1821 $html = apply_filters("uwp_form_input_html_radio_{$field->htmlvar_name}", $html, $field, $value, $form_type);
1822 }
1823
1824 // If no html then we run the standard output.
1825 if(empty($html)) {
1826
1827 ob_start(); // Start buffering;
1828
1829 ?>
1830 <div id="<?php echo $field->htmlvar_name;?>_row"
1831 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
1832
1833 <?php
1834 $site_title = uwp_get_form_label($field);
1835 if (!is_admin()) { ?>
1836 <label>
1837 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1838 <?php if ($field->is_required) echo '<span>*</span>';?>
1839 </label>
1840 <?php } ?>
1841
1842
1843 <?php if ($field->option_values) {
1844 $option_values = uwp_string_values_to_options($field->option_values, true);
1845
1846 if (!empty($option_values)) {
1847 $count = 0;
1848 foreach ($option_values as $option_value) {
1849 if (empty($option_value['optgroup'])) {
1850 $count++;
1851 if ($count == 1) {
1852 $class = "uwp-radio-first";
1853 } else {
1854 $class = "";
1855 }
1856 ?>
1857 <span class="uwp-radios <?php echo $class; ?>">
1858 <input name="<?php echo $field->htmlvar_name; ?>"
1859 id="<?php echo $field->htmlvar_name; ?>"
1860 title="<?php echo esc_attr($option_value['label']); ?>"
1861 <?php checked($value, $option_value['value']);?>
1862 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
1863 value="<?php echo esc_attr($option_value['value']); ?>"
1864 class="uwp-radio" type="radio" />
1865 <?php echo $option_value['label']; ?>
1866 </span>
1867 <?php
1868 }
1869 }
1870 }
1871 }
1872 ?>
1873 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1874 <?php if ($field->is_required) { ?>
1875 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1876 <?php } ?>
1877 </div>
1878 <?php
1879 $html = ob_get_clean();
1880 }
1881
1882 return $html;
1883 }
1884
1885 /**
1886 * Form field template for text field type.
1887 *
1888 * @since 1.0.0
1889 * @package userswp
1890 *
1891 * @param string $html Form field html
1892 * @param object $field Field info.
1893 * @param string $value Form field default value.
1894 * @param string $form_type Form type
1895 *
1896 * @return string Modified form field html.
1897 */
1898 public function uwp_form_input_text($html, $field, $value, $form_type){
1899
1900 // Check if there is a custom field specific filter.
1901 if(has_filter("uwp_form_input_text_{$field->htmlvar_name}")){
1902 $html = apply_filters("uwp_form_input_text_{$field->htmlvar_name}",$html, $field, $value, $form_type);
1903 }
1904
1905 // If no html then we run the standard output.
1906 if(empty($html)) {
1907
1908 ob_start(); // Start buffering;
1909
1910 $type = 'text';
1911 $step = false;
1912 //number and float validation $validation_pattern
1913 if(isset($field->data_type) && $field->data_type == 'INT'){
1914 $type = 'number';
1915 } elseif(isset($field->data_type) && $field->data_type == 'FLOAT'){
1916 $dp = $field->decimal_point;
1917 switch ($dp) {
1918 case "1":
1919 $step = "0.1";
1920 break;
1921 case "2":
1922 $step = "0.01";
1923 break;
1924 case "3":
1925 $step = "0.001";
1926 break;
1927 case "4":
1928 $step = "0.0001";
1929 break;
1930 case "5":
1931 $step = "0.00001";
1932 break;
1933 case "6":
1934 $step = "0.000001";
1935 break;
1936 case "7":
1937 $step = "0.0000001";
1938 break;
1939 case "8":
1940 $step = "0.00000001";
1941 break;
1942 case "9":
1943 $step = "0.000000001";
1944 break;
1945 case "10":
1946 $step = "0.0000000001";
1947 break;
1948 default:
1949 $step = "0.01";
1950 break;
1951 }
1952 $type = 'number';
1953 }
1954
1955 ?>
1956
1957 <div id="<?php echo $field->htmlvar_name;?>_row"
1958 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
1959
1960 <?php
1961 $site_title = uwp_get_form_label($field);
1962 $manual_label = apply_filters('uwp_login_username_label_manual', true);
1963 if ($manual_label
1964 && isset($field->form_type)
1965 && $field->form_type == 'login'
1966 && $field->htmlvar_name == 'uwp_login_username') {
1967 $site_title = __("Username or Email", 'userswp');
1968 }
1969 if (!is_admin()) { ?>
1970 <label>
1971 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
1972 <?php if ($field->is_required) echo '<span>*</span>';?>
1973 </label>
1974 <?php } ?>
1975
1976 <input name="<?php echo $field->htmlvar_name;?>"
1977 class="<?php echo $field->css_class; ?> uwp_textfield"
1978 id="<?php echo $field->htmlvar_name;?>"
1979 placeholder="<?php echo $site_title; ?>"
1980 value="<?php echo esc_attr(stripslashes($value));?>"
1981 title="<?php echo $site_title; ?>"
1982 oninvalid="this.setCustomValidity('<?php _e($field->required_msg, 'userswp'); ?>')"
1983 oninput="setCustomValidity('')"
1984 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
1985 <?php if ($field->for_admin_use == 1) { echo 'readonly="readonly"'; } ?>
1986 type="<?php echo $type; ?>"
1987 <?php if ($step) { echo 'step="'.$step.'"'; } ?>
1988 />
1989 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
1990 <?php if ($field->is_required) { ?>
1991 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
1992 <?php } ?>
1993 </div>
1994
1995
1996 <?php
1997 $html = ob_get_clean();
1998 }
1999
2000 return $html;
2001 }
2002
2003 /**
2004 * Form field template for textarea field type.
2005 *
2006 * @since 1.0.0
2007 * @package userswp
2008 *
2009 * @param string $html Form field html
2010 * @param object $field Field info.
2011 * @param string $value Form field default value.
2012 * @param string $form_type Form type
2013 *
2014 * @return string Modified form field html.
2015 */
2016 public function uwp_form_input_textarea($html, $field, $value, $form_type){
2017
2018 // Check if there is a field specific filter.
2019 if(has_filter("uwp_form_input_textarea_{$field->htmlvar_name}")){
2020 $html = apply_filters("uwp_form_input_textarea_{$field->htmlvar_name}", $html, $field, $value, $form_type);
2021 }
2022
2023 // If no html then we run the standard output.
2024 if(empty($html)) {
2025
2026 ob_start(); // Start buffering;
2027
2028 ?>
2029 <div id="<?php echo $field->htmlvar_name;?>_row"
2030 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
2031
2032 <?php
2033 $site_title = uwp_get_form_label($field);
2034 if (!is_admin()) { ?>
2035 <label>
2036 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2037 <?php if ($field->is_required) echo '<span>*</span>';?>
2038 </label>
2039 <?php } ?>
2040
2041 <textarea name="<?php echo $field->htmlvar_name; ?>"
2042 class="<?php echo $field->css_class; ?>"
2043 placeholder="<?php echo $site_title; ?>"
2044 title="<?php echo $site_title; ?>"
2045 oninvalid="this.setCustomValidity('<?php _e($field->required_msg, 'userswp'); ?>')"
2046 oninput="setCustomValidity('')"
2047 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
2048 type="<?php echo $field->field_type; ?>"
2049 rows="4"><?php echo stripslashes($value); ?></textarea>
2050 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
2051 <?php if ($field->is_required) { ?>
2052 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
2053 <?php } ?>
2054 </div>
2055
2056 <?php
2057 $html = ob_get_clean();
2058 }
2059
2060 return $html;
2061 }
2062
2063 /**
2064 * Form field template for fieldset field type.
2065 *
2066 * @since 1.0.0
2067 * @package userswp
2068 *
2069 * @param string $html Form field html
2070 * @param object $field Field info.
2071 * @param string $value Form field default value.
2072 * @param string $form_type Form type
2073 *
2074 * @return string Modified form field html.
2075 */
2076 public function uwp_form_input_fieldset($html, $field, $value, $form_type) {
2077 // Check if there is a custom field specific filter.
2078 if(has_filter("uwp_form_input_fieldset_{$field->htmlvar_name}")){
2079 $html = apply_filters("uwp_form_input_fieldset_{$field->htmlvar_name}",$html, $field, $value, $form_type);
2080 }
2081
2082 // If no html then we run the standard output.
2083 if(empty($html)) {
2084
2085 ob_start(); // Start buffering;
2086 ?>
2087 <h3 class="uwp_input_fieldset <?php echo $field->css_class; ?>">
2088 <?php echo $field->site_title;; ?>
2089 <?php if ( $field->help_text != '' ) {
2090 echo '<small>( ' . $field->help_text . ' )</small>';
2091 } ?></h3>
2092 <?php
2093 $html = ob_get_clean();
2094 }
2095
2096 return $html;
2097 }
2098
2099 /**
2100 * Form field template for url field type.
2101 *
2102 * @since 1.0.0
2103 * @package userswp
2104 *
2105 * @param string $html Form field html
2106 * @param object $field Field info.
2107 * @param string $value Form field default value.
2108 * @param string $form_type Form type
2109 *
2110 * @return string Modified form field html.
2111 */
2112 public function uwp_form_input_url($html, $field, $value, $form_type){
2113
2114
2115 // Check if there is a custom field specific filter.
2116 if(has_filter("uwp_form_input_url_{$field->htmlvar_name}")){
2117 $html = apply_filters("uwp_form_input_url_{$field->htmlvar_name}",$html, $field, $value, $form_type);
2118 }
2119
2120 // If no html then we run the standard output.
2121 if(empty($html)) {
2122
2123 ob_start(); // Start buffering;
2124 ?>
2125 <div id="<?php echo $field->htmlvar_name;?>_row"
2126 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
2127
2128 <?php
2129 $site_title = uwp_get_form_label($field);
2130 if (!is_admin()) { ?>
2131 <label>
2132 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2133 <?php if ($field->is_required) echo '<span>*</span>';?>
2134 </label>
2135 <?php } ?>
2136
2137 <input name="<?php echo $field->htmlvar_name;?>"
2138 class="<?php echo $field->css_class; ?> uwp_textfield"
2139 id="<?php echo $field->htmlvar_name;?>"
2140 placeholder="<?php echo $site_title; ?>"
2141 value="<?php echo esc_attr(stripslashes($value));?>"
2142 title="<?php echo $site_title; ?>"
2143 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
2144 type="url"
2145 oninvalid="setCustomValidity('<?php _e('Please enter a valid URL including http://', 'userswp'); ?>')"
2146 onchange="try{setCustomValidity('')}catch(e){}"
2147 />
2148 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
2149 <?php if ($field->is_required) { ?>
2150 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
2151 <?php } ?>
2152 </div>
2153
2154 <?php
2155 $html = ob_get_clean();
2156 }
2157
2158 return $html;
2159 }
2160
2161 /**
2162 * Form field template for email field type.
2163 *
2164 * @since 1.0.0
2165 * @package userswp
2166 *
2167 * @param string $html Form field html
2168 * @param object $field Field info.
2169 * @param string $value Form field default value.
2170 * @param string $form_type Form type
2171 *
2172 * @return string Modified form field html.
2173 */
2174 public function uwp_form_input_email($html, $field, $value, $form_type){
2175
2176
2177 // Check if there is a custom field specific filter.
2178 if(has_filter("uwp_form_input_email_{$field->htmlvar_name}")){
2179 $html = apply_filters("uwp_form_input_email_{$field->htmlvar_name}",$html, $field, $value, $form_type);
2180 }
2181
2182 // If no html then we run the standard output.
2183 if(empty($html)) {
2184
2185 ob_start(); // Start buffering;
2186 ?>
2187 <div id="<?php echo $field->htmlvar_name;?>_row"
2188 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
2189
2190 <?php
2191 $site_title = uwp_get_form_label($field);
2192 if (!is_admin()) { ?>
2193 <label>
2194 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2195 <?php if ($field->is_required) echo '<span>*</span>';?>
2196 </label>
2197 <?php } ?>
2198
2199 <input name="<?php echo $field->htmlvar_name;?>"
2200 class="<?php echo $field->css_class; ?> uwp_textfield"
2201 id="<?php echo $field->htmlvar_name;?>"
2202 placeholder="<?php echo $site_title; ?>"
2203 value="<?php echo esc_attr(stripslashes($value));?>"
2204 title="<?php echo $site_title; ?>"
2205 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
2206 type="email"
2207 />
2208 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
2209 <?php if ($field->is_required) { ?>
2210 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
2211 <?php } ?>
2212 </div>
2213
2214
2215 <?php
2216 $html = ob_get_clean();
2217 }
2218
2219 if(has_filter("uwp_form_input_email_{$field->htmlvar_name}_after")){
2220 $html = apply_filters("uwp_form_input_email_{$field->htmlvar_name}_after",$html, $field, $value, $form_type);
2221 }
2222
2223 return $html;
2224 }
2225
2226 /**
2227 * Form field template for password field type.
2228 *
2229 * @since 1.0.0
2230 * @package userswp
2231 *
2232 * @param string $html Form field html
2233 * @param object $field Field info.
2234 * @param string $value Form field default value.
2235 * @param string $form_type Form type
2236 *
2237 * @return string Modified form field html.
2238 */
2239 public function uwp_form_input_password($html, $field, $value, $form_type){
2240
2241
2242 // Check if there is a custom field specific filter.
2243 if(has_filter("uwp_form_input_password_{$field->htmlvar_name}")){
2244 $html = apply_filters("uwp_form_input_password_{$field->htmlvar_name}",$html, $field, $value, $form_type);
2245 }
2246
2247 // If no html then we run the standard output.
2248 if(empty($html)) {
2249
2250 ob_start(); // Start buffering;
2251 ?>
2252 <div id="<?php echo $field->htmlvar_name;?>_row"
2253 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_<?php echo $field->field_type; ?>_row uwp_clear">
2254
2255 <?php
2256 $site_title = uwp_get_form_label($field);
2257 if (!is_admin()) { ?>
2258 <label>
2259 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2260 <?php if ($field->is_required) echo '<span>*</span>';?>
2261 </label>
2262 <?php } ?>
2263
2264 <input name="<?php echo $field->htmlvar_name;?>"
2265 class="<?php echo $field->css_class; ?> uwp_textfield"
2266 id="<?php echo $field->htmlvar_name;?>"
2267 placeholder="<?php echo $site_title; ?>"
2268 value="<?php echo esc_attr(stripslashes($value));?>"
2269 title="<?php echo $site_title; ?>"
2270 <?php if ($field->is_required == 1) { echo 'required="required"'; } ?>
2271 type="password"
2272 />
2273 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
2274 <?php if ($field->is_required) { ?>
2275 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
2276 <?php } ?>
2277 </div>
2278
2279
2280 <?php
2281 $html = ob_get_clean();
2282 }
2283
2284 if(has_filter("uwp_form_input_password_{$field->htmlvar_name}_after")){
2285 $html = apply_filters("uwp_form_input_password_{$field->htmlvar_name}_after",$html, $field, $value, $form_type);
2286 }
2287
2288 return $html;
2289 }
2290
2291
2292
2293 /**
2294 * Adds enctype tag in form for file fields.
2295 *
2296 * @since 1.0.0
2297 * @package userswp
2298 *
2299 * @return void
2300 */
2301 function add_multipart_to_admin_edit_form() {
2302 global $wpdb;
2303 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
2304 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND field_type = 'file' AND is_default = '0' ORDER BY sort_order ASC");
2305 if ($fields) {
2306 echo 'enctype="multipart/form-data"';
2307 }
2308 }
2309
2310 /**
2311 * Handles UsersWP custom field requests from admin.
2312 *
2313 * @since 1.0.0
2314 * @package userswp
2315 *
2316 * @param int $user_id User ID.
2317 *
2318 * @return void
2319 */
2320 public function update_profile_extra_admin_edit($user_id) {
2321 global $wpdb;
2322 $file_obj = new UsersWP_Files();
2323 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
2324 //Normal fields
2325 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND field_type != 'file' AND field_type != 'fieldset' ORDER BY sort_order ASC");
2326 if ($fields) {
2327 $_POST['uwp_account_first_name'] = $_POST['first_name'];
2328 $_POST['uwp_account_last_name'] = $_POST['last_name'];
2329 $_POST['uwp_account_display_name'] = $_POST['nickname'];
2330 $_POST['uwp_account_email'] = $_POST['email'];
2331 $result = uwp_validate_fields($_POST, 'account', $fields);
2332 if (isset($result['uwp_account_display_name']) && !empty($result['uwp_account_display_name'])) {
2333 $display_name = $result['uwp_account_display_name'];
2334 } else {
2335 if (!empty($first_name) || !empty($last_name)) {
2336 $display_name = $result['uwp_account_first_name'] . ' ' . $result['uwp_account_last_name'];
2337 } else {
2338 $user_info = get_userdata($user_id);
2339 $display_name = $user_info->user_login;
2340 }
2341 }
2342 $result['uwp_account_display_name'] = $display_name;
2343 if (!is_wp_error($result)) {
2344 foreach ($fields as $field) {
2345 $value = isset($result[$field->htmlvar_name]) ? $result[$field->htmlvar_name] : '';
2346 if ($value == '0' || !empty($value)) {
2347 uwp_update_usermeta($user_id, $field->htmlvar_name, $value);
2348 }
2349 }
2350 }
2351 }
2352
2353 //File fields
2354 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND field_type = 'file' AND is_default = '0' ORDER BY sort_order ASC");
2355 if ($fields) {
2356 $result = $file_obj->uwp_validate_uploads($_FILES, 'account', true, $fields);
2357 if (!is_wp_error($result)) {
2358 foreach ($fields as $field) {
2359 $value = $result[$field->htmlvar_name];
2360 if ($value == '0' || !empty($value)) {
2361 uwp_update_usermeta($user_id, $field->htmlvar_name, $value);
2362 }
2363 }
2364 }
2365 }
2366 }
2367
2368
2369 /**
2370 * Adds search form keyword input html.
2371 *
2372 * @since 1.0.0
2373 * @package userswp
2374 *
2375 * @param string $keyword Search keyword.
2376 *
2377 * @return void
2378 */
2379 public function uwp_users_search_form_text_field($keyword) {
2380 ?>
2381 <input placeholder="<?php _e('Search For', 'userswp'); ?>" name="uwps" value="<?php echo $keyword; ?>" class="s search-input" type="text">
2382 <?php
2383 }
2384
2385 /**
2386 * Adds search form submit button html.
2387 *
2388 * @since 1.0.0
2389 * @package userswp
2390 *
2391 * @return void
2392 */
2393 public function uwp_users_search_form_submit() {
2394 ?>
2395 <input class="uwp-searchsubmit uwp-search-submit" value="<?php _e('Search', 'userswp'); ?>" type="submit">
2396 <?php
2397 }
2398
2399 /**
2400 * Checks for errors in mail submission.
2401 *
2402 * @since 1.0.0
2403 * @package userswp
2404 *
2405 * @param array $res Result array.
2406 * @param object $user_data User object.
2407 * @param WP_Error $errors Error object
2408 *
2409 * @return WP_Error|array Error object when error. Result array when success.
2410 */
2411 public function uwp_forms_check_for_send_mail_errors($res, $user_data, $errors) {
2412 if (!$res) {
2413 if (get_option('admin_email') == $user_data->user_email) {
2414 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong when sending email. Please check your site error log for more details.', 'userswp'));
2415 } else {
2416 $errors->add('something_wrong', __('<strong>Error</strong>: Something went wrong when sending email. Please contact site admin.', 'userswp'));
2417 }
2418 }
2419
2420 $error_code = $errors->get_error_code();
2421 if (!empty($error_code)) {
2422 return $errors;
2423 } else {
2424 return $res;
2425 }
2426
2427 }
2428
2429 /**
2430 * Form field template for country field.
2431 *
2432 * @since 1.0.0
2433 * @package userswp
2434 *
2435 * @param string $html Form field html
2436 * @param object $field Field info.
2437 * @param string $value Form field default value.
2438 * @param string $form_type Form type
2439 *
2440 * @return string Modified form field html.
2441 */
2442 public function uwp_form_input_select_country($html, $field, $value, $form_type){
2443
2444 // Check if there is a field specific filter.
2445 if(has_filter("uwp_form_input_html_select_{$field->htmlvar_name}")){
2446 $html = apply_filters("uwp_form_input_html_select_{$field->htmlvar_name}", $html, $field, $value, $form_type);
2447 }
2448
2449 //print_r($field);
2450
2451 // If no html then we run the standard output.
2452 if(empty($html)) {
2453
2454 ob_start(); // Start buffering;
2455
2456 ?>
2457 <div id="<?php echo $field->htmlvar_name;?>_row"
2458 class="<?php if ($field->is_required) echo 'required_field';?> uwp_form_row uwp_clear">
2459
2460 <?php
2461 $site_title = uwp_get_form_label($field);
2462 if (!is_admin()) { ?>
2463 <label>
2464 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2465 <?php if ($field->is_required) echo '<span>*</span>';?>
2466 </label>
2467 <?php } ?>
2468
2469 <?php
2470 // if value empty set the default
2471 if($value=='' && isset($field->default_value) && $field->default_value){
2472 $value = $field->default_value;
2473 }
2474 $select_country_options = apply_filters('uwp_form_input_select_country',"{defaultCountry: '$value'}",$field, $value, $form_type);
2475 ?>
2476
2477 <input type="text" class="uwp_textfield" title="<?php echo $site_title; ?>" id="<?php echo $field->htmlvar_name;?>" />
2478 <input type="hidden" id="<?php echo $field->htmlvar_name;?>_code" name="<?php echo $field->htmlvar_name;?>" />
2479
2480 <script>
2481 jQuery("#<?php echo $field->htmlvar_name;?>").countrySelect(<?php echo $select_country_options;?>);
2482 </script>
2483
2484
2485 <span class="uwp_message_note"><?php _e($field->help_text, 'userswp');?></span>
2486 <?php if ($field->is_required) { ?>
2487 <span class="uwp_message_error"><?php _e($field->required_msg, 'userswp'); ?></span>
2488 <?php } ?>
2489 </div>
2490
2491 <?php
2492 $html = ob_get_clean();
2493 }
2494
2495 return $html;
2496 }
2497
2498 /**
2499 * Prints the username link in "Edit Account" page
2500 *
2501 * @since 1.0.0
2502 * @package userswp
2503 *
2504 * @param string $type Page type.
2505 *
2506 * @return void
2507 */
2508 public function uwp_display_username_in_account($type) {
2509 if ($type == 'account') {
2510 $user_id = get_current_user_id();
2511 $user_info = get_userdata($user_id);
2512 $display_name = $user_info->user_login;
2513 ?>
2514 <span class="uwp_account_page_username">
2515 <a href="<?php echo uwp_build_profile_tab_url($user_id); ?>">( @<?php echo $display_name; ?> )</a>
2516 </span>
2517 <?php
2518 }
2519 }
2520
2521
2522 /**
2523 * Adds confirm password field in forms.
2524 *
2525 * @since 1.0.0
2526 * @package userswp
2527 *
2528 * @param string $html Form field html
2529 * @param object $field Field info.
2530 * @param string $value Form field default value.
2531 * @param string $form_type Form type
2532 *
2533 * @return string Modified form field html.
2534 */
2535 public function uwp_register_confirm_password_field($html, $field, $value, $form_type) {
2536 if ($form_type == 'register') {
2537 //confirm password field
2538 $extra = array();
2539 if (isset($field->extra_fields) && $field->extra_fields != '') {
2540 $extra = unserialize($field->extra_fields);
2541 }
2542 $enable_confirm_password_field = isset($extra['confirm_password']) ? $extra['confirm_password'] : '0';
2543 if ($enable_confirm_password_field == '1') {
2544 ob_start(); // Start buffering;
2545 ?>
2546 <div id="uwp_account_confirm_password_row"
2547 class="<?php echo 'required_field';?> uwp_form_password_row uwp_clear">
2548
2549 <?php
2550 $site_title = __("Confirm Password", 'userswp');
2551 if (!is_admin()) { ?>
2552 <label>
2553 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2554 <?php echo '<span>*</span>'; ?>
2555 </label>
2556 <?php } ?>
2557
2558 <input name="uwp_account_confirm_password"
2559 class="uwp_textfield"
2560 id="uwp_account_confirm_password"
2561 placeholder="<?php echo $site_title; ?>"
2562 value=""
2563 title="<?php echo $site_title; ?>"
2564 <?php echo 'required="required"'; ?>
2565 type="password"
2566 />
2567 </div>
2568
2569 <?php
2570 $confirm_html = ob_get_clean();
2571 $html = $html.$confirm_html;
2572 }
2573 }
2574 return $html;
2575 }
2576
2577 /**
2578 * Adds confirm email field in forms.
2579 *
2580 * @since 1.0.0
2581 * @package userswp
2582 *
2583 * @param string $html Form field html
2584 * @param object $field Field info.
2585 * @param string $value Form field default value.
2586 * @param string $form_type Form type
2587 *
2588 * @return string Modified form field html.
2589 */
2590 public function uwp_register_confirm_email_field($html, $field, $value, $form_type) {
2591 if ($form_type == 'register') {
2592 //confirm email field
2593 $extra = array();
2594 if (isset($field->extra_fields) && $field->extra_fields != '') {
2595 $extra = unserialize($field->extra_fields);
2596 }
2597 $enable_confirm_email_field = isset($extra['confirm_email']) ? $extra['confirm_email'] : '0';
2598 if ($enable_confirm_email_field == '1') {
2599 ob_start(); // Start buffering;
2600 ?>
2601 <div id="uwp_account_confirm_email_row"
2602 class="<?php echo 'required_field';?> uwp_form_email_row uwp_clear">
2603
2604 <?php
2605 $site_title = __("Confirm Email", 'userswp');
2606 if (!is_admin()) { ?>
2607 <label>
2608 <?php echo (trim($site_title)) ? $site_title : '&nbsp;'; ?>
2609 <?php echo '<span>*</span>'; ?>
2610 </label>
2611 <?php } ?>
2612
2613 <input name="uwp_account_confirm_email"
2614 class="uwp_textfield"
2615 id="uwp_account_confirm_email"
2616 placeholder="<?php echo $site_title; ?>"
2617 value=""
2618 title="<?php echo $site_title; ?>"
2619 <?php echo 'required="required"'; ?>
2620 type="email"
2621 />
2622 </div>
2623
2624 <?php
2625 $confirm_html = ob_get_clean();
2626 $html = $html.$confirm_html;
2627 }
2628 }
2629 return $html;
2630 }
2631
2632
2633 /**
2634 * Handles the privacy form submission.
2635 *
2636 * @since 1.0.0
2637 * @package userswp
2638 *
2639 * @return void
2640 */
2641 public function uwp_privacy_submit_handler() {
2642 if (isset($_POST['uwp_privacy_submit'])) {
2643 if( ! isset( $_POST['uwp_privacy_nonce'] ) || ! wp_verify_nonce( $_POST['uwp_privacy_nonce'], 'uwp-privacy-nonce' ) ) {
2644 return;
2645 }
2646
2647 $extra_where = "AND is_public='2'";
2648 $fields = get_account_form_fields($extra_where);
2649 $fields = apply_filters('uwp_account_privacy_fields', $fields);
2650 $user_id = get_current_user_id();
2651 global $wpdb;
2652 $meta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
2653
2654 if ($fields) {
2655 foreach ($fields as $field) {
2656 $field_name = $field->htmlvar_name.'_privacy';
2657
2658 $user_meta_info = $wpdb->get_row( $wpdb->prepare( "SELECT user_privacy FROM $meta_table WHERE user_id = %d", $user_id ) );
2659 $field_value = strip_tags(esc_sql($_POST[$field_name]));
2660 $value = '';
2661
2662 if (!empty($user_meta_info->user_privacy)) {
2663 $public_fields = explode(',', $user_meta_info->user_privacy);
2664 if ($field_value == 'no') {
2665 if (!in_array($field_name, $public_fields)) {
2666 $public_fields[] = $field_name;
2667 }
2668 $value = implode(',', $public_fields);
2669 } else {
2670 if (($field_name = array_search($field_name, $public_fields)) !== false) {
2671 unset($public_fields[$field_name]);
2672 }
2673 $value = implode(',', $public_fields);
2674 }
2675 } else {
2676 if ($field_value == 'no') {
2677 $public_fields = array($field_name);
2678 $value = implode(',', $public_fields);
2679 } else {
2680 // For yes values no need to update since its a public field.
2681 // We store only the private fields.
2682 }
2683
2684 }
2685
2686 uwp_update_usermeta($user_id, 'user_privacy', $value);
2687 }
2688 }
2689
2690 if (isset($_POST['uwp_hide_from_listing']) && 1 == $_POST['uwp_hide_from_listing']) {
2691 update_user_meta($user_id, 'uwp_hide_from_listing', 1);
2692 } else {
2693 update_user_meta($user_id, 'uwp_hide_from_listing', 0);
2694 }
2695
2696 $make_profile_private = uwp_can_make_profile_private();
2697 if ($make_profile_private) {
2698 $field_name = 'uwp_make_profile_private';
2699 if (isset($_POST[$field_name])) {
2700 $value = strip_tags(esc_sql($_POST[$field_name]));
2701 $user_id = get_current_user_id();
2702 update_user_meta($user_id, $field_name, $value);
2703 }
2704 }
2705
2706 }
2707 }
2708
2709 }