la gestion des trackers fonctione.
authorx2000habouzit <x2000habouzit>
Mon, 23 Feb 2004 17:06:58 +0000 (17:06 +0000)
committerx2000habouzit <x2000habouzit>
Mon, 23 Feb 2004 17:06:58 +0000 (17:06 +0000)
reste la gestion des post et fups :)

htdocs/trackers/admin.php
htdocs/trackers/index.php
include/tracker.inc.php [new file with mode: 0644]
include/xorg.page.inc.php
templates/trackers/admin.tpl
templates/trackers/edit.tpl

index dbbb287..7e1881e 100644 (file)
@@ -1,27 +1,47 @@
 <?php
 require('auto.prepend.inc.php');
+require('tracker.inc.php');
+
 
 if(isset($_POST['action'])) {
     switch($_POST['action']) {
     // insertion ou création du tracker dans le formulaire
         case 'update':
             new_admin_page('trackers/admin.tpl');
-            $page->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');
 }
 
index ca9894c..5a9832a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 require('auto.prepend.inc.php');
-new_skinned_page('trackers/index.tpl');
+new_skinned_page('trackers/index.tpl', AUTH_COOKIE);
 if(has_perms())
     header("Location: admin.php");
 
@@ -10,7 +10,7 @@ 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%' 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 (file)
index 0000000..920ba9f
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+
+/** décrit un tracker
+ * Cette classe décrit un tracker
+ * les mails d'administrations envoyés, sont marqués par X-TrackerName: TrackerAdmin
+ */
+class Tracker {
+    /** l'id du tracker */
+    var $id;
+    /** la description du tracker */
+    var $desc;
+    /** le nom du tracker */
+    var $name;
+    /** la mailing list(id) */
+    var $ml_id;
+    /** la mailing list @poly.org */
+    var $ml_short;
+    /** nom de la ML */
+    var $ml_text;
+    /** le niveau nécessaire pour utiliser le tracker ("admin","auth") */
+    var $perms;
+    /** propriétés du tracker
+     * no_mail, perso
+     */
+    var $bits;
+    /** table texte de la priorité */
+    var $pris;
+
+    /** constructeur
+     * @param  $tr_id      id du tracker
+     */
+    function Tracker($tr_id) {
+        global $globals;
+        $this->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();
+    }
+}
+?>
index c257e9d..d740e6b 100644 (file)
@@ -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;
index d5e4c4f..1fc55fe 100644 (file)
@@ -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}
 <script type="text/javascript">
   <!--
   function action( action, myid ) {
-    document.operations.action.value = action;
-    document.operations.tr_id.value = myid;
-    document.operations.submit();
+    ops = document.getElementById('operations');
+    ops.action.value = action;
+    ops.trid.value = myid;
+    ops.submit();
     return true;
   }
   
   function del( myid ) {
     if( confirm ("You are about to delete this tracker !\nDo you still want to proceed ?") ) {
-      document.operations.action.value = "del";
-      document.operations.tr_id.value = myid;
-      document.operations.submit();
-      return true;
+      return action('del', myid);
     }
   }
   -->
@@ -23,8 +21,8 @@
 {/literal}
 
 <form id="operations" method="post" action="{$smarty.server.PHP_SELF}">
-  <input type="hidden" id="action" value="" />
-  <input type="hidden" id="tr_id" value="" />
+  <input type="hidden" id="action" name="action" value="" />
+  <input type="hidden" id="trid" name="trid" value="" />
 </form>
 
 <div class="rubrique">
     <th>Tracker</th>
     <th>Description</th>
     <th>Géré&nbsp;par</th>
+    <th>Action</th>
   </tr>
-{foreach item=t from=$persos}
+{foreach item=t from=$trackers}
   <tr class="{cycle values="impair,pair"}">
