ProfileController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Configuration;
  4. use App\Models\User;
  5. use Illuminate\Contracts\View\Factory;
  6. use Illuminate\Contracts\View\View;
  7. use Illuminate\Http\RedirectResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Http\Response;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Hash;
  12. class ProfileController extends Controller
  13. {
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return Factory|View
  18. */
  19. public function index()
  20. {
  21. return view('profile.index')->with([
  22. 'user' => Auth::user(),
  23. 'credits_reward_after_verify_discord' => Configuration::getValueByKey('CREDITS_REWARD_AFTER_VERIFY_DISCORD'),
  24. 'discord_verify_command' => Configuration::getValueByKey('DISCORD_VERIFY_COMMAND')
  25. ]);
  26. }
  27. /**
  28. * Show the form for creating a new resource.
  29. *
  30. * @return Response
  31. */
  32. public function create()
  33. {
  34. //
  35. }
  36. /**
  37. * Store a newly created resource in storage.
  38. *
  39. * @param Request $request
  40. * @return Response
  41. */
  42. public function store(Request $request)
  43. {
  44. //
  45. }
  46. /**
  47. * Display the specified resource.
  48. *
  49. * @param int $id
  50. * @return Response
  51. */
  52. public function show($id)
  53. {
  54. //
  55. }
  56. /**
  57. * Show the form for editing the specified resource.
  58. *
  59. * @param int $id
  60. * @return Response
  61. */
  62. public function edit($id)
  63. {
  64. //
  65. }
  66. /**
  67. * Update the specified resource in storage.
  68. *
  69. * @param Request $request
  70. * @param int $id
  71. * @return RedirectResponse
  72. */
  73. public function update(Request $request, int $id)
  74. {
  75. //prevent other users from editing a user
  76. if ($id != Auth::user()->id) dd(401);
  77. $user = User::findOrFail($id);
  78. //update password if necessary
  79. if (!is_null($request->input('new_password'))){
  80. //validate password request
  81. $request->validate([
  82. 'current_password' => [
  83. 'required' ,
  84. function ($attribute, $value, $fail) use ($user) {
  85. if (!Hash::check($value, $user->password)) {
  86. $fail('The '.$attribute.' is invalid.');
  87. }
  88. },
  89. ],
  90. 'new_password' => 'required|string|min:8',
  91. 'new_password_confirmation' => 'required|same:new_password'
  92. ]);
  93. //update password
  94. $user->update([
  95. 'password' => Hash::make($request->input('new_password')),
  96. ]);
  97. }
  98. //validate request
  99. $request->validate([
  100. 'name' => 'required|min:4|max:30|alpha_num|unique:users,name,'.$id.',id',
  101. 'email' => 'required|email|max:64|unique:users,email,'.$id.',id',
  102. 'avatar' => 'nullable'
  103. ]);
  104. //update avatar
  105. if(!is_null($request->input('avatar'))){
  106. $avatar = json_decode($request->input('avatar'));
  107. if ($avatar->input->size > 3000000) abort(500);
  108. $user->update([
  109. 'avatar' => $avatar->output->image,
  110. ]);
  111. } else {
  112. $user->update([
  113. 'avatar' => null,
  114. ]);
  115. }
  116. //update name and email
  117. $user->update([
  118. 'name' => $request->input('name'),
  119. 'email' => $request->input('email'),
  120. ]);
  121. return redirect()->route('profile.index')->with('success' , 'profile updated');
  122. }
  123. /**
  124. * Remove the specified resource from storage.
  125. *
  126. * @param int $id
  127. * @return Response
  128. */
  129. public function destroy($id)
  130. {
  131. //
  132. }
  133. }