* [Lista] artículos publicados en admin.

* [Permite] eliminar y editar artículos publicados en admin
This commit is contained in:
Ricardo García Jiménez 2022-02-20 11:53:06 -06:00
parent 077845bd4c
commit 4a3cdae13f
5 changed files with 110 additions and 15 deletions

View file

@ -38,8 +38,8 @@ class adminController {
$pagination = utils::pagination($total, self::limit, $view);
// Lista de artículos en espera de aprobación.
$articles = $adminModel -> sent(self::limit, $pagination['accumulation'], $query);
// Obtiene todos los artículos en espera de aprobación.
$articles = $adminModel -> find_sent(self::limit, $pagination['accumulation'], $query);
$page = $pagination['page'];
@ -314,11 +314,27 @@ class adminController {
utils::redirect(NABU_ROUTES['approve-articles']);
}
// Renderiza la página de administración para buscar artículos publicados.
// Renderiza la página de administración con la lista de artículos
// publicados y realiza búsquedas con el método POST.
static public function published_articles() {
$view = NABU_ROUTES['published-articles'];
$max = 246;
$query = '';
$max = 246;
$search = utils::validate_search(NABU_ROUTES['published-articles'], $max);
$query = $search['query'];
$view = $search['view'];
$adminModel = new adminModel();
// Obtiene el número total de artículos publicados.
$total = $adminModel -> count_published($query);
$pagination = utils::pagination($total, self::limit, $view);
// Obtiene todos los artículos publicados.
$articles = $adminModel -> find_published(self::limit, $pagination['accumulation'], $query);
$page = $pagination['page'];
unset($search, $adminModel, $total, $pagination);
$token = csrf::generate();
$messages = messages::get();
@ -326,11 +342,14 @@ class adminController {
require_once 'views/admin/published-articles.php';
}
// Renderiza la página de administración para buscar usuarios registrados.
// Renderiza la página de administración con la lista de usuarios
// registrado y realiza búsquedas con el método POST.
static public function registered_users() {
$view = NABU_ROUTES['registered-users'];
$max = 255;
$query = '';
$max = 255;
$search = utils::validate_search(NABU_ROUTES['registered-users'], $max);
$query = $search['query'];
$view = $search['view'];
$token = csrf::generate();
$messages = messages::get();

View file

@ -80,7 +80,7 @@ class articlesController {
// Renderiza la página para listar todos los artículos autorizados
// y realiza búsquedas con el método POST.
static public function all_articles() {
$max = 246;
$max = 246;
$search = utils::validate_search(NABU_ROUTES['all-articles'], $max);
$query = $search['query'];
$view = $search['view'];
@ -92,7 +92,7 @@ class articlesController {
$pagination = utils::pagination($total, self::limit, $view);
// Lista de artículos autorizados.
// Obtiene los artículos autorizados.
$articles = $articlesModel -> all(self::limit, $pagination['accumulation'], $query);
$page = $pagination['page'];

View file

@ -25,7 +25,10 @@ class blogController {
$blogModel = new blogModel();
$articles = $blogModel -> popular(5);
// Obtiene los artículos más populares.
$articles = $blogModel -> popular(5);
// Obtiene los artículos más recientes.
$recent_articles = $blogModel -> recent(10);
unset($blogModel);

View file

@ -48,7 +48,7 @@ class adminModel extends dbConnection {
}
// @return un array asociativo de artículos en espera de aprobación.
public function sent(int $limit, int $accumulation, string $pattern) {
public function find_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 ';
@ -74,7 +74,7 @@ class adminModel extends dbConnection {
return $articles;
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para listar los artículos en espera de aprobación');
$this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los artículos en espera de aprobación');
}
}
@ -200,6 +200,61 @@ class adminModel extends dbConnection {
}
}
// @return el número total de artículos publicados.
public function count_published(string $pattern) {
$query = 'SELECT COUNT(*) AS total FROM articles WHERE authorized = TRUE';
if (!empty($pattern))
$query = $query . ' AND title LIKE ?';
try {
$prepare = $this -> pdo -> prepare($query);
if (empty($pattern))
$prepare -> execute();
else
$prepare -> execute(array('%' . $pattern . '%'));
$count = $prepare -> fetch();
return $count['total'];
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para calcular el número total de artículos publicados');
}
}
// @return un array asociativo de artículos publicados.
public function find_published(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 = TRUE ';
if (!empty($pattern))
$query = $query . 'AND a.title LIKE ? ';
$query = $query . 'ORDER BY a.title ASC 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();
if (empty($articles))
$articles = array();
return $articles;
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para obtener los artículos publicados');
}
}
public function __destruct() {
parent::__destruct();
$this -> pdo = null;

View file

@ -25,4 +25,22 @@
<?php require_once 'views/components/search.php' ?>
<table>
<tr>
<th>Título</th>
<th>Autor</th>
<th></th>
<th></th>
</tr>
<?php foreach($articles as $article): ?>
<tr>
<td><?= utils::escape($article['title']) ?></td>
<td><a href="<?= NABU_ROUTES['profile'] . '&user=' . urlencode($article['author']) ?>"><?= utils::escape($article['author']) ?></a></td>
<td><a href="<?= NABU_ROUTES['review-article'] . '&slug=' . $article['slug'] ?>">Editar</a></td>
<td><a href="<?= NABU_ROUTES['delete-article'] . '&slug=' . $article['slug'] ?>">Eliminar</a></td>
</tr>
<?php endforeach ?>
</table>
<?php require_once 'views/components/pagination.php' ?>
<?php require_once 'views/components/footer.php' ?>