ProfileController.php 2.5 KB

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