Re: r43256 - in _plugins_/spip-lettres
cedric.morin <at> yterium.com <cedric.morin <at> yterium.com>
2011-01-03 11:08:12 GMT
Le 30 déc. 2010 à 23:12, JLuc a écrit :
> Hello,
>
> Le besoin auquel répond ce petit dev est d'envoyer une lettre à des mails issus d'une requête SQL.
> Cette requête peut ou non porter sur la table spip_abonnes des abonnés de spip-lettres.
>
> C'est une API, 2 fonctions utilisables soit comme simples fonctions dans un code php
> soit effectivement comme filtre dans un squelette, comme toutes les fonctions php.
> Pour le déclenchement, je comprends bien tes remarques très justes.
> Peut être l'utilisation dans un squelette ne devrait elle donc pas être mentionnée
> en exemple, pour ne pas faciliter un mauvais usage.
>
> Tu préconises de passer par une "fonction action séparée" :
> peux tu préciser ce que tu veux dire ? Aurais tu peut être un exemple ?
un script action/xxx.php qui contient une fonction sécurisée action_xxx_dist(){}
commençant par un appel a securiser_action()
et que tu appelera par une url
#URL_ACTION_AUTEUR{xxx,arg,redirectapres}
Ici, ton arg peut etre ta requete SQL.
Le mieux étant ensuite d'utiliser cette url dans un bouton en POST :
#BOUTON_ACTION{'envoyer',#URL_ACTION_AUTEUR{xxx,arg,redirectapres}}
Ce qui permet d'éviter tout déclenchement intempestif par un robot, ou tout double déclenchement (car
le navigateur affichera une alerte si tu essaye de poster une deuxième fois)
> Pour d'autres fonctionnalités, toutefois, j'utilise des squelettes déclencheurs d'évènements,
> et je n'ai jamais constaté de problèmes. Evidemment, leur cache vaut 0.
> Voici les précautions prises dans ces squelettes déclencheurs :
> - les liens d'appels de ces squelettes sont dans une partie du site inaccessible au public et aux robots
> - ces squelettes sont dans un sous-répertoire et ne sont pas inclus dans un squelette à la racine;
> il faut donc être webmestre pour les appeler
> - ils se déclanchent en 2 étapes, avec une étape de confirmation et une étape d'exécution
> - une fois l'évènement déclenché, il n'est plus possible de le rééxécuter avant qu'une certaine
> condition ne soit de nouveau satisfaite
Cela repose sur beaucoup de précautions et c'est fragile. Il suffit par ailleurs que le cache soit géré
différemment pour que cela ne marche plus. Ça marche sans doute, mais c'est sans aucune garantie, et il y
a une grande différence à faire un truc comme ça dans son coin pour bidouiller rapidement, et publier
des fonctions dans un plugin pour faire ça. C'est faire croire que c'est une bonne méthode alors que ça
ne l'est vraiment pas.
Donc je préfèrerai vraiment que cette fonction ne soit pas un filtre appelable par un squelette, c'est
tout a fait contraire aux bonnes pratiques.
Cédric