PluginProbe
Welcart e-Commerce / 2.12.4
Welcart e-Commerce v2.12.4
2.12.4 2.12.3 2.11.35 2.12.2 2.12.1 2.11.34 2.11.33 2.11.32 2.11.31 2.11.30 1.3.16 1.3.17 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.10 1.4.11 1.4.12 All 292 releases
usc-e-shop / extensions / VerifyMembersEmail / verify_members_email.php

verify_members_email.php in Welcart e-Commerce 2.12.4, at extensions/VerifyMembersEmail/verify_members_email.php

1,250 lines 44.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * When a new member joins, confirm the authenticity of
4 * the email address and the identity of the member.
5 *
6 * The following built-in templates have been added.
7 * templates/cart/verifying.php
8 * templates/cart/verified.php
9 * templates/member/verifying.php
10 *
11 * @package Welcart
12 */
13
14 /**
15 * Verify Members Email class
16 */
17 class USCES_VERIFY_MEMBERS_EMAIL {
18
19 /**
20 * Instance of this class.
21 *
22 * @var object
23 */
24 protected static $instance = null;
25
26 /**
27 * Verifyemail options
28 *
29 * @var array
30 */
31 public static $opts;
32
33 /**
34 * Initialization vector key
35 *
36 * @var string
37 */
38 public static $verify_key;
39
40 /**
41 * Initialization vector key
42 *
43 * @var string
44 */
45 public static $algo;
46
47 /**
48 * Construct
49 */
50 public function __construct() {
51
52 self::initialize_data();
53 self::$verify_key = 'zMsHTOIF6xRrmaMB';
54 self::$algo = 'AES-128-CBC';
55
56 if ( is_admin() ) {
57 add_action( 'usces_action_admin_system_extentions', array( $this, 'setting_form' ) );
58 add_action( 'init', array( $this, 'save_data' ) );
59 }
60
61 if ( self::$opts['switch_flag'] ) {
62
63 add_action( 'wc_cron', array( $this, 'delete_flag' ) );
64
65 if ( ! is_admin() ) {
66 add_filter( 'usces_filter_veirfyemail_newmemberform', array( $this, 'member_registered' ), 10, 2 );
67 add_filter( 'usces_filter_veirfyemail_newmemberfromcart', array( $this, 'member_registered' ), 10, 2 );
68 add_action( 'usces_main', array( $this, 'verified_email' ) );
69 }
70 }
71
72 if ( self::$opts['edit_flag'] && usces_is_membersystem_state() ) {
73
74 add_action( 'wc_cron', array( $this, 'delete_edit_flag' ) );
75
76 if ( ! is_admin() ) {
77 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
78 add_action( 'wp_print_styles', array( $this, 'print_styles' ) );
79 add_action( 'usces_main', array( $this, 'member_auth_first' ), 1 );
80 add_filter( 'usces_filter_template_redirect', array( $this, 'member_auth' ), 1 );
81 add_action( 'usces_main', array( $this, 'verified_member' ) );
82 add_filter( 'usces_filter_login_inform', array( $this, 'login_inform' ) );
83 add_action( 'usces_action_login_page_inform', array( $this, 'login_page_inform' ) );
84 add_filter( 'usces_filter_member_submenu_list', array( $this, 'member_submenu_list' ), 99, 2 );
85 add_action( 'usces_action_member_logined', array( $this, 'after_login' ) );
86 }
87 }
88
89 if ( self::$opts['login_notify'] && usces_is_membersystem_state() ) {
90 add_action( 'usces_action_after_login', array( $this, 'login_notify' ) );
91 }
92 }
93
94 /**
95 * Return an instance of this class.
96 */
97 public static function get_instance() {
98 if ( is_null( self::$instance ) ) {
99 self::$instance = new self();
100 }
101 return self::$instance;
102 }
103
104 /**
105 * Initialize
106 * Modified:30 Sep.2019
107 */
108 public function initialize_data() {
109 global $usces;
110
111 $options = get_option( 'usces_ex', array() );
112 $options['system']['verifyemail']['switch_flag'] = ! isset( $options['system']['verifyemail']['switch_flag'] ) ? 0 : (int) $options['system']['verifyemail']['switch_flag'];
113 $options['system']['verifyemail']['edit_flag'] = ! isset( $options['system']['verifyemail']['edit_flag'] ) ? 1 : (int) $options['system']['verifyemail']['edit_flag'];
114 $options['system']['verifyemail']['login_notify'] = ! isset( $options['system']['verifyemail']['login_notify'] ) ? 0 : (int) $options['system']['verifyemail']['login_notify'];
115 update_option( 'usces_ex', $options );
116 self::$opts = $options['system']['verifyemail'];
117 }
118
119 /**
120 * Save option data
121 * Modified:30 Sep.2019
122 */
123 public function save_data() {
124 global $usces;
125
126 if ( isset( $_POST['usces_verifyemail_option_update'] ) ) {
127
128 check_admin_referer( 'admin_system', 'wc_nonce' );
129 if ( ! current_user_can( 'wel_manage_setting' ) ) {
130 wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
131 }
132
133 if ( isset( $_POST['verifyemail_switch_flag'] ) ) {
134 self::$opts['switch_flag'] = (int) $_POST['verifyemail_switch_flag'];
135 } else {
136 self::$opts['switch_flag'] = 0;
137 }
138
139 if ( isset( $_POST['verifyemail_edit_flag'] ) ) {
140 self::$opts['edit_flag'] = (int) $_POST['verifyemail_edit_flag'];
141 } else {
142 self::$opts['edit_flag'] = 0;
143 }
144
145 if ( isset( $_POST['verifyemail_login_notify'] ) ) {
146 self::$opts['login_notify'] = (int) $_POST['verifyemail_login_notify'];
147 } else {
148 self::$opts['login_notify'] = 0;
149 }
150
151 $options = get_option( 'usces_ex', array() );
152 $options['system']['verifyemail'] = self::$opts;
153 update_option( 'usces_ex', $options );
154
155 if ( 0 === self::$opts['edit_flag'] ) {
156 $this->delete_edit_flag();
157 }
158 }
159 }
160
161 /**
162 * Setting form
163 * Modified:30 Sep.2019
164 */
165 public function setting_form() {
166 $status = ( self::$opts['switch_flag'] || self::$opts['edit_flag'] || self::$opts['login_notify'] ) ? '<span class="running">' . __( 'Running', 'usces' ) . '</span>' : '<span class="stopped">' . __( 'Stopped', 'usces' ) . '</span>';
167 ?>
168 <form action="" method="post" name="option_form" id="verifyemail_form">
169 <div class="postbox">
170 <div class="postbox-header">
171 <h2><span><?php esc_html_e( 'Security on membership', 'usces' ); ?></span><?php echo wp_kses_post( $status ); ?></h2>
172 <div class="handle-actions"><button type="button" class="handlediv" id="verifyemail"><span class="screen-reader-text"><?php echo esc_html( sprintf( __( 'Toggle panel: %s' ), __( 'Security on membership', 'usces' ) ) ); ?></span><span class="toggle-indicator"></span></button></div>
173 </div>
174 <div class="inside">
175 <table class="form_table">
176 <tr height="35">
177 <th class="system_th"><a style="cursor:pointer;" onclick="toggleVisibility('ex_verifyemail_switch_flag');"><?php esc_html_e( 'Email verification for new registration', 'usces' ); ?></a></th>
178 <td width="10"><input name="verifyemail_switch_flag" id="verifyemail_switch_flag0" type="radio" value="0"<?php checked( self::$opts['switch_flag'], 0 ); ?> /></td><td width="100"><label for="verifyemail_switch_flag0"><?php esc_html_e( 'disable', 'usces' ); ?></label></td>
179 <td width="10"><input name="verifyemail_switch_flag" id="verifyemail_switch_flag1" type="radio" value="1"<?php checked( self::$opts['switch_flag'], 1 ); ?> /></td><td width="100"><label for="verifyemail_switch_flag1"><?php esc_html_e( 'enable', 'usces' ); ?></label></td>
180 <td><div id="ex_verifyemail_switch_flag" class="explanation"><?php esc_html_e( 'Send an e-mail to the e-mail address registered when new member registration, and make them approve that the e-mail address is definitely their own.', 'usces' ); ?></div></td>
181 </tr>
182 <tr height="35">
183 <th class="system_th"><a style="cursor:pointer;" onclick="toggleVisibility('ex_verifyemail_edit_flag');"><?php esc_html_e( 'Email verification for editing information', 'usces' ); ?></a></th>
184 <td width="10"><input name="verifyemail_edit_flag" id="verifyemail_edit_flag0" type="radio" value="0"<?php checked( self::$opts['edit_flag'], 0 ); ?> /></td><td width="100"><label for="verifyemail_edit_flag0"><?php esc_html_e( 'disable', 'usces' ); ?></label></td>
185 <td width="10"><input name="verifyemail_edit_flag" id="verifyemail_edit_flag1" type="radio" value="1"<?php checked( self::$opts['edit_flag'], 1 ); ?> /></td><td width="100"><label for="verifyemail_edit_flag1"><?php esc_html_e( 'enable', 'usces' ); ?></label></td>
186 <td><div id="ex_verifyemail_edit_flag" class="explanation"><?php esc_html_e( "When editing membership information, an email will be sent to the member's email address to confirm that the change is indeed made by the member. Membership information cannot be edited unless the authentication link is clicked.", 'usces' ); ?></div></td>
187 </tr>
188 <tr height="35">
189 <th class="system_th"><a style="cursor:pointer;" onclick="toggleVisibility('ex_verifyemail_login_notify');"><?php esc_html_e( 'Login Notification', 'usces' ); ?></a></th>
190 <td width="10"><input name="verifyemail_login_notify" id="verifyemail_login_notify0" type="radio" value="0"<?php checked( self::$opts['login_notify'], 0 ); ?> /></td><td width="100"><label for="verifyemail_login_notify0"><?php esc_html_e( 'disable', 'usces' ); ?></label></td>
191 <td width="10"><input name="verifyemail_login_notify" id="verifyemail_login_notify1" type="radio" value="1"<?php checked( self::$opts['login_notify'], 1 ); ?> /></td><td width="100"><label for="verifyemail_login_notify1"><?php esc_html_e( 'enable', 'usces' ); ?></label></td>
192 <td><div id="ex_verifyemail_login_notify" class="explanation"><?php esc_html_e( 'An email will be sent to the member notifying them that they have logged in.', 'usces' ); ?></div></td>
193 </tr>
194 </table>
195 <hr />
196 <input name="usces_verifyemail_option_update" type="submit" class="button button-primary" value="<?php esc_attr_e( 'change decision', 'usces' ); ?>" />
197 </div>
198 </div><!--postbox-->
199 <?php wp_nonce_field( 'admin_system', 'wc_nonce' ); ?>
200 </form>
201 <?php
202 }
203
204 /**
205 * Member Registration
206 * usces_filter_veirfyemail_newmemberform
207 * usces_filter_veirfyemail_newmemberfromcart
208 * Modified:30 Sep.2019
209 *
210 * @param bool $ob Switch.
211 * @param array $member Member data.
212 * @return bool
213 */
214 public function member_registered( $ob, $member ) {
215 global $usces;
216
217 $time = current_time( 'timestamp' );
218 $usces->set_member_meta_value( '_verifying', $time, $member['ID'] );
219 $member_regmode = wp_unslash( $_POST['member_regmode'] );
220
221 if ( 'newmemberform' === $member_regmode ) {
222 add_filter( 'usces_filter_template_redirect', array( $this, 'start_verifying' ) );
223 } elseif ( 'newmemberfromcart' === $member_regmode ) {
224 add_filter( 'usces_filter_template_redirect', array( $this, 'start_verifying_cart' ) );
225 $member['flat_pass'] = wp_unslash( $_POST['customer']['password1'] );
226 }
227
228 remove_filter( 'usces_filter_template_redirect', 'dlseller_filter_template_redirect', 2 );
229
230 $member['regmode'] = $member_regmode;
231 $this->send_verifymail( $member );
232 unset( $_SESSION['usces_member'] );
233
234 return true;
235 }
236
237 /**
238 * Start verifying
239 * Modified:30 Sep.2019
240 */
241 public function start_verifying() {
242 global $usces;
243
244 if ( file_exists( get_theme_file_path( '/wc_templates/member/wc_member_verifying.php' ) ) ) {
245 include get_theme_file_path( '/wc_templates/member/wc_member_verifying.php' );
246 exit;
247 }
248
249 return true;
250 }
251
252 /**
253 * Start verifying
254 * Modified:30 Sep.2019
255 */
256 public function start_verifying_cart() {
257 global $usces;
258
259 if ( file_exists( get_theme_file_path( '/wc_templates/cart/wc_cart_verifying.php' ) ) ) {
260 include get_theme_file_path( '/wc_templates/cart/wc_cart_verifying.php' );
261 exit;
262 }
263
264 return true;
265 }
266
267 /**
268 * Send verifymail
269 * Modified:30 Sep.2019
270 *
271 * @param array $user User data.
272 * @return bool
273 */
274 public function send_verifymail( $user ) {
275 global $usces;
276
277 $remaining_hour = $this->get_remaining_hour();
278 $res = false;
279 $newmem_admin_mail = $usces->options['newmem_admin_mail'];
280 $name = sprintf( _x( '%s', 'honorific', 'usces' ), usces_localized_name( trim( $user['name1'] ), trim( $user['name2'] ), 'return' ) );
281 $mailaddress1 = trim( $user['mailaddress1'] );
282
283 $subject = apply_filters( 'usces_filter_send_verifymembermail_subject', __( 'Request email confirmation', 'usces' ), $user );
284 $message = sprintf( __( 'Thank you for registering to %s.', 'usces' ), html_entity_decode( get_option( 'blogname' ) ) ) . "\r\n\r\n";
285 $message .= __( 'By accessing the following URL, you can complete membership registration.', 'usces' ) . "\r\n";
286 $message .= __( 'Please note that the procedure has not been completed until you receive registration complete e-mail.', 'usces' ) . "\r\n\r\n";
287 $message .= sprintf( __( 'The following URL is valid for %d hours. If it expires, please try again from the beginning.', 'usces' ), $remaining_hour ) . "\r\n\r\n";
288 $message .= $this->get_verify_url( $user ) . "\r\n\r\n";
289
290 $message .= '--------------------------------' . "\r\n";
291 $message .= __( 'Please delete this email if you were not aware that you were going to receive it.', 'usces' ) . "\r\n";
292 $message .= '--------------------------------' . "\r\n\r\n";
293 $message .= html_entity_decode( get_option( 'blogname' ) ) . "\r\n";
294 if ( 1 === (int) $usces->options['put_customer_name'] ) {
295 $dear_name = sprintf( __( 'Dear %s', 'usces' ), usces_localized_name( trim( $user['name1'] ), trim( $user['name2'] ), 'return' ) );
296 $message = $dear_name . "\r\n\r\n" . $message;
297 }
298 $message = apply_filters( 'usces_filter_send_verifymembermail_message', $message, $user );
299
300 $para1 = array(
301 'to_name' => $name,
302 'to_address' => $mailaddress1,
303 'from_name' => get_option( 'blogname' ),
304 'from_address' => $usces->options['sender_mail'],
305 'reply_name' => get_option( 'blogname' ),
306 'reply_to' => usces_get_first_order_mail(),
307 'return_path' => $usces->options['sender_mail'],
308 'subject' => $subject,
309 'message' => do_shortcode( $message ),
310 );
311 $para1 = apply_filters( 'usces_filter_send_verifymembermail_para1', $para1 );
312 $res = usces_send_mail( $para1 );
313 return $res;
314 }
315
316 /**
317 * Get verify url
318 * Modified:30 Sep.2019
319 *
320 * @param array $user User data.
321 * @return string
322 */
323 public function get_verify_url( $user ) {
324 global $usces;
325
326 $encrypt_value = $this->encrypt_value( $user );
327 // A1/C (Layer 3 / uscesid removal): 検証URL から uscesid を撤去。会員確認は暗号化 verify 値で
328 // 行われ session 非依存のため、uscesid は不要(A1 撤去後は無視される).
329 $query = array(
330 'verify' => $encrypt_value,
331 'usces_page' => 'memberverified',
332 );
333 $query = apply_filters( 'usces_filter_verifymail_query', $query, $user );
334 $url = add_query_arg( $query, USCES_MEMBER_URL );
335
336 return $url;
337 }
338
339 /**
340 * Encrypt value
341 * Modified:30 Sep.2019
342 *
343 * @param array $user User data.
344 * @return array
345 */
346 public function encrypt_value( $user ) {
347 if ( isset( $user['auth_code'] ) ) {
348 $datatext = $user['auth_code'];
349 } else {
350 $datatext = $user['regmode'] . ',' . $user['ID'];
351 }
352 $key = get_option( 'usces_wcid' );
353 $encrypt_value = openssl_encrypt( $datatext, self::$algo, $key, OPENSSL_RAW_DATA, self::$verify_key );
354 $encrypt_value = urlencode( base64_encode( $encrypt_value ) );
355
356 return $encrypt_value;
357 }
358
359 /**
360 * Decrypt value
361 * Modified:30 Sep.2019
362 *
363 * @param string $value Value.
364 * @return string
365 */
366 public function decrypt_value( $value ) {
367 $key = get_option( 'usces_wcid' );
368 $data = base64_decode( $value );
369 $data = openssl_decrypt( $data, self::$algo, $key, OPENSSL_RAW_DATA, self::$verify_key );
370
371 return $data;
372 }
373
374 /**
375 * Verified email
376 * usces_main
377 * Modified:30 Sep.2019
378 */
379 public function verified_email() {
380 global $usces;
381
382 if ( ! $usces->is_cart_or_member_page( $_SERVER['REQUEST_URI'] ) || ! isset( $_GET['verify'] ) ) {
383 return;
384 }
385
386 usces_register_action( 'page_allow_email', 'get', 'usces_page', 'memberverified', array( $this, 'allow_email' ) );
387 add_filter( 'usces_filter_template_redirect', array( $this, 'complete_verifying' ) );
388 remove_filter( 'usces_filter_template_redirect', 'dlseller_filter_template_redirect', 2 );
389 }
390
391 /**
392 * Allow email
393 * Modified:30 Sep.2019
394 */
395 public function allow_email() {
396 global $usces;
397
398 if ( ! $usces->is_cart_or_member_page( $_SERVER['REQUEST_URI'] ) || ! isset( $_GET['verify'] ) ) {
399 return;
400 }
401
402 $value = wp_unslash( $_GET['verify'] );
403 $datatext = $this->decrypt_value( $value );
404 $data = explode( ',', $datatext );
405 $regmode = $data[0];
406 $mem_id = (int) $data[1];
407 $member = $usces->get_member_info( $mem_id );
408 $flag = $usces->get_member_meta_value( '_verifying', $mem_id );
409 if ( empty( $member ) || empty( $flag ) ) {
410 wp_redirect( USCES_MEMBER_URL );
411 exit;
412 }
413
414 $user = array();
415 foreach ( $member as $key => $value ) {
416 if ( 'mem_email' === $key ) {
417 $user['mailaddress1'] = $value;
418 } elseif ( 'mem_name1' === $key ) {
419 $user['name1'] = $value;
420 } elseif ( 'mem_name2' === $key ) {
421 $user['name2'] = $value;
422 } elseif ( 'mem_name3' === $key ) {
423 $user['name3'] = $value;
424 } elseif ( 'mem_name4' === $key ) {
425 $user['name4'] = $value;
426 } elseif ( 'mem_zip' === $key ) {
427 $user['zipcode'] = $value;
428 } elseif ( 'customer_country' === $key ) {
429 $user['country'] = $value;
430 } elseif ( 'mem_pref' === $key ) {
431 $user['pref'] = $value;
432 } elseif ( 'mem_address1' === $key ) {
433 $user['address1'] = $value;
434 } elseif ( 'mem_address2' === $key ) {
435 $user['address2'] = $value;
436 } elseif ( 'mem_address3' === $key ) {
437 $user['address3'] = $value;
438 } elseif ( 'mem_tel' === $key ) {
439 $user['tel'] = $value;
440 } elseif ( 'mem_fax' === $key ) {
441 $user['fax'] = $value;
442 } else {
443 $user[ $key ] = $value;
444 }
445 }
446
447 $usces->del_member_meta( '_verifying', $mem_id );
448
449 do_action( 'usces_action_member_registered', $user, $mem_id );
450 usces_send_regmembermail( $user );
451
452 if ( 'newmemberform' === $regmode ) {
453 unset( $_SESSION['usces_member'] );
454 $usces->page = 'newcompletion';
455 add_action( 'the_post', array( $usces, 'action_memberFilter' ) );
456 add_action( 'template_redirect', array( $usces, 'template_redirect' ) );
457
458 do_action( 'usces_action_after_newmemberform_verified', $user, $data );
459
460 } elseif ( 'newmemberfromcart' === $regmode ) {
461 unset( $_SESSION['usces_entry']['customer'] );
462 $usces->page = 'cartverified';
463 add_action( 'the_post', array( $usces, 'action_cartFilter' ) );
464 add_action( 'template_redirect', array( $usces, 'template_redirect' ) );
465
466 do_action( 'usces_action_after_newmemberfromcart_verified', $user, $data );
467 }
468 }
469
470 /**
471 * Complete verifying
472 * Modified:30 Sep.2019
473 */
474 public function complete_verifying() {
475 global $usces;
476
477 if ( file_exists( get_theme_file_path( '/wc_templates/cart/wc_cart_verified.php' ) ) ) {
478 include get_theme_file_path( '/wc_templates/cart/wc_cart_verified.php' );
479 exit;
480 }
481
482 return true;
483 }
484
485 /**
486 * Get remaining hour
487 * Modified:30 Sep.2019
488 */
489 public static function get_remaining_hour() {
490 $crons = _get_cron_array();
491 $remaining_time = 0;
492 foreach ( $crons as $time => $cron ) {
493 foreach ( $cron as $key => $value ) {
494 if ( 'wc_cron' === $key ) {
495 $remaining_time = $time - current_time( 'timestamp', 1 );
496 }
497 }
498 }
499 $remaining_hour = floor( $remaining_time / 3600 );
500 if ( 1 > $remaining_hour ) {
501 $remaining_hour = 1;
502 }
503
504 return $remaining_hour;
505 }
506
507 /**
508 * 'wc_cron' event
509 * Modified:30 Sep.2019
510 */
511 public function delete_flag() {
512 global $wpdb;
513
514 $table = usces_get_tablename( 'usces_member_meta' );
515 $mem_ids = $wpdb->get_col( $wpdb->prepare( "SELECT `member_id` FROM {$table} WHERE `meta_key` = %s", '_verifying' ) );
516
517 foreach ( (array) $mem_ids as $mem_id ) {
518 usces_delete_memberdata( $mem_id );
519 }
520 }
521
522 /**
523 * Delete expired authentication flags.
524 */
525 public function delete_edit_flag() {
526 global $usces, $wpdb;
527
528 $member_meta_table = usces_get_tablename( 'usces_member_meta' );
529 $member_ids = $wpdb->get_col( $wpdb->prepare( "SELECT `member_id` FROM {$member_meta_table} WHERE `meta_key` = %s", 'auth_url_creation_time' ) );
530 if ( ! empty( $member_ids ) ) {
531 $now = current_time( 'timestamp' );
532 foreach ( (array) $member_ids as $member_id ) {
533 $time = $usces->get_member_meta_value( 'auth_url_creation_time', $member_id );
534 if ( $time < $now ) {
535 $usces->del_member_meta( 'auth_url_creation_time', $member_id );
536 $usces->del_member_meta( 'member_edit_auth_code', $member_id );
537 }
538 }
539 }
540 }
541
542 /**
543 * Member information editing page.
544 *
545 * @return bool
546 */
547 private function is_member_edit_page() {
548 global $usces;
549
550 $member_edit = false;
551 if ( $usces->is_member_page( $_SERVER['REQUEST_URI'] ) ) {
552 $usces_page = ( ! empty( $usces->page ) ) ? $usces->page : filter_input( INPUT_GET, 'usces_page', FILTER_DEFAULT );
553 switch ( $usces_page ) {
554 case 'newmember':
555 case 'member_auth_error':
556 case 'member_register_settlement':
557 case 'member_update_settlement':
558 case 'member_auto_billing_info':
559 case 'member_favorite_page':
560 case 'autodelivery_history':
561 case 'msa_setting':
562 case 'mda_setting':
563 $member_edit = false;
564 break;
565 default:
566 $member_edit = true;
567 }
568 }
569 return $member_edit;
570 }
571
572 /**
573 * Front scripts.
574 * wp_enqueue_scripts
575 */
576 public function enqueue_scripts() {
577 global $usces;
578
579 if ( $this->is_member_edit_page() ) {
580 $member = $usces->get_member();
581 $edit_url = add_query_arg(
582 array(
583 'usces_page' => 'member_edit',
584 ),
585 USCES_MEMBER_URL
586 );
587 $card_reg_url = add_query_arg(
588 array(
589 'usces_page' => 'member_register_settlement',
590 're-enter' => 1,
591 ),
592 USCES_MEMBER_URL
593 );
594 $card_upd_url = add_query_arg(
595 array(
596 'usces_page' => 'member_update_settlement',
597 're-enter' => 1,
598 ),
599 USCES_MEMBER_URL
600 );
601 wp_register_script( 'wel-member-auth', USCES_FRONT_PLUGIN_URL . '/js/member_auth.js', array( 'jquery' ), USCES_VERSION, true );
602 $member_params = array();
603 $member_params['url']['go2top'] = esc_url( home_url() );
604 $member_params['url']['edit'] = $edit_url;
605 $member_params['url']['card_reg'] = $card_reg_url;
606 $member_params['url']['card_upd'] = $card_upd_url;
607 $member_params['label']['go2top'] = esc_html__( 'Back to the top page.', 'usces' );
608 $member_params['label']['edit'] = esc_html__( 'To member information editing', 'usces' );
609 $member_params['message']['edit'] = esc_html__( 'Identity verification is required to edit your membership information. Are you sure you want to send an authentication email to your registered email address?', 'usces' );
610 $member_params['message']['card_reg'] = esc_html__( 'Identity verification is required to register credit card information. Are you sure you want to send an authentication email to your registered email address?', 'usces' );
611 $member_params['message']['card_upd'] = esc_html__( 'Identity verification is required to change credit card information. Are you sure you want to send an authentication email to your registered email address?', 'usces' );
612 $member_params['message']['done'] = esc_html__( 'Successfully updated.', 'usces' );
613 $member_params['edit_auth'] = ( isset( $member['edit_auth'] ) ) ? $member['edit_auth'] : '';
614 wp_localize_script( 'wel-member-auth', 'member_params', $member_params );
615 wp_enqueue_script( 'wel-member-auth' );
616 }
617 }
618
619 /**
620 * Front styles.
621 * wp_print_styles
622 */
623 public function print_styles() {
624 if ( $this->is_member_edit_page() ) :
625 ?>
626 <style type="text/css">
627 .send {
628 padding-top: .714286em;
629 text-align: center;
630 }
631 </style>
632 <?php
633 endif;
634 }
635
636 /**
637 * Authenticate first.
638 * usces_main
639 */
640 public function member_auth_first() {
641 global $usces;
642
643 if ( $usces->is_member_page( $_SERVER['REQUEST_URI'] ) ) {
644 if ( ! usces_is_login() ) {
645 return;
646 }
647 $usces_page = ( ! empty( $usces->page ) ) ? $usces->page : filter_input( INPUT_GET, 'usces_page', FILTER_DEFAULT );
648 switch ( $usces_page ) {
649 case 'member_register_settlement':
650 case 'member_update_settlement':
651 $member = $usces->get_member();
652 if ( ! $this->member_auth_check( $member ) ) {
653 $usces->page = 'member_edit';
654 $url = add_query_arg(
655 array(
656 'usces_page' => 'member_edit',
657 'usces_subpage' => $usces_page,
658 ),
659 USCES_MEMBER_URL
660 );
661 wp_safe_redirect( $url );
662 exit();
663 }
664 break;
665
666 case 'member_auto_billing_info':
667 case 'member_favorite_page':
668 case 'autodelivery_history':
669 case 'msa_setting':
670 case 'mda_setting':
671 break;
672 default:
673 }
674 }
675 }
676
677 /**
678 * Authenticate Membership.
679 * usces_filter_template_redirect
680 */
681 public function member_auth() {
682 global $usces;
683
684 if ( $usces->is_member_page( $_SERVER['REQUEST_URI'] ) ) {
685 $usces_page = filter_input( INPUT_GET, 'usces_page', FILTER_DEFAULT );
686 if ( 'member_auth_error' === $usces_page ) {
687 $this->member_verifying_error_form();
688 exit();
689 }
690 if ( ! usces_is_login() ) {
691 return false;
692 }
693 if ( 'member_edit' !== $usces_page && 'member_edit' !== $usces->page ) {
694 return false;
695 }
696
697 add_filter( 'usces_filter_states_form_js', array( $this, 'states_form_js' ) );
698
699 $member = $usces->get_member();
700 if ( ! $this->member_auth_check( $member ) ) {
701 $subpage = filter_input( INPUT_GET, 'usces_subpage', FILTER_DEFAULT );
702 $now = current_time( 'timestamp' );
703 $time = strtotime( '+15 minutes', $now );
704 $usces->set_member_meta_value( 'auth_url_creation_time', $time, $member['ID'] );
705 $auth_code = $this->generate_auth_code();
706 $usces->set_member_meta_value( 'member_edit_auth_code', $auth_code, $member['ID'] );
707 $member['regmode'] = 'updatememberform';
708 $member['auth_code'] = $auth_code;
709 $this->send_verify_edit_email( $member, $time );
710 $this->member_edit_verifying_form();
711 exit();
712 } else {
713 $usces->page = 'member_edit';
714 $this->member_edit_form( $member );
715 exit();
716 }
717 }
718
719 return false;
720 }
721
722 /**
723 * Authentication Code Generation.
724 *
725 * @return string
726 */
727 public function generate_auth_code() {
728 $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
729 $characterslength = strlen( $characters );
730 $auth_code = '';
731 for ( $i = 0; $i < 24; $i++ ) {
732 $auth_code .= $characters[ wp_rand( 0, $characterslength - 1 ) ];
733 }
734 return $auth_code;
735 }
736
737 /**
738 * Disable hook.
739 * usces_filter_states_form_js
740 *
741 * @param string $js Scripts.
742 * @return string
743 */
744 public function states_form_js( $js ) {
745 return '';
746 }
747
748 /**
749 * Send member verification email.
750 *
751 * @param array $member Member data.
752 * @param int $time Remaining time in minutes.
753 */
754 public function send_verify_edit_email( $member, $time ) {
755 global $usces;
756
757 $name = usces_localized_name( trim( $member['name1'] ), trim( $member['name2'] ), 'return' );
758 $mailaddress1 = trim( $member['mailaddress1'] );
759
760 $subject = apply_filters( 'usces_filter_send_verifyeditmail_subject', __( 'Identity Verification Email', 'usces' ), $member );
761 $totime = date( __( 'Y-n-j G:i', 'usces' ), $time );
762
763 $message = sprintf( __( 'This email is a verification email for updating your membership information at "%s".', 'usces' ), html_entity_decode( get_option( 'blogname' ) ) ) . "\r\n";
764 $message .= __( 'By clicking on the URL below, your identity will be authenticated.', 'usces' ) . "\r\n";
765 $message .= __( 'After authentication, My Page will be displayed, so please click the menu again to proceed.', 'usces' ) . "\r\n";
766 $message .= sprintf( __( 'Please note that this URL is valid until %s.', 'usces' ), $totime ) . "\r\n\r\n";
767 $message .= $this->get_verify_edit_url( $member ) . "\r\n\r\n";
768
769 $message .= __( 'Please delete this email if you were not aware that you were going to receive it.', 'usces' ) . "\r\n\r\n";
770 $message .= html_entity_decode( get_option( 'blogname' ) ) . "\r\n";
771 if ( 1 === (int) $usces->options['put_customer_name'] ) {
772 // translators: %s: name of user.
773 $dear_name = sprintf( __( 'Dear %s', 'usces' ), $name );
774 $message = $dear_name . "\r\n\r\n" . $message;
775 }
776 $message = apply_filters( 'usces_filter_send_verifyeditmail_message', $message, $member );
777
778 $para1 = array(
779 'to_name' => sprintf( _x( '%s', 'honorific', 'usces' ), $name ),
780 'to_address' => $mailaddress1,
781 'from_name' => get_option( 'blogname' ),
782 'from_address' => $usces->options['sender_mail'],
783 'reply_name' => get_option( 'blogname' ),
784 'reply_to' => usces_get_first_order_mail(),
785 'return_path' => $usces->options['sender_mail'],
786 'subject' => $subject,
787 'message' => do_shortcode( $message ),
788 );
789 $para1 = apply_filters( 'usces_filter_send_verifyeditmail_para1', $para1 );
790 usces_send_mail( $para1 );
791 }
792
793 /**
794 * URL for member verification.
795 *
796 * @param array $member Member data.
797 * @return string
798 */
799 private function get_verify_edit_url( $member ) {
800 global $usces;
801
802 $encrypt_value = $this->encrypt_value( $member );
803 $query = array(
804 'member_edit_auth_code' => $encrypt_value,
805 );
806 $query = apply_filters( 'usces_filter_verifyeditmail_query', $query, $member );
807 $url = add_query_arg( $query, USCES_MEMBER_URL );
808
809 return $url;
810 }
811
812 /**
813 * Member Authentication Check.
814 *
815 * @param array $member Member data.
816 * @return bool
817 */
818 public function member_auth_check( $member ) {
819 if ( empty( $member['edit_auth'] ) ) {
820 return false;
821 }
822 return true;
823 }
824
825 /**
826 * Authentication mail transmission completion page.
827 */
828 public function member_edit_verifying_form() {
829 get_header();
830 ob_start();
831 ?>
832 <div class="storycontent">
833 <div id="primary" class="site-content">
834 <main id="content" class="inner_block member-page" role="main">
835 <?php
836 if ( have_posts() ) :
837 usces_remove_filter();
838 ?>
839 <article class="post wc_member" id="wc_member">
840 <h1 class="member_page_title"><?php esc_html_e( 'Verifying', 'usces' ); ?></h1>
841
842 <div id="memberpages">
843 <div class="whitebox">
844 <div id="memberedit">
845
846 <div class="header_explanation">
847 <?php echo apply_filters( 'usces_filter_memberverifying_page_header', '' ); ?>
848 </div>
849
850 <h2><?php esc_html_e( 'Authentication email sent.', 'usces' ); ?></h2>
851 <p><?php esc_html_e( 'When updating important information, you will need to authenticate your identity by email.', 'usces' ); ?></p>
852 <p><?php esc_html_e( 'You will receive an authentication email to your registered email address. Please click the URL in the body of the email to approve it.', 'usces' ); ?></p>
853 <p><?php esc_html_e( 'The URL for authentication expires in 15 minutes from now.', 'usces' ); ?></p>
854 <p><?php esc_html_e( 'If the expiration date has passed, please click the menu again to send the authentication email.', 'usces' ); ?></p>
855
856 <div class="footer_explanation">
857 <?php echo apply_filters( 'usces_filter_memberverifying_page_footer', '' ); ?>
858 </div>
859
860 <div class="send">
861 <input type="button" name="back" class="top back" value="<?php esc_attr_e( 'Back', 'usces' ); ?>" onclick="location.href='<?php echo esc_url( USCES_MEMBER_URL ); ?>'" />
862 </div>
863
864 </div><!-- #memberedit -->
865 </div><!-- .whitebox -->
866 </div><!-- #memberpages -->
867 </article><!-- .post .wc_member #wc_member -->
868 </main><!-- #content .inner_block .member-page -->
869 </div><!-- #primary .site-content -->
870 </div><!-- .storycontent -->
871 <?php
872 endif;
873 $contents = ob_get_contents();
874 ob_end_clean();
875 $contents = apply_filters( 'usces_filter_member_edit_verifying_form', $contents );
876 echo $contents; // no escape.
877 get_footer();
878 }
879
880 /**
881 * Authentication mail transmission completion page.
882 */
883 public function member_verifying_error_form() {
884 $auth_error = filter_input( INPUT_GET, 'auth_error', FILTER_DEFAULT );
885 get_header();
886 ob_start();
887 ?>
888 <div class="storycontent">
889 <div id="primary" class="site-content">
890 <main id="content" class="inner_block member-page" role="main">
891 <?php
892 if ( have_posts() ) :
893 usces_remove_filter();
894 ?>
895 <article class="post wc_member" id="wc_member">
896 <h1 class="member_page_title"><?php esc_html_e( 'Verifying', 'usces' ); ?></h1>
897
898 <div id="memberpages">
899 <div class="whitebox">
900 <div id="memberedit">
901
902 <div class="header_explanation">
903 <?php echo apply_filters( 'usces_filter_memberverifying_error_page_header', '' ); ?>
904 </div>
905
906 <h2><?php esc_html_e( 'Email Authentication Error', 'usces' ); ?></h2>
907 <?php if ( 0 < $auth_error ) : ?>
908 <p><?php esc_html_e( 'Authentication by email has failed.', 'usces' ); ?></p>
909 <?php endif; ?>
910 <p><?php esc_html_e( 'Authentication URL has expired or invalid access.', 'usces' ); ?></p>
911
912 <div class="footer_explanation">
913 <?php echo apply_filters( 'usces_filter_memberverifying_error_page_footer', '' ); ?>
914 </div>
915
916 <div class="send">
917 <input type="button" name="back" class="top back" value="<?php esc_attr_e( 'Back to the member page.', 'usces' ); ?>" onclick="location.href='<?php echo esc_url( USCES_MEMBER_URL ); ?>'" />
918 </div>
919
920 </div><!-- #memberedit -->
921 </div><!-- .whitebox -->
922 </div><!-- #memberpages -->
923 </article><!-- .post .wc_member #wc_member -->
924 </main><!-- #content .inner_block .member-page -->
925 </div><!-- #primary .site-content -->
926 </div><!-- .storycontent -->
927 <?php
928 endif;
929 $contents = ob_get_contents();
930 ob_end_clean();
931 $contents = apply_filters( 'usces_filter_member_verifying_error_form', $contents, $auth_error );
932 echo $contents; // no escape.
933 get_footer();
934 }
935
936 /**
937 * Member information editing page.
938 *
939 * @param array $member Member data.
940 */
941 public function member_edit_form( $member ) {
942 global $usces;
943
944 $update = '';
945 if ( empty( $usces->error_message ) && isset( $_POST['editmember'] ) ) {
946 $update = 'update';
947 }
948
949 get_header();
950 ob_start();
951 ?>
952 <div class="storycontent">
953 <div id="primary" class="site-content">
954 <main id="content" class="inner_block member-page" role="main">
955 <?php
956 if ( have_posts() ) :
957 usces_remove_filter();
958 ?>
959 <article class="post wc_member" id="wc_member">
960 <h1 class="member_page_title"><?php esc_html_e( 'Member information editing', 'usces' ); ?></h1>
961
962 <div id="memberpages">
963 <div class="whitebox">
964 <div id="memberedit">
965
966 <div class="error_message"><?php usces_error_message(); ?></div>
967
968 <form action="<?php echo esc_url( USCES_MEMBER_URL ); ?>#edit" method="post" onKeyDown="if (event.keyCode == 13) {return false;}">
969 <table class="customer_form">
970
971 <?php uesces_addressform( 'member', $member, 'echo' ); ?>
972
973 <tr>
974 <th scope="row"><?php esc_html_e( 'e-mail adress', 'usces' ); ?></th>
975 <td colspan="2"><input name="member[mailaddress1]" id="mailaddress1" type="text" value="<?php echo esc_attr( $member['mailaddress1'] ); ?>" /></td>
976 </tr>
977 <tr>
978 <th scope="row"><?php esc_html_e( 'E-mail address (for verification)', 'usces' ); ?></th>
979 <td colspan="2"><input name="member[mailaddress2]" id="mailaddress2" type="text" autocomplete="off" />
980 <?php esc_html_e( 'Leave it blank in case of no change.', 'usces' ); ?></td>
981 </tr>
982 <tr>
983 <th scope="row"><?php esc_html_e( 'password', 'usces' ); ?></th>
984 <td colspan="2">
985 <input name="member[password1]" id="password1" type="password" readonly />
986 <?php esc_html_e( 'Leave it blank in case of no change.', 'usces' ); ?></td>
987 </tr>
988 <tr>
989 <th scope="row"><?php esc_html_e( 'Password (confirm)', 'usces' ); ?></th>
990 <td colspan="2">
991 <input name="member[password2]" id="password2" type="password" readonly />
992 <?php esc_html_e( 'Leave it blank in case of no change.', 'usces' ); ?></td>
993 </tr>
994 </table>
995
996 <input name="member_regmode" type="hidden" value="updatememberform" />
997 <input name="member_id" type="hidden" value="<?php echo esc_attr( $member['ID'] ); ?>" />
998 <input id="update" type="hidden" value="<?php echo esc_attr( $update ); ?>" />
999 <div class="send">
1000 <input type="button" name="top" class="top" value="<?php esc_attr_e( 'Back to the top page.', 'usces' ); ?>" onclick="location.href='<?php echo esc_url( home_url() ); ?>'" />
1001 <input type="button" name="back" class="top back" value="<?php esc_attr_e( 'Back to the member page.', 'usces' ); ?>" onclick="location.href='<?php echo esc_url( USCES_MEMBER_URL ); ?>'" />
1002 <input type="submit" name="editmember" class="editmember" value="<?php esc_html_e( 'update it', 'usces' ); ?>" />
1003 <input type="submit" name="deletemember" class="deletemember" value="<?php esc_html_e( 'delete it', 'usces' ); ?>" onclick="return confirm('<?php esc_attr_e( 'All information about the member is deleted. Are you all right?', 'usces' ); ?>');" />
1004 <?php $noncekey = $usces->member_nonce_key( 'post_member' ); ?>
1005 <?php wp_nonce_field( $noncekey, 'wc_nonce' ); ?>
1006 </div><!-- .send -->
1007 </form>
1008
1009 </div><!-- #memberedit -->
1010 </div><!-- .whitebox -->
1011 </div><!-- #memberpages -->
1012 </article><!-- .post .wc_member #wc_member -->
1013 </main><!-- #content .inner_block .member-page -->
1014 </div><!-- #primary .site-content -->
1015 </div><!-- .storycontent -->
1016 <?php
1017 endif;
1018 $contents = ob_get_contents();
1019 ob_end_clean();
1020 $contents = apply_filters( 'usces_filter_member_edit_form', $contents, $member, $update );
1021 echo $contents; // no escape.
1022 get_footer();
1023 }
1024
1025 /**
1026 * Verify membership with an authentication code.
1027 *
1028 * @param string $auth_code Authentication Code.
1029 */
1030 private function get_member_id_by_auth_code( $auth_code ) {
1031 global $wpdb;
1032
1033 $member_meta_table = usces_get_tablename( 'usces_member_meta' );
1034 $member_id = $wpdb->get_var( $wpdb->prepare( "SELECT `member_id` FROM {$member_meta_table} WHERE `meta_key` = %s AND `meta_value` = %s", 'member_edit_auth_code', $auth_code ) );
1035 return $member_id;
1036 }
1037
1038 /**
1039 * Verify Membership.
1040 * usces_main
1041 */
1042 public function verified_member() {
1043 global $usces;
1044
1045 if ( ! $usces->is_member_page( $_SERVER['REQUEST_URI'] ) || ! isset( $_GET['member_edit_auth_code'] ) ) {
1046 return;
1047 }
1048
1049 $value = wp_unslash( $_GET['member_edit_auth_code'] );
1050 $auth_code = $this->decrypt_value( $value );
1051 $member_id = $this->get_member_id_by_auth_code( $auth_code );
1052
1053 if ( empty( $member_id ) && usces_is_login() ) {
1054 $member = $usces->get_member();
1055 if ( isset( $member['edit_auth'] ) ) {
1056 $loggedin_member_id = $this->get_member_id_by_auth_code( $member['edit_auth'] );
1057 if ( (int) $member['ID'] === (int) $loggedin_member_id ) {
1058 wp_safe_redirect(
1059 add_query_arg(
1060 array(
1061 'usces_page' => 'member_auth_error',
1062 'auth_error' => '0',
1063 ),
1064 USCES_MEMBER_URL
1065 )
1066 );
1067 exit();
1068 }
1069 }
1070 }
1071
1072 $member_info = $usces->get_member_info( $member_id );
1073 $time = $usces->get_member_meta_value( 'auth_url_creation_time', $member_id );
1074 $now = current_time( 'timestamp' );
1075 if ( empty( $member_info ) || empty( $time ) || $time < $now ) {
1076 wp_safe_redirect(
1077 add_query_arg(
1078 array(
1079 'usces_page' => 'member_auth_error',
1080 'auth_error' => '1',
1081 ),
1082 USCES_MEMBER_URL
1083 )
1084 );
1085 exit();
1086 }
1087
1088 if ( usces_is_login() ) {
1089 $member = $usces->get_member();
1090 if ( (int) $member['ID'] !== (int) $member_id ) {
1091 wp_safe_redirect(
1092 add_query_arg(
1093 array(
1094 'usces_page' => 'member_auth_error',
1095 'auth_error' => '2',
1096 ),
1097 USCES_MEMBER_URL
1098 )
1099 );
1100 exit();
1101 }
1102
1103 if ( isset( $_SESSION['usces_member']['edit_auth'] ) ) {
1104 if ( $_SESSION['usces_member']['edit_auth'] !== $auth_code ) {
1105 wp_safe_redirect(
1106 add_query_arg(
1107 array(
1108 'usces_page' => 'member_auth_error',
1109 'auth_error' => '3',
1110 ),
1111 USCES_MEMBER_URL
1112 )
1113 );
1114 exit();
1115 }
1116 }
1117
1118 $_SESSION['usces_member']['edit_auth'] = $auth_code;
1119
1120 $usces->page = 'member';
1121 add_action( 'the_post', array( $usces, 'action_memberFilter' ) );
1122 add_action( 'template_redirect', array( $usces, 'template_redirect' ) );
1123
1124 } else {
1125 $usces->page = 'login';
1126 add_action( 'the_post', array( $usces, 'action_memberFilter' ) );
1127 add_action( 'template_redirect', array( $usces, 'template_redirect' ) );
1128 }
1129 }
1130
1131 /**
1132 * Member Login.
1133 * usces_filter_login_inform
1134 *
1135 * @param string $form HTML Form.
1136 * @return string
1137 */
1138 public function login_inform( $form ) {
1139 global $usces;
1140
1141 if ( isset( $_SERVER['QUERY_STRING'] ) ) {
1142 parse_str( $_SERVER['QUERY_STRING'], $query );
1143 if ( isset( $query['member_edit_auth_code'] ) ) {
1144 $auth_code = $this->decrypt_value( $query['member_edit_auth_code'] );
1145 $form .= '<input type="hidden" name="memeditauth" value="' . esc_attr( $auth_code ) . '">';
1146 } elseif ( isset( $_POST['memeditauth'] ) ) {
1147 $form .= '<input type="hidden" name="memeditauth" value="' . esc_attr( $_POST['memeditauth'] ) . '">';
1148 }
1149 } elseif ( isset( $_POST['memeditauth'] ) ) {
1150 $form .= '<input type="hidden" name="memeditauth" value="' . esc_attr( $_POST['memeditauth'] ) . '">';
1151 }
1152 return $form;
1153 }
1154
1155 /**
1156 * Member Login.
1157 * usces_action_login_page_inform
1158 */
1159 public function login_page_inform() {
1160 global $usces;
1161
1162 if ( isset( $_SERVER['QUERY_STRING'] ) ) {
1163 parse_str( $_SERVER['QUERY_STRING'], $query );
1164 if ( isset( $query['member_edit_auth_code'] ) ) {
1165 $auth_code = $this->decrypt_value( $query['member_edit_auth_code'] );
1166 echo '<input type="hidden" name="memeditauth" value="' . esc_attr( $auth_code ) . '">';
1167 } elseif ( isset( $_POST['memeditauth'] ) ) {
1168 echo '<input type="hidden" name="memeditauth" value="' . esc_attr( $_POST['memeditauth'] ) . '">';
1169 }
1170 } elseif ( isset( $_POST['memeditauth'] ) ) {
1171 echo '<input type="hidden" name="memeditauth" value="' . esc_attr( $_POST['memeditauth'] ) . '">';
1172 }
1173 }
1174
1175 /**
1176 * Submenu area of the member page.
1177 * usces_filter_member_submenu_list
1178 *
1179 * @param string $submenu_list Submenu area.
1180 * @param array $member Member information.
1181 * @return string
1182 */
1183 public function member_submenu_list( $submenu_list, $member ) {
1184 if ( empty( $submenu_list ) ) {
1185 $submenu_list = '<li class="member-edit"><a href="#edit">' . esc_html__( 'To member information editing', 'usces' ) . '</a></li>';
1186 }
1187 return $submenu_list;
1188 }
1189
1190 /**
1191 * Processing after login.
1192 * usces_action_member_logined
1193 */
1194 public function after_login() {
1195 global $usces;
1196
1197 if ( isset( $_POST['memeditauth'] ) ) {
1198 $auth_code = filter_input( INPUT_POST, 'memeditauth', FILTER_DEFAULT );
1199 $member_id = $this->get_member_id_by_auth_code( $auth_code );
1200 if ( (int) $member_id === (int) $_SESSION['usces_member']['ID'] ) {
1201 $_SESSION['usces_member']['edit_auth'] = $auth_code;
1202 }
1203 }
1204 }
1205
1206 /**
1207 * Send login notification email.
1208 * usces_action_after_login
1209 */
1210 public function login_notify() {
1211 global $usces;
1212
1213 $member = $usces->get_member();
1214 $name = usces_localized_name( trim( $member['name1'] ), trim( $member['name2'] ), 'return' );
1215 $mailaddress1 = trim( $member['mailaddress1'] );
1216
1217 // translators: %s: name of shop.
1218 $subject = apply_filters( 'usces_filter_send_loginnotifymail_subject', sprintf( __( '%s : Login Notification', 'usces' ), get_option( 'blogname' ) ), $member );
1219
1220 $message = __( 'There has been a login on your account. Please review the following information and if you are not familiar with it, please change your password for your own safety.', 'usces' ) . "\r\n\r\n";
1221 $message .= '--------------------------------' . "\r\n";
1222 $message .= __( 'Login date and time', 'usces' ) . ' : ' . wp_date( 'Y-m-d H:i:s' ) . "\r\n";
1223 $message .= __( 'Member ID', 'usces' ) . ' : ' . $member['ID'] . "\r\n";
1224 $message .= __( 'Full name', 'usces' ) . ' : ' . sprintf( __( 'Dear %s', 'usces' ), $name ) . "\r\n";
1225 $message .= '--------------------------------' . "\r\n\r\n";
1226
1227 $message .= html_entity_decode( get_option( 'blogname' ) ) . "\r\n";
1228 if ( 1 === (int) $usces->options['put_customer_name'] ) {
1229 // translators: %s: name of user.
1230 $dear_name = sprintf( __( 'Dear %s', 'usces' ), $name );
1231 $message = $dear_name . "\r\n\r\n" . $message;
1232 }
1233 $message = apply_filters( 'usces_filter_send_loginnotifymail_message', $message, $member );
1234
1235 $para1 = array(
1236 'to_name' => sprintf( _x( '%s', 'honorific', 'usces' ), $name ),
1237 'to_address' => $mailaddress1,
1238 'from_name' => get_option( 'blogname' ),
1239 'from_address' => $usces->options['sender_mail'],
1240 'reply_name' => get_option( 'blogname' ),
1241 'reply_to' => usces_get_first_order_mail(),
1242 'return_path' => $usces->options['error_mail'],
1243 'subject' => $subject,
1244 'message' => do_shortcode( $message ),
1245 );
1246 $para1 = apply_filters( 'usces_filter_send_loginnotifymail_para1', $para1 );
1247 usces_send_mail( $para1 );
1248 }
1249 }
1250