Moving to GitHub.
[platal.git] / modules / events.php
index eebfa82..6aeea80 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -24,15 +24,15 @@ class EventsModule extends PLModule
     function handlers()
     {
         return array(
-            'events'         => $this->make_hook('ev',           AUTH_COOKIE),
-            'rss'            => $this->make_hook('rss',          AUTH_PUBLIC, 'user', NO_HTTPS),
+            'events'         => $this->make_hook('ev',           AUTH_COOKIE, 'user'),
             'events/preview' => $this->make_hook('preview',      AUTH_PUBLIC, 'user', NO_AUTH),
             'events/photo'   => $this->make_hook('photo',        AUTH_PUBLIC),
-            'events/submit'  => $this->make_hook('ev_submit',    AUTH_MDP),
-            'admin/events'   => $this->make_hook('admin_events', AUTH_MDP,    'admin'),
+            'events/submit'  => $this->make_hook('ev_submit',    AUTH_PASSWD, 'user'),
+            'admin/events'   => $this->make_hook('admin_events', AUTH_PASSWD, 'admin'),
+            'rss'            => $this->make_token_hook('rss',    AUTH_COOKIE, 'user'),
 
             'ajax/tips'      => $this->make_hook('tips',         AUTH_COOKIE, 'user', NO_AUTH),
-            'admin/tips'     => $this->make_hook('admin_tips',   AUTH_MDP,    'admin'),
+            'admin/tips'     => $this->make_hook('admin_tips',   AUTH_PASSWD, 'admin'),
         );
     }
 
