Updates the hooks in module/carnet.php to use the new PlTokenHook.
[platal.git] / modules / carnet.php
index d71aec1..e6e6538 100644 (file)
@@ -24,18 +24,18 @@ class CarnetModule extends PLModule
     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/contacts'       => $this->make_hook('contacts', AUTH_COOKIE),
-            'carnet/contacts/pdf'   => $this->make_hook('pdf',      AUTH_COOKIE),
-            'carnet/contacts/vcard' => $this->make_hook('vcard',    AUTH_COOKIE),
-            'carnet/contacts/ical'  => $this->make_hook('ical',     AUTH_PUBLIC, 'user', NO_HTTPS),
-            'carnet/contacts/csv'   => $this->make_hook('csv',     AUTH_PUBLIC, 'user', NO_HTTPS),
-            'carnet/contacts/csv/birthday'  => $this->make_hook('csv_birthday',     AUTH_PUBLIC, 'user', NO_HTTPS),
-
-            'carnet/rss'            => $this->make_hook('rss',      AUTH_PUBLIC, 'user', NO_HTTPS),
+            'carnet'                => $this->make_hook('index',      AUTH_COOKIE, 'directory_private'),
+            'carnet/panel'          => $this->make_hook('panel',      AUTH_COOKIE, 'directory_private'),
+            'carnet/notifs'         => $this->make_hook('notifs',     AUTH_COOKIE, 'directory_private'),
+
+            'carnet/contacts'       => $this->make_hook('contacts',   AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/pdf'   => $this->make_hook('pdf',        AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/vcard' => $this->make_hook('vcard',      AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/ical'  => $this->make_token_hook('ical', AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/csv'   => $this->make_token_hook('csv',  AUTH_COOKIE, 'directory_private'),
+            'carnet/contacts/csv/birthday' => $this->make_token_hook('csv_birthday', AUTH_COOKIE, 'directory_private'),
+
+            'carnet/rss'            => $this->make_token_hook('rss',  AUTH_COOKIE, 'directory_private'),
         );
     }
 
@@ -45,7 +45,7 @@ class CarnetModule extends PLModule
             return;
         }
         $page->setRssLink('Polytechnique.org :: Carnet',
-                          '/carnet/rss/'.S::v('hruid').'/'.S::v('token').'/rss.xml');
+                          '/carnet/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
     }
 
     function handler_index(&$page)
@@ -64,7 +64,7 @@ class CarnetModule extends PLModule
                              SET  last = FROM_UNIXTIME({?})
                            WHERE  uid = {?}',
                          Get::i('read'), S::i('uid'));
-            S::set('watch_last', Get::i('read'));
+            S::user()->invalidWatchCache();
             Platal::session()->updateNbNotifs();
             pl_redirect('carnet/panel');
         }
@@ -131,6 +131,8 @@ class CarnetModule extends PLModule
         }
         XDB::execute('INSERT IGNORE INTO  watch_promo (uid, promo)
                                   VALUES  ' . implode(', ', $to_add));
+        S::user()->invalidWatchCache();
+        Platal::session()->updateNbNotifs();
     }
 
     private function delPromo(PlPage &$page, $promo)
@@ -146,12 +148,16 @@ class CarnetModule extends PLModule
         XDB::execute('DELETE FROM  watch_promo
                             WHERE  ' . XDB::format('uid = {?}', S::i('uid')) . '
                                    AND promo IN (' . implode(', ', $to_delete) . ')');
+        S::user()->invalidWatchCache();
+        Platal::session()->updateNbNotifs();
     }
 
     public function addNonRegistered(PlPage &$page, PlUser &$user)
     {
         XDB::execute('INSERT IGNORE INTO  watch_nonins (uid, ni_id)
                                   VALUES  ({?}, {?})', S::i('uid'), $user->id());
+        S::user()->invalidWatchCache();
+        Platal::session()->updateNbNotifs();
     }
 
     public function delNonRegistered(PlPage &$page, PlUser &$user)
@@ -159,6 +165,8 @@ class CarnetModule extends PLModule
         XDB::execute('DELETE FROM  watch_nonins
                             WHERE  uid = {?} AND ni_id = {?}',
                     S::i('uid'), $user->id());
+        S::user()->invalidWatchCache();
+        Platal::session()->updateNbNotifs();
     }
 
     public function handler_notifs(&$page, $action = null, $arg = null)
