Beispiel #1
0
 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);
 }