@@ -40,7 +40,7 @@ class EventsModule extends PLModule
     {
         global $globals;
         // Add a new special tip when changing plat/al version
-        if ($globals->version != S::v('last_version') && is_null($exclude)) {
+        if ($globals->version != S::user()->last_version && is_null($exclude)) {
             XDB::execute('UPDATE accounts
                              SET last_version = {?}
                            WHERE uid = {?}',
@@ -81,7 +81,7 @@ class EventsModule extends PLModule
         return $res->fetchOneAssoc();
     }
 
-    private function upload_image(PlPage &$page, PlUpload &$upload)
+    private function upload_image(PlPage $page, PlUpload $upload)
     {
         if (@!$_FILES['image']['tmp_name'] && !Env::v('image_url')) {
             return true;
@@ -100,14 +100,22 @@ class EventsModule extends PLModule
         return true;
     }
 
-    function handler_ev(&$page, $action = 'list', $eid = null, $pound = null)
+    function handler_ev($page, $action = 'list', $eid = null, $pound = null)
     {
         $page->changeTpl('events/index.tpl');
-        $page->addJsLink('ajax.js');
-        $page->assign('tips', $this->get_tips());
 
-        // Adds a reminder onebox to the page.
         $user = S::user();
+
+        /** XXX: Tips and reminder only for user with 'email' permission.
+         * We can do better in the future by storing a userfilter
+         * with the tip/reminder.
+         */
+        if ($user->checkPerms(User::PERM_MAIL)) {
+            $page->assign('tips', $this->get_tips());
+
+        }
+
+        // Adds a reminder onebox to the page.
         require_once 'reminder.inc.php';
         if (($reminder = Reminder::GetCandidateReminder($user))) {
             $reminder->Prepare($page);
@@ -126,7 +134,7 @@ class EventsModule extends PLModule
         // Direct link to the RSS feed, when available.
         if (S::hasAuthToken()) {
             $page->setRssLink('Polytechnique.org :: News',
-                              '/rss/'.S::v('hruid') .'/'.S::v('token').'/rss.xml');
+                              '/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
         }
 
         // Hide the read event, and reload the page to get to the next event.
@@ -135,8 +143,9 @@ class EventsModule extends PLModule
                             FROM announce_read AS ev
                       INNER JOIN announces AS e ON e.id = ev.evt_id
                            WHERE expiration < NOW()');
-            XDB::execute('REPLACE INTO announce_read VALUES({?},{?})',
-                $eid, S::v('uid'));
+            XDB::execute('INSERT IGNORE INTO  announce_read (evt_id, uid)
+                                      VALUES  ({?}, {?})',
+                         $eid, S::v('uid'));
             pl_redirect('events#'.$pound);
         }
 
@@ -188,7 +197,7 @@ class EventsModule extends PLModule
         $page->assign_by_ref('events', $array);
     }
 
-    function handler_photo(&$page, $eid = null, $valid = null)
+    function handler_photo($page, $eid = null, $valid = null)
     {
         if ($eid && $eid != 'valid') {
             $res = XDB::query("SELECT * FROM announce_photos WHERE eid = {?}", $eid);
@@ -199,7 +208,6 @@ class EventsModule extends PLModule
                 exit;
             }
         } elseif ($eid == 'valid') {
-            require_once 'validations.inc.php';
             $valid = Validate::get_request_by_id($valid);
             if ($valid && $valid->img) {
                 pl_cached_dynamic_content_headers("image/" . $valid->imgtype);
@@ -220,14 +228,14 @@ class EventsModule 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 EventFeed();
-        return $feed->run($page, $user, $hash);
+        return $feed->run($page, $user);
     }
 
-    function handler_preview(&$page)
+    function handler_preview($page)
     {
         $page->changeTpl('events/preview.tpl', NO_SKIN);
         $texte = Get::v('texte');
@@ -243,10 +251,9 @@ class EventsModule extends PLModule
         pl_content_headers("text/html");
     }
 
-    function handler_ev_submit(&$page)
+    function handler_ev_submit($page)
     {
         $page->changeTpl('events/submit.tpl');
-        $page->addJsLink('ajax.js');
 
         $wp = new PlWikiPage('Xorg.Annonce');
         $wp->buildCache();
@@ -286,7 +293,6 @@ class EventsModule extends PLModule
         } elseif ($action) {
             S::assert_xsrf_token();
 
-            require_once 'validations.inc.php';
             $evtreq = new EvtReq($titre, $texte, $promo_min, $promo_max,
                                  $expiration, $valid_mesg, S::user(), $upload);
             $evtreq->submit();
@@ -296,25 +302,25 @@ class EventsModule extends PLModule
         }
     }
 
-    function handler_tips(&$page, $tips = null)
+    function handler_tips($page, $tips = null)
     {
         pl_content_headers("text/html");
         $page->changeTpl('include/tips.tpl', NO_SKIN);
         $page->assign('tips', $this->get_tips($tips));
     }
 
-    function handler_admin_tips(&$page, $action = 'list', $id = null)
+    function handler_admin_tips($page, $action = 'list', $id = null)
     {
         $page->setTitle('Administration - Astuces');
         $page->assign('title', 'Gestion des Astuces');
         $table_editor = new PLTableEditor('admin/tips', 'reminder_tips', 'id');
         $table_editor->describe('expiration', 'date de péremption', true);
-        $table_editor->describe('promo_min', 'promo. min (0 aucune)', false);
-        $table_editor->describe('promo_max', 'promo. max (0 aucune)', false);
-        $table_editor->describe('titre', 'titre', true);
+        $table_editor->describe('promo_min', 'promo. min (0 aucune)', false, true);
+        $table_editor->describe('promo_max', 'promo. max (0 aucune)', false, true);
+        $table_editor->describe('title', 'titre', true);
         $table_editor->describe('state', 'actif', true);
-        $table_editor->describe('text', 'texte (html) de l\'astuce', false);
-        $table_editor->describe('priorite', '0<=priorité<=255', true);
+        $table_editor->describe('text', 'texte (html) de l\'astuce', false, true);
+        $table_editor->describe('priority', '0<=priorité<=255', true);
         $table_editor->list_on_edit(false);
         $table_editor->apply($page, $action, $id);
         if (($action == 'edit' && !is_null($id)) || $action == 'update') {
@@ -322,10 +328,9 @@ class EventsModule extends PLModule
         }
     }
 
-    function handler_admin_events(&$page, $action = 'list', $eid = null)
+    function handler_admin_events($page, $action = 'list', $eid = null)
     {
         $page->changeTpl('events/admin.tpl');
-        $page->addJsLink('ajax.js');
         $page->setTitle('Administration - Evenements');
         $page->register_modifier('hde', 'html_entity_decode');
 
@@ -375,9 +380,10 @@ class EventsModule extends PLModule
                               Post::v('promo_min'), Post::v('promo_max'),
                               $flags, $eid);
                 if ($upload->exists() && list($x, $y, $type) = $upload->imageInfo()) {
-                    XDB::execute('REPLACE INTO  announce_photos
-                                           SET  eid = {?}, attachmime = {?}, x = {?}, y = {?}, attach = {?}',
-                                 $eid, $type, $x, $y, $upload->getContents());
+                    XDB::execute('INSERT INTO  announce_photos (eid, attachmime, attach, x, y)
+                                       VALUES  ({?}, {?}, {?}, {?}, {?})
+                      ON DUPLICATE KEY UPDATE  attachmime = VALUES(attachmime), attach = VALUES(attach), x = VALUES(x), y = VALUES(y)',
+                                 $eid, $type, $upload->getContents(), $x, $y);
                     $upload->rm();
                 }
             }
@@ -469,5 +475,5 @@ class EventsModule extends PLModule
     }
 }
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
 ?>