[Agrega] boletín de nabu
This commit is contained in:
parent
336596fdf9
commit
c10122c6db
|
@ -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();
|
|
@ -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']);
|
||||
|
|
|
@ -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');
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
|
@ -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>';
|
||||
|
|
Loading…
Reference in New Issue