ProfileController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Controllers\Web;
  3. use App\Utils\Api;
  4. use App\Utils\Url;
  5. use PH7\JustHttp\StatusCode;
  6. class ProfileController
  7. {
  8. /*
  9. * Obtiene los nombres de los campos del formulario.
  10. */
  11. private function getFormFields()
  12. {
  13. return ['email', 'username', 'password', 'pass_confirm'];
  14. }
  15. /*
  16. * Renderiza el formulario de modificación del perfil del usuario.
  17. */
  18. public function edit($req, $res)
  19. {
  20. $validations = [];
  21. $error = $req->session['error'] ?? null;
  22. $success = $req->session['success'] ?? null;
  23. /*
  24. * Obtiene los mensajes de validación
  25. * de los campos del formulario.
  26. */
  27. foreach ($this->getFormFields() as $field) {
  28. $validations[$field] = $req->session['validations'][$field] ?? null;
  29. }
  30. foreach (['validations', 'error', 'success'] as $key) {
  31. unset($req->session[$key]);
  32. }
  33. $res->render('profile/edit', [
  34. 'app' => $req->app,
  35. 'userAuth' => $req->app->local('userAuth'),
  36. 'validations' => $validations,
  37. 'error' => $error,
  38. 'success' => $success
  39. ]);
  40. }
  41. /*
  42. * Modifica el perfil del usuario.
  43. */
  44. public function update($req, $res)
  45. {
  46. $data = [];
  47. // Obtiene los valores de los campos del formulario.
  48. foreach ($this->getFormFields() as $field) {
  49. $data[$field] = $req->body[$field] ?? null;
  50. }
  51. $headers = ['Content-Type' => 'application/x-www-form-urlencoded'];
  52. $client = Api::client();
  53. // Realiza la petición de modificación del perfil del usuario.
  54. $response = $client->put('v1/profile', $headers, $data);
  55. $body = json_decode($response->body ?? '', true);
  56. // Comprueba el cuerpo de la petición.
  57. if (empty($response->success) || empty($body['data'])) {
  58. // Envía los mensajes de validación de los campos del formulario.
  59. if (!empty($body['validations'])) {
  60. $req->session['validations'] = $body['validations'];
  61. }
  62. // Envía el mensaje de error de la petición.
  63. $req->session['error'] = $body['error'] ?? 'The profile could not be updated';
  64. $res->redirect(Url::build('profile/edit'), StatusCode::FOUND);
  65. }
  66. $req->session['success'] = 'The profile was modified correctly';
  67. $res->redirect(Url::build('profile/edit'), StatusCode::FOUND);
  68. }
  69. }