Accéder au contenu.
Menu Sympa

devel - [Devel] r344 - trunk

Objet : devel-adl

Archives de la liste

[Devel] r344 - trunk


Chronologique Discussions 
  • From: svn AT agendadulibre.org
  • To: devel AT agendadulibre.org
  • Subject: [Devel] r344 - trunk
  • Date: Wed, 9 Jul 2008 21:16:16 +0200 (CEST)
  • List-archive: <http://agendadulibre.org/pipermail/devel>
  • List-id: Developpement de l'Agenda du Libre <devel.agendadulibre.org>

Author: thomas
Date: Wed Jul 9 21:15:18 2008
New Revision: 344

Log:
Ajout pour le soumetteur d'un évènement de la possibilité de l'éditer
et de l'annuler après validation. Les modifications sont faites
directement, sans modération a priori. La liste des modérateurs est
néanmoins notifiée de toute modification, ce qui permet une modération
a posterio.

En revanche, l'annulation d'un évènement n'est pour le moment pas
réversible: elle consiste à supprimer l'évènement de la base. Il est
prévu d'améliorer ce point prochainement.

* schema.sql

Ajout d'un champ 'secret' dans la table 'events' pour stocker un
hash aléatoire permettant au soumetteur d'un évènement de
s'identifier.

* submit.php

Lors de l'ajout d'un évènement, génération d'un hash
aléatoire. L'appel md5(uniqid(rand(), true)) vient de la
documentation de PHP sur la fonction uniqid().

* validateevent.php

Dans le mail reçu par le soumetteur lors de la validation de
l'évènement par l'équipe de modération, ajout des URLs permettant
l'édition et l'annulation d'un évènement.

* showevent.php

Ajout d'un lien «Annuler évènement» accessible aux modérateurs
connectés. Tant qu'à offrir la fonctionnalité d'annulation au
soumetteur d'un évènement, autant la mettre aussi à disposition des
modérateurs :-)

* funcs.inc.php

Ajout d'une fonction get_safe_hash(), dans l'esprit de
get_safe_integer().

* editevent.php

