PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 3.5.4
JetFormBuilder — Dynamic Blocks Form Builder v3.5.4
3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.10 2.1.11 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.0 3.0.0.1 3.0.0.2 3.0.0.3 3.0.1 3.0.1.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.0.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.3.2 3.3.3 3.3.3.1 3.3.4 3.3.4.1 3.3.4.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.5.1 3.4.5.2 3.4.6 3.4.7 3.4.7.1 3.5.0 3.5.1 3.5.1.1 3.5.1.2 3.5.2 3.5.2.1 3.5.3 3.5.4 3.5.5 3.5.6 3.5.6.1 3.5.6.2 3.5.6.3 3.6.0
jetformbuilder / modules / actions-v2 / register-user / register-user-action.php
jetformbuilder / modules / actions-v2 / register-user Last commit date
assets 1 year ago messages 1 year ago register-user-action.php 1 year ago register-user.php 1 year ago
register-user-action.php
284 lines
1 <?php
2
3 namespace JFB_Modules\Actions_V2\Register_User;
4
5 use Jet_Form_Builder\Actions\Action_Handler;
6 use JFB_Modules\Actions_V2\Update_User\Properties\User_Meta_Property;
7 use Jet_Form_Builder\Actions\Types\Base;
8 use Jet_Form_Builder\Classes\Tools;
9 use Jet_Form_Builder\Exceptions\Action_Exception;
10
11 /**
12 * Define Base_Type class
13 */
14 class Register_User_Action extends Base {
15
16 public function get_name() {
17 return __( 'Register User', 'jet-form-builder' );
18 }
19
20 public function get_id() {
21 return 'register_user';
22 }
23
24 /**
25 * @throws Action_Exception
26 */
27 public function can_register() {
28 $allow_register = $this->settings['allow_register'] ?? false;
29 $role_can_register = $this->settings['role_can_register'] ?? false;
30
31 if ( $allow_register && ! $role_can_register ) {
32 throw new Action_Exception( 'failed', '`role_can_register` is empty' );
33 }
34
35 if ( is_user_logged_in() ) {
36 $user = wp_get_current_user();
37
38 if ( $allow_register && ! in_array( $role_can_register, $user->roles, true ) ) {
39 throw new Action_Exception( 'not_enough_cap' );
40 }
41
42 if ( ! $allow_register ) {
43 if ( isset( $this->settings['add_user_id'] ) && $this->settings['add_user_id'] ) {
44 jet_fb_action_handler()->response_data['user_id'] = (int) $user->ID;
45 jet_fb_context()->update_request( $user->ID, 'user_id' );
46 return false;
47 }
48
49 throw new Action_Exception( 'already_logged_in' );
50 }
51 } elseif ( $allow_register ) {
52 throw new Action_Exception( 'not_logged_in' );
53 }
54
55 return true;
56 }
57
58 /**
59 * @param array $request
60 * @param Action_Handler $handler
61 *
62 * @return mixed|void
63 * @throws Action_Exception
64 */
65 public function do_action( array $request, Action_Handler $handler ) {
66 if ( ! $this->can_register() ) {
67 return;
68 }
69
70 $fields_map = ! empty( $this->settings['fields_map'] ) ? $this->settings['fields_map'] : array();
71
72 // Prepare fields
73 $username = false;
74 $email = false;
75 $password = false;
76 $fname = false;
77 $lname = false;
78 $user_url = false;
79 $remember_field = $this->settings['remember_me_field'] ?? '';
80 $is_remember = ! empty( $request[ $remember_field ] );
81
82 // If fields map for login, password or email is not set - abort but allow submit form (its not user fault)
83 if ( empty( $fields_map['login'] ) || empty( $fields_map['email'] ) || empty( $fields_map['password'] ) ) {
84 return;
85 }
86
87 /**
88 * Validate username
89 */
90 $raw_username = ! empty( $request[ $fields_map['login'] ] ) ? $request[ $fields_map['login'] ] : false;
91
92 if ( ! $raw_username ) {
93 throw new Action_Exception( 'empty_username' );
94 }
95
96 $username = sanitize_user( $raw_username );
97
98 if ( $username !== $raw_username ) {
99 throw new Action_Exception( 'sanitize_user' );
100 }
101
102 if ( username_exists( $username ) ) {
103 throw new Action_Exception( 'username_exists' );
104 }
105 // username - ok
106
107 /**
108 * Validate email
109 */
110 $raw_email = ! empty( $request[ $fields_map['email'] ] ) ? $request[ $fields_map['email'] ] : false;
111
112 if ( ! $raw_email ) {
113 throw new Action_Exception( 'empty_email' );
114 }
115
116 $email = sanitize_email( $raw_email );
117
118 if ( $email !== $raw_email ) {
119 throw new Action_Exception( 'empty_email' );
120 }
121
122 if ( email_exists( $email ) ) {
123
124 throw new Action_Exception( 'email_exists' );
125 }
126 // email - ok
127
128 /**
129 * Validate password
130 */
131 $password = ! empty( $request[ $fields_map['password'] ] ) ? $request[ $fields_map['password'] ] : false;
132
133 if ( ! $password ) {
134 throw new Action_Exception( 'empty_password' );
135 }
136
137 if ( ! empty( $fields_map['confirm_password'] ) ) {
138
139 if ( Tools::is_wp_password_hash( $password ) ) {
140 $confirm_password = $password;
141 } else {
142 $confirm_password = ! empty( $request[ $fields_map['confirm_password'] ] ) ? $request[ $fields_map['confirm_password'] ] : false;
143
144 if ( $confirm_password !== $password ) {
145 throw new Action_Exception( 'password_mismatch' );
146 }
147 }
148 }
149 // password - ok
150
151 if ( ! empty( $fields_map['first_name'] ) ) {
152 $fname = ! empty( $request[ $fields_map['first_name'] ] ) ? $request[ $fields_map['first_name'] ] : false;
153 }
154
155 if ( ! empty( $fields_map['last_name'] ) ) {
156 $lname = ! empty( $request[ $fields_map['last_name'] ] ) ? $request[ $fields_map['last_name'] ] : false;
157 }
158
159 if ( ! empty( $fields_map['user_url'] ) ) {
160 $user_url = ! empty( $request[ $fields_map['user_url'] ] ) ? $request[ $fields_map['user_url'] ] : false;
161 }
162
163 $metafields_map = ! empty( $this->settings['meta_fields_map'] ) ? $this->settings['meta_fields_map'] : array();
164 $metadata = array();
165
166 if ( ! empty( $metafields_map ) ) {
167 foreach ( $metafields_map as $form_field => $meta_field ) {
168 /**
169 * We need this because WordPress automatically use this on insert to the database
170 */
171 $meta_field = remove_accents( $meta_field );
172
173 /**
174 * @since 3.1.6
175 */
176 if ( in_array( $meta_field, User_Meta_Property::get_restricted_keys(), true ) ) {
177 continue;
178 }
179 if ( ! empty( $request[ $form_field ] ) ) {
180 $metadata[ $meta_field ] = $request[ $form_field ];
181 }
182 }
183 }
184
185 $userarr = array(
186 'user_pass' => $password,
187 'user_login' => $username,
188 'user_email' => $email,
189 'first_name' => $fname,
190 'last_name' => $lname,
191 'user_url' => $user_url,
192 );
193
194 $user_roles = isset( $this->settings['user_role'] ) ? Tools::get_array_of_user_roles( $this->settings['user_role'] ) : '';
195
196 if ( ! empty( $user_roles ) ) {
197 $main_role = Tools::get_main_user_role_by_priority( $user_roles );
198 if ( ! empty( $main_role ) ) {
199 $userarr['role'] = $main_role;
200 }
201 }
202
203 $user_id = wp_insert_user( $userarr );
204
205 if ( ! is_wp_error( $user_id ) ) {
206
207 if ( ! empty( $user_roles ) ) {
208 $user = new \WP_User( $user_id );
209 foreach ( $user_roles as $role ) {
210 if ( $role !== $main_role && 'administrator' !== $role ) {
211 $user->add_role( $role );
212 }
213 }
214 }
215
216 if ( Tools::is_wp_password_hash( $password ) ) {
217 global $wpdb;
218
219 $wpdb->update(
220 $wpdb->users,
221 array( 'user_pass' => $password ),
222 array( 'ID' => $user_id ),
223 array( '%s' ),
224 array( '%d' )
225 );
226 }
227
228 if ( ! empty( $metadata ) ) {
229 foreach ( $metadata as $meta_key => $meta_value ) {
230
231 if ( $this->is_repeater_val( $meta_value ) ) {
232
233 $prepared_value = array();
234
235 foreach ( $meta_value as $index => $row ) {
236
237 $prepared_row = array();
238
239 foreach ( $row as $item_key => $item_value ) {
240
241 $item_key = ! empty( $metafields_map[ $item_key ] ) ? Tools::sanitize_text_field( $metafields_map[ $item_key ] ) : $item_key;
242
243 $prepared_row[ $item_key ] = $item_value;
244 }
245
246 $prepared_value[ 'item-' . $index ] = $prepared_row;
247 }
248
249 $meta_value = $prepared_value;
250 }
251
252 update_user_meta( $user_id, $meta_key, $meta_value );
253 }
254 }
255
256 if ( ! empty( $this->settings['log_in'] ) ) {
257
258 $user = wp_signon(
259 array(
260 'user_login' => $username,
261 'user_password' => $password,
262 'remember' => $is_remember,
263 )
264 );
265
266 if ( ! is_wp_error( $user ) ) {
267 wp_set_current_user( $user->ID );
268 }
269 }
270
271 if ( ! empty( $this->settings['add_user_id'] ) && $this->settings['add_user_id'] ) {
272 $handler->response_data['user_id'] = $user_id;
273 jet_fb_context()->update_request( $user_id, 'user_id' );
274 }
275 } else {
276 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
277 throw new Action_Exception( 'failed', $userarr );
278 }
279 }
280
281
282
283 }
284