+ $page->assign_by_ref('issue', $issue);
+ }
+
+ /** This handler will cancel the sending of the currently pending issue
+ * It is disabled for X.org mailings.
+ */
+ function handler_admin_nl_cancel($page, $nid, $force = null)
+ {
+ $nl = $this->getNl();
+ if (!$nl) {
+ return PL_NOT_FOUND;
+ }
+
+ if (!$nl->mayEdit() || !S::has_xsrf_token()) {
+ return PL_FORBIDDEN;
+ }
+
+ if (!$nid) {
+ $page->kill("La lettre n'a pas été spécifiée");
+ }
+
+ $issue = $nl->getIssue($nid);
+ if (!$issue) {
+ $page->kill("La lettre {$nid} n'existe pas.");
+ }
+ if (!$issue->cancelMailing()) {
+ $page->trigErrorRedirect("Une erreur est survenue lors de l'annulation de l'envoi.", $nl->adminPrefix());
+ }
+
+ // Logs NL cancelling.
+ S::logger()->log('nl_mailing_cancel', $nid);
+
+ $page->trigSuccessRedirect("L'envoi de l'annonce {$issue->title()} est annulé.", $nl->adminPrefix());
+ }
+
+ /** This handler will enable the sending of the currently pending issue
+ * It is disabled for X.org mailings.
+ */
+ function handler_admin_nl_valid($page, $nid, $force = null)
+ {
+ $nl = $this->getNl();
+ if (!$nl) {
+ return PL_NOT_FOUND;
+ }
+
+ if (!$nl->mayEdit() || !S::has_xsrf_token()) {
+ return PL_FORBIDDEN;
+ }
+
+ if (!$nid) {
+ $page->kill("La lettre n'a pas été spécifiée.");
+ }
+
+ $issue = $nl->getIssue($nid);
+ if (!$issue) {
+ $page->kill("La lettre {$nid} n'existe pas.");
+ }
+ if (!$issue->scheduleMailing()) {
+ $page->trigErrorRedirect("Une erreur est survenue lors de la validation de l'envoi.", $nl->adminPrefix());
+ }
+
+ // Logs NL validation.
+ S::logger()->log('nl_mailing_valid', $nid);
+
+ $page->trigSuccessRedirect("L'envoi de la newsletter {$issue->title()} a été validé.", $nl->adminPrefix());
+ }
+
+ /** This handler will remove the given issue.
+ */
+ function handler_admin_nl_delete($page, $nid, $force = null)
+ {
+ $nl = $this->getNl();
+ if (!$nl) {
+ return PL_NOT_FOUND;
+ }
+
+ if (!$nl->mayEdit() || !S::has_xsrf_token()) {
+ return PL_FORBIDDEN;
+ }
+
+ if (!$nid) {
+ $page->kill("La lettre n'a pas été spécifiée.");
+ }
+
+ $issue = $nl->getIssue($nid);
+ if (!$issue) {
+ $page->kill("La lettre {$nid} n'existe pas");
+ }
+ if (!$issue->isEditable()) {
+ $page->trigErrorRedirect("La lette a été envoyée ou est en cours d'envoi, elle ne peut être supprimée.", $nl->adminPrefix());
+ }
+ if (!$issue->delete()) {
+ $page->trigErrorRedirect("Une erreur est survenue lors de la suppression de la lettre.", $nl->adminPrefix());
+ }
+
+ // Logs NL deletion.
+ S::logger()->log('nl_issue_delete', $nid);
+
+ $page->trigSuccessRedirect("La lettre a bien été supprimée.", $nl->adminPrefix());