@@ -201,6 +209,8 @@ class CarnetModule extends PLModule
             XDB::execute('UPDATE  watch
                              SET  actions = {?}
                            WHERE  uid = {?}', $flags, S::i('uid'));
+            S::user()->invalidWatchCache();
+            Platal::session()->updateNbNotifs();
         }
 
         if (Env::has('flags_contacts')) {
@@ -208,6 +218,8 @@ class CarnetModule extends PLModule
             XDB::execute('UPDATE  watch
                              SET  ' . XDB::changeFlag('flags', 'contacts', Env::b('contacts')) . '
                            WHERE  uid = {?}', S::i('uid'));
+            S::user()->invalidWatchCache();
+            Platal::session()->updateNbNotifs();
         }
 
         if (Env::has('flags_mail')) {
@@ -215,6 +227,8 @@ class CarnetModule extends PLModule
             XDB::execute('UPDATE  watch
                              SET  ' . XDB::changeFlag('flags', 'mail', Env::b('mail')) . '
                            WHERE  uid = {?}', S::i('uid'));
+            S::user()->invalidWatchCache();
+            Platal::session()->updateNbNotifs();
         }
 
         $user = S::user();
@@ -261,7 +275,7 @@ class CarnetModule extends PLModule
 
         // For XSRF protection, checks both the normal xsrf token, and the special RSS token.
         // It allows direct linking to contact adding in the RSS feed.
-        if (Env::v('action') && Env::v('token') !== S::v('token')) {
+        if (Env::v('action') && Env::v('token') !== S::user()->token) {
             S::assert_xsrf_token();
         }
         switch (Env::v('action')) {
@@ -270,6 +284,7 @@ class CarnetModule extends PLModule
                     if (XDB::execute("DELETE FROM  contacts
                                             WHERE  uid = {?} AND contact = {?}",
                                      $uid, $contact->id())) {
+                        Platal::session()->updateNbNotifs();
                         $page->trigSuccess("Contact retiré !");
                     }
                 }
@@ -277,9 +292,11 @@ class CarnetModule extends PLModule
 
             case 'ajouter':
                 if (($contact = User::get(Env::v('user')))) {
-                    if (XDB::execute("REPLACE INTO  contacts (uid, contact)
-                                            VALUES  ({?}, {?})",
-                                     $uid, $contact->id())) {
+                    XDB::execute('INSERT IGNORE INTO  contacts (uid, contact)
+                                              VALUES  ({?}, {?})',
+                                 $uid, $contact->id());
+                    if (XDB::affectedRows() > 0) {
+                        Platal::session()->updateNbNotifs();
                         $page->trigSuccess('Contact ajouté !');
                     } else {
                         $page->trigWarning('Contact déjà dans la liste !');
@@ -299,7 +316,7 @@ class CarnetModule extends PLModule
         }
         if ($search && trim(Env::v('quick'))) {
             $base = 'carnet/contacts/search';
-            $view = new SearchSet(true, false, new UFC_Contact($user));
+            $view = new QuickSearchSet(new UFC_Contact($user));
         } else {
             $base = 'carnet/contacts';
             $view = new ProfileSet(new UFC_Contact($user));
@@ -341,11 +358,11 @@ class CarnetModule extends PLModule
         exit;
     }
 
-    function handler_rss(&$page, $user = null, $hash = null)
+    function handler_rss(PlPage& $page, PlUser& $user)
     {
         $this->load('feed.inc.php');
         $feed = new CarnetFeed();
-        return $feed->run($page, $user, $hash);
+        return $feed->run($page, $user);
     }
 
     function buildBirthRef(Profile $profile)
@@ -361,17 +378,8 @@ class CarnetModule extends PLModule
         );
     }
 
-    function handler_csv_birthday(&$page, $alias = null, $hash = null)
+    function handler_csv_birthday(PlPage& $page, PlUser& $user)
     {
-        $user = Platal::session()->tokenAuth($alias, $hash);
-        if (is_null($user)) {
-            if (S::logged()) {
-                $user == S::user();
-            } else {
-                return PL_FORBIDDEN;
-            }
-        }
-
         $page->changeTpl('carnet/calendar.outlook.tpl', NO_SKIN);
         $filter = new UserFilter(new UFC_Contact($user));
         $profiles = $filter->iterProfiles();
@@ -394,17 +402,8 @@ class CarnetModule extends PLModule
         pl_content_headers("text/comma-separated-values;charset=".$encoding);
     }
 
-    function handler_ical(&$page, $alias = null, $hash = null)
+    function handler_ical(PlPage& $page, PlUser& $user)
     {
-        $user = Platal::session()->tokenAuth($alias, $hash);
-        if (is_null($user)) {
-            if (S::logged()) {
-                $user == S::user();
-            } else {
-                return PL_FORBIDDEN;
-            }
-        }
-
         require_once 'ical.inc.php';
         $page->changeTpl('carnet/calendar.tpl', NO_SKIN);
         $page->register_function('display_ical', 'display_ical');
@@ -424,17 +423,8 @@ class CarnetModule extends PLModule
         $vcard->show();
     }
 
-    function handler_csv(&$page, $alias = null, $hash = null)
+    function handler_csv(PlPage& $page, PlUser& $user)
     {
-        $user = Platal::session()->tokenAuth($alias, $hash);
-        if (is_null($user)) {
-            if (S::logged()) {
-                $user == S::user();
-            } else {
-                return PL_FORBIDDEN;
-            }
-        }
-
         $page->changeTpl('carnet/mescontacts.outlook.tpl', NO_SKIN);
         $pf = new ProfileFilter(new UFC_Contact($user));
         require_once 'carnet/outlook.inc.php';