[Actualiza] los datos personales de un usuario en edición de perfil

This commit is contained in:
Ricardo García Jiménez 2022-01-23 17:25:16 -06:00
parent e4cd061b03
commit 62f5bb55f0
4 changed files with 114 additions and 8 deletions

View file

@ -71,9 +71,9 @@ class profilesController {
// Renderiza la página de edición de perfil
// y actualiza los datos de perfil de un usuario con el método POST.
static public function edit_profile() {
if (empty($_POST['edit-profile-form'])) {
utils::check_session(NABU_ROUTES['home']);
utils::check_session(NABU_ROUTES['home']);
if (empty($_POST['edit-profile-form'])) {
$profilesModel = new profilesModel();
// Obtiene los datos de perfil del usuario de sesión.
@ -111,6 +111,92 @@ class profilesController {
array('field' => 'username', 'trim' => true, 'min_length' => 1, 'max_length' => 255, 'optional' => true, 'not_spaces' => true),
array('field' => 'password', 'min_length' => 6, 'max_length' => 255, 'not_spaces' => true, 'optional' => true, 'equal' => $_POST['confirm-password']),
));
if (empty($data))
utils::redirect(NABU_ROUTES['edit-profile']);
$id = $_SESSION['user']['id'];
$profilesModel = new profilesModel();
// Obtiene los datos de perfil actual del usuario.
$profile = $profilesModel -> get('id', $id);
if (empty($profile))
utils::redirect(NABU_ROUTES['logout']);
require_once 'models/usersModel.php';
$update = array();
// Valida si hay cambios en el nombre del usuario.
if (isset($data['name']))
if ($data['name'] != $profile['name']) {
$update['name'] = $data['name'];
messages::add('Tu nombre completo se ha actualizado correctamente');
}
// Valida si hay cambios en el apodo del usuario.
if (isset($data['username']))
if ($data['username'] != $profile['username']) {
$usersModel = new usersModel();
$user = $usersModel -> get('username', $data['username']);
$success = 'Tu apodo se ha actualizado correctamente';
$exists = 'Por favor define un apodo diferente';
// Valida si el apodo es único.
if (empty($user)) {
$update['username'] = $data['username'];
messages::add($success);
}
else {
// Valida si es una cuenta inactiva.
if (empty($user['activated']) && !empty($user['expiration'])) {
// Valida si la autenticación está expirada.
if (time() > $user['expiration']) {
$usersModel -> delete($user['id']);
$update['username'] = $data['username'];
messages::add($success);
}
else
messages::add($exists);
}
else
messages::add($exists);
}
unset($usersModel, $user);
}
// Valida si hay cambios en la contraseña del usuario.
if (isset($data['password'])) {
$update['password'] = password_hash($data['password'], PASSWORD_DEFAULT, array('cost' => 12));
messages::add('Tu contraseña se ha actualizado correctamente');
}
// Actualiza los datos del usuario en la base de datos.
if (!empty($update)) {
$usersModel = new usersModel();
$usersModel -> update($id, $update);
unset($usersModel);
// Actualiza la variable de sesión.
if (isset($update['username']))
$_SESSION['user']['username'] = $update['username'];
$update = array();
}
utils::redirect(NABU_ROUTES['edit-profile']);
}
static public function delete_profile() {

View file

@ -24,10 +24,10 @@ class usersController {
// Renderiza la página de registro de usuarios
// y registra usuarios con el método POST.
static public function signup() {
if (empty($_POST['signup-form'])) {
// Redirecciona a "home" si existe una sesión de usuario.
utils::session_exists(NABU_ROUTES['home']);
// Redirecciona a "home" si existe una sesión de usuario.
utils::session_exists(NABU_ROUTES['home']);
if (empty($_POST['signup-form'])) {
$token = csrf::generate();
$messages = messages::get();
@ -133,9 +133,9 @@ class usersController {
// Renderiza la página de inicio de sesión
// y asigna credenciales de acceso con el método POST.
static public function login() {
if (empty($_POST['login-form'])) {
utils::session_exists(NABU_ROUTES['home']);
utils::session_exists(NABU_ROUTES['home']);
if (empty($_POST['login-form'])) {
$token = csrf::generate();
$messages = messages::get();

View file

@ -98,6 +98,26 @@ class usersModel extends dbConnection {
}
}
// Actualiza los datos de un usuario.
public function update(int $id, array $data) {
$columns = array_keys($data);
$query = '';
foreach ($columns as $column)
$query = $query . $column . ' = :' . $column . ', ';
$query = 'UPDATE users SET ' . rtrim($query, ', ') . ' WHERE id = :id';
$data['id'] = $id;
try {
$this -> pdo -> prepare($query) -> execute($data);
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar tus datos personales');
}
}
public function __destruct() {
parent::__destruct();
$this -> pdo = null;

View file

@ -17,7 +17,7 @@
<?php defined('NABU') || exit() ?>
<?php $head_title = 'Crea una cuenta' ?>
<?php $head_title = 'Registrate' ?>
<!-- Estilos a cargar -->
<?php $styles = array(