-    <td><a href="{"tracker_show.php?tr_id=`$t.tr_id`"|url}">{$t.tr_name}</a></td>
+    <td><a href="{"show.php?tr_id=`$t.tr_id`"|url}">{$t.tr_name}</a></td>
     <td>{$t.description}</td>
     <td class="right"><a href="mailto:{$t.ml_name}">{$t.short}</a></td>
     <td class="action">
     <th>Tracker</th>
     <th>Description</th>
     <th>Géré&nbsp;par</th>
+    <th>Action</th>
   </tr>
-{foreach item=t from=$trackers}
+{foreach item=t from=$persos}
   <tr class="{cycle values="impair,pair"}">
-    <td><a href="{"tracker_show.php?tr_id=`$t.tr_id`"|url}">{$t.tr_name}</a></td>
+    <td><a href="{"show.php?tr_id=`$t.tr_id`"|url}">{$t.tr_name}</a></td>
     <td>{$t.description}</td>
     <td class="right"><a href="mailto:{$t.ml_name}">{$t.short}</a></td>
     <td class="action">
index 6715b5b..22dd6b9 100644 (file)
@@ -1,6 +1,11 @@
-{* $Id: edit.tpl,v 1.1 2004-02-22 21:04:23 x2000habouzit Exp $ *}
+{* $Id: edit.tpl,v 1.2 2004-02-23 17:06:59 x2000habouzit Exp $ *}
+
+<div class="rubrique">
+  Modification des propriétés du tracker
+</div>
 
 {dynamic}
+
 <form action="{$smarty.server.PHP_SELF}" method="post">
   <table class="bicol">
     <tr>
       <td class="titre"><strong>Nom du tracker</strong>
       </td>
       <td>
-        <input type="text" name="trf_name" size="40"
-          value="{$tracker->name|default:$smarty.post.trf_name}" />
+        <input type="text" name="name" size="40"
+          value="{$tracker->name|default:$smarty.post.name}" />
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Description</strong>
       </td>
       <td>
-        <input type="text" name="trf_desc" size="40" 
-          value="{$tracker->desc|default:$smarty.post.trf_desc}" />
+        <input type="text" name="desc" size="40" 
+          value="{$tracker->desc|default:$smarty.post.desc}" />
       </td>
     </tr>
     <tr>
         </strong>
       </td>
       <td>
-        <input type="checkbox" name="trf_no_mail" size="40"
-          {if $tracker->bits->hasflag("no_mail") || $smarty.post.trf_no_mail}checked="checked"{/if} />
-        cocher pour avoir un tracker silencieux<br />
-        <input type="checkbox" name="trf_perso" size="40"
-          {if $tracker->bits->hasflag("perso") || $smarty.post.trf_perso}checked="checked"{/if} />
-        cocher pour avoir un tracker perso
-      </td>
+        <input type="checkbox" name="nomail" size="40"
+          {if ($tracker->bits && $tracker->bits->hasflag("no_mail")) || $smarty.post.no_mail}checked="checked"{/if} />
+          cocher pour avoir un tracker silencieux
+        <br />
+        <input type="checkbox" name="perso" size="40"
+          {if ($tracker->bits && $tracker->bits->hasflag("perso")) || $smarty.post.perso}checked="checked"{/if} />
+          cocher pour avoir un tracker perso
+    </td>
     </tr>
     <tr class="impair">
       <td class="titre">
         Droits
       </td>
       <td>
-        <select name="trf_perms">
+        <select name="perms">
           <option value="admin"
-            {if $tracker->perms eq "admin" || $smarty.post.trf_perms eq "admin"}selected="selected"{/if}
+            {if $tracker->perms eq "admin" || $smarty.post.perms eq "admin"}selected="selected"{/if}
           >admin</option>
           <option value="auth" 
-            {if $tracker->perms eq "auth" || $smarty.post.trf_perms eq "auth"}selected="selected"{/if}
+            {if $tracker->perms eq "auth" || $smarty.post.perms eq "auth"}selected="selected"{/if}
           >auth</option>
           <option value="public"
