class.swpm-admin-registration.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. /**
  3. * Description of BAdminRegistration
  4. *
  5. */
  6. class SwpmAdminRegistration extends SwpmRegistration {
  7. public static function get_instance() {
  8. self::$_intance = empty( self::$_intance ) ? new SwpmAdminRegistration() : self::$_intance;
  9. return self::$_intance;
  10. }
  11. public function show_form() {
  12. }
  13. public function register_admin_end() {
  14. //Check we are on the admin end and user has management permission
  15. SwpmMiscUtils::check_user_permission_and_is_admin( 'member creation by admin' );
  16. //Check nonce
  17. if ( ! isset( $_POST['_wpnonce_create_swpmuser_admin_end'] ) || ! wp_verify_nonce( $_POST['_wpnonce_create_swpmuser_admin_end'], 'create_swpmuser_admin_end' ) ) {
  18. //Nonce check failed.
  19. wp_die( SwpmUtils::_( 'Error! Nonce verification failed for user registration from admin end.' ) );
  20. }
  21. global $wpdb;
  22. $member = SwpmTransfer::$default_fields;
  23. $form = new SwpmForm( $member );
  24. if ( $form->is_valid() ) {
  25. $member_info = $form->get_sanitized_member_form_data();
  26. //First, check if email or username belongs to an existing admin user. Bail if it does.
  27. SwpmMemberUtils::check_and_die_if_email_belongs_to_admin_user($member_info['email']);
  28. SwpmMemberUtils::check_and_die_if_username_belongs_to_admin_user($member_info['user_name']);
  29. $account_status = SwpmSettings::get_instance()->get_value( 'default-account-status', 'active' );
  30. $member_info['account_state'] = $account_status;
  31. $plain_password = $member_info['plain_password'];
  32. unset( $member_info['plain_password'] );
  33. //Create SWPM member entry
  34. $wpdb->insert( $wpdb->prefix . 'swpm_members_tbl', $member_info );
  35. //Register to WordPress
  36. $query = $wpdb->prepare( 'SELECT role FROM ' . $wpdb->prefix . 'swpm_membership_tbl WHERE id = %d', $member_info['membership_level'] );
  37. $wp_user_info = array();
  38. $wp_user_info['user_nicename'] = implode( '-', explode( ' ', $member_info['user_name'] ) );
  39. $wp_user_info['display_name'] = $member_info['user_name'];
  40. $wp_user_info['user_email'] = $member_info['email'];
  41. $wp_user_info['nickname'] = $member_info['user_name'];
  42. if ( isset( $member_info['first_name'] ) ) {
  43. $wp_user_info['first_name'] = $member_info['first_name'];
  44. }
  45. if ( isset( $member_info['last_name'] ) ) {
  46. $wp_user_info['last_name'] = $member_info['last_name'];
  47. }
  48. $wp_user_info['user_login'] = $member_info['user_name'];
  49. $wp_user_info['password'] = $plain_password;
  50. $wp_user_info['role'] = $wpdb->get_var( $query );
  51. $wp_user_info['user_registered'] = date( 'Y-m-d H:i:s' );
  52. SwpmUtils::create_wp_user( $wp_user_info );
  53. //End register to WordPress
  54. //Send notification
  55. $send_notification = SwpmSettings::get_instance()->get_value( 'enable-notification-after-manual-user-add' );
  56. $member_info['plain_password'] = $plain_password;
  57. $this->member_info = $member_info;
  58. if ( ! empty( $send_notification ) ) {
  59. $this->send_reg_email();
  60. }
  61. //Trigger action hook
  62. do_action( 'swpm_admin_end_registration_complete_user_data', $member_info );
  63. //Save success message
  64. $message = array(
  65. 'succeeded' => true,
  66. 'message' => '<p>' . SwpmUtils::_( 'Member record added successfully.' ) . '</p>',
  67. );
  68. SwpmTransfer::get_instance()->set( 'status', $message );
  69. wp_redirect( 'admin.php?page=simple_wp_membership' );
  70. exit( 0 );
  71. }
  72. $message = array(
  73. 'succeeded' => false,
  74. 'message' => SwpmUtils::_( 'Please correct the following:' ),
  75. 'extra' => $form->get_errors(),
  76. );
  77. SwpmTransfer::get_instance()->set( 'status', $message );
  78. }
  79. public function edit_admin_end( $id ) {
  80. //Check we are on the admin end and user has management permission
  81. SwpmMiscUtils::check_user_permission_and_is_admin( 'member edit by admin' );
  82. //Check nonce
  83. if ( ! isset( $_POST['_wpnonce_edit_swpmuser_admin_end'] ) || ! wp_verify_nonce( $_POST['_wpnonce_edit_swpmuser_admin_end'], 'edit_swpmuser_admin_end' ) ) {
  84. //Nonce check failed.
  85. wp_die( SwpmUtils::_( 'Error! Nonce verification failed for user edit from admin end.' ) );
  86. }
  87. global $wpdb;
  88. $query = $wpdb->prepare( 'SELECT * FROM ' . $wpdb->prefix . 'swpm_members_tbl WHERE member_id = %d', $id );
  89. $member = $wpdb->get_row( $query, ARRAY_A );
  90. // let's get previous membership level
  91. $prev_level = false;
  92. if ( $member ) {
  93. $prev_level = $member['membership_level'];
  94. }
  95. $email_address = $member['email'];
  96. $user_name = $member['user_name'];
  97. unset( $member['member_id'] );
  98. unset( $member['user_name'] );
  99. $form = new SwpmForm( $member );
  100. if ( $form->is_valid() ) {
  101. $member = $form->get_sanitized_member_form_data();
  102. $plain_password = isset( $member['plain_password'] ) ? $member['plain_password'] : '';
  103. SwpmUtils::update_wp_user( $user_name, $member );
  104. unset( $member['plain_password'] );
  105. $wpdb->update( $wpdb->prefix . 'swpm_members_tbl', $member, array( 'member_id' => $id ) );
  106. // set previous membership level
  107. $member['prev_membership_level'] = $prev_level;
  108. $member['member_id'] = $id;
  109. //Trigger action hook
  110. do_action( 'swpm_admin_end_edit_complete_user_data', $member );
  111. if ( $member['prev_membership_level'] != $member['membership_level'] ) {
  112. do_action(
  113. 'swpm_membership_level_changed',
  114. array(
  115. 'member_id' => $id,
  116. 'from_level' => $member['prev_membership_level'],
  117. 'to_level' => $member['membership_level'],
  118. )
  119. );
  120. }
  121. //Set messages
  122. $message = array(
  123. 'succeeded' => true,
  124. 'message' => '<p>Member profile updated successfully.</p>',
  125. );
  126. $error = apply_filters( 'swpm_admin_edit_custom_fields', array(), $member + array( 'member_id' => $id ) );
  127. if ( ! empty( $error ) ) {
  128. $message = array(
  129. 'succeeded' => false,
  130. 'message' => SwpmUtils::_( 'Please correct the following:' ),
  131. 'extra' => $error,
  132. );
  133. SwpmTransfer::get_instance()->set( 'status', $message );
  134. return;
  135. }
  136. SwpmTransfer::get_instance()->set( 'status', $message );
  137. $send_notification = filter_input( INPUT_POST, 'account_status_change' );
  138. if ( ! empty( $send_notification ) ) {
  139. $settings = SwpmSettings::get_instance();
  140. $from_address = $settings->get_value( 'email-from' );
  141. $headers = 'From: ' . $from_address . "\r\n";
  142. $subject = filter_input( INPUT_POST, 'notificationmailhead' );
  143. $body = filter_input( INPUT_POST, 'notificationmailbody' );
  144. $settings->set_value( 'account-change-email-body', $body )->set_value( 'account-change-email-subject', $subject )->save();
  145. $member['login_link'] = $settings->get_value( 'login-page-url' );
  146. $member['user_name'] = $user_name;
  147. $member['password'] = empty( $plain_password ) ? SwpmUtils::_( 'Your current password' ) : $plain_password;
  148. $values = array_values( $member );
  149. $keys = array_map( 'swpm_enclose_var', array_keys( $member ) );
  150. $body = html_entity_decode( str_replace( $keys, $values, $body ) );
  151. $subject = apply_filters( 'swpm_email_account_status_change_subject', $subject );
  152. $body = apply_filters( 'swpm_email_account_status_change_body', $body );
  153. SwpmMiscUtils::mail( $email_address, $subject, $body, $headers );
  154. SwpmLog::log_simple_debug( 'Notify email sent (after profile edit from admin side). Email sent to: ' . $email_address, true );
  155. }
  156. wp_redirect( 'admin.php?page=simple_wp_membership' );
  157. exit( 0 );
  158. }
  159. $message = array(
  160. 'succeeded' => false,
  161. 'message' => SwpmUtils::_( 'Please correct the following:' ),
  162. 'extra' => $form->get_errors(),
  163. );
  164. SwpmTransfer::get_instance()->set( 'status', $message );
  165. }
  166. }