ProfileController.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Settings;
  4. use App\Models\User;
  5. use Illuminate\Http\RedirectResponse;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Hash;
  9. class ProfileController extends Controller
  10. {
  11. /** Display a listing of the resource. */
  12. public function index()
  13. {
  14. return view('profile.index')->with([
  15. 'user' => Auth::user(),
  16. 'credits_reward_after_verify_discord' => Settings::getValueByKey('SETTINGS::USER:CREDITS_REWARD_AFTER_VERIFY_DISCORD'),
  17. 'force_email_verification' => Settings::getValueByKey('SETTINGS::USER:FORCE_EMAIL_VERIFICATION'),
  18. 'force_discord_verification' => Settings::getValueByKey('SETTINGS::USER:FORCE_DISCORD_VERIFICATION'),
  19. ]);
  20. }
  21. /** Update the specified resource in storage.
  22. * @param Request $request
  23. * @param int $id
  24. * @return RedirectResponse
  25. */
  26. public function update(Request $request, int $id)
  27. {
  28. //prevent other users from editing a user
  29. if ($id != Auth::user()->id) dd(401);
  30. $user = User::findOrFail($id);
  31. //update password if necessary
  32. if (!is_null($request->input('new_password'))){
  33. //validate password request
  34. $request->validate([
  35. 'current_password' => [
  36. 'required' ,
  37. function ($attribute, $value, $fail) use ($user) {
  38. if (!Hash::check($value, $user->password)) {
  39. $fail('The '.$attribute.' is invalid.');
  40. }
  41. },
  42. ],
  43. 'new_password' => 'required|string|min:8',
  44. 'new_password_confirmation' => 'required|same:new_password'
  45. ]);
  46. //update password
  47. $user->update([
  48. 'password' => Hash::make($request->input('new_password')),
  49. ]);
  50. }
  51. //validate request
  52. $request->validate([
  53. 'name' => 'required|min:4|max:30|alpha_num|unique:users,name,'.$id.',id',
  54. 'email' => 'required|email|max:64|unique:users,email,'.$id.',id',
  55. 'avatar' => 'nullable'
  56. ]);
  57. //update avatar
  58. if(!is_null($request->input('avatar'))){
  59. $avatar = json_decode($request->input('avatar'));
  60. if ($avatar->input->size > 3000000) abort(500);
  61. $user->update([
  62. 'avatar' => $avatar->output->image,
  63. ]);
  64. } else {
  65. $user->update([
  66. 'avatar' => null,
  67. ]);
  68. }
  69. //update name and email
  70. $user->update([
  71. 'name' => $request->input('name'),
  72. 'email' => $request->input('email'),
  73. ]);
  74. return redirect()->route('profile.index')->with('success' , __('Profile updated'));
  75. }
  76. }