[Muestra] artículos en espera de aprobación en admin

This commit is contained in:
Ricardo García Jiménez 2022-01-30 20:58:17 -06:00
parent a802566fc9
commit 0465bdb134
9 changed files with 145 additions and 13 deletions

View File

@ -21,15 +21,30 @@ defined('NABU') || exit();
require_once 'models/adminModel.php';
class adminController {
private const limit = 10;
// Renderiza la página de administración para aprobar un artículo
// y aprueba un artículo con el método POST.
static public function approve_articles() {
$view = NABU_ROUTES['approve-articles'];
$max = 246;
$query = '';
$adminModel = new adminModel();
$articles = $adminModel -> sent();
// Obtiene el número total de artículos autorizados.
$total = $adminModel -> count_sent($query);
unset($adminModel);
$pagination = utils::pagination($total, self::limit, $view);
// Lista de artículos en espera de aprobación.
$articles = $adminModel -> sent(self::limit, $pagination['accumulation'], $query);
$page = $pagination['page'];
unset($adminModel, $total, $pagination);
$token = csrf::generate();
$messages = messages::get();
require_once 'views/admin/approve-articles.php';
@ -38,26 +53,49 @@ class adminController {
// Renderiza la página de administración para editar un artículo
// y actualiza los datos del artículo con el método POST.
static public function review_article() {
$token = csrf::generate();
$messages = messages::get();
require_once 'views/admin/review-article.php';
}
// 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';
}
// Renderiza la página autorizar la publicación de un artículo
// Renderiza la página para autorizar la publicación de un artículo.
static public function authorize_article() {
$token = csrf::generate();
$messages = messages::get();
require_once 'views/pages/confirm-password.php';
}
// Renderiza la página de administración para buscar artículos publicados.
static public function published_articles() {
$view = NABU_ROUTES['published-articles'];
$max = 246;
$query = '';
$token = csrf::generate();
$messages = messages::get();
require_once 'views/admin/published-articles.php';
}
// Renderiza la página de administración para buscar usuarios registrados.
static public function registered_users() {
$view = NABU_ROUTES['registered-users'];
$max = 255;
$query = '';
$token = csrf::generate();
$messages = messages::get();
require_once 'views/admin/registered-users.php';
}
}

View File

@ -103,4 +103,33 @@ class utils {
return false;
}
// @return un array asociativo con la gestión de páginas de resultados.
public static function pagination(int $total, int $limit, string $route) {
// Página de resultado inicial.
$page = 1;
// Calcula el número total de páginas de resultados.
$results = ceil($total/$limit);
if (isset($_GET['page']) && is_numeric($_GET['page']))
$page = $_GET['page'];
if ($page < 1)
self::redirect($route);
if ($results < 1)
$results = 1;
if ($page > $results)
self::redirect($route . '&page=' . $results);
// Calcula el número de resultados acumulados por paginación.
$pagination = array(
'page' => $page,
'accumulation' => ($page - 1) * $limit
);
return $pagination;
}
}

View File

@ -23,14 +23,12 @@ class adminModel extends dbConnection {
parent::__construct();
}
// @return un array asociativo de artículos en espera de aprobación.
public function sent(string $pattern = '') {
$query = 'SELECT a.title, a.slug, u.username AS author ' .
'FROM articles AS a INNER JOIN users AS u ON a.user_id = u.id ' .
'WHERE a.authorized = FALSE ORDER BY a.creation_date DESC';
// @return el número total de artículos en espera de aprobación.
public function count_sent(string $pattern) {
$query = 'SELECT COUNT(*) AS total FROM articles WHERE authorized = FALSE';
if (!empty($pattern))
$query = $query . 'LIMIT ? OFFSET ?';
$query = $query . 'AND title LIKE ?';
try {
$prepare = $this -> pdo -> prepare($query);
@ -38,7 +36,38 @@ class adminModel extends dbConnection {
if (empty($pattern))
$prepare -> execute();
else
$prepare -> execute();
$prepare -> execute(array('%' . $pattern . '%'));
$count = $prepare -> fetch();
if (empty($count))
return $count;
return $count['total'];
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para calcular el número total de artículos en espera de aprobación');
}
}
// @return un array asociativo de artículos en espera de aprobación.
public function sent(int $limit, int $accumulation, string $pattern) {
$query = 'SELECT a.title, a.slug, u.username AS author ' .
'FROM articles AS a INNER JOIN users AS u ON a.user_id = u.id ' .
'WHERE a.authorized = FALSE ';
if (!empty($pattern))
$query = $query . 'AND a.title LIKE ? ';
$query = $query . 'ORDER BY a.creation_date DESC LIMIT ? OFFSET ?';
try {
$prepare = $this -> pdo -> prepare($query);
if (empty($pattern))
$prepare -> execute(array($limit, $accumulation));
else
$prepare -> execute(array('%' . $pattern . '%', $limit, $accumulation));
$articles = $prepare -> fetchAll();

View File

@ -20,8 +20,11 @@
<?php $head_title = 'Aprobar artículos' ?>
<?php require_once 'views/components/dashboard.php' ?>
<h1>Aprobar artículos</h1>
<?php require_once 'views/components/admin-search.php' ?>
<table>
<tr>
<th>Título</th>
@ -41,4 +44,5 @@
<?php endforeach ?>
</table>
<?php require_once 'views/components/pagination.php' ?>
<?php require_once 'views/components/footer.php' ?>

View File

@ -20,5 +20,9 @@
<?php $head_title = 'Artículos publicados' ?>
<?php require_once 'views/components/dashboard.php' ?>
<h1>Artículos publicados</h1>
<?php require_once 'views/components/admin-search.php' ?>
<?php require_once 'views/components/footer.php' ?>

View File

@ -20,5 +20,9 @@
<?php $head_title = 'Usuarios registrados' ?>
<?php require_once 'views/components/dashboard.php' ?>
<h1>Usuarios registrados</h1>
<?php require_once 'views/components/admin-search.php' ?>
<?php require_once 'views/components/footer.php' ?>

View File

@ -20,5 +20,9 @@
<?php $head_title = 'Revisar artículo' ?>
<?php require_once 'views/components/dashboard.php' ?>
<h1>Revisar artículo</h1>
<?php require_once 'views/components/admin-search.php' ?>
<?php require_once 'views/components/footer.php' ?>

View File

@ -0,0 +1,23 @@
<!--
* Este archivo es parte de Nabu.
*
* Nabu es software libre: puedes redistribuirlo y/o modificarlo
* bajo los términos de la Licencia Pública General de GNU Affero publicada por
* la Free Software Foundation, ya sea la versión 3 de la Licencia, o
* (a su elección) cualquier versión posterior.
*
* Nabu se distribuye con la esperanza de que sea de utilidad,
* pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de
* COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. Consulte la
* Licencia Pública General de GNU Affero para obtener más detalles.
*
* Debería haber recibido una copia de la Licencia Pública General de GNU Affero
* junto con este programa. De lo contrario, consulte <https://www.gnu.org/licenses/>.
-->
<?php defined('NABU') || exit() ?>
<form class="form" method="POST" action="<?= $view ?>">
<input type="hidden" name="csrf" value="<?= $token ?>">
<input type="text" name="q" minlength="1" maxlength="<?= $max ?>" required>
</form>

View File

@ -24,8 +24,5 @@
<input class="search__input" type="text" name="q" minlength="1" placeholder="Buscar un blogpost" maxlength="246" required>
<span class="glass__icon"></span>
</div>
<!-- <span>
<input type="submit" name="search-submit" value="&#x1F50E">
</span> -->
</form>
</div>