Table editor fills the new entry form with the default values of the fields
[platal.git] / modules / carnet.php
index 6c200e3..223b2ab 100644 (file)
@@ -24,28 +24,33 @@ class CarnetModule extends PLModule
     function handlers()
     {
         return array(
     function handlers()
     {
         return array(
-            'carnet'              => $this->make_hook('index',    AUTH_COOKIE),
-            'carnet/panel'        => $this->make_hook('panel',    AUTH_COOKIE),
-            'carnet/notifs'       => $this->make_hook('notifs',   AUTH_COOKIE),
+            'carnet'                => $this->make_hook('index',    AUTH_COOKIE),
+            'carnet/panel'          => $this->make_hook('panel',    AUTH_COOKIE),
+            'carnet/notifs'         => $this->make_hook('notifs',   AUTH_COOKIE),
 
 
-            'carnet/contacts'     => $this->make_hook('contacts', AUTH_COOKIE),
-            'carnet/contacts/pdf' => $this->make_hook('pdf',      AUTH_COOKIE),
+            '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/vcard' => $this->make_hook('vcard',    AUTH_COOKIE),
 
 
-            'carnet/rss'          => $this->make_hook('rss',      AUTH_PUBLIC),
-            'carnet/ical'         => $this->make_hook('ical',     AUTH_PUBLIC),
+            'carnet/rss'            => $this->make_hook('rss',      AUTH_PUBLIC),
         );
     }
 
         );
     }
 
+    function on_subscribe($forlife, $uid, $promo, $password)
+    {
+        require_once 'notifs.inc.php';
+        register_watch_op($uid, WATCH_INSCR);
+        inscription_notifs_base($uid);
+    }
+
     function _add_rss_link(&$page)
     {
         if (!S::has('core_rss_hash')) {
             return;
         }
     function _add_rss_link(&$page)
     {
         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)
     }
 
     function handler_index(&$page)
@@ -79,7 +84,7 @@ class CarnetModule extends PLModule
         if(preg_match('!^ *(\d{4}) *$!', $arg, $matches)) {
             $p = intval($matches[1]);
             if($p<1900 || $p>2100) {
         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);
             } else {
                 if ($action == 'add_promo') {
                     $watch->_promos->add($p);
@@ -91,9 +96,9 @@ class CarnetModule extends PLModule
             $p1 = intval($matches[1]);
             $p2 = intval($matches[2]);
             if($p1<1900 || $p1>2100) {
             $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) {
             } 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);
             } else {
                 if ($action == 'add_promo') {
                     $watch->_promos->addRange($p1, $p2);
@@ -102,7 +107,7 @@ class CarnetModule extends PLModule
                 }
             }
         } else {
                 }
             }
         } 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.");
         }
     }
 
         }
     }
 
@@ -183,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');
         $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');
 
         $uid  = S::v('uid');
         $user = Env::v('user');
