Skip to content

Commit e6af30b

Browse files
committed
feat(email): allow admins to edit user emails
1 parent 4f695d3 commit e6af30b

3 files changed

Lines changed: 41 additions & 11 deletions

File tree

app/Http/Controllers/Admin/Users/UserController.php

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,26 +163,56 @@ public function postUserAlias(Request $request, $name, $id) {
163163
return redirect()->back();
164164
}
165165

166-
public function postUserAccount(Request $request, $name) {
166+
/**
167+
* Updates a user's account information.
168+
*
169+
* @param mixed $name
170+
*
171+
* @return \Illuminate\Http\RedirectResponse
172+
*/
173+
public function postUserAccount(Request $request, UserService $service, $name) {
167174
$user = User::where('name', $name)->first();
168175

169176
if (!$user) {
170177
flash('Invalid user.')->error();
171178
} elseif (!Auth::user()->canEditRank($user->rank)) {
172179
flash('You cannot edit the information of a user that has a higher rank than yourself.')->error();
173-
} elseif ($user->settings->update(['is_fto' => $request->get('is_fto') ?: 0])) {
174-
if (!(new UserService)->logAdminAction(Auth::user(), 'Edited User', 'Edited '.$user->displayname)) {
175-
flash('Failed to log admin action.')->error();
180+
} else {
181+
if ($request->get('is_fto') != $user->settings->is_fto) {
182+
if ($user->settings->update(['is_fto' => $request->get('is_fto') ?: 0])) {
183+
if (!(new UserService)->logAdminAction(Auth::user(), 'Edited User', 'Edited '.$user->displayname)) {
184+
flash('Failed to log admin action.')->error();
176185

177-
return redirect()->back();
186+
return redirect()->back();
187+
}
188+
189+
UserUpdateLog::create(['staff_id' => Auth::user()->id, 'user_id' => $user->id, 'data' => ['is_fto' => $request->get('is_fto') ? 'Yes' : 'No'], 'type' => 'FTO Status Change']);
190+
} else {
191+
flash('Failed to update FTO status.')->error();
192+
193+
return redirect()->back();
194+
}
178195
}
179196

180-
UserUpdateLog::create(['staff_id' => Auth::user()->id, 'user_id' => $user->id, 'data' => ['is_fto' => $request->get('is_fto') ? 'Yes' : 'No'], 'type' => 'FTO Status Change']);
181-
flash('Updated user\'s account information successfully.')->success();
182-
} else {
183-
flash('Failed to update user\'s account information.')->error();
197+
if ($request->get('email') != $user->email) {
198+
$request->validate([
199+
'email' => 'required|string|email|max:255|unique:users',
200+
]);
201+
202+
if ($service->updateEmail($request->only(['email']), Auth::user())) {
203+
flash('Email updated successfully. A verification email has been sent to the user\'s new email address.')->success();
204+
} else {
205+
foreach ($service->errors()->getMessages()['error'] as $error) {
206+
flash($error)->error();
207+
}
208+
209+
return redirect()->back();
210+
}
211+
}
184212
}
185213

214+
flash('Updated user\'s account information successfully.')->success();
215+
186216
return redirect()->back();
187217
}
188218

app/Models/User/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class User extends Authenticatable implements MustVerifyEmail {
9595
* Get all of the user's update logs.
9696
*/
9797
public function logs() {
98-
return $this->hasMany('App\Models\User\UserUpdateLog');
98+
return $this->hasMany(UserUpdateLog::class);
9999
}
100100

101101
/**

resources/views/admin/users/user.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
<div class="form-group row">
6161
<label class="col-md-2 col-form-label">Email Address</label>
6262
<div class="col-md-10">
63-
{!! Form::text('email', $user->email, ['class' => 'form-control', 'disabled']) !!}
63+
{!! Form::text('email', $user->email, ['class' => 'form-control', Auth::user()->isAdmin ? '' : 'disabled']) !!}
6464
</div>
6565
</div>
6666
<div class="form-group row">

0 commit comments

Comments
 (0)