Action "date de peremption"
Description
Quand on utilise beaucoup son
WikiNi pour y mettre toutes sortes de contenus, ca devient vite le bazar. Une page creee reste souvent en plan indefiniment, parce qu'on oublie de la supprimer ou bien qu'on hesite avant de supprimer quoi que ce soit de son site.
Cette action permet, des l'ecriture de la page, de specifier a partir de quelle date celle-ci ne sera plus valide, ou ne presentera plus d'interet. Les visiteurs occasionnels sauront ainsi immediatement a quoi s'en tenir.
Utilisation
Inserez un appel de ce type dans une page perissable (de preference tout au debut)
{{peremption date="6 july 2003" cause="La fete est finie, elle s'est deroulee le 5 juillet au soir"}}
Effet
- Si la date specifiee n'est pas encore arrivee, l'action ne fait rien du tout
- Si la date est depasse, l'action affiche un bandeau d'avertissement au debut de la page
Installation
Demonstration
http://valentin.deleplace.free.fr/wikini/wakka.php?wiki=TestPeremption
Exemple d'effet
Page disponible uniquement à titre d'archive
Périmée depuis le 6 juillet 2005
Cette page est maintenant figée car: La fete est finie, elle s'est deroulee le 5 juillet au soir |
Code source
<?
/*
Licence GNU/GPL, gna gna gna gna gna
*/
/*
* Cette action permet d'afficher un avertissement si la date de peremption de la page est depassee.
*
* @param date string la date de peremption au format anglais "10 September 2000"
* @param cause string la raison pour laquelle la page est perimee
*/
$limite = $this->GetParameter("date");
$cause = $this->GetParameter("cause");
setlocale(LC_TIME, "fr_FR");
$limite_fr = strftime("%e %B %Y", strtotime($limite));
if( ! preg_match( '/[0-9]{4}$/', $limite ) ){
echo "La date de peremption doit se terminer par l'annee sur 4 chiffres!";
}else if( time() > strtotime($limite) ){
if( $cause != "" )
$cause = "Cette page est maintenant figée car: $cause";
?>
<table border="1" width="100%" cellpadding="10"><tr><td bgcolor="#CCCCCC">
<h2>Page disponible uniquement à titre d'archive</h2>
Périmée depuis le <b><? echo $limite_fr; ?></b>
<br />
<? echo $cause; ?>
</td></tr></table>
<?
}
?>
Ameliorations a apporter
- Ne pas etre oblige d'ecrire la date en anglais
- La technique la plus simple c'est de disposer d'une traduction français => anglais des jours et des mois, afin de les remplacer dans la date fournie mais aussi dans la date générée. -- LordFarquaad
- Retirer automatiquement tous les droits en ecriture sur la page lorsque la date est depassee (pas forcement souhaitable)
- Non ça je pense que ce ne serait pas une bonne chose, ou alors il faudrait laisser la possibilité de le faire comme une option. Cependant cela peut poser problème si un petit malin vient s'amuser à placer l'action sur la page avec une date antérieure, en profiter pour spammer un coup, et on se retrouve avec une page pleine de liens et qui ne peut être corrigée que par son propriétaire... -- LordFarquaad
- Securiser un peu plus le code
- Utiliser des <div> à la place des <table>
- Si la date fournie ne contient pas l'année, alors la page va chaque année être "remise à 0". L'action aura plutôt un rôle de date anniversaire... Cependant l'utilisateur risque d'oublier souvent de fournir l'année, et l'action n'aura pas le rôle escompté... (ex.: si l'utilisateur fournit comme date le 31 décembre pour préparer le réveillon, s'il ne spécifie pas l'année, au premier janvier l'action n'affichera toujours rien...) Je ne sais pas si cela peut être considéré comme un bug ou une fonctionnalité... -- LordFarquaad
- ha non ça c'est pas du tout une fonctionnalité... voilà, maintenant il y a un test qui oblige le redacteur a bien preciser l'annee sur 4 chiffres.
Au fait il me semble que setlocale ne fonctionne pas bien car il faut que la locale soit installée sur le serveur ce qui n'est en général pas le cas, je crois. Enfin c'est à vérifier mais j'avais voulu l'utiliser il y a bien longtemps chez webdynamit.net et ça n'a jamais fonctionné... --
LordFarquaad
- Chez free cette version fonctionne bien. Si ca ne marche pas chez vous, essayez a tout hasard de remplacer (LC_TIME, "fr_FR") par (LC_ALL,'french'). -- RipouneT