journal = $journal; } public function getList() { $res = DB::aQuery('SELECT email FROM abonnements WHERE journal = "'.DB::esc($this->journal->get('id')).'" ORDER BY email ASC;', false, DB::FETCH_ASSOC); $out = array(); foreach ($res as $row) { $out[] = $row['email']; } unset($res); return $out; } public function getNb() { $res = DB::aQuery('SELECT COUNT(*) FROM abonnements WHERE journal = "'.DB::esc($this->journal->get('id')).'";'); return $res[0][0]; } public function add($email) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return false; } $key = user::createSecretKey(0, 'abonnement', $email); $subject = $this->journal->get('titre') . ' - Confirmation d\'abonnement'; $content = "Bonjour,\n\nVous avez demandé à vous abonner aux nouveaux écrits publiés sur ce journal :\n\n"; $content.= $this->journal->get('titre') . "\n" . $this->journal->get('url') . "\n\n"; $content.= "Pour vous abonner, vous devez confirmer votre adresse email en cliquant sur le lien ci-dessous :\n\n"; $content.= $this->journal->get('url') . 'abonnement/' . $key . "\n\n"; $content.= "Si vous n'avez pas demandé à recevoir ce message, ignorez-le."; notifications::send($email, $subject, $content); return true; } public function confirm($key) { $email = user::checkSecretKey('abonnement', $key); if (!$email) { return false; } DB::uQuery('INSERT IGNORE INTO abonnements (journal, email, last_check) VALUES ("'.DB::esc($this->journal->get('id')).'", "'.DB::esc($email[1]).'", NOW());'); return true; } public function remove($email) { DB::uQuery('DELETE FROM abonnements WHERE journal = "'.DB::esc($this->journal->get('id')).'" AND email = "'.DB::esc($email).'";'); return true; } public function reset() { DB::uQuery('DELETE FROM abonnements WHERE journal="'.DB::esc($this->journal->get('id')).'";'); return true; } public function queue($id) { DB::uQuery('INSERT IGNORE INTO abonnements_queue (journal, ecrit, date) VALUES ("'.DB::esc($this->journal->get('id')).'", "'.(int)$id.'", NOW());'); return true; } public function send($ecrit, $abonnes) { if (!$ecrit || $ecrit['status'] != Ecrit::ONLINE) { return false; } if (empty($abonnes)) { return true; } $texte = utils::HTMLtoText($ecrit['texte'], $this->journal->get('id')); $headers = array( 'From' => '"'.$this->journal->get('titre').'" <'.LENCRIER_PUBLIC_EMAIL.'>', 'X-Journal-URL' => $this->journal->get('url'), ); $message = $ecrit['titre'] . "\n"; $message.= str_repeat('=', strlen($ecrit['titre']) > 70 ? 70 : strlen($ecrit['titre'])) . "\n\n"; $message.= 'Le '.utils::frenchDateFormat('l j F Y à H\hi', $ecrit['date'])."\n"; $message.= utils::getEcritURL($this->journal->get('id'), $ecrit) . "\n\n"; $message.= $texte . "\n\n"; $message.= "--\n ".$this->journal->get('titre')."\n ".$this->journal->get('url')."\n"; $message.= " Désabonnement : ".$this->journal->get('url')."?d="; foreach ($abonnes as $email) { notifications::send($email, $ecrit['titre'], $message . rawurlencode($email), $headers); } return true; } static public function getQueue() { return DB::aQuery('SELECT * FROM abonnements_queue WHERE date < (NOW() - INTERVAL '.self::DELAY.' SECOND) ORDER BY journal, date ASC;', false, DB::FETCH_ASSOC); } static public function removeFromQueue($id) { DB::uQuery('DELETE FROM abonnements_queue WHERE ecrit = "'.(int)$id.'";'); } } ?>