[Agrega] boletín de nabu

This commit is contained in:
Ricardo García Jiménez 2022-03-13 19:08:09 -06:00
parent 336596fdf9
commit c10122c6db
6 changed files with 145 additions and 14 deletions

101
bolletin.php Normal file
View File

@ -0,0 +1,101 @@
#!/usr/bin/env 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/>.
*/
php_sapi_name() == 'cli' || exit();
// Imprime errores en terminal.
class messages {
static public function errors(string $message, int $code = 500) {
exit($message);
}
}
define('NABU', true);
$components = require 'core/routes.php';
require_once 'core/config.php';
require_once 'db/connection.php';
require_once 'libs/emails.php';
require_once 'core/utils.php';
// Envía por e-mail los artículos más recientes a una lista de suscriptores.
$bolletin = new class extends dbConnection {
private $articles = 10;
public function __construct() {
parent::__construct();
}
public function __invoke() {
$query = 'SELECT title, synopsis, slug FROM articles ' .
'ORDER BY modification_date DESC LIMIT ?';
// Obtiene los artículos más recientes.
try {
$prepare = $this -> pdo -> prepare($query);
$prepare -> execute(array($this -> articles));
$articles = $prepare -> fetchAll();
}
catch (PDOException $e) {
messages::errors('Tuvimos un problema para obtener los artículos más recientes');
}
if (empty($articles))
exit();
$query = 'SELECT id, email FROM suscriptions';
// Obtiene la lista de suscriptores.
try {
$prepare = $this -> pdo -> prepare($query);
$prepare -> execute();
$subscribers = $prepare -> fetchAll();
}
catch (PDOException $e) {
messages::errors('Tuvimos un problema para obtener la lista de suscriptores');
}
if (empty($subscribers))
$subscribers = array();
$body = require_once 'views/emails/bolletin.php';
$emails = new emails();
// Adjunta en un solo e-mail los destinatarios.
foreach ($subscribers as $subscriber) {
$emails -> prepare($subscriber['email'], $subscriber['email']);
}
// Envía el boletín.
$emails -> send('¡Llegaron los artículos del mes!', $body);
}
public function __destruct() {
parent::__destruct();
$this -> pdo = null;
}
};
$bolletin();

View File

@ -104,7 +104,7 @@ class communityController {
// Valida el email de la suscripción.
$data = $validations -> validate($form, array(
array('field' => 'email', 'trim' => true, 'min_length' => 5, 'max_length' => 255, 'not_spaces' => true),
array('field' => 'email', 'trim' => true, 'min_length' => 5, 'max_length' => 255, 'not_spaces' => true)
));
$email = strtolower($data['email']);

View File

@ -46,6 +46,16 @@ define('NABU_DEFAULT', array(
'image-size' => 1048576 * 2, // 2 MB (en bytes).
));
$routes = array();
// Genera la URL completa de todas las rutas.
foreach ($components as $alias => $component)
$routes[$alias] = NABU_URL . '/index.php?view=' . $component['route'];
define('NABU_ROUTES', $routes);
unset($routes);
// Define la zona horario de todas las funciones de fecha/tiempo.
date_default_timezone_set('America/Mexico_City');

View File

@ -20,6 +20,8 @@ defined('NABU') || exit();
session_start();
$components = require 'core/routes.php';
require_once 'core/config.php';
require_once 'core/utils.php';
require_once 'core/messages.php';
@ -27,16 +29,6 @@ require_once 'db/connection.php';
require_once 'libs/csrf.php';
require_once 'libs/validations.php';
$components = require 'core/routes.php';
$routes = array();
// Genera la URL completa de todas las rutas.
foreach ($components as $alias => $component)
$routes[$alias] = NABU_URL . '/index.php?view=' . $component['route'];
define('NABU_ROUTES', $routes);
// Selecciona el controlador y la vista de una ruta solicitada.
if (isset($_GET['view']))
foreach ($components as $alias => $component)
@ -46,11 +38,11 @@ if (isset($_GET['view']))
break;
}
unset($components);
if (empty($controller) || empty($view))
utils::redirect(NABU_ROUTES['home']);
unset($components, $routes);
require_once 'controllers/' . $controller . '.php';
// Renderiza la vista de una página web.

28
views/emails/bolletin.php Normal file
View File

@ -0,0 +1,28 @@
<?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();
$body = '<h1>Los artículos más recientes del mes<h1>';
foreach ($articles as $article) {
$body = $body . '<h2><a href="' . NABU_ROUTES['article'] . '&slug=' . $article['slug'] . '">' . utils::escape($article['title']) . '</a></h2>' .
'<p>' . utils::escape($article['synopsis']) . '</p>';
}
return $body;

View File

@ -18,7 +18,7 @@
defined('NABU') || exit();
return 'A partir de ahora recibirás correos de parte de nuestro equipo en los que compartiremos ' .
return '<p>A partir de ahora recibirás correos de parte de nuestro equipo en los que compartiremos ' .
'contigo blogposts que te pudiesen interesar, así como tips para que tu escritura en medios ' .
'digitales sea una de tus más grandes cualidades.</p>' .
'<p><a href="' . $url . '">Cancelar suscripción.</a></p>';