[Muestra] los artículos publicados de un usuario en su perfil
This commit is contained in:
parent
a0b6bdd18d
commit
872a9f9334
|
@ -21,6 +21,8 @@ defined('NABU') || exit();
|
|||
require_once 'models/profilesModel.php';
|
||||
|
||||
class profilesController {
|
||||
private const limit = 10;
|
||||
|
||||
// Renderiza la página de perfil de un usuario.
|
||||
static public function profile() {
|
||||
$validations = new validations(NABU_ROUTES['home']);
|
||||
|
@ -35,19 +37,29 @@ class profilesController {
|
|||
// Obtiene los datos de perfil del usuario.
|
||||
$profile = $profilesModel -> get('username', $data['user']);
|
||||
|
||||
unset($profilesModel);
|
||||
|
||||
if (empty($profile))
|
||||
utils::redirect(NABU_ROUTES['home']);
|
||||
|
||||
// Obtiene el número total de artículos publicados.
|
||||
$total = $profilesModel -> count_articles($profile['id']);
|
||||
|
||||
$view = NABU_ROUTES['profile'] . '&user=' . urlencode($profile['username']);
|
||||
|
||||
$pagination = utils::pagination($total, self::limit, $view);
|
||||
|
||||
// Obtiene los artículos publicados por el usuario.
|
||||
$articles = $profilesModel -> articles(self::limit, $pagination['accumulation'], $profile['id']);
|
||||
|
||||
$page = $pagination['page'];
|
||||
|
||||
unset($profilesModel, $total, $pagination);
|
||||
|
||||
$isMyProfile = false;
|
||||
|
||||
if (isset($_SESSION['user']))
|
||||
if ($_SESSION['user']['username'] == $profile['username'])
|
||||
$isMyProfile = true;
|
||||
|
||||
$view = NABU_ROUTES['profile'] . '&user=' . urlencode($profile['username']);
|
||||
|
||||
// Escapa los caracteres del nombre completo y el apodo a HTML5.
|
||||
$profile['name'] = utils::escape($profile['name']);
|
||||
$profile['username'] = utils::escape($profile['username']);
|
||||
|
@ -61,10 +73,6 @@ class profilesController {
|
|||
|
||||
$profile['description'] = utils::escape($profile['description']);
|
||||
|
||||
$page = 1;
|
||||
|
||||
$articles = array();
|
||||
|
||||
require_once 'views/pages/profile.php';
|
||||
}
|
||||
|
||||
|
|
|
@ -40,9 +40,6 @@ class adminModel extends dbConnection {
|
|||
|
||||
$count = $prepare -> fetch();
|
||||
|
||||
if (empty($count))
|
||||
return $count;
|
||||
|
||||
return $count['total'];
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
|
|
|
@ -71,9 +71,6 @@ class articlesModel extends dbConnection {
|
|||
|
||||
$count = $prepare -> fetch();
|
||||
|
||||
if (empty($count))
|
||||
return $count;
|
||||
|
||||
return $count['total'];
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
|
|
|
@ -32,7 +32,8 @@ class blogModel extends dbConnection {
|
|||
'LEFT JOIN profiles AS p ON u.id = p.id ' .
|
||||
'LEFT JOIN comments AS c ON a.id = c.article_id ' .
|
||||
'LEFT JOIN favorites AS f ON a.id = f.article_id ' .
|
||||
'WHERE a.authorized = TRUE GROUP BY a.id ORDER BY likes DESC, comments DESC LIMIT ?';
|
||||
'WHERE a.authorized = TRUE GROUP BY u.id ' .
|
||||
'ORDER BY likes DESC, comments DESC LIMIT ?';
|
||||
|
||||
try {
|
||||
$prepare = $this -> pdo -> prepare($query);
|
||||
|
@ -60,7 +61,8 @@ class blogModel extends dbConnection {
|
|||
'LEFT JOIN profiles AS p ON u.id = p.id ' .
|
||||
'LEFT JOIN comments AS c ON a.id = c.article_id ' .
|
||||
'LEFT JOIN favorites AS f ON a.id = f.article_id ' .
|
||||
'WHERE a.authorized = TRUE GROUP BY a.id ORDER BY a.modification_date DESC LIMIT ?';
|
||||
'WHERE a.authorized = TRUE GROUP BY a.id ' .
|
||||
'ORDER BY a.modification_date DESC LIMIT ?';
|
||||
|
||||
try {
|
||||
$prepare = $this -> pdo -> prepare($query);
|
||||
|
@ -79,7 +81,6 @@ class blogModel extends dbConnection {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public function __destruct() {
|
||||
parent::__destruct();
|
||||
$this -> pdo = null;
|
||||
|
|
|
@ -41,6 +41,55 @@ class profilesModel extends dbConnection {
|
|||
}
|
||||
}
|
||||
|
||||
// @return el número total de artículos publicados por un usuario.
|
||||
public function count_articles(int $id) {
|
||||
$query = 'SELECT COUNT(*) AS total FROM articles AS a ' .
|
||||
'INNER JOIN users AS u ON a.user_id = u.id ' .
|
||||
'WHERE a.authorized = TRUE AND u.id = ?';
|
||||
|
||||
try {
|
||||
$prepare = $this -> pdo -> prepare($query);
|
||||
|
||||
$prepare -> execute(array($id));
|
||||
|
||||
$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 por un usuario');
|
||||
}
|
||||
}
|
||||
|
||||
// @return un array asociativo con los artículos publicados por un usuario.
|
||||
public function articles(int $limit, int $accumulation, int $id) {
|
||||
$query = 'SELECT a.title, a.synopsis, a.slug, a.cover, u.username AS author, p.avatar, ' .
|
||||
'COUNT(c.article_id) AS comments, COUNT(f.article_id) AS likes ' .
|
||||
'FROM articles AS a ' .
|
||||
'INNER JOIN users AS u ON a.user_id = u.id ' .
|
||||
'LEFT JOIN profiles AS p ON u.id = p.id ' .
|
||||
'LEFT JOIN comments AS c ON a.id = c.article_id ' .
|
||||
'LEFT JOIN favorites AS f ON a.id = f.article_id ' .
|
||||
'WHERE a.authorized = TRUE AND u.id = ? GROUP BY a.id ' .
|
||||
'ORDER BY a.creation_date DESC LIMIT ? OFFSET ?';
|
||||
|
||||
try {
|
||||
$prepare = $this -> pdo -> prepare($query);
|
||||
|
||||
$prepare -> execute(array($id, $limit, $accumulation));
|
||||
|
||||
$articles = $prepare -> fetchAll();
|
||||
|
||||
if (empty($articles))
|
||||
$articles = array();
|
||||
|
||||
return $articles;
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
$this -> errors($e -> getMessage(), 'tuvimos un problema para listar los artículos publicados por un usuario');
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza los datos de perfil de un usuario.
|
||||
public function update(int $id, array $data) {
|
||||
$columns = array_keys($data);
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
<!-- Estilos para el responsive design -->
|
||||
<?php $desktop_styles = array(
|
||||
array('file' => 'components/navbar/navbar-desktop.css', 'attributes' => 'media="screen and (min-width: 768px)"'),
|
||||
array('file' => 'pages/profile/profile-desktop.css', 'attributes' => 'media="screen and (min-width: 768px)"')
|
||||
array('file' => 'pages/profile/profile-desktop.css', 'attributes' => 'media="screen and (min-width: 768px)"')
|
||||
) ?>
|
||||
|
||||
<!-- Archivos de javascript a cargar -->
|
||||
|
@ -64,10 +64,8 @@
|
|||
<h2 class='public-posts__title'>Post publicados</h2>
|
||||
<div class="public-cards__container">
|
||||
<?php require 'views/components/articles.php' ?>
|
||||
<?php require 'views/components/articles.php' ?>
|
||||
<?php require 'views/components/articles.php' ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<?php require_once 'views/components/articles.php' ?>
|
||||
<?php require_once 'views/components/pagination.php' ?>
|
||||
<?php require_once 'views/components/footer.php' ?>
|
||||
|
|
Loading…
Reference in a new issue