Table editor fills the new entry form with the default values of the fields
[platal.git] / modules / carnet.php
index 9726946..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)
@@ -60,10 +65,8 @@ class CarnetModule extends PLModule
         $page->changeTpl('carnet/panel.tpl');
 
         if (Get::has('read')) {
         $page->changeTpl('carnet/panel.tpl');
 
         if (Get::has('read')) {
-            global $globals;
-
-            $_SESSION['watch_last'] = Get::get('read');
-            redirect($globals->baseurl.'/carnet/panel');
+            $_SESSION['watch_last'] = Get::v('read');
+            pl_redirect('carnet/panel');
         }
 
         require_once 'notifs.inc.php';
         }
 
         require_once 'notifs.inc.php';
@@ -81,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);
@@ -93,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);
@@ -104,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.");
         }
     }
 
         }
     }
 
@@ -140,11 +143,11 @@ class CarnetModule extends PLModule
 
         if (Env::has('subs'))       $watch->_subs->update('sub');
         if (Env::has('flags_contacts')) {
 
         if (Env::has('subs'))       $watch->_subs->update('sub');
         if (Env::has('flags_contacts')) {
-            $watch->watch_contacts = Env::getBool('contacts');
+            $watch->watch_contacts = Env::b('contacts');
             $watch->saveFlags();
         }
         if (Env::has('flags_mail')) {
             $watch->saveFlags();
         }
         if (Env::has('flags_mail')) {
-            $watch->watch_mail     = Env::getBool('mail');
+            $watch->watch_mail     = Env::b('mail');
             $watch->saveFlags();
         }
 
             $watch->saveFlags();
         }
 
@@ -156,7 +159,7 @@ class CarnetModule extends PLModule
         $res   = XDB::query("SELECT COUNT(*) FROM contacts WHERE uid = {?}", $uid);
         $total = $res->fetchOneCell();
 
         $res   = XDB::query("SELECT COUNT(*) FROM contacts WHERE uid = {?}", $uid);
         $total = $res->fetchOneCell();
 
