From a3e66c67948a9ff9e9d7bd7ed474c1c57e4f9845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Garc=C3=ADa=20Jim=C3=A9nez?= Date: Thu, 17 Feb 2022 14:54:05 -0600 Subject: [PATCH] =?UTF-8?q?*=20[Implenta]=20confirmaci=C3=B3n=20de=20contr?= =?UTF-8?q?ase=C3=B1as=20para=20eliminar=20art=C3=ADculos.=20*=20[Actualiz?= =?UTF-8?q?a]=20mensajes=20en=20los=20modelos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/adminController.php | 66 ++++++++++++++++++++++++++---- controllers/profilesController.php | 2 +- controllers/usersController.php | 6 ++- models/adminModel.php | 30 ++++++++++++-- models/articlesModel.php | 4 +- models/authenticationModel.php | 6 +-- models/profilesModel.php | 8 ++-- models/usersModel.php | 8 ++-- 8 files changed, 104 insertions(+), 26 deletions(-) diff --git a/controllers/adminController.php b/controllers/adminController.php index d85ac65..88b2228 100644 --- a/controllers/adminController.php +++ b/controllers/adminController.php @@ -23,8 +23,8 @@ require_once 'models/adminModel.php'; class adminController { private const limit = 10; - // Renderiza la página de administración para aprobar un artículo - // y realiza búsquedas con el método POST. + // Renderiza la página de administración con la lista de artículos + // en espera de aprobación y realiza búsquedas con el método POST. static public function approve_articles() { $max = 246; $search = utils::validate_search(NABU_ROUTES['approve-articles'], $max); @@ -54,10 +54,10 @@ class adminController { // Renderiza la página de administración para editar un artículo // y actualiza los datos de un artículo con el método POST. static public function review_article() { - $validations = new validations(NABU_ROUTES['approve-articles']); - $messages = messages::get(); + $validations = new validations(NABU_ROUTES['approve-articles']); + // Valida la URL del artículo. $data = $validations -> validate($_GET, array( array('field' => 'slug', 'min_length' => 1, 'max_length' => 255) @@ -92,7 +92,7 @@ class adminController { $form = array_merge($_POST, $_FILES); - // Valida el formulario para actualizar los datos de un artículo. + // Valida el formulario que actualiza los datos de un artículo. $data = $validations -> validate($form, array( array('field' => 'cover', 'type' => 'image', 'optional' => true), array('field' => 'title', 'trim_all' => true, 'min_length' => 1, 'max_length' => 246), @@ -159,10 +159,62 @@ class adminController { // Renderiza la página para eliminar un artículo. static public function delete_article() { - $token = csrf::generate(); $messages = messages::get(); - require_once 'views/pages/confirm-password.php'; + $validations = new validations(NABU_ROUTES['approve-articles']); + + // Valida la URL del artículo. + $data = $validations -> validate($_GET, array( + array('field' => 'slug', 'min_length' => 1, 'max_length' => 255) + )); + + $slug = $data['slug']; + + $view = NABU_ROUTES['delete-article'] . '&slug=' . $slug; + + if (empty($_POST['confirm-password-form'])) { + unset($validations, $data, $slug); + + $token = csrf::generate(); + + require_once 'views/pages/confirm-password.php'; + + exit(); + } + + csrf::validate($_POST['csrf']); + + $validations -> route = $view; + + // Valida el formulario para confirmar la contraseña del usuario. + $data = $validations -> validate($_POST, array( + array('field' => 'password', 'min_length' => 6, 'max_length' => 255, 'not_spaces' => true, 'equal' => $_POST['confirm-password']) + )); + + $adminModel = new adminModel(); + + $id = $_SESSION['user']['id']; + + $admin = $adminModel -> get_admin($id); + + if (empty($admin)) + utils::redirect(NABU_ROUTES['logout']); + + // Valida la contraseña del usuario. + if (!password_verify($data['password'], $admin['password'])) { + messages::add('La contraseña es incorrecta'); + utils::redirect($view); + } + + // Obtiene los datos del artículo. + $article = $adminModel -> get_article($slug); + + if (empty($article)) + utils::redirect(NABU_ROUTES['approve-articles']); + + messages::add('El artículo se ha eliminado corractamente'); + + utils::redirect(NABU_ROUTES['approve-articles']); } // Renderiza la página para autorizar la publicación de un artículo. diff --git a/controllers/profilesController.php b/controllers/profilesController.php index 5d5148e..b228403 100644 --- a/controllers/profilesController.php +++ b/controllers/profilesController.php @@ -260,7 +260,7 @@ class profilesController { $validations = new validations($view); - // Valida el formulario para eliminar una cuenta de usuario. + // Valida el formulario para confirmar la contraseña del usuario. $data = $validations -> validate($_POST, array( array('field' => 'password', 'min_length' => 6, 'max_length' => 255, 'not_spaces' => true, 'equal' => $_POST['confirm-password']) )); diff --git a/controllers/usersController.php b/controllers/usersController.php index d79dcd8..07f40f5 100644 --- a/controllers/usersController.php +++ b/controllers/usersController.php @@ -213,9 +213,11 @@ class usersController { messages::check($view); + $role = $user['role']; + // Redirecciona al panel de administración en base al role. - if ($user['role'] == 'admin') - utils::redirect(NABU_ROUTES['admin']); + if ($role == 'admin' || $role == 'moderator') + utils::redirect(NABU_ROUTES['approve-articles']); // Redirecciona al perfil del usuario. utils::redirect(NABU_ROUTES['profile'] . '&user=' . urlencode($user['username'])); diff --git a/models/adminModel.php b/models/adminModel.php index a35ce33..411532a 100644 --- a/models/adminModel.php +++ b/models/adminModel.php @@ -77,7 +77,7 @@ class adminModel extends dbConnection { return $articles; } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para mostrar los artículos en espera de aprobación'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para listar los artículos en espera de aprobación'); } } @@ -109,7 +109,7 @@ class adminModel extends dbConnection { return $prepare -> fetch(); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para buscar la portada del artículo'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para buscar la portada de un artículo'); } } @@ -129,7 +129,31 @@ class adminModel extends dbConnection { $this -> pdo -> prepare($query) -> execute($data); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar los datos del artículo'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar los datos de un artículo'); + } + } + + // @return los datos de un usuario administrador. + public function get_admin(int $id) { + $query = 'SELECT id, role_id AS role, username, email, password FROM users '. + 'WHERE id = ? AND activated = TRUE AND (role_id = 1 OR role_id = 2)'; + + try { + $prepare = $this -> pdo -> prepare($query); + + $prepare -> execute(array($id)); + + $user = $prepare -> fetch(); + + if (empty($user)) + return array(); + + $user['role'] = $this -> role($user['role']); + + return $user; + } + catch (PDOException $e) { + $this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de un usuario administrador'); } } diff --git a/models/articlesModel.php b/models/articlesModel.php index 8c880be..5ac3d42 100644 --- a/models/articlesModel.php +++ b/models/articlesModel.php @@ -37,7 +37,7 @@ class articlesModel extends dbConnection { return $article; } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para validar si tu publicación es única'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para obtener el identificador de un artículo'); } } @@ -50,7 +50,7 @@ class articlesModel extends dbConnection { $this -> pdo -> prepare($query) -> execute($data); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para registrar tu publicación'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para registrar una publicación'); } } diff --git a/models/authenticationModel.php b/models/authenticationModel.php index a5fb78c..9af5f3a 100644 --- a/models/authenticationModel.php +++ b/models/authenticationModel.php @@ -31,7 +31,7 @@ class authenticationModel extends dbConnection { $this -> pdo -> prepare($query) -> execute($authentication); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para registrar tu clave de verificación de dirección de correo electrónico'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para registrar una clave de verificación de dirección de correo electrónico'); } } @@ -54,7 +54,7 @@ class authenticationModel extends dbConnection { return $user; } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para validar tu dirección de correo electrónico'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de autenticación de dirección de correo electrónico'); } } @@ -72,7 +72,7 @@ class authenticationModel extends dbConnection { $this -> pdo -> prepare($query_profile) -> execute($id); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para activar tu cuenta de usuario'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para activar una cuenta de usuario'); } } diff --git a/models/profilesModel.php b/models/profilesModel.php index 8deede5..728324e 100644 --- a/models/profilesModel.php +++ b/models/profilesModel.php @@ -37,7 +37,7 @@ class profilesModel extends dbConnection { return $prepare -> fetch(); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para mostrar los datos de tu perfil'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de perfil de un usuario'); } } @@ -57,7 +57,7 @@ class profilesModel extends dbConnection { $this -> pdo -> prepare($query) -> execute($data); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar los datos de tu perfil'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar los datos de perfil de un usuario'); } } @@ -73,7 +73,7 @@ class profilesModel extends dbConnection { return $prepare -> fetch(); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para buscar tus imágenes de perfil'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para buscar las imágenes de perfil de un usuario'); } } @@ -89,7 +89,7 @@ class profilesModel extends dbConnection { $this -> pdo -> prepare($query_disable) -> execute($id); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para eliminar tu cuenta de usuario'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para eliminar el perfil de un usuario'); } } diff --git a/models/usersModel.php b/models/usersModel.php index c4dd8fa..080c2c7 100644 --- a/models/usersModel.php +++ b/models/usersModel.php @@ -43,7 +43,7 @@ class usersModel extends dbConnection { return $users; } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para validar si tu apodo y dirección de correo electrónico son únicos'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de varios usuarios'); } } @@ -68,7 +68,7 @@ class usersModel extends dbConnection { $this -> pdo -> prepare($query) -> execute($data); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para registrar tu cuenta de usuario'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para registrar una cuenta de usuario'); } } @@ -94,7 +94,7 @@ class usersModel extends dbConnection { return $user; } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para validar si tu apodo y dirección de correo electrónico son únicos'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los datos de un usuario'); } } @@ -114,7 +114,7 @@ class usersModel extends dbConnection { $this -> pdo -> prepare($query) -> execute($data); } catch (PDOException $e) { - $this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar tus datos personales'); + $this -> errors($e -> getMessage(), 'tuvimos un problema para actualizar los datos personales de un usuario'); } }