-
-
Notifications
You must be signed in to change notification settings - Fork 622
Expand file tree
/
Copy pathRegisterController.php
More file actions
95 lines (75 loc) · 2.96 KB
/
RegisterController.php
File metadata and controls
95 lines (75 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
namespace Statamic\Http\Controllers\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\MessageBag;
use Illuminate\Validation\ValidationException;
use Statamic\Events\UserRegistered;
use Statamic\Events\UserRegistering;
use Statamic\Exceptions\SilentFormFailureException;
use Statamic\Facades\User;
use Statamic\Http\Requests\UserRegisterRequest;
use Statamic\Support\Arr;
class RegisterController
{
public function __invoke(UserRegisterRequest $request)
{
$user = User::make()
->email($request->email)
->password($request->password)
->data(array_merge(
$request->processedValues()->all(),
$request->processedAssets()->all(),
));
if ($roles = config('statamic.users.new_user_roles')) {
$user->explicitRoles($roles);
}
if ($groups = config('statamic.users.new_user_groups')) {
$user->groups($groups);
}
try {
if ($honeypot = config('statamic.users.registration_form_honeypot_field')) {
throw_if(Arr::get($request->input(), $honeypot), new SilentFormFailureException);
}
throw_if(UserRegistering::dispatch($user) === false, new SilentFormFailureException);
} catch (ValidationException $e) {
return $this->failureResponse($e);
} catch (SilentFormFailureException $e) {
return $this->successfulResponse(silentFailure: true);
}
$user->save();
UserRegistered::dispatch($user);
Auth::login($user);
return $this->successfulResponse();
}
private function successfulResponse(bool $silentFailure = false)
{
$response = request()->has('_redirect') ? redirect(request()->get('_redirect')) : back();
if (request()->ajax() || request()->wantsJson()) {
return response([
'success' => true,
'user_created' => ! $silentFailure,
'redirect' => $response->getTargetUrl(),
]);
}
session()->flash('user.register.success', __('Registration successful.'));
session()->flash('user.register.user_created', ! $silentFailure);
return $response;
}
private function failureResponse($validator)
{
$errors = $validator->errors();
if (request()->ajax()) {
return response([
'errors' => (new MessageBag($errors))->all(),
'error' => collect($errors)->map(function ($errors, $field) {
return $errors[0];
})->all(),
], 400);
}
if (request()->wantsJson()) {
return (new ValidationException($validator))->errorBag(new MessageBag($errors));
}
$errorResponse = request()->has('_error_redirect') ? redirect(request()->input('_error_redirect')) : back();
return $errorResponse->withInput()->withErrors($errors, 'user.register');
}
}