[Registra] la publicación de un artículo en espera de aprobación
This commit is contained in:
parent
57e1be3e99
commit
9c73526cb4
|
@ -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() {
|
||||
|
|
|
@ -19,5 +19,7 @@
|
|||
defined('NABU') || exit();
|
||||
|
||||
class profilesController {
|
||||
|
||||
static public function sent_articles() {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue