-
Notifications
You must be signed in to change notification settings - Fork 2
/
bolletin.php
101 lines (78 loc) · 2.69 KB
/
bolletin.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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))
exit();
$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();