Changement de la fonction save_event() pour tenir compte du cas où
$user est faux (i.e quand c'est le soumetteur qui a édité
l'évènement et non un modérateur).

Changement du coeur du script pour supporter un paramètre GET
'secret' contenant le hash secret. Deux modes sont donc disponibles
pour ce script: soit un utilisateur (modérateur) est connecté, et
la présence du champ 'secret' n'est pas requise, soit l'utilisateur
n'est pas connecté, et la présence d'un champ 'secret' avec une
valeur correspondant à celle de la base de données est requise.

Le script est assez moche, avec pas mal de if($user) {} else {},
mais je ne voulais pas dupliquer les scripts.

* cancelevent.php

Nouveau script permettant l'annulation d'un évènement après sa
validation.



Added:
trunk/cancelevent.php
Modified:
trunk/editevent.php
trunk/funcs.inc.php
trunk/schema.sql
trunk/showevent.php
trunk/submit.php
trunk/validateevent.php

Added: trunk/cancelevent.php
==============================================================================
--- (empty file)
+++ trunk/cancelevent.php Wed Jul 9 21:15:18 2008
@@ -0,0 +1,194 @@
+<?php
+
+/* Copyright 2008
+ * - Thomas Petazzoni <thomas POINT petazzoni CHEZ enix 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.
+ */
+
+include("bd.inc.php");
+include("funcs.inc.php");
+include("session.inc.php");
+include("user.inc.php");
+include("diff.inc.php");
+
+function cancel_event ($db, $user, $id)
+{
+ global $moderatorlist;
+
+ $sql = "select * from events where id=" . $db->quote_smart($id);
+ $ret = $db->query($sql);
+ if ($ret == FALSE)
+ {
+ error ("La requ�te <i>" . $sql . "</i> a �chou�");
+ return -1;
+ }
+
+ $oldevent = mysql_fetch_object ($ret);
+ if (! $oldevent->moderated)
+ {
+ error ("�v�nement non mod�r�, annulation impossible.");
+ return -1;
+ }
+
+ $sql = "delete from events where id=" . $id;
+ $ret = $db->query ($sql);
+ if ($ret == FALSE)
+ {
+ error ("La requ�te <i>" . $sql . "</i> a �chou�");
+ return -1;
+ }
+
+ $oldevent_str =
+ format_ascii_event ($db, $oldevent->title,
date_mysql2timestamp($oldevent->start_time),
+ date_mysql2timestamp($oldevent->end_time),
+ $oldevent->description, $oldevent->city,
$oldevent->region, $oldevent->locality,
+ $oldevent->url, $oldevent->contact,
$oldevent->submitter, $oldevent->tags);
+
+ if ($user)
+ $modifier = $user->get_login();
+ else
+ $modifier = "le soumetteur de l'�v�nement";
+
+ calendar_mail ($moderatorlist, "",
+ "Annulation de l'�v�nement valid� '" . $title . "'",
+ "Bonjour,\n\n" .
+ wordwrap("L'�v�nement valid� '" . stripslashes($title) . "'
a �t� annul� par " . $modifier . ".\n") .
+ "D�tail de l'�v�nement annul�:\n\n" .
+ "=======================================================\n" .
+ $oldevent_str . "\n".
+
"=======================================================\n\n" .
+ "Bonne journ�e\n\n".
+ "-- L'�quipe de mod�ration");
+}
+
+$db = new db();
+
+$id = get_safe_integer('id', 0);
+$secret = get_safe_hash('secret', false);
+
+if ($secret == FALSE)
+{
+ $user = new user($db);
+}
+else
+{
+ $sql = "select id from events where id='" . $id . "' and secret='" .
$secret . "'";
+ $ret = $db->query($sql);
+ if ($ret == FALSE)
+ {
+ put_header("Annulation d'un �v�nement");
+ error ("La requ�te <i>" . $sql . "</i> a �chou�");
+ put_footer();
+ exit;
+ }
+
+ if (mysql_num_rows($ret) != 1)
+ {
+ put_header("Annulation d'un �v�nement");
+ error("Hash d'identification non reconnu");
+ put_footer();
+ exit;
+ }
+
+ $user = false;
+}
+
+if ($_POST['__event_cancelation_confirm'])
+{
+ put_header("Annulation d'un �v�nement");
+ $ret = cancel_event ($db, $user, $id);
+ if ($ret == 0)
+ {
+ echo "<p>L'�v�nement a bien �t� annul�. Il n'appara�t plus dans
l'Agenda du Libre.</p>";
+ }
+ put_footer();
+ exit;
+}
+else if ($_POST['__event_cancelation_cancel'])
+{
+ put_header("Annulation d'un �v�nement");
+ echo "<p>Vous n'avez pas souhait� annuler cet �v�nement.</p>";
+ put_footer();
+ exit;
+}
+
+put_header("Annulation d'un �v�nement");
+
+$event = fetch_event($db, $id);
+if (! $event)
+{
+ error("Pas d'�v�nement avec cet ID");
+ put_footer();
+ exit;
+}
+
+if (! $event->moderated)
+{
+ error("L'annulation d'un �v�nement non valid� n'est pas possible.");
+ put_footer();
+ exit;
+}
+
+if ($user)
+{
+ echo '<p class="moderationheader">';
+ echo "<a
href=\"moderation.php\">Mod�ration</a>&nbsp;&gt;&gt;&gt;&nbsp;Annulation de
l'�v�nement";
+ echo "</p>";
+}
+else
+{
+ echo '<p class="moderationheader">';
+ echo "&gt;&gt;&gt;&nbsp;Annulation de l'�v�nement";
+ echo "</p>";
+}
+
+if ($user)
+ $posturl = "?id=" . $id;
+else
+ $posturl = "?id=" . $id . "&secret=" . $secret;
+
+echo '<div class="moderationbox">';
+echo '<p style="font-weight: bold;">Attention, cet �v�nement est d�j�
mod�r�. Cette annulation le fera dispara�tre de l\'Agenda du Libre.</p>';
+echo '<form action="' . $posturl . '" method="post">';
+echo '<p style="text-align: center;">Confirmez-vous l\'annulation de cet
�v�nement&nbsp;?</p>';
+echo '<input name="__event_cancelation_confirm" type="submit"
value="Oui"/>&nbsp;';
+echo '<input name="__event_cancelation_cancel" type="submit" value="Non"/>';
+echo '</form>';
+echo '</div>';
+
+if ($user)
+{
+ echo '<p class="moderationheader">';
+ echo "<a
href=\"moderation.php\">Mod�ration</a>&nbsp;&gt;&gt;&gt;&nbsp;Visualisation
de l'�v�nement";
+ echo "</p>";
+}
+else
+{
+ echo '<p class="moderationheader">';
+ echo "&gt;&gt;&gt;&nbsp;Visualisation de l'�v�nement";
+ echo "</p>";
+}
+
+echo '<div class="moderationbox">';
+echo format_event ($db, $event->title, strtotime($event->start_time),
strtotime($event->end_time),
+ $event->description, $event->city, $event->region,
$event->locality, $event->url,
+ $event->contact, $event->submitter, $event->tags);
+echo '</div>';
+
+put_footer();
+
+?>

Modified: trunk/editevent.php
==============================================================================
--- trunk/editevent.php (original)
+++ trunk/editevent.php Wed Jul 9 21:15:18 2008
@@ -74,12 +74,17 @@

$diff = arr_diff (split ("\n", $oldevent_str), split ("\n",
$newevent_str), 1);

+ if ($user)
+ $modifier = $user->get_login();
+ else
+ $modifier = "le soumetteur de l'�v�nement";
+
if ($oldevent->moderated)
{
calendar_mail ($moderatorlist, "",
"�dition de l'�v�nement valid� '" . $title . "'",
"Bonjour,\n\n" .
- wordwrap("L'�v�nement valid� '" . stripslashes($title) .
"' a �t� modifi� par " . $user->get_login() . ".\n") .
+ wordwrap("L'�v�nement valid� '" . stripslashes($title) .
"' a �t� modifi� par " . $modifier . ".\n") .
"Modifications apport�es:\n\n" .
$diff . "\n\n".
"Bonne journ�e\n\n".
@@ -92,7 +97,7 @@
calendar_mail ($moderatorlist, "",
"�dition de l'�v�nement '" . $title . "'",
"Bonjour,\n\n" .
- wordwrap("L'�v�nement '" . stripslashes($title) . "' a
�t� modifi� par " . $user->get_login() . ".\n") .
+ wordwrap("L'�v�nement '" . stripslashes($title) . "' a
�t� modifi� par " . $modifier . ".\n") .
"Modifications apport�es:\n\n" .
$diff . "\n\n".
"Bonne journ�e\n\n".
@@ -102,9 +107,36 @@
}

$db = new db();
-$user = new user($db);

$id = get_safe_integer('id', 0);
+$secret = get_safe_hash('secret', false);
+
+if ($secret == FALSE)
+{
+ $user = new user($db);
+}
+else
+{
+ $sql = "select id from events where id='" . $id . "' and secret='" .
$secret . "'";
+ $ret = $db->query($sql);
+ if ($ret == FALSE)
+ {
+ put_header("�dition d'un �v�nement");
+ error ("La requ�te <i>" . $sql . "</i> a �chou�");
+ put_footer();
+ exit;
+ }
+
+ if (mysql_num_rows($ret) != 1)
+ {
+ put_header("�dition d'un �v�nement");
+ error("Hash d'identification non reconnu");
+ put_footer();
+ exit;
+ }
+
+ $user = false;
+}

if ($_POST['__event_save'])
{
@@ -183,9 +215,18 @@
$tags = $event->tags;
}

-echo '<p class="moderationheader">';
-echo "<a
href=\"moderation.php\">Mod�ration</a>&nbsp;&gt;&gt;&gt;&nbsp;Pr�visualisation
de l'�v�nement";
-echo "</p>";
+if ($user)
+{
+ echo '<p class="moderationheader">';
+ echo "<a
href=\"moderation.php\">Mod�ration</a>&nbsp;&gt;&gt;&gt;&nbsp;Pr�visualisation
de l'�v�nement";
+ echo "</p>";
+}
+else
+{
+ echo '<p class="moderationheader">';
+ echo "&gt;&gt;&gt;&nbsp;Pr�visualisation de l'�v�nement";
+ echo "</p>";
+}

if ($event->moderated)
{
@@ -200,12 +241,27 @@
$tags);
echo '</div>';

-echo '<p class="moderationheader">';
-echo "<a
href=\"moderation.php\">Mod�ration</a>&nbsp;&gt;&gt;&gt;&nbsp;�dition de
l'�v�nement";
-echo "</p>";
+if ($user)
+{
+ echo '<p class="moderationheader">';
+ echo "<a
href=\"moderation.php\">Mod�ration</a>&nbsp;&gt;&gt;&gt;&nbsp;�dition de
l'�v�nement";
+ echo "</p>";
+}
+else
+{
+ echo '<p class="moderationheader">';
+ echo "&gt;&gt;&gt;&nbsp;�dition de l'�v�nement";
+ echo "</p>";
+}

echo '<div class="moderationbox">';
-echo "<form action=\"?id=".$id."\" method=\"post\">\n";
+
+if ($user)
+ $posturl = "?id=" . $id;
+else
+ $posturl = "?id=" . $id . "&secret=" . $secret;
+
+echo "<form action=\"" . $posturl . "\" method=\"post\">\n";
edit_event ($db, $title, $start, $end, $description, $city,
$region, $locality, $url, $contact, $submitter,
$tags, TRUE);

Modified: trunk/funcs.inc.php
==============================================================================
--- trunk/funcs.inc.php (original)
+++ trunk/funcs.inc.php Wed Jul 9 21:15:18 2008
@@ -761,6 +761,15 @@
}
}

+function get_safe_hash($name, $default)
+{
+ if (ereg("^[0-9a-f]+$", $_GET[$name])) {
+ return $_GET[$name];
+ } else {
+ return $default;
+ }
+}
+
function edit_event ($db, $title, $start, $end, $description,
$city, $region, $locality, $url, $contact,
$submitter, $tags, $wants_preview = FALSE)

Modified: trunk/schema.sql
==============================================================================
--- trunk/schema.sql (original)
+++ trunk/schema.sql Wed Jul 9 21:15:18 2008
@@ -11,6 +11,7 @@
`contact` varchar(255) NOT NULL default '',
`submitter` varchar(255) NOT NULL default '',
`tags` varchar(255) NOT NULL default '',
+ `secret` varchar(255) NOT NULL default '',
`moderated` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

Modified: trunk/showevent.php
==============================================================================
--- trunk/showevent.php (original)
+++ trunk/showevent.php Wed Jul 9 21:15:18 2008
@@ -96,7 +96,8 @@
if ($session->exists("agenda_libre_id"))
{
echo "<h1>Actions</h1>";
- echo "<a href=\"editevent.php?id=" . $event_id . "\">�diter �v�nement</a>";
+ echo "<a href=\"editevent.php?id=" . $event_id . "\">�diter
�v�nement</a><br/>";
+ echo "<a href=\"cancelevent.php?id=" . $event_id . "\">Annuler
�v�nement</a>";
}

echo "</div>";

Modified: trunk/submit.php
==============================================================================
--- trunk/submit.php (original)
+++ trunk/submit.php Wed Jul 9 21:15:18 2008
@@ -163,7 +163,7 @@
$submitter = $contact;

/* Checks are done, add to database */
- $sql = "INSERT INTO events
(title,description,start_time,end_time,city,region,locality,url,contact,submitter,tags,moderated)
values (" .
+ $sql = "INSERT INTO events
(title,description,start_time,end_time,city,region,locality,url,contact,submitter,tags,moderated,secret)
values (" .
$db->quote_smart($title) . "," .
$db->quote_smart($description) . "," .
$db->quote_smart(date_timestamp2mysql ($start)) . "," .
@@ -175,7 +175,9 @@
$db->quote_smart($contact) . "," .
$db->quote_smart($submitter) . "," .
$db->quote_smart($tags) . "," .
- "'0')";
+ "'0'" . "," .
+ "'" . md5(uniqid(rand(), true)) . "'" .
+ ")";

$ret = $db->query ($sql);


Modified: trunk/validateevent.php
==============================================================================
--- trunk/validateevent.php (original)
+++ trunk/validateevent.php Wed Jul 9 21:15:18 2008
@@ -49,6 +49,7 @@
$row = mysql_fetch_object($ret);
$email = $row->contact;
$title = $row->title;
+ $secret = $row->secret;
$link = calendar_absolute_url("showevent.php?id=".$id);

/* Accept event */
@@ -64,10 +65,12 @@
calendar_mail ($row->submitter, $moderatorlist,
"�v�nement '" . $row->title . "' mod�r�",
"Bonjour,\n\n" .
- "L'�v�nement que vous avez soumis a �t� mod�r� par " .
$user->get_name() .
- ".\nIl est maintenant visible dans l'Agenda � l'adresse\n" .
$link . "\n\n" .
- "Si vous souhaitez modifier cet �v�nement ult�rieurement,
merci de contacter\n" .
- "l'�quipe de mod�ration � l'adresse
moderateurs AT agendadulibre.org\n\n" .
+ wordwrap("L'�v�nement que vous avez soumis a �t� mod�r� par
" . $user->get_name() . ". Il est maintenant visible dans l'Agenda �
l'adresse : \n") .
+ " " . $link . "\n\n" .
+ wordwrap("Vous pouvez modifier cet �v�nement ult�rieurement
pour y ajouter des pr�cisions en vous rendant � l'adresse :\n") .
+ " " . calendar_absolute_url("editevent.php?id=" . $id .
"&secret=" . $secret) . "\n\n" .
+ wordwrap("Vous pouvez �galement l'annuler en vous rendant �
l'adresse :\n") .
+ " " . calendar_absolute_url("cancelevent.php?id=" . $id .
"&secret=" . $secret) . "\n\n" .
"=====================================================\n" .
format_ascii_event ($db, $row->title,
date_mysql2timestamp($row->start_time),
date_mysql2timestamp($row->end_time),




  • [Devel] r344 - trunk, svn, 09/07/2008

Archives gérées par MHonArc 2.6.16.

Haut de le page