Exemplo n.º 1
0
 function _add_rss_link($page)
 {
     if (!S::hasAuthToken()) {
         return;
     }
     $page->setRssLink('Polytechnique.org :: Carnet', '/carnet/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
 }
Exemplo n.º 2
0
 public function __construct(User $user, $params = null)
 {
     $this->user =& $user;
     global $globals;
     Banana::$msgedit_canattach = false;
     Banana::$spool_root = $globals->spoolroot . '/spool/banana/';
     array_push(Banana::$msgparse_headers, 'x-org-id', 'x-org-mail');
     Banana::$nntp_host = self::buildURL($user->login());
     if (S::admin()) {
         Banana::$msgshow_mimeparts[] = 'source';
     }
     Banana::$debug_nntp = $globals->debug & DEBUG_BT;
     Banana::$debug_smarty = $globals->debug & DEBUG_SMARTY;
     Banana::$feed_active = S::hasAuthToken();
     parent::__construct($params, 'NNTP', 'PlatalBananaPage');
     if (@$params['action'] == 'profile') {
         Banana::$action = 'profile';
     }
 }
Exemplo n.º 3
0
 function __construct(User $user, $params = null)
 {
     global $globals;
     $this->user =& $user;
     Banana::$spool_root = $globals->spoolroot . '/spool/banana/';
     Banana::$spool_boxlist = false;
     Banana::$msgedit_canattach = true;
     Banana::$debug_mbox = $globals->debug & DEBUG_BT;
     Banana::$debug_smarty = $globals->debug & DEBUG_SMARTY;
     Banana::$mbox_helper = $globals->spoolroot . '/banana/mbox-helper/mbox-helper';
     Banana::$feed_updateOnDemand = true;
     if (S::admin()) {
         Banana::$msgshow_mimeparts[] = 'source';
     }
     array_push(Banana::$msgparse_headers, 'x-org-id', 'x-org-mail');
     Banana::$feed_active = S::hasAuthToken();
     MLBanana::$listname = $params['listname'];
     MLBanana::$domain = $params['domain'];
     $params['group'] = $params['listname'] . '@' . $params['domain'];
     parent::__construct($params, 'MLArchive', 'PlatalBananaMLPage');
 }
Exemplo n.º 4
0
 function handler_wiki($page, $action = 'list', $wikipage = null, $wikipage2 = null)
 {
     if (S::hasAuthToken()) {
         $page->setRssLink('Changement Récents', '/Site/AllRecentChanges?action=rss&user='******'hruid') . '&hash=' . S::user()->token);
     }
     // update wiki perms
     if ($action == 'update') {
         S::assert_xsrf_token();
         $perms_read = Post::v('read');
         $perms_edit = Post::v('edit');
         if ($perms_read || $perms_edit) {
             foreach ($_POST as $wiki_page => $val) {
                 if ($val == 'on') {
                     $wp = new PlWikiPage(str_replace(array('_', '/'), '.', $wiki_page));
                     if ($wp->setPerms($perms_read ? $perms_read : $wp->readPerms(), $perms_edit ? $perms_edit : $wp->writePerms())) {
                         $page->trigSuccess("Permission de la page {$wiki_page} mises à jour");
                     } else {
                         $page->trigError("Impossible de mettre les permissions de la page {$wiki_page} à jour");
                     }
                 }
             }
         }
     } else {
         if ($action != 'list' && !empty($wikipage)) {
             $wp = new PlWikiPage($wikipage);
             S::assert_xsrf_token();
             if ($action == 'delete') {
                 if ($wp->delete()) {
                     $page->trigSuccess("La page " . $wikipage . " a été supprimée.");
                 } else {
                     $page->trigError("Impossible de supprimer la page " . $wikipage . ".");
                 }
             } else {
                 if ($action == 'rename' && !empty($wikipage2) && $wikipage != $wikipage2) {
                     if ($changedLinks = $wp->rename($wikipage2)) {
                         $s = 'La page <em>' . $wikipage . '</em> a été déplacée en <em>' . $wikipage2 . '</em>.';
                         if (is_numeric($changedLinks)) {
                             $s .= $changedLinks . ' lien' . ($changedLinks > 1 ? 's ont été modifiés.' : ' a été modifié.');
                         }
                         $page->trigSuccess($s);
                     } else {
                         $page->trigError("Impossible de déplacer la page " . $wikipage);
                     }
                 }
             }
         }
     }
     $perms = PlWikiPage::permOptions();
     // list wiki pages and their perms
     $wiki_pages = PlWikiPage::listPages();
     ksort($wiki_pages);
     $wiki_tree = array();
     foreach ($wiki_pages as $file => $desc) {
         list($cat, $name) = explode('.', $file);
         if (!isset($wiki_tree[$cat])) {
             $wiki_tree[$cat] = array();
         }
         $wiki_tree[$cat][$name] = $desc;
     }
     $page->changeTpl('admin/wiki.tpl');
     $page->assign('wiki_pages', $wiki_tree);
     $page->assign('perms_opts', $perms);
 }
