[Registra] la publicación de un artículo en espera de aprobación

This commit is contained in:
Ricardo García Jiménez 2022-01-20 05:01:25 -06:00
parent 57e1be3e99
commit 9c73526cb4
4 changed files with 99 additions and 3 deletions

View file

@ -18,11 +18,13 @@
defined('NABU') || exit();
require_once 'models/articlesModel.php';
class articlesController {
// Renderiza la página para publicar artículos
// y envía un artículo para su aprobación con el método POST.
static public function post_article() {
utils::session_check(NABU_ROUTES['home']);
utils::check_session(NABU_ROUTES['home']);
if (empty($_POST['post-article-form'])) {
$token = csrf::generate();
@ -43,6 +45,32 @@ class articlesController {
array('field' => 'synopsis', 'trim_all' => true, 'min_length' => 1, 'max_length' => 255),
array('field' => 'content', 'trim' => true, 'min_length' => 1, 'max_length' => NABU_DEFAULT['article-size']),
));
$data['slug'] = utils::url_slug($data['title']);
// Valida la longitud de la URL.
$validations -> validate($data, array(
array('field' => 'slug', 'min_length' => 1, 'max_length' => 255)
));
$articlesModel = new articlesModel();
$article = $articlesModel -> find($data['slug']);
// Valida si el título del artículo es único en el día.
if (!empty($article)) {
messages::add('Por favor define un título diferente o espera máximo un día para enviar tu publicación');
utils::redirect(NABU_ROUTES['post-article']);
}
$data['user_id'] = $_SESSION['user']['id'];
$data['creation_date'] = utils::current_date();
// Registra un artículo para su aprobación.
$articlesModel -> save($data);
messages::add('Tu publicación se ha enviado correctamente, en breve autorizaremos tu publicación');
utils::redirect(NABU_ROUTES['sent-articles']);
}
static public function all_articles() {

View file

@ -19,5 +19,7 @@
defined('NABU') || exit();
class profilesController {
static public function sent_articles() {
//
}
}

View file

@ -43,8 +43,13 @@ class utils {
}
// Redirecciona a una ruta si no existe una sesión de usuario.
static public function session_check(string $route) {
static public function check_session(string $route) {
if (empty($_SESSION['user']))
self::redirect($route);
}
// Genera la URL de un artículo.
public static function url_slug(string $title) {
return date('Ymd') . '-' . preg_replace('/[^A-Za-z0-9-]+/', '-', strtolower($title));
}
}

View file

@ -0,0 +1,61 @@
<?php
/*
* 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/>.
*/
defined('NABU') || exit();
class articlesModel extends dbConnection {
public function __construct() {
parent::__construct();
}
// @return un array asociativo con los datos de un artículo.
public function find(string $slug) {
$query = 'SELECT id FROM articles WHERE slug = ? LIMIT 1';
try {
$prepare = $this -> pdo -> prepare($query);
$prepare -> execute(array($slug));
$article = $prepare -> fetch();
return $article;
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para validar si tu publicación es única');
}
}
// Registra un artículo en espera de aprobación.
public function save(array $data) {
$query = 'INSERT INTO articles(user_id, title, synopsis, content, slug, creation_date) ' .
'VALUES(:user_id, :title, :synopsis, :content, :slug, :creation_date)';
try {
$this -> pdo -> prepare($query) -> execute($data);
}
catch (PDOException $e) {
$this -> errors($e -> getMessage(), 'tuvimos un problema para registrar tu publicación');
}
}
public function __destruct() {
parent::__destruct();
$this -> pdo = null;
}
}