-            {if $tracker->perms eq "public" || $smarty.post.trf_perms eq "public"}selected="selected"{/if}
+            {if $tracker->perms eq "public" || $smarty.post.perms eq "public"}selected="selected"{/if}
           >public</option>
         </select>
       </td>
       <td class="titre">Mailing List
       </td>
       <td>
-        <select name="trf_ml_id">
-          {*
-          <?
-          $req=mysql_query("SELECT ml_id,short FROM trackers.mail_lists ORDER BY short");
-          while(list($id,$short) = mysql_fetch_row($req)) {
-          echo "<option value=\"$id\"".($ml_id==$id ? " selected=\"selected\"" : "").">$short</option>\n";
-          }
-          mysql_free_result($req);
-          ?>
-          *}
+        <select name="mlid">
+          {foreach item=ml from=$ml_list}
+          <option value="{$ml.ml_id}"
+            {if $ml.ml_id eq $tracker->ml_id || $ml.ml_id eq $smarty.post.mlid}selected="selected"{/if}>{$ml.short}</option>
+          {/foreach}
         </select>
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Priorité 5</strong></td>
       <td>
-        <input type="text" name="trf_pris[5]" size="40"
-          value="{$tracker->pris[5]|default:$smarty.post.trf_pris[5]}" />
+        <input type="text" name="pris[5]" size="40"
+          value="{$tracker->pris[5]|default:$smarty.post.pris[5]}" />
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Priorité 4</strong></td>
       <td>
-        <input type="text" name="trf_pris[4]" size="40"
-          value="{$tracker->pris[4]|default:$smarty.post.trf_pris[4]}" />
+        <input type="text" name="pris[4]" size="40"
+          value="{$tracker->pris[4]|default:$smarty.post.pris[4]}" />
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Priorité 3</strong></td>
       <td>
-        <input type="text" name="trf_pris[3]" size="40"
-          value="{$tracker->pris[3]|default:$smarty.post.trf_pris[3]}" />
+        <input type="text" name="pris[3]" size="40"
+          value="{$tracker->pris[3]|default:$smarty.post.pris[3]}" />
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Priorité 2</strong></td>
       <td>
-        <input type="text" name="trf_pris[2]" size="40"
-          value="{$tracker->pris[2]|default:$smarty.post.trf_pris[2]}" />
+        <input type="text" name="pris[2]" size="40"
+          value="{$tracker->pris[2]|default:$smarty.post.pris[2]}" />
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Priorité 1</strong></td>
       <td>
-        <input type="text" name="trf_pris[1]" size="40"
-          value="{$tracker->pris[1]|default:$smarty.post.trf_pris[1]}" />
+        <input type="text" name="pris[1]" size="40"
+          value="{$tracker->pris[1]|default:$smarty.post.pris[1]}" />
       </td>
     </tr>
     <tr>
       <td class="titre"><strong>Nom court</strong>
       </td>
       <td>
-        <input style="text" name="mlf_short" size="40" />
+        <input style="text" name="short" size="40" />
       </td>
     </tr>
     <tr class="impair">
       <td class="titre"><strong>Adresse (avec le @)</strong>
       </td>
-      <td><input style="text" name="mlf_texte" size="40" />
+      <td><input style="text" name="texte" size="40" />
       </td>
     </tr>
+    <tr>
+      <td colspan="2" class="center">
+        <input type="hidden" name="trid" value="{$tracker->tr_id|default:$smarty.post.trid}" />
+        <input type="hidden" name="action" value="update" />
+        <input type="submit" value="Valider" />
+      </td>
   </table>
-  <br />
-  <input type="hidden" name="tr_id" value="{$tracker->tr_id|default:$smarty.post.tr_id}" />
-  <input type="hidden" name="action" value="update" />
-  <input type="submit" value="Valider" />
 </form>
 
 {/dynamic}