111 lines
3.6 KiB
PHP
111 lines
3.6 KiB
PHP
<?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();
|
|
|
|
require_once 'models/articlesModel.php';
|
|
|
|
class articlesController {
|
|
private const limit = 10;
|
|
|
|
// 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::check_session(NABU_ROUTES['home']);
|
|
|
|
if (empty($_POST['post-article-form'])) {
|
|
$token = csrf::generate();
|
|
$messages = messages::get();
|
|
|
|
require_once 'views/pages/post-article.php';
|
|
|
|
exit();
|
|
}
|
|
|
|
csrf::validate($_POST['csrf']);
|
|
|
|
$view = NABU_ROUTES['post-article'];
|
|
|
|
$validations = new validations($view);
|
|
|
|
// Valida el formulario para enviar un artículo.
|
|
$data = $validations -> validate($_POST, array(
|
|
array('field' => 'title', 'trim_all' => true, 'min_length' => 1, 'max_length' => 246),
|
|
array('field' => 'synopsis', 'trim_all' => true, 'min_length' => 1, 'max_length' => 255),
|
|
array('field' => 'body', '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_article($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($view);
|
|
}
|
|
|
|
$data['user_id'] = $_SESSION['user']['id'];
|
|
$data['creation_date'] = utils::current_date();
|
|
|
|
// Registra un artículo para su aprobación.
|
|
$articlesModel -> save_article($data);
|
|
|
|
messages::add('Tu publicación se ha enviado correctamente, en breve lo autorizaremos');
|
|
utils::redirect($view);
|
|
}
|
|
|
|
// Renderiza la página para mostrar todos los artículos publicados
|
|
// y realiza búsquedas con el método POST.
|
|
static public function all_articles() {
|
|
$max = 246;
|
|
$search = utils::validate_search(NABU_ROUTES['all-articles'], $max);
|
|
$query = $search['query'];
|
|
$view = $search['view'];
|
|
|
|
$articlesModel = new articlesModel();
|
|
|
|
// Obtiene el número total de artículos publicados.
|
|
$total = $articlesModel -> count_all($query);
|
|
|
|
$pagination = utils::pagination($total, self::limit, $view);
|
|
|
|
// Obtiene los artículos publicados.
|
|
$articles = $articlesModel -> get_all(self::limit, $pagination['accumulation'], $query);
|
|
|
|
$page = $pagination['page'];
|
|
|
|
unset($search, $articlesModel, $total, $pagination);
|
|
|
|
$token = csrf::generate();
|
|
$messages = messages::get();
|
|
|
|
require_once 'views/pages/all-articles.php';
|
|
}
|
|
|
|
static public function article() {
|
|
require_once 'views/pages/article.php';
|
|
}
|
|
}
|