+ // incitation à mettre une photo
+
+ $res = XDB::query('SELECT COUNT(*) FROM photo
+ WHERE uid={?}', S::v('uid'));
+ $page->assign('photo_incitation', $res->fetchOneCell() == 0);
+
+ // Incitation à se géolocaliser
+ require_once 'geoloc.inc.php';
+ $res = localize_addresses(S::v('uid', -1));
+ $page->assign('geoloc_incitation', count($res));
+
+ // ajout du lien RSS
+ if (S::has('core_rss_hash')) {
+ $page->setRssLink('Polytechnique.org :: News',
+ '/rss/'.S::v('forlife') .'/'.S::v('core_rss_hash').'/rss.xml');
+ }
+
+ // cache les evenements lus et raffiche les evenements a relire
+ if ($action == 'read' && $eid) {
+ XDB::execute('DELETE evenements_vus.*
+ FROM evenements_vus AS ev
+ INNER JOIN evenements AS e ON e.id = ev.evt_id
+ WHERE peremption < NOW()');
+ XDB::execute('REPLACE INTO evenements_vus VALUES({?},{?})',
+ $eid, S::v('uid'));
+ pl_redirect('events#'.$pound);
+ }
+
+ if ($action == 'unread' && $eid) {
+ XDB::execute('DELETE FROM evenements_vus
+ WHERE evt_id = {?} AND user_id = {?}',
+ $eid, S::v('uid'));
+ pl_redirect('events#newsid'.$eid);
+ }
+
+ $array = array();
+ $this->get_events('FIND_IN_SET(\'important\', e.flags)', 'e.creation_date DESC', $array, 'important');
+ $this->get_events('e.creation_date > DATE_SUB(CURDATE(), INTERVAL 2 DAY)
+ AND NOT FIND_IN_SET(\'important\', e.flags)',
+ 'e.creation_date DESC', $array, 'news');
+ $this->get_events('e.peremption < DATE_ADD(CURDATE(), INTERVAL 2 DAY)
+ AND e.creation_date <= DATE_SUB(CURDATE(), INTERVAL 2 DAY)
+ AND NOT FIND_IN_SET(\'important\', e.flags)',
+ 'e.peremption, e.creation_date DESC', $array, 'end');
+ $this->get_events('e.peremption >= DATE_ADD(CURDATE(), INTERVAL 2 DAY)
+ AND e.creation_date <= DATE_SUB(CURDATE(), INTERVAL 2 DAY)
+ AND NOT FIND_IN_SET(\'important\', e.flags)',
+ 'e.peremption, e.creation_date DESC', $array, 'body');
+ $page->assign_by_ref('events', $array);
+ }
+
+ function handler_rss(&$page, $user = null, $hash = null)
+ {
+ require_once 'rss.inc.php';
+
+ $uid = init_rss('events/rss.tpl', $user, $hash);
+
+ $rss = XDB::iterator(
+ 'SELECT e.id, e.titre, e.texte, e.creation_date,
+ IF(u2.nom_usage = "", u2.nom, u2.nom_usage) AS nom, u2.prenom, u2.promo
+ FROM auth_user_md5 AS u
+ INNER JOIN evenements AS e ON ( (e.promo_min = 0 || e.promo_min <= u.promo)
+ AND (e.promo_max = 0 || e.promo_max >= u.promo) )
+ INNER JOIN auth_user_md5 AS u2 ON (u2.user_id = e.user_id)
+ WHERE u.user_id = {?} AND FIND_IN_SET(e.flags, "valide")
+ AND peremption >= NOW()', $uid);
+ $page->assign('rss', $rss);
+ }
+
+ function handler_preview(&$page)
+ {
+ require_once('url_catcher.inc.php');
+ $page->changeTpl('events/preview.tpl', NO_SKIN);
+ $texte = Get::v('texte');
+ if (!is_utf8($texte)) {
+ $texte = utf8_encode($texte);
+ }
+ if (strpos($_SERVER['HTTP_REFERER'], 'admin') === false) {
+ $texte = url_catcher(pl_entities($texte));
+ }
+ $titre = Get::v('titre');
+ if (!is_utf8($titre)) {
+ $titre = utf8_encode($titre);
+ }
+ $page->assign('texte_html', $texte);
+ $page->assign('titre', $titre);
+ header('Content-Type: text/html; charset=utf-8');
+ }
+
+ function handler_ev_submit(&$page)
+ {
+ $page->changeTpl('events/submit.tpl');
+ $page->addJsLink('ajax.js');
+
+ require_once('wiki.inc.php');
+ wiki_require_page('Xorg.Annonce');
+
+ $titre = Post::v('titre');
+ $texte = Post::v('texte');
+ $promo_min = Post::i('promo_min');
+ $promo_max = Post::i('promo_max');
+ $peremption = Post::i('peremption');
+ $valid_mesg = Post::v('valid_mesg');
+ $action = Post::v('action');
+
+ if (($promo_min > $promo_max && $promo_max != 0)||
+ ($promo_min != 0 && ($promo_min <= 1900 || $promo_min >= 2020)) ||
+ ($promo_max != 0 && ($promo_max <= 1900 || $promo_max >= 2020)))
+ {
+ $page->trig("L'intervalle de promotions n'est pas valide");
+ $action = null;
+ }
+
+ require_once('url_catcher.inc.php');
+ $texte_catch_url = url_catcher($texte);
+