Small improvement
[platal.git] / modules / events.php
index 5fa4150..35fe2e9 100644 (file)
@@ -37,7 +37,13 @@ class EventsModule extends PLModule
         );
     }
 
-    function handler_ev(&$page)
+    function on_subscribe($forlife, $uid, $promo, $password)
+    {
+        require_once 'newsletter.inc.php';
+        subscribe_nl($uid);
+    }
+
+    function handler_ev(&$page, $action = 'list', $eid = null)
     {
         $page->changeTpl('login.tpl');
 
@@ -72,26 +78,27 @@ class EventsModule extends PLModule
         $page->assign('geoloc_incitation', count($res));
 
         // affichage de la boîte avec quelques liens
-        require_once 'login.conf.php';
-        $pub_nbElem = $pub_nbLig * $pub_nbCol ;
-        if (count($pub_tjs) <= $pub_nbElem) {
-            $publicite = array_slice($pub_tjs, 0, $pub_nbElem);
-        } else {
-            $publicite = $pub_tjs ;
-        }
-
-        $nbAlea = $pub_nbElem - count($publicite) ;
-        if ($nbAlea > 0) {
-            $choix = array_rand($pub_rnd,$nbAlea) ;
-            foreach ($choix as $url) {
-                $publicite[$url] = $pub_rnd[$url] ;
-            }
+        /* Bandeau de publicité sur la page de login */
+        $publicite = array(
+            'password'   => 'Changer mon mot de passe' ,
+            'Docs/Dons'  => 'Faire un don à l\'association Polytechnique.org'
+            ) ;
+
+        // Liens apparaissant de façon aléatoire
+        $pub_rnd = array(
+            'nl/show'                      => 'Afficher la dernière newsletter' ,
+            'http://www.polytechnique.net' => 'Vers les autres sites polytechniciens' ,
+            "trombi/{$_SESSION["promo"]}"  => "Voir le trombi de ma promo" ,
+            'banana'                       => 'Un petit tour du côté des forums !!'
+            ) ;
+
+        $choix = array_rand($pub_rnd, 2);
+        foreach ($choix as $url) {
+            $publicite[$url] = $pub_rnd[$url] ;
         }
-        $publicite = array_chunk( $publicite , $pub_nbLig , true ) ;
-        $page->assign_by_ref('publicite', $publicite);
+        $page->assign('publicite', array_chunk($publicite, 2, true));
 
         // ajout du lien RSS
-
         if (S::has('core_rss_hash')) {
             $page->assign('xorg_rss',
                           array('title' => 'Polytechnique.org :: News',
@@ -101,18 +108,19 @@ class EventsModule extends PLModule
         }
 
         // cache les evenements lus et raffiche les evenements a relire
-        if (Env::has('lu')){
-            XDB::execute('DELETE FROM evenements_vus AS ev 
-                                     INNER JOIN evenements AS e ON e.id = ev.evt_id
-                                          WHERE peremption < NOW)');
+        if ($action == 'read' && $eid) {
+            XDB::execute('DELETE evenements_vus.*
+                            FROM evenements_vus AS ev 
+                      INNER JOIN evenements AS e ON e.id = ev.evt_id
+                           WHERE peremption < NOW()');
             XDB::execute('REPLACE INTO evenements_vus VALUES({?},{?})',
-                                   Env::v('lu'), S::v('uid'));
+                                   $eid, S::v('uid'));
         }
 
-        if (Env::has('nonlu')){
+        if ($action == 'unread' && $eid) {
             XDB::execute('DELETE FROM evenements_vus
-                                          WHERE evt_id = {?} AND user_id = {?}',
-                                   Env::v('nonlu'), S::v('uid'));
+                           WHERE evt_id = {?} AND user_id = {?}',
+                                   $eid, S::v('uid'));
         }
 
         // affichage des evenements
@@ -247,67 +255,82 @@ class EventsModule extends PLModule
         }
     }
 
-    function handler_admin_events(&$page, $arch) {
+    function handler_admin_events(&$page, $action = 'list', $eid = null) 
+    {
         $page->changeTpl('admin/evenements.tpl');
         $page->assign('xorg_title','Polytechnique.org - Administration - Evenements');
-        
-        $arch = $arch == 'archives';
-        $evid = Post::i('evt_id');
-        $page->assign('arch', $arch);
-        
-        switch(Post::v('action')) {
-            case "Proposer":
-                XDB::execute('UPDATE evenements SET titre={?}, texte={?}, peremption={?}, promo_min={?}, promo_max={?} WHERE id = {?}', 
-                        Post::v('titre'), Post::v('texte'), Post::v('peremption'), Post::v('promo_min'), Post::v('promo_max'), $evid);
-                break;
-        
-            case "Valider":
-                XDB::execute('UPDATE evenements SET creation_date = creation_date, flags = CONCAT(flags,",valide") WHERE id = {?}', $evid);
-                break;
-        
-            case "Invalider":
-                XDB::execute('UPDATE evenements SET creation_date = creation_date, flags = REPLACE(flags,"valide", "") WHERE id = {?}', $evid);
-                break;
-        
-            case "Supprimer":
-                XDB::execute('DELETE from evenements WHERE id = {?}', $evid);
-                break;
-        
-            case "Archiver":
-                XDB::execute('UPDATE evenements SET creation_date = creation_date, flags = CONCAT(flags,",archive") WHERE id = {?}', $evid);
-                break;
-        
-            case "Desarchiver":
-                XDB::execute('UPDATE evenements SET creation_date = creation_date, flags = REPLACE(flags,"archive","") WHERE id = {?}', $evid);
-                break;
-        
-            case "Editer":
-                $res = XDB::query('SELECT titre, texte, peremption, promo_min, promo_max FROM evenements WHERE id={?}', $evid);
-                list($titre, $texte, $peremption, $promo_min, $promo_max) = $res->fetchOneRow();
-                $page->assign('mode', 'edit');
-                $page->assign('titre',$titre);
-                $page->assign('texte',$texte);
-                $page->assign('promo_min',$promo_min);
-                $page->assign('promo_max',$promo_max);
-                $page->assign('peremption',$peremption);
-        
-                $select = "";
-                for ($i = 1 ; $i < 30 ; $i++) {
-                    $p_stamp=date("Ymd",time()+3600*24*$i);
-                    $year=substr($p_stamp,0,4);
-                    $month=substr($p_stamp,4,2);
-                    $day=substr($p_stamp,6,2);
-        
-                    $select .= "<option value=\"$p_stamp\"" . (($p_stamp == strtr($peremption, array("-" => ""))) ? " selected" : "")."> $day / $month / $year</option>\n";
-                }
-                $page->assign('select',$select);
-        
-                break;
+        $page->register_modifier('hde', 'html_entity_decode');
+
+        $arch = $action == 'archives';
+        $page->assign('action', $action);
+        if (Post::v('action') == "Proposer" && $eid) {
+            XDB::execute('UPDATE evenements
+                             SET titre={?}, texte={?}, peremption={?}, promo_min={?}, promo_max={?}
+                           WHERE id = {?}', 
+                          Post::v('titre'), Post::v('texte'), Post::v('peremption'),
+                          Post::v('promo_min'), Post::v('promo_max'), $eid);
         }
-        
-        if ($action != "Editer") {
-        
-            $sql = "SELECT  e.id, e.titre, e.texte,
+
+        if ($action == 'edit') {
+            $res = XDB::query('SELECT titre, texte, peremption, promo_min, promo_max
+                                 FROM evenements
+                                WHERE id={?}', $eid);
+            list($titre, $texte, $peremption, $promo_min, $promo_max) = $res->fetchOneRow();
+            $page->assign('titre',$titre);
+            $page->assign('texte',$texte);
+            $page->assign('promo_min',$promo_min);
+            $page->assign('promo_max',$promo_max);
+            $page->assign('peremption',$peremption);
+
+            $select = "";
+            for ($i = 1 ; $i < 30 ; $i++) {
+                $p_stamp=date("Ymd",time()+3600*24*$i);
+                $year=substr($p_stamp,0,4);
+                $month=substr($p_stamp,4,2);
+                $day=substr($p_stamp,6,2);
+
+                $select .= "<option value=\"$p_stamp\"" 
+                        . (($p_stamp == strtr($peremption, array("-" => ""))) ? " selected" : "")
+                        . "> $day / $month / $year</option>\n";
+            }
+            $page->assign('select',$select);
+        } else {
+            switch ($action) {
+                case 'delete':
+                    XDB::execute('DELETE from evenements
+                                   WHERE id = {?}', $eid);
+                    break;
+
+                case "archive":
+                    XDB::execute('UPDATE evenements
+                                     SET creation_date = creation_date, flags = CONCAT(flags,",archive")
+                                   WHERE id = {?}', $eid);
+                    break;
+
+                case "unarchive":
+                    XDB::execute('UPDATE evenements
+                                     SET creation_date = creation_date, flags = REPLACE(flags,"archive","")
+                                   WHERE id = {?}', $eid);
+                    $action = 'archives';
+                    $arch   = true;
+                    break;
+
+                case "valid":
+                    XDB::execute('UPDATE evenements
+                                     SET creation_date = creation_date, flags = CONCAT(flags,",valide")
+                                   WHERE id = {?}', $eid);
+                    break;
+
+                case "unvalid":
+                    XDB::execute('UPDATE evenements
+                                     SET creation_date = creation_date, flags = REPLACE(flags,"valide", "")
+                                   WHERE id = {?}', $eid);
+                    break;
+            }
+
+            $pid = ($eid && $action == 'preview') ? $eid : -1;
+            $sql = "SELECT  e.id, e.titre, e.texte,e.id = $pid AS preview,
                             DATE_FORMAT(e.creation_date,'%d/%m/%Y %T') AS creation_date,
                             DATE_FORMAT(e.peremption,'%d/%m/%Y') AS peremption,
                             e.promo_min, e.promo_max,
@@ -318,9 +341,10 @@ class EventsModule extends PLModule
                 INNER JOIN  auth_user_md5 AS u ON(e.user_id = u.user_id)
                 INNER JOIN  aliases AS a ON (u.user_id = a.id AND a.type='a_vie')
                      WHERE  ".($arch ? "" : "!")."FIND_IN_SET('archive',e.flags)
-                  ORDER BY  FIND_IN_SET('valide',e.flags), peremption";
+                  ORDER BY  FIND_IN_SET('valide',e.flags), e.peremption DESC";
             $page->assign('evs', XDB::iterator($sql));
         }
+        $page->assign('arch', $arch);
     }
 
     function handler_admin_nl(&$page, $new = false) {