+ // 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();
+ $it = XDB::iterator("SELECT e.id,e.titre,e.texte,e.post_id,a.user_id,a.nom,a.prenom,a.promo,l.alias AS forlife,
+ p.x, p.y, p.attach IS NOT NULL AS img, FIND_IN_SET('wiki', e.flags) AS wiki,
+ FIND_IN_SET('important', e.flags) AS important,
+ e.creation_date > DATE_SUB(CURDATE(), INTERVAL 2 DAY) AS news,
+ e.peremption < DATE_ADD(CURDATE(), INTERVAL 2 DAY) AS end,
+ ev.user_id IS NULL AS nonlu
+ FROM evenements AS e
+ LEFT JOIN evenements_photo AS p ON (e.id = p.eid)
+ INNER JOIN auth_user_md5 AS a ON e.user_id=a.user_id
+ INNER JOIN aliases AS l ON ( a.user_id=l.id AND l.type='a_vie' )
+ LEFT JOIN evenements_vus AS ev ON (e.id = ev.evt_id AND ev.user_id = {?})
+ WHERE FIND_IN_SET('valide', e.flags) AND peremption >= NOW()
+ AND (e.promo_min = 0 || e.promo_min <= {?})
+ AND (e.promo_max = 0 || e.promo_max >= {?})
+ ORDER BY important DESC, news DESC, end DESC, e.peremption, e.creation_date DESC",
+ S::i('uid'), S::i('promo'), S::i('promo'));
+ $cats = array('important', 'news', 'end', 'body');
+ $body = $it->next();
+ foreach ($cats as $cat) {
+ $data = array();
+ if (!$body) {
+ continue;
+ }
+ do {
+ if ($cat == 'body' || $body[$cat]) {
+ $data[] = $body;
+ } else {
+ break;
+ }
+ $body = $it->next();
+ } while ($body);
+ if (!empty($data)) {
+ $array[$cat] = $data;
+ }
+ }
+ $page->assign_by_ref('events', $array);
+ }
+
+ function handler_photo(&$page, $eid = null, $valid = null)
+ {
+ if ($eid && $eid != 'valid') {
+ $res = XDB::query("SELECT * FROM evenements_photo WHERE eid = {?}", $eid);
+ if ($res->numRows()) {
+ $photo = $res->fetchOneAssoc();
+ header('Content-Type: image/' . $photo['attachmime']);
+ echo $photo['attach'];
+ exit;
+ }
+ } elseif ($eid == 'valid') {
+ require_once 'validations.inc.php';
+ $valid = Validate::get_request_by_id($valid);
+ if ($valid && $valid->img) {
+ header('Content-Type: image/' . $valid->imgtype);
+ echo $valid->img;
+ exit;
+ }
+ } else {
+ $upload = new PlUpload(S::v('forlife'), 'event');
+ if ($upload->exists() && $upload->isType('image')) {
+ header('Content-Type: ' . $upload->contentType());
+ echo $upload->getContents();
+ exit;
+ }
+ }
+ global $globals;
+ header('Content-Type: image/png');
+ echo file_get_contents($globals->spoolroot . '/htdocs/images/logo.png');
+ exit;
+ }
+
+ 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, e.post_id, p.attachmime IS NOT NULL AS photo,
+ IF(u2.nom_usage = "", u2.nom, u2.nom_usage) AS nom, u2.prenom, u2.promo,
+ FIND_IN_SET(\'wiki\', e.flags) AS wiki
+ 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) )
+ LEFT JOIN evenements_photo AS p ON (p.eid = e.id)
+ INNER JOIN auth_user_md5 AS u2 ON (u2.user_id = e.user_id)
+ WHERE u.user_id = {?} AND FIND_IN_SET("valide", e.flags)
+ AND peremption >= NOW()', $uid);
+ $page->assign('rss', $rss);
+ }
+
+ function handler_preview(&$page)
+ {
+ $page->changeTpl('events/preview.tpl', NO_SKIN);
+ $texte = Get::v('texte');
+ if (!is_utf8($texte)) {
+ $texte = utf8_encode($texte);
+ }
+ $titre = Get::v('titre');
+ if (!is_utf8($titre)) {
+ $titre = utf8_encode($titre);
+ }
+ $page->assign('texte', $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');
+ $upload = new PlUpload(S::v('forlife'), 'event');
+ $this->upload_image($page, $upload);
+
+ 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;
+ }