PluginProbe
User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor / 3.9.8
User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor v3.9.8
4.0.3 4.0.2 4.0.1 4.0.0 3.16.6 3.16.5 3.16.4 3.16.3 3.16.2 3.16.1 3.16.0 3.15.9 3.9.9 3.9.5 3.9.6 3.9.7 3.9.8 1.1.7 1.1.8 1.1.9 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 341 releases
profile-builder / admin / advanced-settings / includes / forms / confirm-user-email-change.php

confirm-user-email-change.php in User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor 3.9.8, at admin/advanced-settings/includes/forms/confirm-user-email-change.php

236 lines 10.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( !current_user_can( 'manage_options' ) )
4 add_filter( 'wppb_email_confirmation_on_user_email_change', '__return_true' );
5
6
7 // get transient check key
8 function wppb_toolbox_pending_email_change_request_transient_key() {
9 $current_user = wp_get_current_user();
10 $pending_change_request_data = get_user_meta($current_user->ID, '_wppb_pending_email_change_request', true);
11
12 if (isset( $pending_change_request_data['new_email'] ) )
13 $pending_new_email_address = $pending_change_request_data['new_email'];
14 else $pending_new_email_address = '';
15
16 $transient_check_key = Wordpress_Creation_Kit_PB::wck_generate_slug(sanitize_email($pending_new_email_address));
17
18 return $transient_check_key;
19 }
20 add_filter('wppb_pending_email_change_transient_key','wppb_toolbox_pending_email_change_request_transient_key');
21
22
23 // get new email address
24 function wppb_toolbox_pending_new_email_address() {
25 $current_user = wp_get_current_user();
26 $pending_change_request_data = get_user_meta($current_user->ID, '_wppb_pending_email_change_request', true);
27
28 if ( isset( $pending_change_request_data['new_email'] ))
29 $pending_new_email_address = $pending_change_request_data['new_email'];
30 else $pending_new_email_address = '';
31
32 return $pending_new_email_address;
33 }
34 add_filter('wppb_new_email_address','wppb_toolbox_pending_new_email_address');
35
36
37 // set email input status
38 function wppb_toolbox_check_pending_email() {
39 $current_user = wp_get_current_user();
40 $unapproved_email_address = wppb_user_meta_exists( $current_user->ID, '_wppb_epaa_email' );
41
42 if ( empty( $unapproved_email_address ) && !isset( $_GET['wppb_epaa_review_users'] )) {
43 $transient_check_key = apply_filters('wppb_pending_email_change_transient_key', '');
44
45 if ( !empty( $transient_check_key ) )
46 $transient_check = get_transient( 'wppb_pending_email_change_request_exists_' . $transient_check_key );
47 else $transient_check = false;
48
49 if ( $transient_check !== false )
50 $input_status = 'disabled';
51 else $input_status = 'enabled';
52
53 } else $input_status = 'needs_approval';
54
55 return $input_status;
56 }
57 add_filter('wppb_set_input_status','wppb_toolbox_check_pending_email');
58
59
60 // check if approval is needed
61 function wppb_toolbox_check_approval() {
62 $approval_needed = 'no';
63 $all_fields = get_option( 'wppb_manage_fields' );
64
65 foreach ($all_fields as $field) {
66 if ($field['field'] === 'Default - E-mail') {
67 if ( isset( $field['edit-profile-approved-by-admin'] ) && $field['edit-profile-approved-by-admin'] === 'yes') {
68 $approval_needed = 'yes';
69 }
70 }
71 }
72
73 return $approval_needed;
74
75 }
76 add_filter('wppb_check_approval_activation','wppb_toolbox_check_approval');
77
78
79 // handle email change request notification (send if admin approval is not active)
80 function wppb_toolbox_handle_email_change_request( $input_email ) {
81 if( apply_filters( 'wppb_email_confirmation_on_user_email_change', false ) && is_user_logged_in() && !isset( $_GET['wppb_epaa_review_users'] )) {
82 $current_user = wp_get_current_user();
83 $user_current_email = $current_user->user_email;
84
85 // check if the email address entered into the input is different from the current email address
86 if ( $input_email != $user_current_email ) {
87
88 $transient_check_key = Wordpress_Creation_Kit_PB::wck_generate_slug( sanitize_email( $input_email ));
89 $transient_check = get_transient( 'wppb_pending_email_change_request_exists_'.$transient_check_key );
90 $needs_approval = apply_filters( 'wppb_check_approval_activation','' );
91
92 if ( !wppb_user_meta_exists( $current_user->ID, '_wppb_email_change_request_nonce' )) {
93 $pending_request_nonce = wp_create_nonce('wppb_email_change_action_nonce');
94 update_user_meta($current_user->ID, '_wppb_email_change_request_nonce', $pending_request_nonce);
95 }
96
97 // check if a pending change request exists
98 if ( $transient_check === false && $needs_approval === 'no') {
99
100 // send confirmation email to new email address
101 do_action('wppb_send_mail_address_change_request', $input_email);
102
103 $input_email = $user_current_email;
104
105 } elseif ( $needs_approval === 'yes' ) {
106 update_user_meta( $current_user->ID, '_wppb_pending_email_change_request_page_url', wppb_curpageurl() );
107 }
108 }
109 }
110 return $input_email;
111 }
112 add_filter( 'wppb_before_processing_email_from_forms', 'wppb_toolbox_handle_email_change_request' );
113
114
115 // edit content and send email change request notification
116 function wppb_toolbox_send_change_request_mail( $new_email_address ) {
117
118 $needs_approval = apply_filters( 'wppb_check_approval_activation','' );
119
120 if ( $needs_approval === 'no') {
121 $new_email = $new_email_address;
122 $current_user = wp_get_current_user();
123 $current_url = wppb_curpageurl();
124 }
125 elseif ( $needs_approval === 'yes' ) {
126 $new_email = $new_email_address['email'];
127 $current_user = get_user_by( 'id',$new_email_address['user_id'] );
128 $current_url = get_user_meta( $new_email_address['user_id'], '_wppb_pending_email_change_request_page_url', true );
129 }
130
131
132 $hash = md5( $new_email );
133 $new_user_email = array(
134 'hash' => $hash,
135 'new_email' => $new_email,
136 );
137
138 update_user_meta( $current_user->ID, '_wppb_pending_email_change_request', $new_user_email );
139
140 $pending_request_nonce = get_user_meta($current_user->ID,'_wppb_email_change_request_nonce',true);
141
142 $arr_params = array( 'wppb_email_change_action' => 'update_email_address' ,'wppb_new_user_email' => $hash, '_wpnonce' => $pending_request_nonce );
143
144 $confirmation_url = add_query_arg($arr_params, $current_url);
145
146 $change_request_subject = sprintf( __('Email address change request for %s', 'profile-builder'), $current_user->user_email );
147 $change_request_subject = apply_filters( 'wppb_user_email_change_request_notification_subject', $change_request_subject, $current_user );
148
149 $change_request_message = sprintf( __('Someone requested to change the email address for your account.<br/>If this was a mistake, just ignore this email and nothing will happen.<br/>To update your account email address to the one requested (%1$s), visit the following link: %2$s', 'profile-builder'), $new_user_email['new_email'],'<a href="'.$confirmation_url.'">Change email address!</a>' );
150 $change_request_message = apply_filters( 'wppb_user_email_change_request_notification_content', $change_request_message, $current_user, $confirmation_url );
151
152 wppb_mail($new_email,$change_request_subject,$change_request_message);
153
154 // set transient
155 $transient_key = Wordpress_Creation_Kit_PB::wck_generate_slug( sanitize_email( $new_email ));
156 set_transient('wppb_pending_email_change_request_exists_' . $transient_key, true, WEEK_IN_SECONDS);
157 }
158 add_action('wppb_send_mail_address_change_request','wppb_toolbox_send_change_request_mail');
159
160
161 // update user email | delete transient | delete change request user meta
162 function wppb_toolbox_change_user_email_address() {
163
164 if( !isset( $_GET['wppb_new_user_email'] ) )
165 return;
166
167 $current_user = wp_get_current_user();
168 $new_email = get_user_meta( $current_user->ID, '_wppb_pending_email_change_request', true );
169
170 if ( $new_email && hash_equals( $new_email['hash'], $_GET['wppb_new_user_email'] ) ) {
171 $transient_check_key = apply_filters('wppb_pending_email_change_transient_key', '');
172 $update_user_args = array(
173 'ID' => $current_user->ID,
174 'user_email' => esc_html( trim( $new_email['new_email'] ) )
175 );
176
177 wp_update_user( $update_user_args );
178
179 $remove_change_request_metas = array('_wppb_pending_email_change_request','_wppb_pending_email_change_request_page_url','_wppb_email_change_request_nonce');
180 foreach ( $remove_change_request_metas as $meta ) {
181 delete_user_meta( $current_user->ID, $meta );
182 }
183
184 delete_transient('wppb_pending_email_change_request_exists_' . $transient_check_key );
185
186 wp_redirect( remove_query_arg( array_keys( $_GET ), wppb_curpageurl() ) );
187 exit;
188 }
189
190 }
191
192
193 // cancel pending request (delete transient | delete change request user meta)
194 function wppb_toolbox_cancel_pending_user_email_change_request() {
195 $current_user = wp_get_current_user();
196 $transient_check_key = apply_filters('wppb_pending_email_change_transient_key', '');
197
198 $unapproved_email_address = wppb_user_meta_exists($current_user->ID, '_wppb_epaa_email' );
199 if (!empty($unapproved_email_address)) {
200 delete_user_meta( $current_user->ID, '_wppb_epaa_email' );
201 }
202
203 $remove_change_request_metas = array( '_wppb_pending_email_change_request' , '_wppb_pending_email_change_request_page_url' , '_wppb_email_change_request_nonce' );
204 foreach ( $remove_change_request_metas as $meta ) {
205 delete_user_meta( $current_user->ID, $meta );
206 }
207
208 delete_transient('wppb_pending_email_change_request_exists_' . $transient_check_key );
209
210 wp_redirect( remove_query_arg( array_keys( $_GET ), wppb_curpageurl() ) );
211 exit;
212 }
213
214
215 function wppb_toolbox_handle_email_change() {
216 if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce(sanitize_text_field( $_GET['_wpnonce'] ), 'wppb_email_change_action_nonce' ) && isset( $_GET['wppb_email_change_action'] ) ) {
217 if ( $_GET['wppb_email_change_action'] == 'update_email_address' && isset( $_GET['wppb_new_user_email'] ) )
218 wppb_toolbox_change_user_email_address();
219 else if ( $_GET['wppb_email_change_action'] == 'cancel_pending_email_address_change' )
220 wppb_toolbox_cancel_pending_user_email_change_request();
221 }
222 }
223 add_action('init', 'wppb_toolbox_handle_email_change');
224
225
226 // if there is an email change request we don't update the email address until the confirmation link, sent to user by email, is clicked
227 function wppb_toolbox_remove_email_from_userdata_update( $userdata ) {
228 $transient_check_key = apply_filters('wppb_pending_email_change_transient_key', '');
229 $transient_check = get_transient('wppb_pending_email_change_request_exists_' . $transient_check_key);
230
231 if ($transient_check !== false && ( !isset( $_POST['action'] ) || $_POST['action'] != 'register' ) )
232 unset( $userdata['user_email'] );
233
234 return $userdata;
235 }
236 add_filter( 'wppb_build_userdata', 'wppb_toolbox_remove_email_from_userdata_update', 20, 3 );