<?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
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
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');
}
<?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");
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');
}
--- /dev/null
+<?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();
+ }
+}
+?>
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;
-{* $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);
}
}
-->
{/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é 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é 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">
-{* $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}