function handler_admin_events($page, $action = 'list', $eid = null) { $page->changeTpl('events/admin.tpl'); $page->setTitle('Administration - Evenements'); $page->register_modifier('hde', 'html_entity_decode'); $arch = $action == 'archives'; $page->assign('action', $action); $upload = new PlUpload(S::user()->login(), 'event'); if ((Env::has('preview') || Post::v('action') == "Proposer") && $eid) { $action = 'edit'; $this->upload_image($page, $upload); } if (Post::v('action') == 'Pas d\'image' && $eid) { S::assert_xsrf_token(); $upload->rm(); XDB::execute("DELETE FROM announce_photos WHERE eid = {?}", $eid); $action = 'edit'; } elseif (Post::v('action') == 'Supprimer l\'image' && $eid) { S::assert_xsrf_token(); $upload->rm(); $action = 'edit'; } elseif (Post::v('action') == "Proposer" && $eid) { S::assert_xsrf_token(); $promo_min = Post::i('promo_min'); $promo_max = Post::i('promo_max'); if ($promo_min != 0 && ($promo_min <= 1900 || $promo_min >= 2020) || $promo_max != 0 && ($promo_max <= 1900 || $promo_max >= 2020 || $promo_max < $promo_min)) { $page->trigError("L'intervalle de promotions {$promo_min} -> {$promo_max} n'est pas valide"); $action = 'edit'; } else { $res = XDB::query('SELECT flags FROM announces WHERE id = {?}', $eid); $flags = new PlFlagSet($res->fetchOneCell()); $flags->addFlag('wiki'); if (Post::v('important')) { $flags->addFlag('important'); } else { $flags->rmFlag('important'); } XDB::execute('UPDATE announces SET creation_date = creation_date, titre={?}, texte={?}, expiration={?}, promo_min={?}, promo_max={?}, flags = {?} WHERE id = {?}', Post::v('titre'), Post::v('texte'), Post::v('expiration'), Post::v('promo_min'), Post::v('promo_max'), $flags, $eid); if ($upload->exists() && (list($x, $y, $type) = $upload->imageInfo())) { XDB::execute('INSERT INTO announce_photos (eid, attachmime, attach, x, y) VALUES ({?}, {?}, {?}, {?}, {?}) ON DUPLICATE KEY UPDATE attachmime = VALUES(attachmime), attach = VALUES(attach), x = VALUES(x), y = VALUES(y)', $eid, $type, $upload->getContents(), $x, $y); $upload->rm(); } } } if ($action == 'edit') { $res = XDB::query('SELECT titre, texte, expiration, promo_min, promo_max, FIND_IN_SET(\'important\', flags), attach IS NOT NULL FROM announces AS e LEFT JOIN announce_photos AS p ON(e.id = p.eid) WHERE id={?}', $eid); list($titre, $texte, $expiration, $promo_min, $promo_max, $important, $img) = $res->fetchOneRow(); $page->assign('titre', $titre); $page->assign('texte', $texte); $page->assign('promo_min', $promo_min); $page->assign('promo_max', $promo_max); $page->assign('expiration', $expiration); $page->assign('important', $important); $page->assign('eid', $eid); $page->assign('img', $img); $page->assign_by_ref('upload', $upload); $select = ""; for ($i = 1; $i < 30; $i++) { $p_stamp = date("Ymd", time() + 3600 * 24 * $i); $year = substr($p_stamp, 0, 4); $month = substr($p_stamp, 4, 2); $day = substr($p_stamp, 6, 2); $select .= "<option value=\"{$p_stamp}\"" . ($p_stamp == strtr($expiration, array("-" => "")) ? " selected" : "") . "> {$day} / {$month} / {$year}</option>\n"; } $page->assign('select', $select); } else { switch ($action) { case 'delete': S::assert_xsrf_token(); XDB::execute('DELETE from announces WHERE id = {?}', $eid); break; case "archive": S::assert_xsrf_token(); XDB::execute('UPDATE announces SET creation_date = creation_date, flags = CONCAT(flags,",archive") WHERE id = {?}', $eid); break; case "unarchive": S::assert_xsrf_token(); XDB::execute('UPDATE announces SET creation_date = creation_date, flags = REPLACE(flags,"archive","") WHERE id = {?}', $eid); $action = 'archives'; $arch = true; break; case "valid": S::assert_xsrf_token(); XDB::execute('UPDATE announces SET creation_date = creation_date, flags = CONCAT(flags,",valide") WHERE id = {?}', $eid); break; case "unvalid": S::assert_xsrf_token(); XDB::execute('UPDATE announces SET creation_date = creation_date, flags = REPLACE(flags,"valide", "") WHERE id = {?}', $eid); break; } $pid = $eid && $action == 'preview' ? $eid : -1; $sql = "SELECT e.id, e.titre, e.texte,e.id = {$pid} AS preview, e.uid,\n DATE_FORMAT(e.creation_date,'%d/%m/%Y %T') AS creation_date,\n DATE_FORMAT(e.expiration,'%d/%m/%Y') AS expiration,\n e.promo_min, e.promo_max,\n FIND_IN_SET('valide', e.flags) AS fvalide,\n FIND_IN_SET('archive', e.flags) AS farch,\n FIND_IN_SET('wiki', e.flags) AS wiki\n FROM announces AS e\n WHERE " . ($arch ? "" : "!") . "FIND_IN_SET('archive',e.flags)\n ORDER BY FIND_IN_SET('valide',e.flags), e.expiration DESC"; $page->assign('evs', XDB::iterator($sql)); } $page->assign('arch', $arch); $page->assign('admin_evts', true); }