I should have merged before last commit...
[platal.git] / modules / newsletter.php
index a975ba3..809caef 100644 (file)
@@ -27,16 +27,16 @@ class NewsletterModule extends PLModule
             'nl'                           => $this->make_hook('nl',              AUTH_COOKIE, 'user'),
             'nl/show'                      => $this->make_hook('nl_show',         AUTH_COOKIE, 'user'),
             'nl/search'                    => $this->make_hook('nl_search',       AUTH_COOKIE, 'user'),
-            'nl/submit'                    => $this->make_hook('nl_submit',       AUTH_MDP,    'user'),
-            'nl/remaining'                 => $this->make_hook('nl_remaining',    AUTH_MDP,    'user'),
-            'admin/nls'                    => $this->make_hook('admin_nl_groups', AUTH_MDP,    'admin'),
-            '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('admin_nl_delete', AUTH_MDP,    'admin'),
+            'nl/submit'                    => $this->make_hook('nl_submit',       AUTH_PASSWD, 'user'),
+            'nl/remaining'                 => $this->make_hook('nl_remaining',    AUTH_PASSWD, 'user'),
+            'admin/nls'                    => $this->make_hook('admin_nl_groups', AUTH_PASSWD, 'admin'),
+            'admin/newsletter'             => $this->make_hook('admin_nl',        AUTH_PASSWD, 'admin'),
+            'admin/newsletter/categories'  => $this->make_hook('admin_nl_cat',    AUTH_PASSWD, 'admin'),
+            'admin/newsletter/edit'        => $this->make_hook('admin_nl_edit',   AUTH_PASSWD, 'admin'),
+            'admin/newsletter/edit/delete' => $this->make_hook('admin_nl_delete', AUTH_PASSWD, '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'),
+//            'admin/newsletter/edit/cancel' => $this->make_hook('cancel', AUTH_PASSWD, 'admin'),
+//            'admin/newsletter/edit/valid'  => $this->make_hook('valid',  AUTH_PASSWD, 'admin'),
         );
     }
 
@@ -55,16 +55,26 @@ class NewsletterModule extends PLModule
             return PL_NOT_FOUND;
         }
 
-        $page->changeTpl('newsletter/index.tpl');
-        $page->setTitle('Lettres mensuelles');
-
         $hash = ($hash == 'nohash') ? null : $hash;
         switch ($action) {
-          case 'out': $nl->unsubscribe($issue_id, $hash, $hash != null); break;
+          case 'out':
+            $success = $nl->unsubscribe($issue_id, $hash, $hash != null);
+            if (!is_null($hash)) {
+                if ($success) {
+                    $page->trigSuccess('La désinscription a été effectuée avec succès.');
+                } else {
+                    $page->trigError("La désinscription n'a été pas pu être effectuée.");
+                }
+                return;
+            }
+            break;
           case 'in':  $nl->subscribe(); break;
           default: ;
         }
 
+        $page->changeTpl('newsletter/index.tpl');
+        $page->setTitle('Lettres mensuelles');
+
         $page->assign_by_ref('nl', $nl);
         $page->assign('nls', $nl->subscriptionState());
         $page->assign('nl_list', $nl->listSentIssues(true));
@@ -206,14 +216,36 @@ class NewsletterModule extends PLModule
         $page->assign('nl_list', $nl->listAllIssues());
     }
 
-    function handler_admin_nl_groups($page)
+    function handler_admin_nl_groups($page, $sort = 'id', $order = 'ASC')
     {
         require_once 'newsletter.inc.php';
 
+        static $titles = array(
+            'id'         => 'Id',
+            'group_name' => 'Groupe',
+            'name'       => 'Titre',
+            'custom_css' => 'CSS spécifique',
+            'criteria'   => 'Critères actifs'
+        );
+        static $next_orders = array(
+            'ASC'  => 'DESC',
+            'DESC' => 'ASC'
+        );
+
+        if (!array_key_exists($sort, $titles)) {
+            $sort = 'id';
+        }
+        if (!in_array($order, array('ASC', 'DESC'))) {
+            $order = 'ASC';
+        }
+
         $page->changeTpl('newsletter/admin_all.tpl');
         $page->setTitle('Administration - Newsletters : Liste des Newsletters');
-
-        $page->assign('nls', Newsletter::getAll());
+        $page->assign('nls', Newsletter::getAll($sort, $order));
+        $page->assign('sort', $sort);
+        $page->assign('order', $order);
+        $page->assign('next_order', $next_orders[$order]);
+        $page->assign('titles', $titles);
     }
 
     function handler_admin_nl_edit($page, $nid = 'last', $aid = null, $action = 'edit') {
@@ -237,6 +269,7 @@ class NewsletterModule extends PLModule
 
         // Convert NLIssue error messages to human-readable errors
         $error_msgs = array(
+            NLIssue::ERROR_INVALID_REPLY_TO => "L'adresse de réponse est invalide.",
             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é.",
@@ -251,6 +284,7 @@ class NewsletterModule extends PLModule
             $issue->title_mail = Post::s('title_mail');
             $issue->head       = Post::s('head');
             $issue->signature  = Post::s('signature');
+            $issue->reply_to   = Post::s('reply_to');
 
             if ($issue->isEditable()) {
                 // Date and shortname may only be modified for pending NLs, otherwise all links get broken.