enable reconnect just after deconnect
[platal.git] / modules / carnet.php
index 88e76b7..c968514 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2006 Polytechnique.org                              *
+ *  Copyright (C) 2003-2007 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -30,7 +30,7 @@ class CarnetModule extends PLModule
 
             'carnet/contacts'       => $this->make_hook('contacts', AUTH_COOKIE),
             'carnet/contacts/pdf'   => $this->make_hook('pdf',      AUTH_COOKIE),
-            'carnet/contacts/ical'  => $this->make_hook('ical',     AUTH_COOKIE),
+            'carnet/contacts/ical'  => $this->make_hook('ical',     AUTH_PUBLIC),
             'carnet/contacts/vcard' => $this->make_hook('vcard',    AUTH_COOKIE),
 
             'carnet/rss'            => $this->make_hook('rss',      AUTH_PUBLIC),
@@ -49,11 +49,8 @@ class CarnetModule extends PLModule
         if (!S::has('core_rss_hash')) {
             return;
         }
-        $page->assign('xorg_rss',
-                      array('title' => 'Polytechnique.org :: Carnet',
-                            'href'  => '/carnet/rss/'.S::v('forlife')
-                                      .'/'.S::v('core_rss_hash').'/rss.xml')
-                      );
+        $page->setRssLink('Polytechnique.org :: Carnet',
+                          '/carnet/rss/'.S::v('forlife') .'/'.S::v('core_rss_hash').'/rss.xml');
     }
 
     function handler_index(&$page)
@@ -87,7 +84,7 @@ class CarnetModule extends PLModule
         if(preg_match('!^ *(\d{4}) *$!', $arg, $matches)) {
             $p = intval($matches[1]);
             if($p<1900 || $p>2100) {
-                $page->trig("la promo entrée est invalide");
+                $page->trig("la promo entrée est invalide");
             } else {
                 if ($action == 'add_promo') {
                     $watch->_promos->add($p);
@@ -99,9 +96,9 @@ class CarnetModule extends PLModule
             $p1 = intval($matches[1]);
             $p2 = intval($matches[2]);
             if($p1<1900 || $p1>2100) {
-                $page->trig('la première promo de la plage entrée est invalide');
+                $page->trig('la première promo de la plage entrée est invalide');
             } elseif($p2<1900 || $p2>2100) {
-                $page->trig('la seconde promo de la plage entrée est invalide');
+                $page->trig('la seconde promo de la plage entrée est invalide');
             } else {
                 if ($action == 'add_promo') {
                     $watch->_promos->addRange($p1, $p2);
@@ -110,7 +107,7 @@ class CarnetModule extends PLModule
                 }
             }
         } else {
-            $page->trig("La promo (ou la plage de promo) entrée est dans un format incorrect.");
+            $page->trig("La promo (ou la plage de promo) entrée est dans un format incorrect.");
         }
     }
 
@@ -191,6 +188,7 @@ class CarnetModule extends PLModule
         $page->changeTpl('carnet/mescontacts.tpl');
         require_once("applis.func.inc.php");
         $page->assign('xorg_title','Polytechnique.org - Mes contacts');
+        $this->_add_rss_link($page);
 
         $uid  = S::v('uid');
         $user = Env::v('user');
@@ -199,19 +197,19 @@ class CarnetModule extends PLModule
             case 'retirer':
                 if (is_numeric($user)) {
                     if (XDB::execute('DELETE FROM contacts
-                                                      WHERE uid = {?} AND contact = {?}',
+                                            WHERE uid = {?} AND contact = {?}',
                                                $uid, $user))
                     {
-                        $page->trig("Contact retiré !");
+                        $page->trig("Contact retiré !");
                     }
                 } else {
                     if (XDB::execute(
-                                'DELETE FROM  contacts
+                                'DELETE FROM  c
                                        USING  contacts AS c
                                   INNER JOIN  aliases  AS a ON (c.contact=a.id and a.type!="homonyme")
                                        WHERE  c.uid = {?} AND a.alias={?}', $uid, $user))
                     {
-                        $page->trig("Contact retiré !");
+                        $page->trig("Contact retiré !");
                     }
                 }
                 break;
@@ -225,9 +223,9 @@ class CarnetModule extends PLModule
                                         FROM  aliases
                                        WHERE  alias = {?}', $uid, $login))
                     {
-                        $page->trig('Contact ajouté !');
+                        $page->trig('Contact ajouté !');
                     } else {
-                        $page->trig('Contact déjà dans la liste !');
+                        $page->trig('Contact déjà dans la liste !');
                     }
                 }
         }
@@ -335,8 +333,20 @@ class CarnetModule extends PLModule
         $page->assign('notifs', $notifs);
     }
 
-    function handler_ical(&$page)
+    function handler_ical(&$page, $alias = null, $hash = null)
     {
+        require_once 'rss.inc.php';
+        $uid = init_rss(null, $alias, $hash, false);
+        if (S::logged()) {
+            if (!$uid) {
+                $uid = S::i('uid');
+            } else if ($uid != S::i('uid')) {
+                require_once 'xorg.misc.inc.php';
+                send_warning_email("Récupération d\'un autre utilisateur ($uid)");
+            }
+        } else if (!$uid) {
+            exit;
+        }
         require_once 'ical.inc.php';
         $page->changeTpl('carnet/calendar.tpl', NO_SKIN);
         $page->register_function('display_ical', 'display_ical');
@@ -352,7 +362,7 @@ class CarnetModule extends PLModule
                    FROM contacts      AS c
              INNER JOIN auth_user_md5 AS u ON (u.user_id = c.contact)
              INNER JOIN aliases       AS a ON (u.user_id = a.id AND a.type = \'a_vie\')
-                  WHERE c.uid = {?}', S::v('uid'));
+                  WHERE c.uid = {?}', $uid);
 
         $annivs = Array();
         while (list($prenom, $nom, $promo, $naissance, $end, $ts, $forlife) = $res->next()) {
@@ -377,11 +387,10 @@ class CarnetModule extends PLModule
         $res = XDB::query('SELECT contact
                              FROM contacts
                             WHERE uid = {?}', S::v('uid'));
-
-        require_once('vcard.inc.php');
         $vcard = new VCard($res->fetchColumn(), $photos == 'photos');
         $vcard->do_page(&$page);
     }
 }
 
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
 ?>