Exemplo n.º 5
0
 function handler_ev($page, $action = 'list', $eid = null, $pound = null)
 {
     $page->changeTpl('events/index.tpl');
     $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);
     }
     // Wishes "Happy birthday" when required
     $profile = $user->profile();
     if (!is_null($profile)) {
         if ($profile->next_birthday == date('Y-m-d')) {
             $birthyear = (int) date('Y', strtotime($profile->birthdate));
             $curyear = (int) date('Y');
             $page->assign('birthday', $curyear - $birthyear);
         }
     }
     // Direct link to the RSS feed, when available.
     if (S::hasAuthToken()) {
         $page->setRssLink('Polytechnique.org :: News', '/rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
     }
     // Hide the read event, and reload the page to get to the next event.
     if ($action == 'read' && $eid) {
         XDB::execute('DELETE ev.*
                         FROM announce_read AS ev
                   INNER JOIN announces AS e ON e.id = ev.evt_id
                        WHERE expiration < NOW()');
         XDB::execute('INSERT IGNORE INTO  announce_read (evt_id, uid)
                                   VALUES  ({?}, {?})', $eid, S::v('uid'));
         pl_redirect('events#' . $pound);
     }
     // Unhide the requested event, and reload the page to display it.
     if ($action == 'unread' && $eid) {
         XDB::execute('DELETE FROM announce_read
                        WHERE evt_id = {?} AND uid = {?}', $eid, S::v('uid'));
         pl_redirect('events#newsid' . $eid);
     }
     // Fetch the events to display, along with their metadata.
     $array = array();
     $it = XDB::iterator("SELECT  e.id, e.titre, e.texte, e.post_id, e.uid,\n                                     p.x, p.y, p.attach IS NOT NULL AS img, FIND_IN_SET('wiki', e.flags) AS wiki,\n                                     FIND_IN_SET('important', e.flags) AS important,\n                                     e.creation_date > DATE_SUB(CURDATE(), INTERVAL 2 DAY) AS news,\n                                     e.expiration < DATE_ADD(CURDATE(), INTERVAL 2 DAY) AS end,\n                                     ev.uid IS NULL AS nonlu, e.promo_min, e.promo_max\n                               FROM  announces       AS e\n                          LEFT JOIN  announce_photos AS p  ON (e.id = p.eid)\n                          LEFT JOIN  announce_read   AS ev ON (e.id = ev.evt_id AND ev.uid = {?})\n                              WHERE  FIND_IN_SET('valide', e.flags) AND expiration >= NOW()\n                           ORDER BY  important DESC, news DESC, end DESC, e.expiration, e.creation_date DESC", S::i('uid'));
     $cats = array('important', 'news', 'end', 'body');
     $this->load('feed.inc.php');
     $user = S::user();
     $body = EventFeed::nextEvent($it, $user);
     foreach ($cats as $cat) {
         $data = array();
         if (!$body) {
             continue;
         }
         do {
             if ($cat == 'body' || $body[$cat]) {
                 $data[] = $body;
             } else {
                 break;
             }
             $body = EventFeed::nextEvent($it, $user);
         } while ($body);
         if (!empty($data)) {
             $array[$cat] = $data;
         }
     }
     $page->assign_by_ref('events', $array);
 }
Exemplo n.º 6
0
 function handler_index($page, $arg = null)
 {
     global $globals, $platal;
     if (!is_null($arg)) {
         return PL_NOT_FOUND;
     }
     $page->changeTpl('xnetgrp/asso.tpl');
     if (S::logged()) {
         if (Env::has('read')) {
             XDB::query('DELETE  r.*
                           FROM  group_announces_read AS r
                     INNER JOIN  group_announces      AS a ON (a.id = r.announce_id)
                          WHERE  expiration < CURRENT_DATE()');
             XDB::query('INSERT INTO  group_announces_read
                              VALUES  ({?}, {?})', Env::i('read'), S::i('uid'));
             pl_redirect("");
         }
         if (Env::has('unread')) {
             XDB::query('DELETE FROM  group_announces_read
                               WHERE  announce_id = {?} AND uid = {?}', Env::i('unread'), S::i('uid'));
             pl_redirect("#art" . Env::i('unread'));
         }
         /* TODO: refines this filter on promotions by using userfilter. */
         $user = S::user();
         if ($user->hasProfile()) {
             $promo = XDB::format('{?}', $user->profile()->entry_year);
             $minCondition = ' OR promo_min <= ' . $promo;
             $maxCondition = ' OR promo_max >= ' . $promo;
         } else {
             $minCondition = '';
             $maxCondition = '';
         }
         $arts = XDB::iterator('SELECT  a.*, FIND_IN_SET(\'photo\', a.flags) AS photo
                                  FROM  group_announces      AS a
                             LEFT JOIN  group_announces_read AS r ON (r.uid = {?} AND r.announce_id = a.id)
                                 WHERE  asso_id = {?} AND expiration >= CURRENT_DATE()
                                        AND (promo_min = 0' . $minCondition . ')
                                        AND (promo_max = 0' . $maxCondition . ')
                                        AND r.announce_id IS NULL
                              ORDER BY  a.expiration', S::i('uid'), $globals->asso('id'));
         $index = XDB::iterator('SELECT  a.id, a.titre, r.uid IS NULL AS nonlu
                                   FROM  group_announces      AS a
                              LEFT JOIN  group_announces_read AS r ON (a.id = r.announce_id AND r.uid = {?})
                                  WHERE  asso_id = {?} AND expiration >= CURRENT_DATE()
                                         AND (promo_min = 0' . $minCondition . ')
                                         AND (promo_max = 0' . $maxCondition . ')
                               ORDER BY  a.expiration', S::i('uid'), $globals->asso('id'));
         $page->assign('article_index', $index);
     } else {
         $arts = XDB::iterator("SELECT  *, FIND_IN_SET('photo', flags) AS photo\n                                     FROM  group_announces\n                                    WHERE  asso_id = {?} AND expiration >= CURRENT_DATE()\n                                           AND FIND_IN_SET('public', flags)", $globals->asso('id'));
         $payments = XDB::fetchAllAssoc("SELECT  id, text\n                                              FROM  payments\n                                             WHERE  asso_id = {?} AND NOT FIND_IN_SET('old', flags) AND FIND_IN_SET('public', flags)\n                                          ORDER BY  id DESC", $globals->asso('id'));
         $page->assign('payments', $payments);
     }
     if (may_update()) {
         $subs_valid = XDB::query("SELECT  uid\n                                        FROM  group_member_sub_requests\n                                       WHERE  asso_id = {?}", $globals->asso('id'));
         $page->assign('requests', $subs_valid->numRows());
     }
     if (!S::hasAuthToken()) {
         $page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News publiques", $platal->ns . "rss/rss.xml");
     } else {
         $page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News", $platal->ns . 'rss/' . S::v('hruid') . '/' . S::user()->token . '/rss.xml');
     }
     $page->assign('articles', $arts);
 }