From b35dfd810b75043d8c1281c4191bbc5ed369bc05 Mon Sep 17 00:00:00 2001 From: x2000habouzit Date: Mon, 23 Feb 2004 17:06:58 +0000 Subject: [PATCH] la gestion des trackers fonctione. reste la gestion des post et fups :) --- htdocs/trackers/admin.php | 40 ++++++++++++----- htdocs/trackers/index.php | 4 +- include/tracker.inc.php | 100 +++++++++++++++++++++++++++++++++++++++++++ include/xorg.page.inc.php | 7 +++ templates/trackers/admin.tpl | 28 ++++++------ templates/trackers/edit.tpl | 87 +++++++++++++++++++------------------ 6 files changed, 198 insertions(+), 68 deletions(-) create mode 100644 include/tracker.inc.php diff --git a/htdocs/trackers/admin.php b/htdocs/trackers/admin.php index dbbb287..7e1881e 100644 --- a/htdocs/trackers/admin.php +++ b/htdocs/trackers/admin.php @@ -1,27 +1,47 @@ clear_cache('trackers/admin.tpl'); - $page->clear_cache('trackers/index.tpl'); + if(!empty($_POST['short']) && !empty($_POST['texte'])) { + $globals->db->query("INSERT INTO trackers.mail_lists + SET short='{$_POST['short']}',texte='{$_POST['texte']}'"); + $mlid = mysql_insert_id(); + } else + $mlid = clean_request('mlid'); + $bits = new Flagset(); + if(!empty($_POST['nomail'])) + $bits->addFlag('no_mail'); + if(!empty($_POST['perso'])) + $bits->addFlag('perso'); + tracker_update($_POST['name'], $_POST['desc'], $_POST['perms'], + $mlid, $bits, $_POST['pris'], $_POST['trid']); + + $page->xorg_clear_cache('trackers/admin.tpl'); + $page->xorg_clear_cache('trackers/index.tpl'); // TODO break; // édition des propriétés d'un tracker ou nouveau tracker case 'edit': new_admin_page('trackers/edit.tpl'); - $tr_id = clean_request($_POST['tr_id']); - $page->assign('tracker',new Tracker($tr_id, $_SESSION['uid'])); + $sql = "SELECT ml_id,short + FROM trackers.mail_lists + ORDER BY short"; + $page->mysql_assign($sql, 'ml_list'); + $tr_id = clean_request('trid'); + $page->assign('tracker',new Tracker($tr_id)); $page->run(); // suppression d'un tracker case 'del': new_admin_page('trackers/admin.tpl'); - $page->clear_cache('trackers/admin.tpl'); - $page->clear_cache('trackers/index.tpl'); - $tracker = new Tracker($_POST['tr_id'], $_SESSION['uid']); + $page->xorg_clear_cache('trackers/admin.tpl'); + $page->xorg_clear_cache('trackers/index.tpl'); + $tracker = new Tracker($_POST['trid']); $tracker -> destroy(); break; // nettoyage BD @@ -30,7 +50,7 @@ if(isset($_POST['action'])) { tracker_clean_bd(); } } else - new_admin_page('trackers/edit.tpl'); + new_admin_page('trackers/admin.tpl'); if(!$page->xorg_is_cached()) { // we know when a new tracker is added so we can trust cached version @@ -38,14 +58,14 @@ if(!$page->xorg_is_cached()) { FROM trackers.trackers AS tr LEFT JOIN trackers.mail_lists AS ml USING(ml_id) WHERE tr.bits NOT LIKE '%perso%' - ORDER BY tr.texte"); + ORDER BY tr.texte"; $page->mysql_assign($sql, 'trackers'); $sql = "SELECT tr_id,tr.texte AS tr_name,description,ml.short,ml.texte AS ml_name FROM trackers.trackers AS tr LEFT JOIN trackers.mail_lists AS ml USING(ml_id) WHERE tr.bits LIKE '%perso%' - ORDER BY tr.texte"); + ORDER BY tr.texte"; $page->mysql_assign($sql, 'persos'); } diff --git a/htdocs/trackers/index.php b/htdocs/trackers/index.php index ca9894c..5a9832a 100644 --- a/htdocs/trackers/index.php +++ b/htdocs/trackers/index.php @@ -1,6 +1,6 @@ xorg_is_cached()) { FROM trackers.trackers AS tr LEFT JOIN trackers.mail_lists AS ml USING(ml_id) WHERE tr.bits NOT LIKE '%perso%' AND tr.perms!='admin' - ORDER BY tr.texte"); + ORDER BY tr.texte"; $page->mysql_assign($sql, 'trackers'); } diff --git a/include/tracker.inc.php b/include/tracker.inc.php new file mode 100644 index 0000000..920ba9f --- /dev/null +++ b/include/tracker.inc.php @@ -0,0 +1,100 @@ +id = $tr_id; + + $req = $globals->db->query("SELECT t.texte,t.description,t.perms,t.bits, + t.pri1,t.pri2,t.pri3,t.pri4,t.pri5, + m.ml_id,m.short,m.texte + FROM trackers.trackers AS t + LEFT JOIN trackers.mail_lists AS m USING(ml_id) + WHERE tr_id='$tr_id'"); + if(!mysql_num_rows($req)) { + unset($this->id); + return; + } + $this->pris = array (); + + list($this->name,$this->desc,$this->perms,$tr_bits, + $this->pris[1],$this->pris[2],$this->pris[3],$this->pris[4],$this->pris[5], + $this->ml_id,$this->ml_short, $this->ml_text) = mysql_fetch_row($req); + mysql_free_result($req); + + $this->bits = new flagset($tr_bits); + } + + /** pseudo destructeur + * détruit toutes les références au tracker et le tracker lui même dans les bases tr_*. + * notifie tracker@polytechnique.org + */ + function destroy() { + mysql_query("DELETE FROM trackers.trackers WHERE tr_id='{$this->id}'"); + mysql_query("DELETE FROM trackers.mails WHERE tr_id='{$this->id}'"); + mysql_query("DELETE trackers.followups + FROM trackers.followups AS f,trackers.requests AS r + WHERE r.rq_id=f.rq_id AND r.tr_id='{$this->id}'"); + } +} + +function tracker_clean_bd() { + global $globals; + $req = $globals->db->query("SELECT ml.ml_id + FROM trackers.mail_lists AS ml + LEFT JOIN trackers.trackers AS tr USING(ml_id) + WHERE tr.tr_id is null"); + if(mysql_num_rows($req)) { + $ids = Array(); + while(list($id) = mysql_fetch_row($req)) $ids[] = $id; + $globals->db->query("DELETE FROM trackers.mail_lists + WHERE ml_id IN (".implode(",",$ids).") AND texte!='null@polytechnique.org'"); + } + mysql_free_result($req); +} + + +function tracker_update($name,$desc,$perms,$ml_id,$bits,$pris, $tr_id=0) { + global $globals; + if($tr_id>0) { + $globals->db->query("UPDATE trackers.trackers + SET perms='$perms',ml_id='$ml_id',texte='$name',description='$desc',bits='{$bits->value}', + pri1='{$pris[1]}',pri2='{$pris[2]}',pri3='{$pris[3]}',pri4='{$pris[4]}',pri5='{$pris[5]}' + WHERE tr_id='$tr_id'"); + return $tr_id; + } else { + $globals->db->query("INSERT INTO trackers.trackers + SET perms='$perms',ml_id='$ml_id',texte='$name',description='$desc',bits='{$bits->value}', + pri1='{$pris[1]}',pri2='{$pris[2]}',pri3='{$pris[3]}',pri4='{$pris[4]}',pri5='{$pris[5]}'"); + return mysql_insert_id(); + } +} +?> diff --git a/include/xorg.page.inc.php b/include/xorg.page.inc.php index c257e9d..d740e6b 100644 --- a/include/xorg.page.inc.php +++ b/include/xorg.page.inc.php @@ -87,6 +87,13 @@ class XorgPage extends DiogenesCorePage { return parent::is_cached('skin/'.$_SESSION['skin'], $this->make_id($append_to_id)); } + function xorg_clear_cache($tpl) { + if($this->_page_type == NO_SKIN) + return parent::clear_cache($tpl); + else + return parent::clear_cache(null, $tpl); + } + function make_id($append_to_id="") { if($this->_page_type == NO_SKIN) return null; diff --git a/templates/trackers/admin.tpl b/templates/trackers/admin.tpl index d5e4c4f..1fc55fe 100644 --- a/templates/trackers/admin.tpl +++ b/templates/trackers/admin.tpl @@ -1,21 +1,19 @@ -{* $Id: admin.tpl,v 1.1 2004-02-22 21:04:23 x2000habouzit Exp $ *} +{* $Id: admin.tpl,v 1.2 2004-02-23 17:06:59 x2000habouzit Exp $ *} {literal}