ProfileController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Controllers;
  3. use App\Database\Queries\UserQuery;
  4. use App\Web\ValidationChecker;
  5. use Psr\Http\Message\ResponseInterface as Response;
  6. use Psr\Http\Message\ServerRequestInterface as Request;
  7. class ProfileController extends Controller
  8. {
  9. /**
  10. * @param Request $request
  11. * @param Response $response
  12. *
  13. * @return Response
  14. * @throws \Twig\Error\LoaderError
  15. * @throws \Twig\Error\RuntimeError
  16. * @throws \Twig\Error\SyntaxError
  17. */
  18. public function profile(Request $request, Response $response): Response
  19. {
  20. $user = make(UserQuery::class)->get($request, $this->session->get('user_id'), true);
  21. return view()->render($response, 'user/edit.twig', [
  22. 'profile' => true,
  23. 'user' => $user,
  24. ]);
  25. }
  26. /**
  27. * @param Request $request
  28. * @param Response $response
  29. * @param int $id
  30. *
  31. * @return Response
  32. */
  33. public function profileEdit(Request $request, Response $response, int $id): Response
  34. {
  35. $user = make(UserQuery::class)->get($request, $id, true);
  36. $validator = ValidationChecker::make()
  37. ->rules([
  38. 'email.required' => filter_var(param($request, 'email'), FILTER_VALIDATE_EMAIL),
  39. 'email.unique' => $this->database->query('SELECT COUNT(*) AS `count` FROM `users` WHERE `email` = ? AND `email` <> ?', [param($request, 'email'), $user->email])->fetch()->count == 0,
  40. ])
  41. ->onFail(function ($rule) {
  42. $alerts = [
  43. 'email.required' => lang('email_required'),
  44. 'email.unique' => lang('email_taken'),
  45. ];
  46. $this->session->alert($alerts[$rule], 'danger');
  47. });
  48. if ($validator->fails()) {
  49. return redirect($response, route('profile'));
  50. }
  51. if (param($request, 'password') !== null && !empty(param($request, 'password'))) {
  52. $this->database->query('UPDATE `users` SET `email`=?, `password`=?, `hide_uploads`=?, `copy_raw`=? WHERE `id` = ?', [
  53. param($request, 'email'),
  54. password_hash(param($request, 'password'), PASSWORD_DEFAULT),
  55. param($request, 'hide_uploads') !== null ? 1 : 0,
  56. param($request, 'copy_raw') !== null ? 1 : 0,
  57. $user->id,
  58. ]);
  59. } else {
  60. $this->database->query('UPDATE `users` SET `email`=?, `hide_uploads`=?, `copy_raw`=? WHERE `id` = ?', [
  61. param($request, 'email'),
  62. param($request, 'hide_uploads') !== null ? 1 : 0,
  63. param($request, 'copy_raw') !== null ? 1 : 0,
  64. $user->id,
  65. ]);
  66. }
  67. $this->session->set('copy_raw', param($request, 'copy_raw') !== null ? 1 : 0);
  68. $this->session->alert(lang('profile_updated'), 'success');
  69. $this->logger->info('User '.$this->session->get('username')." updated profile of $user->id.");
  70. return redirect($response, route('profile'));
  71. }
  72. }