@@ -194,7 +200,7 @@ class CarnetModule extends PLModule
                                                       WHERE uid = {?} AND contact = {?}',
                                                $uid, $user))
                     {
                                                       WHERE uid = {?} AND contact = {?}',
                                                $uid, $user))
                     {
-                        $page->trig("Contact retiré !");
+                        $page->trig("Contact retiré !");
                     }
                 } else {
                     if (XDB::execute(
                     }
                 } else {
                     if (XDB::execute(
@@ -203,7 +209,7 @@ class CarnetModule extends PLModule
                                   INNER JOIN  aliases  AS a ON (c.contact=a.id and a.type!="homonyme")
                                        WHERE  c.uid = {?} AND a.alias={?}', $uid, $user))
                     {
                                   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;
                     }
                 }
                 break;
@@ -217,16 +223,14 @@ class CarnetModule extends PLModule
                                         FROM  aliases
                                        WHERE  alias = {?}', $uid, $login))
                     {
                                         FROM  aliases
                                        WHERE  alias = {?}', $uid, $login))
                     {
-                        $page->trig('Contact ajouté !');
+                        $page->trig('Contact ajouté !');
                     } else {
                     } else {
-                        $page->trig('Contact déjà dans la liste !');
+                        $page->trig('Contact déjà dans la liste !');
                     }
                 }
         }
 
         if ($action == 'trombi') {
                     }
                 }
         }
 
         if ($action == 'trombi') {
-            require_once 'trombi.inc.php';
-
             $trombi = new Trombi(array($this, '_get_list'));
             $trombi->setNbRows(4);
             $page->assign_by_ref('trombi',$trombi);
             $trombi = new Trombi(array($this, '_get_list'));
             $trombi->setNbRows(4);
             $page->assign_by_ref('trombi',$trombi);
@@ -263,7 +267,8 @@ class CarnetModule extends PLModule
                             ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
                             ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
                             adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region,
                             ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
                             ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
                             adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region,
-                            IF(a.nom_usage<>'',a.nom_usage,a.nom) AS sortkey
+                            IF(a.nom_usage<>'',a.nom_usage,a.nom) AS sortkey,
+                            COUNT(em.email) > 0 AS actif
                       FROM  contacts       AS c
                 INNER JOIN  auth_user_md5  AS a   ON (a.user_id = c.contact)
                 INNER JOIN  aliases        AS l   ON (a.user_id = l.id AND l.type='a_vie')
                       FROM  contacts       AS c
                 INNER JOIN  auth_user_md5  AS a   ON (a.user_id = c.contact)
                 INNER JOIN  aliases        AS l   ON (a.user_id = l.id AND l.type='a_vie')
@@ -279,16 +284,18 @@ class CarnetModule extends PLModule
                                                       AND FIND_IN_SET('active', adr.statut))
                  LEFT JOIN  geoloc_pays    AS gp  ON (adr.country = gp.a2)
                  LEFT JOIN  geoloc_region  AS gr  ON (adr.country = gr.a2 AND adr.region = gr.region)
                                                       AND FIND_IN_SET('active', adr.statut))
                  LEFT JOIN  geoloc_pays    AS gp  ON (adr.country = gp.a2)
                  LEFT JOIN  geoloc_region  AS gr  ON (adr.country = gr.a2 AND adr.region = gr.region)
+                 LEFT JOIN  emails         AS em  ON (em.uid = a.user_id AND em.flags = 'active')
                      WHERE  c.uid = $uid
                      WHERE  c.uid = $uid
+                  GROUP BY  a.user_id
                   ORDER BY  ".$order;
 
                   ORDER BY  ".$order;
 
-            $page->assign_by_ref('citer', XDB::iterator($sql));
+            $page->assign('citer', XDB::iterator($sql));
         }
     }
 
     function handler_pdf(&$page, $arg0 = null, $arg1 = null)
     {
         }
     }
 
     function handler_pdf(&$page, $arg0 = null, $arg1 = null)
     {
-        require_once 'contacts.pdf.inc.php';
+        require_once dirname(__FILE__).'/carnet/contacts.pdf.inc.php';
         require_once 'user.func.inc.php';
 
         session_write_close();
         require_once 'user.func.inc.php';
 
         session_write_close();
@@ -309,7 +316,7 @@ class CarnetModule extends PLModule
 
         while (list($alias) = $citer->next()) {
             $user = get_user_details($alias);
 
         while (list($alias) = $citer->next()) {
             $user = get_user_details($alias);
-            $pdf->addContact($user, $arg0 == 'photos' || $arg1 == 'photos');
+            $pdf = ContactsPDF::addContact($pdf, $user, $arg0 == 'photos' || $arg1 == 'photos');
         }
         $pdf->Output();
 
         }
         $pdf->Output();
 
@@ -326,9 +333,11 @@ class CarnetModule extends PLModule
         $page->assign('notifs', $notifs);
     }
 
         $page->assign('notifs', $notifs);
     }
 
-    function handler_ical(&$page, $user = null, $hash = null, $all = null)
+    function handler_ical(&$page)
     {
     {
+        require_once 'ical.inc.php';
         $page->changeTpl('carnet/calendar.tpl', NO_SKIN);
         $page->changeTpl('carnet/calendar.tpl', NO_SKIN);
+        $page->register_function('display_ical', 'display_ical');
 
         $res = XDB::iterRow(
                 'SELECT u.prenom,
 
         $res = XDB::iterRow(
                 'SELECT u.prenom,
@@ -360,6 +369,17 @@ class CarnetModule extends PLModule
 
         header('Content-Type: text/calendar; charset=utf-8');
     }
 
         header('Content-Type: text/calendar; charset=utf-8');
     }
+
+    function handler_vcard(&$page, $photos = null)
+    {
+        $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);
+    }
 }
 
 ?>
 }
 
 ?>