Only displays names on map on demand.
[platal.git] / modules / newsletter.php
index 7691cae..0f57706 100644 (file)
@@ -33,7 +33,7 @@ class NewsletterModule extends PLModule
             'admin/newsletter'             => $this->make_hook('admin_nl',        AUTH_MDP, 'admin'),
             'admin/newsletter/categories'  => $this->make_hook('admin_nl_cat',    AUTH_MDP, 'admin'),
             'admin/newsletter/edit'        => $this->make_hook('admin_nl_edit',   AUTH_MDP, 'admin'),
-            'admin/newsletter/edit/delete' => $this->make_hook('delete',          AUTH_MDP, 'admin'),
+            'admin/newsletter/edit/delete' => $this->make_hook('admin_nl_delete', AUTH_MDP, 'admin'),
             // Automatic mailing is disabled for X.org NL
 //            'admin/newsletter/edit/cancel' => $this->make_hook('cancel', AUTH_MDP, 'admin'),
 //            'admin/newsletter/edit/valid'  => $this->make_hook('valid',  AUTH_MDP, 'admin'),
@@ -48,7 +48,7 @@ class NewsletterModule extends PLModule
         return NewsLetter::forGroup(NewsLetter::GROUP_XORG);
     }
 
-    function handler_nl($page, $action = null, $hash = null)
+    function handler_nl($page, $action = null, $hash = null, $issue_id = null)
     {
         $nl = $this->getNl();
         if (!$nl) {
@@ -58,8 +58,9 @@ class NewsletterModule extends PLModule
         $page->changeTpl('newsletter/index.tpl');
         $page->setTitle('Lettres mensuelles');
 
+        $hash = ($hash == 'nohash') ? null : $hash;
         switch ($action) {
-          case 'out': $nl->unsubscribe($hash, $hash != null); break;
+          case 'out': $nl->unsubscribe($issue_id, $hash, $hash != null); break;
           case 'in':  $nl->subscribe(); break;
           default: ;
         }
@@ -102,7 +103,7 @@ class NewsletterModule extends PLModule
         }
 
         if (!Post::has('nl_search')) {
-            pl_redirect($nl->prefix());
+            pl_redirect($nl->prefix(true, false));
         }
 
         $nl_search = Post::t('nl_search');
@@ -194,8 +195,11 @@ class NewsletterModule extends PLModule
         }
 
         if ($new == 'new') {
+            // Logs NL creation.
+            S::logger()->log('nl_issue_create', $nid);
+
             $id = $nl->createPending();
-            pl_redirect($nl->adminPrefix() . '/edit/' . $id);
+            pl_redirect($nl->adminPrefix(true, false) . '/edit/' . $id);
         }
 
         $page->assign_by_ref('nl', $nl);
@@ -235,6 +239,7 @@ class NewsletterModule extends PLModule
         $error_msgs = array(
             NLIssue::ERROR_INVALID_SHORTNAME => "Le nom court est invalide ou vide.",
             NLIssue::ERROR_INVALID_UFC => "Le filtre des destinataires est invalide.",
+            NLIssue::ERROR_TOO_LONG_UFC => "Le nombre de matricules AX renseigné est trop élevé.",
             NLIssue::ERROR_SQL_SAVE => "Une erreur est survenue en tentant de sauvegarder la lettre, merci de réessayer.",
         );
 
@@ -268,7 +273,7 @@ class NewsletterModule extends PLModule
         // Delete an article
         if($action == 'delete') {
             $issue->delArticle($aid);
-            pl_redirect($nl->adminPrefix() . "/edit/$nid");
+            pl_redirect($nl->adminPrefix(true, false) . "/edit/$nid");
         }
 
         // Save an article
@@ -276,7 +281,7 @@ class NewsletterModule extends PLModule
             $art  = new NLArticle(Post::v('title'), Post::v('body'), Post::v('append'),
                                   $aid, Post::v('cid'), Post::v('pos'));
             $issue->saveArticle($art);
-            pl_redirect($nl->adminPrefix() . "/edit/$nid");
+            pl_redirect($nl->adminPrefix(true, false) . "/edit/$nid");
         }
 
         // Edit an article
@@ -353,6 +358,9 @@ class NewsletterModule extends PLModule
             $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());
     }
 
@@ -382,6 +390,9 @@ class NewsletterModule extends PLModule
             $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());
     }
 
@@ -413,15 +424,37 @@ class NewsletterModule extends PLModule
             $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());
     }
 
     function handler_admin_nl_cat($page, $action = 'list', $id = null) {
+        $nl = $this->getNl();
+        if (!$nl) {
+            return PL_NOT_FOUND;
+        }
+
+        if (!$nl->mayEdit()) {
+            return PL_FORBIDDEN;
+        }
+
         $page->setTitle('Administration - Newsletter : Catégories');
         $page->assign('title', 'Gestion des catégories de la newsletter');
-        $table_editor = new PLTableEditor('admin/newsletter/categories','newsletter_cat','cid');
+        $table_editor = new PLTableEditor($nl->adminPrefix() . '/categories', 'newsletter_cat','cid');
         $table_editor->describe('title','intitulé',true);
         $table_editor->describe('pos','position',true);
+        if ($nl->group == Newsletter::GROUP_XORG) {
+            $table_editor->add_option_table('newsletters', 'newsletters.id = t.nlid');
+            $table_editor->add_option_field('newsletters.name', 'newsletter_name', 'Newsletter', null, 'nlid');
+            $table_editor->describe('nlid', 'ID NL', true);
+        } else {
+            $table_editor->force_field_value('nlid', $nl->id);
+            $table_editor->describe('nlid', 'nlid', false);
+        }
+        // Prevent deletion.
+        $table_editor->on_delete(null, null);
         $table_editor->apply($page, $action, $id);
     }
 }