+
+ function handler_rss(&$page, $user = null, $hash = null)
+ {
+ global $globals;
+ require_once('rss.inc.php');
+ $uid = init_rss('xnetgrp/announce-rss.tpl', $user, $hash, false);
+
+ if ($uid) {
+ $rss = XDB::iterator("SELECT a.id, a.titre, a.texte, a.contacts, a.create_date,
+ IF(u2.nom_usage != '', u2.nom_usage, u2.nom) AS nom, u2.prenom, u2.promo
+ FROM auth_user_md5 AS u
+ INNER JOIN groupex.announces AS a ON ( (a.promo_min = 0 OR a.promo_min <= u.promo)
+ AND (a.promo_max = 0 OR a.promo_max <= u.promo))
+ INNER JOIN auth_user_md5 AS u2 ON (u2.user_id = a.user_id)
+ WHERE u.user_id = {?} AND peremption >= NOW() AND a.asso_id = {?}",
+ $uid, $globals->asso('id'));
+ } else {
+ $rss = XDB::iterator("SELECT a.id, a.titre, a.texte, a.create_date,
+ IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom, u.prenom, u.promo
+ FROM groupex.announces AS a
+ INNER JOIN auth_user_md5 AS u USING(user_id)
+ WHERE FIND_IN_SET('public', a.flags) AND peremption >= NOW() AND a.asso_id = {?}",
+ $globals->asso('id'));
+ }
+ $page->assign('asso', $globals->asso());
+ $page->assign('rss', $rss);
+ }
+
+ function handler_edit_announce(&$page, $aid = null)
+ {
+ global $globals, $platal;
+ $page->changeTpl('xnetgrp/announce-edit.tpl');
+ $page->assign('new', is_null($aid));
+ $art = array();
+
+ if (Post::v('valid') == 'Visualiser' || Post::v('valid') == 'Enregistrer') {
+ if (!is_null($aid)) {
+ $art['id'] = $aid;
+ }
+ $art['titre'] = Post::v('titre');
+ $art['texte'] = Post::v('texte');
+ $art['contacts'] = Post::v('contacts');
+ $art['promo_min'] = Post::i('promo_min');
+ $art['promo_max'] = Post::i('promo_max');
+ $art['nom'] = S::v('nom');
+ $art['prenom'] = S::v('prenom');
+ $art['promo'] = S::v('promo');
+ $art['forlife'] = S::v('forlife');
+ $art['peremption'] = Post::v('peremption');
+ $art['public'] = Post::has('public');
+ $art['xorg'] = Post::has('xorg');
+ $art['nl'] = Post::has('nl');
+ $art['event'] = Post::v('event');
+
+ $art['contact_html'] = $art['contacts'];
+ if ($art['event']) {
+ $art['contact_html'] .= "\n{$globals->baseurl}/{$platal->ns}events/sub/{$art['event']}";
+ }
+
+ if (!$art['public'] &&
+ (($art['promo_min'] > $art['promo_max'] && $art['promo_max'] != 0) ||
+ ($art['promo_min'] != 0 && ($art['promo_min'] <= 1900 || $art['promo_min'] >= 2020)) ||
+ ($art['promo_max'] != 0 && ($art['promo_max'] <= 1900 || $art['promo_max'] >= 2020))))
+ {
+ $page->trig("L'intervalle de promotions est invalide");
+ Post::kill('valid');
+ }
+
+ if (!trim($art['titre']) || !trim($art['texte'])) {
+ $page->trig("L'article doit avoir un titre et un contenu");
+ Post::kill('valid');
+ }
+ }
+
+ if (Post::v('valid') == 'Enregistrer') {
+ $promo_min = ($art['public'] ? 0 : $art['promo_min']);
+ $promo_max = ($art['public'] ? 0 : $art['promo_max']);
+ if (is_null($aid)) {
+ $fulltext = $art['texte'];
+ if (!empty($art['contact_html'])) {
+ $fulltext .= "\n\n'''Contacts :'''\\\\\n" . $art['contact_html'];
+ }
+ $post = null;
+ if ($globals->asso('forum')) {
+ require_once 'banana/forum.inc.php';
+ $banana = new ForumsBanana(S::v('forlife'));
+ $post = $banana->post($globals->asso('forum'), null,
+ $art['titre'], MiniWiki::wikiToText($fulltext, false, 0, 80));
+ }
+ XDB::query("INSERT INTO groupex.announces
+ (user_id, asso_id, create_date, titre, texte, contacts,
+ peremption, promo_min, promo_max, flags, post_id)
+ VALUES ({?}, {?}, NOW(), {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
+ S::i('uid'), $globals->asso('id'), $art['titre'], $art['texte'], $art['contact_html'],
+ $art['peremption'], $promo_min, $promo_max, $art['public'] ? 'public' : '', $post);
+ $aid = XDB::insertId();
+ if ($art['xorg']) {
+ require_once('validations.inc.php');
+ $article = new EvtReq("[{$globals->asso('nom')}] " . $art['titre'], $fulltext,
+ $art['promo_min'], $art['promo_max'], $art['peremption'], "", S::v('uid'));
+ $article->submit();
+ $page->trig("L'affichage sur la page d'accueil de Polytechnique.org est en attente de validation");
+ }
+ if ($art['nl']) {
+ require_once('validations.inc.php');
+ $article = new NLReq(S::v('uid'), $globals->asso('nom') . " : " .$art['titre'],
+ $art['texte'], $art['contact_html']);
+ $article->submit();
+ $page->trig("La parution dans la Lettre Mensuelle est en attente de validation");
+ }
+ } else {
+ XDB::query("UPDATE groupex.announces
+ SET titre={?}, texte={?}, contacts={?}, peremption={?},
+ promo_min={?}, promo_max={?}, flags={?}
+ WHERE id={?} AND asso_id={?}",
+ $art['titre'], $art['texte'], $art['contacts'], $art['peremption'],
+ $promo_min, $promo_max, $art['public'] ? 'public' : '',
+ $art['id'], $globals->asso('id'));
+ }
+ }
+ if (Post::v('valid') == 'Enregistrer' || Post::v('valid') == 'Annuler') {
+ pl_redirect("");
+ }
+
+ if (empty($art) && !is_null($aid)) {
+ $res = XDB::query("SELECT a.*, u.nom, u.prenom, u.promo, l.alias AS forlife,
+ FIND_IN_SET('public', a.flags) AS public
+ FROM groupex.announces AS a
+ INNER JOIN auth_user_md5 AS u USING(user_id)
+ INNER JOIN aliases AS l ON (l.id = u.user_id AND l.type = 'a_vie')
+ WHERE asso_id = {?} AND a.id = {?}",
+ $globals->asso('id'), $aid);
+ if ($res->numRows()) {
+ $art = $res->fetchOneAssoc();
+ $art['contact_html'] = $art['contacts'];
+ } else {
+ $page->kill("Aucun article correspond à l'identifiant indiqué");
+ }
+ }
+
+ if (is_null($aid)) {
+ $events = XDB::iterator("SELECT *
+ FROM groupex.evenements
+ WHERE asso_id = {?} AND archive = 0",
+ $globals->asso('id'));
+ if ($events->total()) {
+ $page->assign('events', $events);
+ }
+ }
+
+ $art['contact_html'] = @MiniWiki::WikiToHTML($art['contact_html']);
+ $page->assign('art', $art);
+ }
+
+ function handler_admin_announce(&$page)
+ {
+ global $globals;
+ $page->changeTpl('xnetgrp/announce-admin.tpl');
+
+ if (Env::has('del')) {
+ XDB::execute("DELETE FROM groupex.announces
+ WHERE id = {?} AND asso_id = {?}",
+ Env::i('del'), $globals->asso('id'));
+ }
+ $res = XDB::iterator("SELECT a.id, a.titre, a.peremption, a.peremption < CURRENT_DATE() AS perime
+ FROM groupex.announces AS a
+ WHERE a.asso_id = {?}
+ ORDER BY a.peremption DESC",
+ $globals->asso('id'));
+ $page->assign('articles', $res);
+ }