class.swpm-front-registration.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. <?php
  2. /**
  3. * Description of BFrontRegistration
  4. *
  5. * @author nur
  6. */
  7. class SwpmFrontRegistration extends SwpmRegistration {
  8. public static function get_instance() {
  9. self::$_intance = empty( self::$_intance ) ? new SwpmFrontRegistration() : self::$_intance;
  10. return self::$_intance;
  11. }
  12. public function regigstration_ui( $level ) {
  13. $settings_configs = SwpmSettings::get_instance();
  14. //Check if the hide rego from logged-in users feature is enabled before rendering the registration form.
  15. $hide_rego_to_logged_users = $settings_configs->get_value( 'hide-rego-form-to-logged-users' );
  16. if ( ! empty( $hide_rego_to_logged_users ) ){
  17. //Hide registration form to logged-in users feature is enabled. Check if the form should be hidden.
  18. if ( SwpmMemberUtils::is_member_logged_in() ) {
  19. $rego_hidden_to_logged_users_msg = '<div class="registration_hidden_to_logged_users_msg">';
  20. $rego_hidden_to_logged_users_msg .= SwpmUtils::_( "You are already logged in. You don't need to create another account. So the registration form is hidden." );
  21. $rego_hidden_to_logged_users_msg .= '</div>';
  22. return $rego_hidden_to_logged_users_msg;
  23. }
  24. }
  25. //Trigger the filter to override the registration form (the form builder addon uses this filter)
  26. $form = apply_filters( 'swpm_registration_form_override', '', $level ); //The $level value could be empty also so the code handling the filter need to check for it.
  27. if ( ! empty( $form ) ) {
  28. //An addon has overridden the registration form. So use that one.
  29. return $form;
  30. }
  31. $joinuspage_url = $settings_configs->get_value( 'join-us-page-url' );
  32. $membership_level = '';
  33. global $wpdb;
  34. if ( SwpmUtils::is_paid_registration() ) {
  35. //Lets check if this is a registration for paid membership
  36. $member = SwpmUtils::get_paid_member_info();
  37. if ( empty( $member ) ) {
  38. SwpmUtils::e( 'Error! Invalid Request. Could not find a match for the given security code and the user ID.' );
  39. } else {
  40. $membership_level = $member->membership_level;
  41. }
  42. } elseif ( ! empty( $level ) ) {
  43. //Membership level is specified in the shortcode (level specific registration form).
  44. $member = SwpmTransfer::$default_fields;
  45. $membership_level = absint( $level );
  46. }
  47. //Check if free membership registration is disalbed on the site
  48. if ( empty( $membership_level ) ) {
  49. $joinuspage_link = '<a href="' . $joinuspage_url . '">' . SwpmUtils::_( 'Join Us' ) . '</a>';
  50. $free_rego_disabled_msg = '<p>';
  51. $free_rego_disabled_msg .= SwpmUtils::_( 'Free membership is disabled on this site. Please make a payment from the ' );
  52. $free_rego_disabled_msg .= SwpmUtils::_( $joinuspage_link );
  53. $free_rego_disabled_msg .= SwpmUtils::_( ' page to pay for a premium membership.' );
  54. $free_rego_disabled_msg .= '</p><p>';
  55. $free_rego_disabled_msg .= SwpmUtils::_( 'You will receive a unique link via email after the payment. You will be able to use that link to complete the premium membership registration.' );
  56. $free_rego_disabled_msg .= '</p>';
  57. return $free_rego_disabled_msg;
  58. }
  59. //Handle the registration form in core plugin
  60. $membership_info = SwpmPermission::get_instance( $membership_level );
  61. $membership_level = $membership_info->get( 'id' );
  62. if ( empty( $membership_level ) ) {
  63. return 'Error! Failed to retrieve membership level ID from the membership info object.';
  64. }
  65. $level_identifier = md5( $membership_level );
  66. $membership_level_alias = $membership_info->get( 'alias' );
  67. $swpm_registration_submit = filter_input( INPUT_POST, 'swpm_registration_submit' );
  68. if ( ! empty( $swpm_registration_submit ) ) {
  69. $member = array_map( 'sanitize_text_field', $_POST );
  70. }
  71. ob_start();
  72. extract( (array) $member, EXTR_SKIP );
  73. include SIMPLE_WP_MEMBERSHIP_PATH . 'views/add.php';
  74. return ob_get_clean();
  75. }
  76. public function register_front_end() {
  77. //If captcha is present and validation failed, it returns an error string. If validation succeeds, it returns an empty string.
  78. $captcha_validation_output = apply_filters( 'swpm_validate_registration_form_submission', '' );
  79. if ( ! empty( $captcha_validation_output ) ) {
  80. $message = array(
  81. 'succeeded' => false,
  82. 'message' => SwpmUtils::_( 'Security check: captcha validation failed.' ),
  83. );
  84. SwpmTransfer::get_instance()->set( 'status', $message );
  85. return;
  86. }
  87. //Check if Terms and Conditions enabled
  88. $terms_enabled = SwpmSettings::get_instance()->get_value( 'enable-terms-and-conditions' );
  89. if ( ! empty( $terms_enabled ) ) {
  90. //check if user checked "I accept terms" checkbox
  91. if ( empty( $_POST['accept_terms'] ) ) {
  92. $message = array(
  93. 'succeeded' => false,
  94. 'message' => SwpmUtils::_( 'You must accept the terms and conditions.' ),
  95. );
  96. SwpmTransfer::get_instance()->set( 'status', $message );
  97. return;
  98. }
  99. }
  100. //Check if Privacy Policy enabled
  101. $pp_enabled = SwpmSettings::get_instance()->get_value( 'enable-privacy-policy' );
  102. if ( ! empty( $pp_enabled ) ) {
  103. //check if user checked "I agree with Privacy Policy" checkbox
  104. if ( empty( $_POST['accept_pp'] ) ) {
  105. $message = array(
  106. 'succeeded' => false,
  107. 'message' => SwpmUtils::_( 'You must agree to the privacy policy.' ),
  108. );
  109. SwpmTransfer::get_instance()->set( 'status', $message );
  110. return;
  111. }
  112. }
  113. //Validate swpm level hash data.
  114. $hash_val_posted = sanitize_text_field( $_POST['swpm_level_hash'] );
  115. $level_value = sanitize_text_field( $_POST['membership_level'] );
  116. $swpm_p_key = get_option( 'swpm_private_key_one' );
  117. $hash_val = md5( $swpm_p_key . '|' . $level_value );
  118. if ( $hash_val != $hash_val_posted ) {//Level hash validation failed.
  119. $msg = '<p>Error! Security check failed for membership level validation.</p>';
  120. $msg .= '<p>The submitted membership level data does not seem to be authentic.</p>';
  121. $msg .= '<p>If you are using caching please empty the cache data and try again.</p>';
  122. wp_die( $msg );
  123. }
  124. $this->email_activation = get_option( 'swpm_email_activation_lvl_' . $level_value );
  125. //Crete the member profile and send notification
  126. if ( $this->create_swpm_user() && $this->prepare_and_create_wp_user_front_end() && $this->send_reg_email() ) {
  127. do_action( 'swpm_front_end_registration_complete' ); //Keep this action hook for people who are using it (so their implementation doesn't break).
  128. do_action( 'swpm_front_end_registration_complete_user_data', $this->member_info );
  129. //Check if there is after registration redirect
  130. if ( ! $this->email_activation ) {
  131. $after_rego_url = SwpmSettings::get_instance()->get_value( 'after-rego-redirect-page-url' );
  132. $after_rego_url = apply_filters( 'swpm_after_registration_redirect_url', $after_rego_url );
  133. if ( ! empty( $after_rego_url ) ) {
  134. //Yes. Need to redirect to this after registration page
  135. SwpmLog::log_simple_debug( 'After registration redirect is configured in settings. Redirecting user to: ' . $after_rego_url, true );
  136. wp_redirect( $after_rego_url );
  137. exit( 0 );
  138. }
  139. }
  140. //Set the registration complete message
  141. if ( $this->email_activation ) {
  142. $email_act_msg = '<div class="swpm-registration-success-msg">';
  143. $email_act_msg .= SwpmUtils::_( 'You need to confirm your email address. Please check your email and follow instructions to complete your registration.' );
  144. $email_act_msg .= '</div>';
  145. $email_act_msg = apply_filters( 'swpm_registration_email_activation_msg', $email_act_msg );//Can be added to the custom messages addon.
  146. $message = array(
  147. 'succeeded' => true,
  148. 'message' => $email_act_msg,
  149. );
  150. } else {
  151. $login_page_url = SwpmSettings::get_instance()->get_value( 'login-page-url' );
  152. // Allow hooks to change the value of login_page_url
  153. $login_page_url = apply_filters('swpm_register_front_end_login_page_url', $login_page_url);
  154. $after_rego_msg = '<div class="swpm-registration-success-msg">' . SwpmUtils::_( 'Registration Successful. ' ) . SwpmUtils::_( 'Please' ) . ' <a href="' . $login_page_url . '">' . SwpmUtils::_( 'Login' ) . '</a></div>';
  155. $after_rego_msg = apply_filters( 'swpm_registration_success_msg', $after_rego_msg );
  156. $message = array(
  157. 'succeeded' => true,
  158. 'message' => $after_rego_msg,
  159. );
  160. }
  161. SwpmTransfer::get_instance()->set( 'status', $message );
  162. return;
  163. }
  164. }
  165. private function create_swpm_user() {
  166. global $wpdb;
  167. $member = SwpmTransfer::$default_fields;
  168. $form = new SwpmFrontForm( $member );
  169. if ( ! $form->is_valid() ) {
  170. $message = array(
  171. 'succeeded' => false,
  172. 'message' => SwpmUtils::_( 'Please correct the following' ),
  173. 'extra' => $form->get_errors(),
  174. );
  175. SwpmTransfer::get_instance()->set( 'status', $message );
  176. return false;
  177. }
  178. $member_info = $form->get_sanitized_member_form_data();
  179. //Check if the email belongs to an existing wp user account with admin role.
  180. SwpmMemberUtils::check_and_die_if_email_belongs_to_admin_user($member_info['email']);
  181. //Go ahead and create the SWPM user record.
  182. $free_level = SwpmUtils::get_free_level();
  183. $account_status = SwpmSettings::get_instance()->get_value( 'default-account-status', 'active' );
  184. $member_info['last_accessed_from_ip'] = SwpmUtils::get_user_ip_address();
  185. $member_info['member_since'] = SwpmUtils::get_current_date_in_wp_zone(); //date( 'Y-m-d' );
  186. $member_info['subscription_starts'] = SwpmUtils::get_current_date_in_wp_zone(); //date( 'Y-m-d' );
  187. $member_info['account_state'] = $account_status;
  188. if ( $this->email_activation ) {
  189. $member_info['account_state'] = 'activation_required';
  190. }
  191. $plain_password = $member_info['plain_password'];
  192. unset( $member_info['plain_password'] );
  193. if ( SwpmUtils::is_paid_registration() ) {
  194. $member_info['reg_code'] = '';
  195. $member_id = filter_input( INPUT_GET, 'member_id', FILTER_SANITIZE_NUMBER_INT );
  196. $code = filter_input( INPUT_GET, 'code', FILTER_SANITIZE_STRING );
  197. $wpdb->update(
  198. $wpdb->prefix . 'swpm_members_tbl',
  199. $member_info,
  200. array(
  201. 'member_id' => $member_id,
  202. 'reg_code' => $code,
  203. )
  204. );
  205. $query = $wpdb->prepare( 'SELECT membership_level FROM ' . $wpdb->prefix . 'swpm_members_tbl WHERE member_id=%d', $member_id );
  206. $member_info['membership_level'] = $wpdb->get_var( $query );
  207. $last_insert_id = $member_id;
  208. } elseif ( ! empty( $free_level ) ) {
  209. $member_info['membership_level'] = $free_level;
  210. $wpdb->insert( $wpdb->prefix . 'swpm_members_tbl', $member_info );
  211. $last_insert_id = $wpdb->insert_id;
  212. } else {
  213. $message = array(
  214. 'succeeded' => false,
  215. 'message' => SwpmUtils::_( 'Membership Level Couldn\'t be found.' ),
  216. );
  217. SwpmTransfer::get_instance()->set( 'status', $message );
  218. return false;
  219. }
  220. $member_info['plain_password'] = $plain_password;
  221. $this->member_info = $member_info;
  222. return true;
  223. }
  224. private function prepare_and_create_wp_user_front_end() {
  225. global $wpdb;
  226. $member_info = $this->member_info;
  227. //Retrieve the user role assigned for this level
  228. $query = $wpdb->prepare( 'SELECT role FROM ' . $wpdb->prefix . 'swpm_membership_tbl WHERE id = %d', $member_info['membership_level'] );
  229. $user_role = $wpdb->get_var( $query );
  230. //Check to make sure that the user role of this level is not admin.
  231. if ( $user_role == 'administrator' ) {
  232. //For security reasons we don't allow users with administrator role to be creted from the front-end. That can only be done from the admin dashboard side.
  233. $error_msg = '<p>Error! The user role for this membership level (level ID: ' . $member_info['membership_level'] . ') is set to "Administrator".</p>';
  234. $error_msg .= '<p>For security reasons, member registration to this level is not permitted from the front end.</p>';
  235. $error_msg .= '<p>An administrator of the site can manually create a member record with this access level from the admin dashboard side.</p>';
  236. wp_die( $error_msg );
  237. }
  238. $wp_user_info = array();
  239. $wp_user_info['user_nicename'] = implode( '-', explode( ' ', $member_info['user_name'] ) );
  240. $wp_user_info['display_name'] = $member_info['user_name'];
  241. $wp_user_info['user_email'] = $member_info['email'];
  242. $wp_user_info['nickname'] = $member_info['user_name'];
  243. $wp_user_info['first_name'] = $member_info['first_name'];
  244. $wp_user_info['last_name'] = $member_info['last_name'];
  245. $wp_user_info['user_login'] = $member_info['user_name'];
  246. $wp_user_info['password'] = $member_info['plain_password'];
  247. $wp_user_info['role'] = $user_role;
  248. $wp_user_info['user_registered'] = date( 'Y-m-d H:i:s' );
  249. SwpmUtils::create_wp_user( $wp_user_info );
  250. return true;
  251. }
  252. public function edit_profile_front_end() {
  253. global $wpdb;
  254. //Check that the member is logged in
  255. $auth = SwpmAuth::get_instance();
  256. if ( ! $auth->is_logged_in() ) {
  257. return;
  258. }
  259. //Check nonce
  260. if ( ! isset( $_POST['swpm_profile_edit_nonce_val'] ) || ! wp_verify_nonce( $_POST['swpm_profile_edit_nonce_val'], 'swpm_profile_edit_nonce_action' ) ) {
  261. //Nonce check failed.
  262. wp_die( SwpmUtils::_( 'Error! Nonce verification failed for front end profile edit.' ) );
  263. }
  264. $user_data = (array) $auth->userData;
  265. unset( $user_data['permitted'] );
  266. $form = new SwpmForm( $user_data );
  267. if ( $form->is_valid() ) {
  268. global $wpdb;
  269. $msg_str = '<div class="swpm-profile-update-success">' . SwpmUtils::_( 'Profile updated successfully.' ) . '</div>';
  270. $message = array(
  271. 'succeeded' => true,
  272. 'message' => $msg_str,
  273. );
  274. $member_info = $form->get_sanitized_member_form_data();
  275. SwpmUtils::update_wp_user( $auth->get( 'user_name' ), $member_info ); //Update corresponding wp user record.
  276. //Lets check if password was also changed.
  277. $password_also_changed = false;
  278. if ( isset( $member_info['plain_password'] ) ) {
  279. //Password was also changed.
  280. $msg_str = '<div class="swpm-profile-update-success">' . SwpmUtils::_( 'Profile updated successfully. You will need to re-login since you changed your password.' ) . '</div>';
  281. $message = array(
  282. 'succeeded' => true,
  283. 'message' => $msg_str,
  284. );
  285. unset( $member_info['plain_password'] );
  286. //Set the password chagned flag.
  287. $password_also_changed = true;
  288. }
  289. //Update the data in the swpm database.
  290. $swpm_id = $auth->get( 'member_id' );
  291. //SwpmLog::log_simple_debug("Updating member profile data with SWPM ID: " . $swpm_id, true);
  292. $member_info = array_filter( $member_info );//Remove any null values.
  293. $wpdb->update( $wpdb->prefix . 'swpm_members_tbl', $member_info, array( 'member_id' => $swpm_id ) );
  294. $auth->reload_user_data();//Reload user data after update so the profile page reflects the new data.
  295. if ( $password_also_changed ) {
  296. //Password was also changed. Logout the user's current session.
  297. wp_logout(); //Log the user out from the WP user session also.
  298. SwpmLog::log_simple_debug( 'Member has updated the password from profile edit page. Logging the user out so he can re-login using the new password.', true );
  299. }
  300. SwpmTransfer::get_instance()->set( 'status', $message );
  301. do_action( 'swpm_front_end_profile_edited', $member_info );
  302. return true; //Successful form submission.
  303. } else {
  304. $msg_str = '<div class="swpm-profile-update-error">' . SwpmUtils::_( 'Please correct the following.' ) . '</div>';
  305. $message = array(
  306. 'succeeded' => false,
  307. 'message' => $msg_str,
  308. 'extra' => $form->get_errors(),
  309. );
  310. SwpmTransfer::get_instance()->set( 'status', $message );
  311. return false; //Error in the form submission.
  312. }
  313. }
  314. public function reset_password( $email ) {
  315. //If captcha is present and validation failed, it returns an error string. If validation succeeds, it returns an empty string.
  316. $captcha_validation_output = apply_filters( 'swpm_validate_pass_reset_form_submission', '' );
  317. if ( ! empty( $captcha_validation_output ) ) {
  318. $message = '<div class="swpm-reset-pw-error">' . SwpmUtils::_( 'Captcha validation failed.' ) . '</div>';
  319. $message = array(
  320. 'succeeded' => false,
  321. 'message' => $message,
  322. );
  323. SwpmTransfer::get_instance()->set( 'status', $message );
  324. return;
  325. }
  326. $email = sanitize_email( $email );
  327. if ( ! is_email( $email ) ) {
  328. $message = '<div class="swpm-reset-pw-error">' . SwpmUtils::_( 'Email address not valid.' ) . '</div>';
  329. $message = array(
  330. 'succeeded' => false,
  331. 'message' => $message,
  332. );
  333. SwpmTransfer::get_instance()->set( 'status', $message );
  334. return;
  335. }
  336. global $wpdb;
  337. $query = 'SELECT member_id,user_name,first_name, last_name FROM ' .
  338. $wpdb->prefix . 'swpm_members_tbl ' .
  339. ' WHERE email = %s';
  340. $user = $wpdb->get_row( $wpdb->prepare( $query, $email ) );
  341. if ( empty( $user ) ) {
  342. $message = '<div class="swpm-reset-pw-error">' . SwpmUtils::_( 'No user found with that email address.' ) . '</div>';
  343. $message .= '<div class="swpm-reset-pw-error-email">' . SwpmUtils::_( 'Email Address: ' ) . $email . '</div>';
  344. $message = array(
  345. 'succeeded' => false,
  346. 'message' => $message,
  347. );
  348. SwpmTransfer::get_instance()->set( 'status', $message );
  349. return;
  350. }
  351. $settings = SwpmSettings::get_instance();
  352. $password = wp_generate_password();
  353. $password_hash = SwpmUtils::encrypt_password( trim( $password ) ); //should use $saned??;
  354. $wpdb->update( $wpdb->prefix . 'swpm_members_tbl', array( 'password' => $password_hash ), array( 'member_id' => $user->member_id ) );
  355. //Update wp user password
  356. add_filter( 'send_password_change_email', array( &$this, 'dont_send_password_change_email' ), 1, 3 ); //Stop WordPress from sending a reset password email to admin.
  357. SwpmUtils::update_wp_user( $user->user_name, array( 'plain_password' => $password ) );
  358. $body = $settings->get_value( 'reset-mail-body' );
  359. $subject = $settings->get_value( 'reset-mail-subject' );
  360. $body = html_entity_decode( $body );
  361. $additional_args = array( 'password' => $password );
  362. $body = SwpmMiscUtils::replace_dynamic_tags( $body, $user->member_id, $additional_args );
  363. $from = $settings->get_value( 'email-from' );
  364. $headers = 'From: ' . $from . "\r\n";
  365. $subject = apply_filters( 'swpm_email_password_reset_subject', $subject );
  366. $body = apply_filters( 'swpm_email_password_reset_body', $body );
  367. SwpmMiscUtils::mail( $email, $subject, $body, $headers );
  368. SwpmLog::log_simple_debug( 'Member password has been reset. Password reset email sent to: ' . $email, true );
  369. $message = '<div class="swpm-reset-pw-success-box">';
  370. $message .= '<div class="swpm-reset-pw-success">' . SwpmUtils::_( 'New password has been sent to your email address.' ) . '</div>';
  371. $message .= '<div class="swpm-reset-pw-success-email">' . SwpmUtils::_( 'Email Address: ' ) . $email . '</div>';
  372. $message .= '</div>';
  373. $message = array(
  374. 'succeeded' => false,
  375. 'message' => $message,
  376. 'pass_reset_sent' => true,
  377. );
  378. SwpmTransfer::get_instance()->set( 'status', $message );
  379. }
  380. function dont_send_password_change_email( $send = false, $user = '', $userdata = '' ) {
  381. //Stop the WordPress's default password change email notification to site admin
  382. //Only the simple membership plugin's password reset email will be sent.
  383. return false;
  384. }
  385. public function email_activation() {
  386. $login_page_url = SwpmSettings::get_instance()->get_value( 'login-page-url' );
  387. // Allow hooks to change the value of login_page_url
  388. $login_page_url = apply_filters('swpm_email_activation_login_page_url', $login_page_url);
  389. $member_id = FILTER_INPUT( INPUT_GET, 'swpm_member_id', FILTER_SANITIZE_NUMBER_INT );
  390. $member = SwpmMemberUtils::get_user_by_id( $member_id );
  391. if ( empty( $member ) ) {
  392. //can't find member
  393. echo SwpmUtils::_( "Can't find member account." );
  394. wp_die();
  395. }
  396. if ( $member->account_state !== 'activation_required' ) {
  397. //account already active
  398. echo SwpmUtils::_( 'Account already active. ' ) . '<a href="' . $login_page_url . '">' . SwpmUtils::_( 'click here' ) . '</a>' . SwpmUtils::_( ' to login.' );
  399. wp_die();
  400. }
  401. $code = FILTER_INPUT( INPUT_GET, 'swpm_token', FILTER_SANITIZE_STRING );
  402. $act_data = get_option( 'swpm_email_activation_data_usr_' . $member_id );
  403. if ( empty( $code ) || empty( $act_data ) || $act_data['act_code'] !== $code ) {
  404. //code mismatch
  405. wp_die( SwpmUtils::_( 'Activation code mismatch. Cannot activate this account. Please contact the site admin.' ) );
  406. }
  407. //activation code match
  408. delete_option( 'swpm_email_activation_data_usr_' . $member_id );
  409. //store rego form id in constant so FB addon could use it
  410. if ( ! empty( $act_data['fb_form_id'] ) ) {
  411. define( 'SWPM_EMAIL_ACTIVATION_FORM_ID', $act_data['fb_form_id'] );
  412. }
  413. $activation_account_status = apply_filters( 'swpm_activation_feature_override_account_status', 'active' );
  414. SwpmMemberUtils::update_account_state( $member_id, $activation_account_status );
  415. $this->member_info = (array) $member;
  416. $this->member_info['plain_password'] = SwpmUtils::crypt( $act_data['plain_password'], 'd' );
  417. $this->send_reg_email();
  418. $msg = '<div class="swpm_temporary_msg" style="font-weight: bold;">' . SwpmUtils::_( 'Success! Your account has been activated successfully.' ) . '</div>';
  419. $after_rego_url = SwpmSettings::get_instance()->get_value( 'after-rego-redirect-page-url' );
  420. $after_rego_url = apply_filters( 'swpm_after_registration_redirect_url', $after_rego_url );
  421. if ( ! empty( $after_rego_url ) ) {
  422. //Yes. Need to redirect to this after registration page
  423. SwpmLog::log_simple_debug( 'After registration redirect is configured in settings. Redirecting user to: ' . $after_rego_url, true );
  424. SwpmMiscUtils::show_temporary_message_then_redirect( $msg, $after_rego_url );
  425. exit( 0 );
  426. }
  427. //show success message and redirect to login page
  428. SwpmMiscUtils::show_temporary_message_then_redirect( $msg, $login_page_url );
  429. exit( 0 );
  430. }
  431. public function resend_activation_email() {
  432. $login_page_url = SwpmSettings::get_instance()->get_value( 'login-page-url' );
  433. // Allow hooks to change the value of login_page_url
  434. $login_page_url = apply_filters('swpm_resend_activation_email_login_page_url', $login_page_url);
  435. $member_id = FILTER_INPUT( INPUT_GET, 'swpm_member_id', FILTER_SANITIZE_NUMBER_INT );
  436. $member = SwpmMemberUtils::get_user_by_id( $member_id );
  437. if ( empty( $member ) ) {
  438. //can't find member
  439. echo SwpmUtils::_( 'Cannot find member account.' );
  440. wp_die();
  441. }
  442. if ( $member->account_state !== 'activation_required' ) {
  443. //account already active
  444. $acc_active_msg = SwpmUtils::_( 'Account already active. ' ) . '<a href="' . $login_page_url . '">' . SwpmUtils::_( 'click here' ) . '</a>' . SwpmUtils::_( ' to login.' );
  445. echo $acc_active_msg;
  446. wp_die();
  447. }
  448. $act_data = get_option( 'swpm_email_activation_data_usr_' . $member_id );
  449. if ( ! empty( $act_data ) ) {
  450. //looks like activation data has been removed for some reason. We won't be able to have member's plain password in this case
  451. $act_data['plain_password'] = '';
  452. }
  453. delete_option( 'swpm_email_activation_data_usr_' . $member_id );
  454. $this->member_info = (array) $member;
  455. $this->member_info['plain_password'] = SwpmUtils::crypt( $act_data['plain_password'], 'd' );
  456. $this->email_activation = true;
  457. $this->send_reg_email();
  458. $msg = '<div class="swpm_temporary_msg" style="font-weight: bold;">' . SwpmUtils::_( 'Activation email has been sent. Please check your email and activate your account.' ) . '</div>';
  459. SwpmMiscUtils::show_temporary_message_then_redirect( $msg, $login_page_url );
  460. wp_die();
  461. }
  462. }