-        $order = Get::get('order');
+        $order = Get::v('order');
         $orders = Array(
             'nom'     => 'nom DESC, u.prenom, u.promo',
             'promo'   => 'promo DESC, nom, u.prenom',
         $orders = Array(
             'nom'     => 'nom DESC, u.prenom, u.promo',
             'promo'   => 'promo DESC, nom, u.prenom',
@@ -164,7 +167,7 @@ class CarnetModule extends PLModule
         if ($order != 'promo' && $order != 'last')
             $order = 'nom';
         $order = $orders[$order];
         if ($order != 'promo' && $order != 'last')
             $order = 'nom';
         $order = $orders[$order];
-        if (Get::get('inv') == '')
+        if (Get::v('inv') == '')
             $order = str_replace(" DESC,", ",", $order);
 
         $res   = XDB::query("
             $order = str_replace(" DESC,", ",", $order);
 
         $res   = XDB::query("
@@ -185,18 +188,19 @@ 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');
 
         $uid  = S::v('uid');
-        $user = Env::get('user');
+        $user = Env::v('user');
 
 
-        switch (Env::get('action')) {
+        switch (Env::v('action')) {
             case 'retirer':
                 if (is_numeric($user)) {
                     if (XDB::execute('DELETE FROM contacts
                                                       WHERE uid = {?} AND contact = {?}',
                                                $uid, $user))
                     {
             case 'retirer':
                 if (is_numeric($user)) {
                     if (XDB::execute('DELETE FROM contacts
                                                       WHERE uid = {?} AND contact = {?}',
                                                $uid, $user))
                     {
-                        $page->trig("Contact retiré !");
+                        $page->trig("Contact retiré !");
                     }
                 } else {
                     if (XDB::execute(
                     }
                 } else {
                     if (XDB::execute(
@@ -205,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;
@@ -219,29 +223,27 @@ 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);
 
-            $order = Get::get('order');
+            $order = Get::v('order');
             if ($order != 'promo' && $order != 'last')
                 $order = 'nom';
             $page->assign('order', $order);
             if ($order != 'promo' && $order != 'last')
                 $order = 'nom';
             $page->assign('order', $order);
-            $page->assign('inv', Get::get('inv'));
+            $page->assign('inv', Get::v('inv'));
 
         } else {
 
 
         } else {
 
-            $order = Get::get('order');
+            $order = Get::v('order');
             $orders = Array(
                 'nom'     => 'sortkey DESC, a.prenom, a.promo',
                 'promo'   => 'promo DESC, sortkey, a.prenom',
             $orders = Array(
                 'nom'     => 'sortkey DESC, a.prenom, a.promo',
                 'promo'   => 'promo DESC, sortkey, a.prenom',
@@ -249,9 +251,9 @@ class CarnetModule extends PLModule
             if ($order != 'promo' && $order != 'last')
                 $order = 'nom';
             $page->assign('order', $order);
             if ($order != 'promo' && $order != 'last')
                 $order = 'nom';
             $page->assign('order', $order);
-            $page->assign('inv', Get::get('inv'));
+            $page->assign('inv', Get::v('inv'));
             $order = $orders[$order];
             $order = $orders[$order];
-            if (Get::get('inv') == '')
+            if (Get::v('inv') == '')
                 $order = str_replace(" DESC,", ",", $order);
 
             $sql = "SELECT  contact AS id,
                 $order = str_replace(" DESC,", ",", $order);
 
             $sql = "SELECT  contact AS id,
@@ -265,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')
@@ -281,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();
@@ -311,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();
 
@@ -328,48 +333,52 @@ 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);
-
-        if ($alias && $hash) {
-            $res = XDB::query(
-                'SELECT  a.id
-                   FROM  aliases         AS a
-             INNER JOIN  auth_user_quick AS q ON ( a.id = q.user_id AND q.core_rss_hash = {?} )
-                  WHERE  a.alias = {?} AND a.type != "homonyme"', $hash, $alias);
-            $uid = $res->fetchOneCell();
+        $page->register_function('display_ical', 'display_ical');
+
+        $res = XDB::iterRow(
+                'SELECT u.prenom,
+                        IF(u.nom_usage = \'\',u.nom,u.nom_usage) AS nom,
+                        u.promo,
+                        u.naissance,
+                        DATE_ADD(u.naissance, INTERVAL 1 DAY) AS end,
+                        u.date_ins,
+                        a.alias AS forlife
+                   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'));
+
+        $annivs = Array();
+        while (list($prenom, $nom, $promo, $naissance, $end, $ts, $forlife) = $res->next()) {
+            $naissance = str_replace('-', '', $naissance);
+            $end       = str_replace('-', '', $end);
+            $annivs[] = array(
+                'timestamp' => strtotime($ts),
+                'date'      => $naissance,
+                'tomorrow'  => $end,
+                'forlife'   => $forlife,
+                'summary'   => 'Anniversaire de '.$prenom
+                                .' '.$nom.' - x '.$promo,
+            );
         }
         }
+        $page->assign('events', $annivs);
 
 
-        require_once 'notifs.inc.php';
-        $notifs = new Notifs($uid, true);
-
-        $annivcat = false;
-        foreach ($notifs->_cats as $cat) {
-            if (preg_match('/anniv/i', $cat['short']))
-                $annivcat = $cat['id'];
-        }
+        header('Content-Type: text/calendar; charset=utf-8');
+    }
 
 
-        if ($annivcat !== false) {
-            $annivs = array();
-            foreach ($notifs->_data[$annivcat] as $promo) {
-                foreach ($promo as $notif) {
-                    if ($all == 'all' || $notif['contact']) {
-                        $annivs[] = array(
-                            'timestamp' => $notif['known'],
-                            'date'      => strtotime($notif['date']),
-                            'tomorrow'  => strtotime("+1 day", strtotime($notif['date'])),
-                            'bestalias' => $notif['bestalias'],
-                            'summary'   => 'Anniversaire de '.$notif['prenom']
-                                           .' '.$notif['nom'].' - x '.$notif['promo'],
-                         );
-                    }
-                }
-            }
-            $page->assign('events', $annivs);
-        }
+    function handler_vcard(&$page, $photos = null)
+    {
+        $res = XDB::query('SELECT contact
+                             FROM contacts
+                            WHERE uid = {?}', S::v('uid'));
 
 
-        header('Content-Type: text/calendar; charset=utf-8');
+        require_once('vcard.inc.php');
+        $vcard = new VCard($res->fetchColumn(), $photos == 'photos');
+        $vcard->do_page(&$page);
     }
 }
 
     }
 }