[Devel] r275 - branches/dui

svn at agendadulibre.org svn at agendadulibre.org
Dim 20 Mai 11:29:13 CEST 2007


Author: ldayot
Date: Sun May 20 11:29:11 2007
New Revision: 275

Log:
Ajout d'un script pour administrer les tags et les categories de tags.
Ajout de deux liens pour les moderateurs en bas de page.



Added:
   branches/dui/moderatetags.php
Modified:
   branches/dui/funcs.inc.php

Modified: branches/dui/funcs.inc.php
==============================================================================
--- branches/dui/funcs.inc.php	(original)
+++ branches/dui/funcs.inc.php	Sun May 20 11:29:11 2007
@@ -115,10 +115,13 @@
 
 function put_footer ()
 {
+  echo "\n</div>\n<div class=\"footer\">\n<p>";
+  if (isset($_COOKIE["agenda_libre_id"]) || isset($_SESSION["agenda_libre_id"]))
+  { // moderateur
+    echo "<a href=\"moderate.php\">Modérer les événements</a> - <a href=\"moderatetags.php\">Gérer les tags</a><br />\n";
+  }
 ?>
-</div>
-<div class="footer">
-<p><a href="submit.php">Proposer un évènement</a> - <a href="rsslist.php">Flux RSS</a> - <a href="icallist.php">Calendriers iCal</a> - <a href="map.php">Carte</a> - <a href="tags.php">Tags</a> - <a href="infos.php">Informations</a> - <a href="stats.php">Statistiques</a> - <a href="mailto:moderateurs CHEZ agendadulibre POINT org">Contact</a></p>
+<a href="submit.php">Proposer un évènement</a> - <a href="rsslist.php">Flux RSS</a> - <a href="icallist.php">Calendriers iCal</a> - <a href="map.php">Carte</a> - <a href="tags.php">Tags</a> - <a href="infos.php">Informations</a> - <a href="stats.php">Statistiques</a> - <a href="mailto:moderateurs CHEZ agendadulibre POINT org">Contact</a></p>
 </div>
 </body>
 </html>

Added: branches/dui/moderatetags.php
==============================================================================
--- (empty file)
+++ branches/dui/moderatetags.php	Sun May 20 11:29:11 2007
@@ -0,0 +1,626 @@
+<?php
+/* Copyright 2004-2007
+ * - Mélanie Bats <melanie POINT bats CHEZ utbm POINT fr>
+ * - Thomas Petazzoni <thomas POINT petazzoni CHEZ enix POINT org>
+ * - Loic Dayot <ldayot CHEZ ouvaton POINT org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * $Id: top.inc.php,v 1.51 2007/03/10 16:22:12 ldayot Exp $
+ */
+
+include("bd.inc.php");
+include("funcs.inc.php");
+include("diff.inc.php");
+
+$db = new db();
+include("session.inc.php");
+
+put_header("Manage tags");
+
+
+function tagCategoryListHTML()
+{
+  global $db;
+
+  $return = "<ul>\n";
+
+  $catQuery = "SELECT COUNT(*) as n FROM tags WHERE category_id=0 GROUP BY category_id";
+  $catResult = $db->query($catQuery);
+  while ($catRecord = $db->fetchObject($catResult))
+    $return .= "  <li><a href='moderatetags.php?op=catListTag&id=0' title=\"". sprintf(_("Liste des tags de la catégorie %s"), _("sans catégorie")). "\">". sprintf(_("%03s tags"), $catRecord->n). "</a> <strong>". _("sans catégorie"). "</strong></li>\n";
+  $db->freeResult($catResult);
+
+  $catQuery = "SELECT COUNT(tags.id) as n, tags_categories.* FROM tags_categories LEFT JOIN tags ON tags_categories.id=category_id GROUP BY tags_categories.id ORDER BY tags_categories.name";
+  $catResult = $db->query($catQuery);
+
+  while ($catRecord = $db->fetchObject($catResult))
+  {
+    $return .= "  <li><a href='moderatetags.php?op=catListTag&id={$catRecord->id}' title=\"". sprintf(_("Liste des tags de la catégorie %s"), $catRecord->name). "\">". sprintf(_("%03s tags"), $catRecord->n). "</a> <strong>{$catRecord->name}</strong> <sapn class='description'>{$catRecord->description}</span>";
+    if ($catRecord->id>0) $return .= " - <a href='moderatetags.php?op=catEdit&id={$catRecord->id}' title=\"". sprintf(_("Modifier la catégorie %s"), $catRecord->name). "\">". _("Modifier"). "</a>";
+    if ($catRecord->n==0) $return .= " - <a href='moderatetags.php?op=catDel&id={$catRecord->id}' title=\"". sprintf(_("Supprimer la catégorie %s"), $catRecord->name). "\">". _("Supprimer"). "</a>";
+    $return .= "</li>\n";
+  }
+
+  $db->freeResult($catResult);
+
+  $return .= "<li><a href='moderatetags.php?op=catNew'>". _("Nouvelle catégorie de tags"). "</a></li>\n";
+
+  $return .= "</ul>\n";
+
+  return $return;
+} // end function tagCategoryListHTML
+
+function tagCategoryFormHTML($id)
+{
+  $return = "<form action=\"moderatetags.php\" method=\"post\" enctype=\"multipart/form-data\" name=\"tagCategoryForm\">\n";
+  $return .= "<input type=\"hidden\" name=\"op\" value=\"catUpdate\" />\n";
+
+  if (isset($_POST["tagCat"]))
+  { // We came from form
+    $tagCat = $_POST["tagCat"];
+    $tagCat["name"] = stripslashes(strip_tags($tagCat["name"]));
+    $tagCat["description"] = stripslashes(strip_tags($tagCat["description"], "<p><b><i><br/><a><ul><li><ol>"));
+  } // end if
+  else
+  {
+    if ($id>0)
+    { // edit
+     global $db;
+     $res = $db->query("SELECT * FROM tags_categories WHERE id='{$id}'");
+      if (! $tagCat = $db->fetchArray($res)) return error(_("Enregistrement introuvable"));
+      $return .= "<input type=\"hidden\" name=\"id\" value=\"{$tagCat['id']}\" />\n";
+      $db->freeResult($res);
+      $tagCat['name'] = escape_form_string($tagCat['name']);
+      $tagCat['description'] = escape_form_string($tagCat['description'], "<p><b><i><br/><a><ul><li><ol>");
+    } // end if
+    else
+    { // new
+      $tagCat = array("name"=>null, "description"=>null);
+    } // end else
+  } // end else
+
+  $return .= "<table>";
+  $return .= "<tr><th colspan='2'>". _("Édition d'une catégorie de tags"). "</th></tr>\n";
+  $return .= "<tr><th>". _("Intitulé*"). "</th> <td><input type=\"text\" name=\"tagCat[name]\" value=\"{$tagCat['name']}\" size='40' /></td></tr>\n";
+  $return .= "<tr><th>". _("Description"). "</th> <td><textarea name=\"tagCat[description]\" rows=\"4\" cols=\"70\">{$tagCat['description']}</textarea></td></tr>\n";
+
+  $return .= "<tr><th colspan='2'><input type=\"submit\" name=\"submit\" value=\"". _("Valider"). "\" /></th></tr>\n";
+
+  $return .= "</table>\n</form>\n";
+
+  return $return;
+} // end function tagCategoryFormHTML
+
+
+function tagCategoryUpdate($id)
+{
+  global $db;
+  if (!isset($_POST["tagCat"]))
+     return error(_("Ne venant pas du formulaire"));
+  $tagCat = $_POST["tagCat"];
+  if (!is_array($tagCat) || !isset($tagCat["name"], $tagCat["description"]))
+    return error(_("Ne venant pas du bon formulaire"));;
+  if (strlen($tagCat["name"])<4)
+    return error(_("Intitulé indispensable d'au moins 4 caractères"));
+
+  $tagCat["name"] = stripslashes(strip_tags($tagCat["name"]));
+  $tagCat["description"] = stripslashes(strip_tags($tagCat["description"], "<p><b><i><br/><a><ul><li><ol>"));
+
+  // Detect double
+  $res = $db->query("SELECT * FROM tags_categories WHERE name LIKE ". $db->quote_smart($tagCat['name']). ($id>0 ? " AND id<>$id" : ""));
+  if ($db->fetchObject($res))
+  { // tag already exists
+    return error(sprintf(_("La catégorie de tags %s existe déjà"), $tagCat["name"]));
+  }
+
+  $query = "tags_categories SET name=". $db->quote_smart($tagCat['name']). ", description=". $db->quote_smart($tagCat['description']);
+  $query = ($id==0 ? "INSERT INTO ". $query : "UPDATE ". $query. " WHERE id='$id'");
+  $ok = $db->query($query);
+  if ($ok && $id==0) $_REQUEST['id'] = $db->insertid();
+
+  return $ok;
+}
+
+function catDelConfirmFormHTML($id)
+{
+  if ($id==0) return error(_("Catégorie de tags non sélectionné"));
+
+  global $db;
+  $res = $db->query("SELECT * FROM tags_categories WHERE id='{$id}'");
+  if (! $cat = $db->fetchArray($res)) return error(_("Catégorie de tags introuvable"));
+  $db->freeResult($res);
+
+  $return = "<form action=\"moderatetags.php\" method=\"post\" enctype=\"multipart/form-data\" name=\"tagCategoryForm\">\n";
+  $return .= "<input type=\"hidden\" name=\"op\" value=\"catDelete\" />\n";
+
+  $return .= "<input type=\"hidden\" name=\"id\" value=\"{$cat['id']}\" />\n";
+  $return .= "<p>". sprintf(_("Vous êtes sur le point de supprimer la catégorie de tags %s"), "<strong>{$cat['name']}</strong>"). "</p>\n";
+  $return .= "<p><label for=\"confirm\">". _("Confirmer la suppression"). "<input type=\"checkbox\" id=\"confirm\" name=\"confirm\" value=\"yes\" /></label></p>";
+
+  $return .= "<p><input type=\"submit\" name=\"submit\" value=\"". _("Valider"). "\" /></p>\n";
+
+  $return .= "</form>\n";
+
+  return $return;
+} // end function catDelConfirmForm
+
+function catDelete($id)
+{
+  global $db;
+  if (!isset($_POST["id"]))
+    return error(_("Ne venant pas du bon formulaire"));;
+  if (!isset($_POST["confirm"]) || $_POST["confirm"]!="yes")
+    return error(_("Supression non confirmée"));
+
+  // Find cat
+  $res = $db->query("SELECT * FROM tags_categories WHERE id=". $db->quote_smart($_POST['id']));
+  if (! $cat=$db->fetchArray($res))
+  { // tag already exists
+    return error(_("Enregistrement introuvable"));
+  }
+  $db->freeresult($res);
+
+  // Is tag used ?
+  $res = $db->query("SELECT * FROM tags WHERE category_id=". $db->quote_smart($_POST['id']));
+  if ($db->fetchObject($res))
+  { // tag already exists
+    $db->freeresult($res);
+    return error(sprintf(_("La catégories %s comporte des tags"), $cat["name"]));
+  }
+
+  $query = "DELETE FROM tags_categories WHERE id=". $db->quote_smart($cat['id']);
+  if ($ok = $db->query($query))
+    echo "<p>". _("Catégorie de tags supprimée")."</p>\n";
+  else
+    error(_("Impossible de supprimer la catégorie de tags"));
+
+  return $ok;
+} // end function catDelete()
+
+function tagListHTML($id)
+{
+  global $db;
+  if ($id>0)
+  {
+    $res = $db->query("SELECT * FROM tags_categories WHERE id='{$id}'");
+    if (! $tagCat = $db->fetchObject($res)) return error(_("Enregistrement introuvable"));
+    $db->freeResult($res);
+    $return ="<h3>{$tagCat->name}</h3>\n";
+    $return .= "<p class=\"description\">{$tagCat->description}</p>";
+  }
+  else
+  {
+    $return ="<h3>". _("Sans catégorie"). "</h3>\n";
+  }
+
+  $return .= "<ul>\n";
+
+  $res = $db->query("SELECT tags.*, COUNT(event_id) AS n FROM tags LEFT JOIN tags_events ON tags.id=tag_id WHERE category_id='{$id}' GROUP BY tags.id ORDER BY tags.name");
+  while ($tag = $db->fetchObject($res))
+  {
+    $return .= "  <li>". sprintf("%03s", $tag->n). " <a href=\"listevents.php?tag={$tag->name}\" title=\"". sprintf(_("Liste des événements portant le tag %s"), $tag->name). "\">{$tag->name}</a> <span class='description'>{$tag->description}</span>";
+    $return .= " - <a href='moderatetags.php?op=tagEdit&id={$tag->id}' title=\"". sprintf(_("Modifier le tag %s"), $tag->name). "\">". _("Modifier"). "</a>";
+    if ($tag->n==0)
+      $return .= " - <a href='moderatetags.php?op=tagDel&id={$tag->id}' title=\"". sprintf(_("Supprimer le tag %s"), $tag->name). "\">". _("Supprimer"). "</a>";
+    else
+      $return .= " - <a href='moderatetags.php?op=tagTr&id={$tag->id}' title=\"". sprintf(_("Transférer le tag %s vers un autre tag"), $tag->name). "\">". _("Transférer"). "</a>";
+    $return .= "</li>\n";
+  } // end while
+
+  if ($id>0) $return .= "<li><a href='moderatetags.php?op=tagNew&id={$tagCat->id}' title=\"". sprintf(_("Nouveau tag dans la catégorie %s"), $tagCat->name). "\">". _("Nouveau tag"). "</a></li>";
+  $return .= "</ul>\n";
+
+  if ($id>0) $return .= "<a href='moderatetags.php?op=catEdit&id={$tagCat->id}' title=\"". sprintf(_("Modifier la catégorie %s"), $tagCat->name). "\">". _("Modifier"). "</a>";
+  if ($db->numRows($res)==0) $return .= " - <a href='moderatetags.php?op=catDel&id={$tagCat->id}' title=\"". sprintf(_("Supprimer la catégorie %s"), $tagCat->name). "\">". _("Supprimer"). "</a>";
+
+  $db->freeResult($res);
+
+  return $return;
+} // end function tagListHTML
+
+function selectTagCategoryHTML($id, $field="category_id")
+// Function to choose tag category ($id)
+// $id is (int) tag category or (int) 0
+// $field (string) name of select form
+// output if HTML string select part of form
+{
+  global $db;
+  $ret = $db->query ("SELECT * FROM tags_categories");
+  if ($ret == FALSE)
+  {
+    error ("Erreur lors de la recherche des catégories de tags");
+    put_footer();
+    exit;
+  }
+  $return = "<select name='$field'>";
+  $return .= " <option value='0' ". ($id==0 ? "selected='selected' " : ""). ">". _("(aucune)"). "</option>";
+  while ($row = $db->fetchObject($ret))
+  {
+    $return .= " <option value='{$row->id}' ". ($row->id==$id ? "selected='selected' " : ""). ">{$row->name}</option>";
+  }
+  $db->freeResult($ret);
+  $return .= " </select>\n";
+  return $return;
+} // end function selectPlaceHTML()
+
+function tagFormHTML($id, $category_id)
+{
+  $return = "<form action=\"moderatetags.php\" method=\"post\" enctype=\"multipart/form-data\" name=\"tagCategoryForm\">\n";
+  $return .= "<input type=\"hidden\" name=\"op\" value=\"tagUpdate\" />\n";
+
+  if (isset($_POST["tag"]))
+  { // We came from form
+    $tag = $_POST["tag"];
+  } // end if
+  else
+  {
+    if ($id>0)
+    { // edit
+     global $db;
+     $res = $db->query("SELECT * FROM tags WHERE id='{$id}'");
+      if (! $tag = $db->fetchArray($res)) return error(_("Enregistrement introuvable"));
+      $return .= "<input type=\"hidden\" name=\"id\" value=\"{$tag['id']}\" />\n";
+      $db->freeResult($res);
+      $tag['name'] = escape_form_string($tag['name']);
+      $tag['description'] = escape_form_string($tag['description'], "<p><b><i><br/><a><ul><li><ol>");
+    } // end if
+    else
+    { // new
+      $tag = array("name"=>null, "description"=>null, "category_id"=>$category_id);
+    } // end else
+  } // end else
+
+  $return .= "<table>";
+  $return .= "<tr><th colspan='2'>". _("Édition d'un tag"). "</th></tr>\n";
+  $return .= "<tr><th>". _("Intitulé*"). "</th> <td><input type=\"text\" name=\"tag[name]\" value=\"{$tag['name']}\" size='40' /></td></tr>\n";
+  $return .= "<tr><th>". _("Catégorie*"). "</th> <td>". selectTagCategoryHTML($tag['category_id'], "tag[category_id]"). "</td></tr>\n";
+  $return .= "<tr><th>". _("Description"). "</th> <td><textarea name=\"tag[description]\" rows=\"4\" cols=\"70\">{$tag['description']}</textarea></td></tr>\n";
+
+  $return .= "<tr><th colspan='2'><input type=\"submit\" name=\"submit\" value=\"". _("Valider"). "\" /></th></tr>\n";
+
+  $return .= "</table>\n</form>\n";
+
+  return $return;
+} // end function tagFormHTML
+
+function tagUpdate($id)
+{
+  global $db;
+  if (!isset($_POST["tag"]))
+     return error(_("Ne venant pas du formulaire"));
+  $tag = $_POST["tag"];
+  if (!is_array($tag) || !isset($tag["name"], $tag["category_id"], $tag["description"]))
+    return error(_("Ne venant pas du bon formulaire"));;
+  if (strlen($tag["name"])<4)
+    return error(_("Intitulé indispensable d'au moins 4 caractères"));
+
+  $tagCat["name"] = stripslashes(strip_tags($tag["name"]));
+  $tagCat["description"] = stripslashes(strip_tags($tag["description"], "<p><b><i><br/><a><ul><li><ol>"));
+
+  // Detect double
+  $res = $db->query("SELECT * FROM tags WHERE name LIKE ". $db->quote_smart($tag['name']). ($id>0 ? " AND id<>$id" : ""));
+  if ($db->fetchObject($res))
+  { // tag already exists
+    return error(sprintf(_("Le tag %s existe déjà"), $tag["name"]));
+  }
+
+  $query = "tags SET name=". $db->quote_smart($tag['name']). ", category_id=". $db->quote_smart($tag['category_id']). ", description=". $db->quote_smart($tag['description']);
+  $query = ($id==0 ? "INSERT INTO ". $query : "UPDATE ". $query. " WHERE id='$id'");
+  $ok = $db->query($query);
+  if ($ok && $id==0) $_REQUEST['id'] = $db->insertid();
+
+  return $ok;
+}
+
+function tagDelConfirmFormHTML($id)
+{
+  if ($id==0) return error(_("Tag non sélectionné"));
+
+  global $db;
+  $res = $db->query("SELECT * FROM tags WHERE id='{$id}'");
+  if (! $tag = $db->fetchArray($res)) return error(_("Tag introuvable"));
+  $db->freeResult($res);
+
+  $return = "<form action=\"moderatetags.php\" method=\"post\" enctype=\"multipart/form-data\" name=\"tagDelConfirmForm\">\n";
+  $return .= "<input type=\"hidden\" name=\"op\" value=\"tagDelete\" />\n";
+
+  $return .= "<input type=\"hidden\" name=\"id\" value=\"{$tag['id']}\" />\n";
+  $return .= "<input type=\"hidden\" name=\"category_id\" value=\"{$tag['category_id']}\" />\n";
+  $return .= "<p>". sprintf(_("Vous êtes sur le point de supprimer le tag %s"), "<strong>{$tag['name']}</strong>"). "</p>\n";
+  $return .= "<p><label for=\"confirm\">". _("Confirmer la suppression"). "<input type=\"checkbox\" id=\"confirm\" name=\"confirm\" value=\"yes\" /></label></p>";
+
+  $return .= "<p><input type=\"submit\" name=\"submit\" value=\"". _("Valider"). "\" /></p>\n";
+
+  $return .= "</form>\n";
+
+  return $return;
+} // end function tagDelConfirmForm
+
+function tagDelete($id)
+{
+  global $db;
+  if (!isset($_POST["id"], $_POST["category_id"]))
+    return error(_("Ne venant pas du bon formulaire"));;
+  if (!isset($_POST["confirm"]) || $_POST["confirm"]!="yes")
+    return error(_("Supression non confirmée"));
+
+  // Find tag
+  $res = $db->query("SELECT * FROM tags WHERE id=". $db->quote_smart($_POST['id']));
+  if (! $tag=$db->fetchArray($res))
+  { // tag already exists
+    return error(_("Enregistrement introuvable"));
+  }
+  $db->freeresult($res);
+
+  // Is tag used ?
+  $res = $db->query("SELECT * FROM tags_events WHERE tag_id=". $db->quote_smart($_POST['id']));
+  if ($db->fetchObject($res))
+  { // tag already exists
+    $db->freeresult($res);
+    return error(sprintf(_("Le tag %s est utilisé"), $tag["name"]));
+  }
+
+  $query = "DELETE FROM tags WHERE id=". $db->quote_smart($tag['id']);
+  if ($ok = $db->query($query))
+    echo "<p>". _("Tag supprimé")."</p>\n";
+  else
+    error(_("Impossible de supprimer le tag"));
+
+  return $ok;
+}
+
+// Function to choose tags
+// $aTags is an array (category_id=>tag_name)
+// output if HTML string select part of form
+function selectTagHTML($id, $field="tag_id", $category_id=null)
+{
+  global $db;
+  // TODO Select only tags used twice or more.
+  // Or sort and class tags in alphabetical optgroup
+  $ret = $db->query ("SELECT tags.id AS id, tags.name AS tag, tags.description AS tag_description, tags_categories.id AS category_id, tags_categories.name AS category, tags_categories.description as description FROM tags LEFT JOIN tags_categories ON tags_categories.id=category_id GROUP BY category_id, tags.id ORDER BY tags_categories.name, tags.name");
+  if ($ret == FALSE)
+  {
+    error (_("Erreur lors de la recherche des tags"));
+    put_footer();
+    exit;
+  }
+  $category_id=-1;
+  $return = "<select name=\"$field\">";
+  $return .= "  <option></option>";
+  while ($row = $db->fetchObject($ret))
+  {
+    if ($category_id!=$row->category_id)
+    {
+      if ($category_id!=-1) $return .= "<optgroup>\n";
+      $return .= " <optgroup label=\"{$row->category}". ($row->description>"" ? " - {$row->description}" : ""). "\">";
+      $category_id = $row->category_id;
+    } // end if
+    $return .= "  <option value='{$row->id}'". ($id==$row->id ? " selected='selected'" : ""). ">{$row->tag}". ($row->tag_description>"" ? " - {$row->tag_description}" : ""). "</option>";
+  } // end while
+  $db->freeResult($ret);
+  $return .= "</select>\n";
+
+  return $return;
+} // end function selectTagHTML()
+
+function tagTransferFormHTML($id)
+{
+  if ($id==0) return error(_("Tag non sélectionné"));
+
+  global $db;
+
+  // find tag
+  $res = $db->query("SELECT * FROM tags WHERE id='{$id}'");
+  if (! $tag = $db->fetchArray($res)) return error(_("Tag introuvable"));
+  $db->freeResult($res);
+
+  // How many events with this tag
+  $res = $db->query("SELECT event_id AS n FROM tags_events WHERE tag_id='{$id}'");
+  $tagevent = $db->numRows($res);
+  $db->freeResult($res);
+
+  $return = "<form action=\"moderatetags.php\" method=\"post\" enctype=\"multipart/form-data\" name=\"tagTransferForm\">\n";
+  $return .= "<input type=\"hidden\" name=\"op\" value=\"tagTransfer\" />\n";
+  $return .= "<input type=\"hidden\" name=\"id\" value=\"{$tag['id']}\" />\n";
+  $return .= "<input type=\"hidden\" name=\"category_id\" value=\"{$tag['category_id']}\" />\n";
+
+  $return .= "<p>". sprintf(_("Vous souhaitez retirer le tag %s des %s événements"), $tag['name'], $tagevent);
+
+  $return .= "<br />". _("et les marquer avec le nouveau tag*"). " ". selectTagHTML($id, "tag_id"). "</p>\n";
+
+  $return .= "<p><label for=\"confirm\">". _("Confirmer le transfert"). "<input type=\"checkbox\" id=\"confirm\" name=\"confirm\" value=\"yes\" /></label></p>";
+
+  $return .= "<p><input type=\"submit\" name=\"submit\" value=\"". _("Valider"). "\" /></p>\n";
+
+  $return .= "</form>\n";
+
+  return $return;
+}
+
+// Unmark events with $id_from tag
+// and mark with $id_to tag
+function tagTransfer($id_from, $id_to)
+{
+  if ($id_from==0 || $id_to==0) return error(_("Tag non sélectionné"));
+
+  global $db;
+
+  // find from tag
+  $res = $db->query("SELECT * FROM tags WHERE id='{$id_from}'");
+  if (! $tag_from = $db->fetchObject($res)) return error(_("Tag introuvable"));
+  $db->freeResult($res);
+
+  // find to tag
+  $res = $db->query("SELECT * FROM tags WHERE id='{$id_to}'");
+  if (! $tag_to = $db->fetchObject($res)) return error(_("Tag introuvable"));
+  $db->freeResult($res);
+
+  // select events
+  $query = "SELECT event_id FROM tags_events WHERE tag_id=". $db->quote_smart($id_from);
+  $res = $db->query($query);
+  $ok = $res;
+  $aEvents = array();
+  while ($rec = $db->fetchObject($res)) $aEvents[] = $rec->event_id;
+  $db->freeResult($res);
+
+  if (count($aEvents)>0) {
+    $lEvents = implode(",", $aEvents);
+    // remove mark events from
+    $query = "DELETE FROM tags_events WHERE tag_id=". $db->quote_smart($id_from). " AND event_id IN (". $lEvents. ")";
+    $res = $db->query($query);
+    $ok &= $res;
+
+    // mark events to
+    $query = "REPLACE INTO tags_events (event_id, tag_id) VALUES ";
+    foreach ($aEvents as $event) $query.= " (". $event. ", ". $id_to. ")";
+    $res = $db->query($query);
+    $ok &= $res;
+  } // end if
+
+  return $ok;
+} // end function tagTransfer($id_from, $id_to)
+
+/*
+ *
+ * Main page
+ *
+ */
+
+$op = (isset($_REQUEST["op"]) ? $_REQUEST["op"] : null);
+
+switch ($op) // compute
+{
+
+  case "tagUpdate" :
+  {
+    if ($ret = tagUpdate(isset($_POST["id"]) ? $_POST["id"] : 0))
+    { // good, return to tag list
+      $op = "catListTag";
+      $_REQUEST['id'] = $_POST["tag"]['category_id'];
+    }
+    else
+    { // error return to tag form
+      $op = (isset($_POST["id"]) ? "tagEdit" : "tagNew");
+    }
+    break;
+  }
+
+  case "tagDelete" :
+  {
+    $ret = tagDelete($_POST["id"]);
+    $op = "catListTag";
+    $_REQUEST['id'] = $_POST["category_id"];
+    break;
+  }
+
+  case "tagTransfer" :
+  {
+    if (isset($_POST["confirm"]) && $_POST["confirm"]=="yes")
+       $ret = tagTransfer($_POST["id"], $_POST["tag_id"]);
+    $op = "catListTag";
+    $_REQUEST['id'] = $_POST["category_id"];
+    break;
+  }
+
+  case "catUpdate" :
+  {
+    $ret = tagCategoryUpdate(isset($_POST["id"]) ? $_POST["id"] : 0);
+    $op = ( $ret ? "catList" : (isset($_POST["id"]) ? "catEdit" : "catNew") );
+    break;
+  }
+
+  case "catDelete" :
+  {
+    $ret = catDelete($_POST["id"]);
+    $op = "catList";
+    break;
+  }
+
+} // end switch compute
+
+
+switch ($op) // display
+{
+
+  case "tagDel" :
+  {
+    echo tagDelConfirmFormHTML($_REQUEST["id"]);
+    break;
+  }
+
+  case "tagNew" :
+  {
+    echo tagFormHTML(0, isset($_REQUEST["id"]) ? $_REQUEST["id"] : 0);
+    break;
+  }
+
+  case "tagEdit" :
+  {
+    echo tagFormHTML($_REQUEST["id"], 0);
+    break;
+  }
+
+  case "tagTr" :
+  {
+    echo tagTransferFormHTML($_REQUEST["id"]);
+    break;
+  }
+
+  case "catDel" :
+  {
+    echo catDelConfirmFormHTML($_REQUEST["id"]);
+    break;
+  }
+
+  case "catNew" :
+  {
+    echo tagCategoryFormHTML(0);
+    break;
+  }
+
+  case "catEdit" :
+  {
+    echo tagCategoryFormHTML($_REQUEST["id"]);
+    break;
+  }
+
+  case "catDel" :
+  {
+    echo tagCategoryDelHTML($_REQUEST["id"]);
+    break;
+  }
+
+  case "catListTag" :
+  {
+    echo tagListHTML($_REQUEST["id"]);
+    break;
+  }
+
+  default : // list categories
+  {
+    // showTagCategoryList
+    echo tagCategoryListHTML();
+    break;
+  }
+
+} // end switch display
+
+if ($op!="" && $op!="catList") echo "<p><a href=\"moderatetags.php\">". _("Liste des catégories de tags"). "</a></p>\n";
+
+put_footer();
+
+?>


Plus d'informations sur la liste de diffusion Devel