X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fevents.php;h=28c07a05db62abf15f4bfd4170fcba885747fd59;hb=053126b2a8e3ab9336c55adf5981bb458ca04dbe;hp=76ff0873fce93391d6612a4a9523bd0fdfb34f6c;hpb=74e0093f098d33073f32793e5c7a54ff8ac0d8a5;p=platal.git diff --git a/modules/events.php b/modules/events.php index 76ff087..28c07a0 100644 --- a/modules/events.php +++ b/modules/events.php @@ -24,22 +24,136 @@ class EventsModule extends PLModule function handlers() { return array( - 'events/submit' => $this->make_hook('submit', AUTH_MDP), + 'events' => $this->make_hook('ev', AUTH_COOKIE), + 'events/submit' => $this->make_hook('ev_submit', AUTH_MDP), + + 'nl' => $this->make_hook('nl', AUTH_COOKIE), + 'nl/show' => $this->make_hook('nl_show', AUTH_COOKIE), + 'nl/submit' => $this->make_hook('nl_submit', AUTH_COOKIE), ); } - function handler_submit(&$page) + function handler_ev(&$page) + { + $page->changeTpl('login.tpl'); + + $res = XDB::query('SELECT date, naissance FROM auth_user_md5 + WHERE user_id={?}', S::v('uid')); + list($date, $naissance) = $res->fetchOneRow(); + + // incitation à mettre à jour la fiche + + $d2 = mktime(0, 0, 0, substr($date, 5, 2), substr($date, 8, 2), + substr($date, 0, 4)); + if( (time() - $d2) > 60 * 60 * 24 * 400 ) { + // si fiche date de + de 400j; + $page->assign('fiche_incitation', $date); + } + + // Souhaite bon anniversaire + + if (substr($naissance, 5) == date('m-d')) { + $page->assign('birthday', date('Y') - substr($naissance, 0, 4)); + } + + // 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)); + + // affichage de la boîte avec quelques liens + require_once 'login.conf.php'; + $pub_nbElem = $pub_nbLig * $pub_nbCol ; + if (count($pub_tjs) <= $pub_nbElem) { + $publicite = array_slice($pub_tjs, 0, $pub_nbElem); + } else { + $publicite = $pub_tjs ; + } + + $nbAlea = $pub_nbElem - count($publicite) ; + if ($nbAlea > 0) { + $choix = array_rand($pub_rnd,$nbAlea) ; + foreach ($choix as $url) { + $publicite[$url] = $pub_rnd[$url] ; + } + } + $publicite = array_chunk( $publicite , $pub_nbLig , true ) ; + $page->assign_by_ref('publicite', $publicite); + + // ajout du lien RSS + + if (S::has('core_rss_hash')) { + $page->assign('xorg_rss', + array('title' => 'Polytechnique.org :: News', + 'href' => '/rss/'.S::v('forlife') + .'/'.S::v('core_rss_hash').'/rss.xml') + ); + } + + // cache les evenements lus et raffiche les evenements a relire + if (Env::has('lu')){ + XDB::execute('DELETE 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({?},{?})', + Env::v('lu'), S::v('uid')); + } + + if (Env::has('nonlu')){ + XDB::execute('DELETE FROM evenements_vus + WHERE evt_id = {?} AND user_id = {?}', + Env::v('nonlu'), S::v('uid')); + } + + // affichage des evenements + // annonces promos triées par présence d'une limite sur les promos + // puis par dates croissantes d'expiration + $promo = S::v('promo'); + $sql = "SELECT e.id,e.titre,e.texte,a.user_id,a.nom,a.prenom,a.promo,l.alias AS forlife + FROM evenements AS e + 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(e.flags, 'valide') AND peremption >= NOW() + AND (e.promo_min = 0 || e.promo_min <= {?}) + AND (e.promo_max = 0 || e.promo_max >= {?}) + AND ev.user_id IS NULL + ORDER BY (e.promo_min != 0 AND e.promo_max != 0) DESC, e.peremption"; + $page->assign('evenement', + XDB::iterator($sql, S::v('uid'), + $promo, $promo) + ); + + $sql = "SELECT e.id,e.titre, ev.user_id IS NULL AS nonlu + FROM evenements AS e + LEFT JOIN evenements_vus AS ev ON (e.id = ev.evt_id AND ev.user_id = {?}) + WHERE FIND_IN_SET(e.flags, 'valide') AND peremption >= NOW() + AND (e.promo_min = 0 || e.promo_min <= {?}) + AND (e.promo_max = 0 || e.promo_max >= {?}) + ORDER BY (e.promo_min != 0 AND e.promo_max != 0) DESC, e.peremption"; + $page->assign('evenement_summary', + XDB::iterator($sql, S::v('uid'), + $promo, $promo) + ); + } + + function handler_ev_submit(&$page) { - global $globals; $page->changeTpl('evenements.tpl'); - $titre = Post::get('titre'); - $texte = Post::get('texte'); - $promo_min = Post::getInt('promo_min'); - $promo_max = Post::getInt('promo_max'); - $peremption = Post::getInt('peremption'); - $valid_mesg = Post::get('valid_mesg'); - $action = Post::get('action'); + $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'); $page->assign('titre', $titre); $page->assign('texte', $texte); @@ -56,7 +170,7 @@ class EventsModule extends PLModule '\\0', $texte); require_once 'validations.inc.php'; $evtreq = new EvtReq($titre, $texte, $promo_min, $promo_max, - $peremption, $valid_mesg, Session::getInt('uid')); + $peremption, $valid_mesg, S::v('uid')); $evtreq->submit(); $page->assign('ok', true); } @@ -76,8 +190,57 @@ class EventsModule extends PLModule $select .= "> $day / $month / $year\n"; } $page->assign('select',$select); + } + + function handler_nl(&$page, $action = null) + { + require_once 'newsletter.inc.php'; + + $page->changeTpl('newsletter/index.tpl'); + $page->assign('xorg_title','Polytechnique.org - Lettres mensuelles'); + + switch ($action) { + case 'out': unsubscribe_nl(); break; + case 'in': subscribe_nl(); break; + default: ; + } + + $page->assign('nls', get_nl_state()); + $page->assign_by_ref('nl_list', get_nl_list()); + } - return PL_OK; + function handler_nl_show(&$page, $nid = 'last') + { + $page->changeTpl('newsletter/show.tpl'); + + require_once 'newsletter.inc.php'; + + $nl = new NewsLetter($nid); + $page->assign_by_ref('nl', $nl); + + if (Post::has('send')) { + $nl->sendTo(S::v('prenom'), S::v('nom'), + S::v('bestalias'), S::v('femme'), + S::v('mail_fmt') != 'text'); + } + } + + function handler_nl_submit(&$page) + { + $page->changeTpl('newsletter/submit.tpl'); + + require_once 'newsletter.inc.php'; + + if (Post::has('see')) { + $art = new NLArticle(Post::v('title'), Post::v('body'), Post::v('append')); + $page->assign('art', $art); + } elseif (Post::has('valid')) { + require_once('validations.inc.php'); + $art = new NLReq(S::v('uid'), Post::v('title'), + Post::v('body'), Post::v('append')); + $art->submit(); + $page->assign('submited', true); + } } }