Manuel du plugin AMAP (pour spip 1.92) v1.1

Transcription

Manuel du plugin AMAP (pour spip 1.92) v1.1
Manuel du plugin AMAP (pour spip 1.92) v1.1
copyright stéphane Moulinet/ dadaprod 2008, licence GNU/Linux
Manuel du plugin AMAP pour Spip v1.1 page 2 / 19
I. INTRODUCTION
Une Association pour le Maintien de l’Agriculture Paysanne (AMAP) est, en France, un partenariat de solidarité et de proximité entre un paysan et un groupe de mangeurs / consommateurs qui défendent ensemble un modèle d’agriculture pérenne, économiquement, socialement et écologiquement.
Le plugin AMAP est un logiciel permettant de mettre en place une gestion collaborative d'une AMAP via le réseau Internet. En tant que plugin, ce logiciel ne peut pas s'exécuter tout seul. C'est un plugin Spip. C’est à dire un module logiciel qui s’installe en quelques clics sur un site développé avec Spip.
Le plugin AMAP est disponible selon les termes de la licence GNU/Linux, c’est à dire une licence assez ouverte, que l’on qualifie souvent de libre. Car en matière de semences, de logiciels, de musique, de littérature, etc, le travail de chacun doit pouvoir bénéficier au plus grand nombre. Ce principe défendu par dadaprod s’oppose ainsi à la logique des brevets que l’industrie et les institutions européennes veulent nous imposer… Après avoir contribué activement au développement du site Amap­IdF, c’est la seconde contribution de dadaprod pour des logiciels liés aux AMAP. Cependant, dadaprod continue toujours à promouvoir l’auto­production d’artistes enragés comme Michel Sardon.
Je vous serais reconnaissant de bien vouloir me signaler les sites sur lesquels vous utiliserez le plugin AMAP. Je vous serais en plus reconnaissant si vous placez un lien vers le site amap­spip. Et je vous serais encore plus reconnaissant si vous décidiez de faire un don à l'association dadaprod pour que je continue à développer ses activités (mon travail pour cette association est bénévole), notamment pour les AMAP (en accueillant par exemple un hébergement mutualisé de sites).
II. INSTALLATION
Le plugin AMAP s'installe comme tous les autres plugin de Spip. Je vous renvoie donc par exemple au site suivant (spip.net) qui détaille si nécessaire l'opération. Le fonctionnement du plugin repose sur une base de données que vous devez bien sûr installer afin de pouvoir utiliser ce logiciel. Pour cela, un script vous est fourni : il s'agit du fichier « create­InnoDB.sql » présent dans le dossier base du plugin. Ce fichier présente une variante « create­InnoDB­
utf8.sql » qui crée les tables utilisant la norme UTF8 pour l'encodage des caractères. Si cette norme ne vous évoque rien, choisissez le premier fichier.
Le but de document n'étant pas non plus de vous former à la manipulation de données et au langage SQL, nous n'irons donc pas plus loin sur le comment vous servir du script. La plupart des solutions d'hébergement proposant le logiciel phpmyadmin, il vous suffit par exemple juste d'importer le script en vous servant de l'un des formulaires proposés.
Le dossier base contient également le fichier « insert­InnoDB.sql » qui contient des données factices utilisées pour le site amap­spip. Une variante « insert­InnoDB­mini.sql » permet d'insérer une configuration minimale comportant le produit légume, des types de famille de légume, des variétés pour ces familles. L'insertion prévoit aussi des noms de banque, des types de contrat.
Le plugin AMAP a été développé et testé sur une version 1.9.2 du moteur Spip. J'essaierai par la suite de suivre l'évolution de Spip et d'opérer les mises à jour nécessaire.
Le plugin AMAP ne dépend d'aucun autre plugin Spip. Cependant des squelettes ont été prévus pour exploiter le plugin Agenda, permettant ainsi de présenter la composition des paniers dans l'agenda du site.
J'utilise le squelette beespip, c'est pourquoi une évolution de ce squelette (dada_beespip) vous est proposé en téléchargement. C'est la solution que je vous conseille si vous partez de rien. Le squelette beespip vous permettra ainsi facilement d'ajouter des forums et d'autres formulaires très pratiques en plus des formulaires du plugin AMAP.
III. UTILISATION DANS L'ESPACE RÉDACTEURS
Une fois le plugin et la base installés, vous allez pouvoir commencer à gérer votre Amap. Le plugin propose deux types de formulaires : les formulaires accessibles dans la partie rédacteur d'un site Spip et les formulaires publics.
Pour accéder aux formulaires rédacteurs, vous devez au préalable vous être connecté à l'espace rédacteur du site. Ensuite vous pouvez accéder au gestionnaire AMAP via le bouton « Configuration ». Le choix a été fait de Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 3 / 19
restreindre cet outil aux administrateurs du site. Nous verrons plus tard comment modifier le code si vous souhaitez adopter un autre comportement.
Les formulaires rédacteurs peuvent être complètement indépendants du reste du site. Les formulaires publics reposent eux sur un lien explicite entre certains articles et une saison. C'est ce lien que nous allons aborder dans un premier temps.
III.1. LA PAGE CONFIGURATION Figure 1 : page configuration / saisons
Cette page va vous permettre de configurer les saisons et les articles éventuellement associés.
III.1.1.
La table amap_saison
La table amap_saison comporte cinq attributs (id_agenda, id_contrat, id_sortie, id_responsable, id_vacance) qui permettent de faire le lien avec cinq articles de Spip.
Chaque article devra être associé à un mot clé : l'article correspondant aux distributions d'une saison donnée sera associé au mot clé « amap_agenda » (c'est à cet article qu'on associera, à l'aide du plugin Agenda, les différentes dates de distribution de la saison); L'article « contrat d'une saison donnée » sera associé au mot clé « amap_contrat »; L'article des « sorties à la ferme » d'une saison donnée sera associé au mot clé « amap_sortie »; L'article des « responsables de distributions » d'une saison donnée sera associé au mot clé « amap_responsable »; Enfin l'article des « vacances de paniers » sera associé au mot clé « amap_vacance ».
Vous devez donc définir au préalable ces cinq mots clés dans la partie réservés à cet effet de Spip (via le bouton Édition).
Les articles n'ont pas besoin de contenu. En effet celui­ci sera implémenté via le squelette article.html que vous devrez modifier un peu afin qu'il prenne en compte les données des tables amap. Nous reviendrons sur ce sujet un peu plus tard...
Une fois la saison créée, vous pouvez modifier les attributs en éditant la ligne concernée. Un simple clic sur la ligne correspondant à la saison vous mène alors à ce nouveau formulaire.
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 4 / 19
Pour créer une nouvelle saison, vous n'avez qu'à appuyer sur le bouton envoyer du formulaire du bas de la figure 1. III.1.2.
la table amap_produit
Figure 2 : page configuration / produits
C'est grâce à cette table que vous allez pouvoir définir les différents produits de votre AMAP et les associer à un paysan dont le nom sera recherché dans l'annuaire (voir la section III.2 du document).
Bien que ces formulaires soient dans l'ensemble très respectueux de la charte des AMAP, ce dernier point est en contradiction avec le principe 11 de la charte. J'assume cet écart car il correspond en fait au pratique de l'AMAP. En effet sous le terme AMAP, on réunit souvent dans les faits plusieurs paysans à un même groupe de mangeurs/consommateurs. Cette contradiction vient de la confusion historique entre le terme association de l'Association pour le Maintien d'une Agriculture Paysanne (AMAP) qui désigne en fait le partenariat entre le paysan et les mangeurs/consommateurs et l'association loi 1901 qui donne bien souvent un statut officiel au groupe de consommateurs. C'est pourquoi je conseille toujours de nommer l'association de mangeurs/consommateurs « panier de .. ».
Vous pouvez également modifier une ligne de la table amap_produit en cliquant sur la ligne correspondant au produit.
III.1.3.
Les autres tables de la page configuration
La table amap_banque, accessible via la rubrique « Banques » vous permet de gérer les banques qui seront associées ensuite au règlement des contrats (voir la section III.4 du document).
La table amap_lieu, accessible via la rubrique « Lieux » permet de gérer les différents lieux de distribution. Ces lieux pourront être affectés à différents évènements (voir la section III.3 du document).
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 5 / 19
Enfin la table amap_type_contrat, accessible via la rubrique « Types de contrat » permet de gérer les différents types de contrat qu'un paysan peut passer avec un mangeur/consommateur : contrat normal, solidaire, etc... Ces types de contrats pourront ensuite être affectés à un tarif (voir la section III.4 du présent document).
III.2. LA PAGE ANNUAIRE Cette page va vous permettre de gérer l'annuaire de votre Amap. Elle est donc particulièrement destinée aux référents adhérents de l'Amap, chargés d'accueillir les nouveaux amapiens.
Figure 3 : page annuaire
Vous pouvez dans un premier temps lister les personnes présentes dans l'annuaire. Vous avez le choix entre trois statuts : tous, intermittent et paysan.
Les intermittents correspondent aux personnes présentes dans l'annuaire mais qui n'ont pas de contrats. Nous reviendrons sur cette notion dans la partie III.4 du document.
Une fois les personnes de l'annuaire listées, pour pouvez éditer la fiche d'une personne en cliquant sur la ligne correspondante.
L'enregistrement d'une nouvelle personne dans l'annuaire se fait à l'aide du dernier formulaire reproduit sur la figure 3.
Le champ auteur vous permet de faire le lien entre l'annuaire de l'Amap et l'identifiant de l'auteur. Ce lien vous permettra notamment de proposer des formulaires publics permettant aux amapiens de s'enregistrer pour des sorties à la ferme, ou pour signaler un panier vacant pour une distribution. Nous reverrons cela dans la partie IV du document.
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 6 / 19
Je vous conseille donc de créer dans un premier temps les auteurs dans Spip (ou de demander aux amapiens de s'inscrire sur le site). Puis ensuite, de renseigner les personnes dans l'annuaire. Cela évitera ensuite des confusions entre les identifiants d'auteurs et de personnes dans l'annuaire.
III.3. LA PAGE DISTRIBUTION Cette page se destine particulièrement aux responsables des distribution de l'Amap. Elle va en effet permettre de définir les différentes distributions d'une saison, puis d'y associer des produits. Enfin, vous pourrez gérer les vacances des différents amapiens, c'est à dire enregistrer dans un premier temps les paniers en vacances, puis dans un second temps les personnes (qui seront souvent des intermittents du panier) qui prendront le panier laissé vacant.
Figure 4 : page distribution
III.3.1.
La table amap_evenements
La rubrique « Évènements », vous permet de gérer cette table. Le premier formulaire vous permet de lister tous les évènements (c'est à dire les dates) des distributions d'une saison donnée. En éditant une ligne du tableau, vous pouvez par exemple préciser des nouveaux responsables où les changer.
a)
Le formulaire « Mise à jour des évènements à partir de l'agenda »
Ce formulaire permet de mettre à jour les distributions enregistrées pour une saison donnée à partir des évènements agenda associés à l'article dont l'identifiant a été renseigné dans la table amap_saison sous l'attribut id_agenda.
La logique est la suivante, si vous souhaitez pouvoir afficher dans votre agenda la composition des paniers, les lieux de distribution, les responsables des distributions etc... Vous allez dans un premier temps créer un article et y associer les différents évènements d'une saison (ces évènements sont stockés dans la table spip_evenements). Cette chose étant faite, vous pouvez maintenant associer les identifiants de ces évènements à la table amap_evenements. En effet, le plugin Agenda gère ses évènements dans la table spip_evenements, le plugin Amap gère ses évènements dans la table amap_evenements. Il est donc intéressant d'établir une correspondance entre les deux tables : c'est le rôle de ce formulaire.
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 7 / 19
Cela vous permettra en plus d'enregistrer de nouveaux éléments pour chaque événement : le lieu de distribution, les responsable de la distribution.
L'action est la suivante : une boucle parcourt toutes les dates de la table spip_evenements. Si la date d'une ligne de la table spip_evenements est identique à une date d'une ligne de la table amap_evenements, on va seulement mettre à jour les champs de la table amap_evenements correspondant à la ligne donnée (numéro d'identifiant, heure). Si la date de la ligne n'a pas de correspondance dans la table amap_evenements, c'est une nouvelle date, on crée alors une ligne supplémentaire dans la table amap_evenements (reprenant l'identifiant de l'évènement de la ligne de la table spip_evenements et la date).
Ceci vous permet d'avoir une correspondance transparente entre le plugin Agenda et le plugin Amap :
●
vous modifiez dans un premier temps les données de la table spip_evenements du plugin Agenda
●
vous répercutez ensuite ces changements dans la table amap_evenements du plugin AMAP.
On évite ainsi l'écrasement des données qui peut entraîner des conséquences fâcheuses. En effet, quand vous supprimez une distribution, le moteur de la base de données supprime également toutes les dépendances présentes dans les autres tables...
b)
enregistrement d'un nouvel événement
Selon le cas, vous pouvez aussi vouloir ajouter un événement supplémentaire en dehors d'un lien explicite à la table spip_evenements. Ce formulaire est fait pour cela..
III.3.2.
La table amap_produit_distribution
Elle est gérée via la rubrique « Produits » de la page distribution. Vous pouvez ici associer autant de produits que présents à chaque date de distribution. Une date de distribution reste accessible à la sélection tant qu'il existe un produit qui n'a pas été associé à cette date de distribution.
III.3.3.
La table amap_vacance
Elle est gérée via la rubrique « Vacances » de la page distribution. Une fois la saison et le produit sélectionnés, vous ne trouvez dans le champ de sélection du contrat que les nom des personnes qui ont pris un contrat du produit donné sur la saison sélectionnée. Vous pouvez alors enregistrer les vacances de ces personnes, c'est à dire les distributions où les personnes ne pourront pas venir et où donc ces personnes sont donc en recherche d'un remplacement.
En effet, l'Amap fonctionnant sur le partage de récolte. Les mangeurs/consommateurs pré­achètent une partie de la récolte. Il n'est alors plus question en cours de saison de se faire rembourser un panier parce qu'on ne peut pas venir. D'où l'utilité pour l'Amap de gérer les vacances temporaires de ses adhérents.
Vous pouvez choisir le remplaçant en sélectionnant une personne dans l'annuaire de l'Amap. Une indication « intermittent » vous aidera à trouver plus facilement les intermittents dans la liste (rappel: un intermittent est une personne, présente dans l'annuaire de l'Amap, mais qui n'a pas de contrat). Si le remplaçant est un voisin, un ami, bref que cette personne ne figure pas dans l'annuaire de l'Amap. Vous pouvez utiliser le champ « remplacant externe » prévu à cet effet.
Enfin un dernier champ « payé » permet éventuellement pour le(s) responsable(s) de suivre le remboursement des paniers ainsi cédés.
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 8 / 19
III.4. LA PAGE CONTRATS Figure 5 : page de gestion des contrats
III.4.1.
La table amap_contrat
La rubrique « liste des contrats » va permettre de gérer cette table. Une fois la saison et les produits choisis, vous pouvez ajouter des nouveaux contrats (pour le produit et la saison donnée). Vous pouvez également modifier un contrat en cliquant sur une ligne de la liste.
Chaque contrat peut être ici associé à un type de contrat (définie dans la page Configuration), mais également à une date de début qui correspond à une date de distribution. Le nombre de distributions s'il est indiqué va permettre au programme de vérifier que le règlement est correct.
III.4.2.
La table amap_prix
La rubrique « tarifs de contrats » va permettre de gérer cette table. Vous pouvez gérer ici le tarif de chaque type de contrat et ceci pour un produit et une saison donnée. Les types de contrat correspondent à ceux définies dans la page Configuration.
III.4.3.
La table amap_reglement
La rubrique « règlement » va permettre de gérer cette table. En plus de sélectionner une saison et un produit. Vous devez choisir également un contrat sur lequel travailler. Vous pouvez alors préciser les chèques versés pour le contrat (en indiquant éventuellement une banque, une référence et bien sûr le montant).
Le programme effectue un calcul, si la somme des chèques est inférieure à la multiplication du nombre de distributions par le tarif du contrat (pour la saison donnée), le programme vous alerte en indiquant la différence (surlignée en rouge).
III.4.4.
La table amap_sortie
La rubrique « sorties à la ferme » va permettre de gérer cette table. Vous pouvez définir ici les dates de contrat associées à un produit (et donc à un paysan) et une saison.
III.4.5.
La table amap_participation_sortie
La rubrique « participations aux sorties » va permettre de gérer cette table. Une fois les dates de sorties définies pour un produit et une saison donnés. On peut alors sélectionner les amapiens qui y participent. Cela permet notamment de mieux gérer le co­voiturage. Cela permettra aussi en fin de saison de voir qui a bien honoré sa part de contrat (qui comporte forcément un minimum d'engagement sur du travail à la ferme).
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 9 / 19
III.5. LA PAGE PANIERS Figure 6 : page de gestion des paniers
III.5.1.
La table amap_panier
La rubrique « paniers » va permettre de gérer cette table. Une fois les familles et les variétés définies pour un produit donné, vous allez pouvoir indiquer la composition des paniers pour toutes les distributions de la saison. Comme dans les autres formulaires, vous pouvez également éditer une ligne de la table et ainsi modifier la composition d'un panier.
III.5.2.
La table amap_famille_variete
La rubrique « familles de produits » va permettre de gérer cette table. Vous pouvez gérer ici les différentes familles de produit. Par exemple pour les légumes: les courges, les radis, les pommes de terre etc..
III.5.3.
La table amap_variete
La rubrique « variétés de famille » va permettre de gérer cette table. Dans chaque famille, vous pouvez préciser des variétés. Par exemple pour les radis : les roses, les noirs etc..
IV. UTILISATION DES SQUELETTES
Afin de permettre une exploitation du système d'information à deux niveaux (une partie administrateur et une partie visiteur), les formulaires de l'espace rédacteur ont été complétés par des formulaires simplifiés dans la partie publique. Cette partie du document va se borner à présenter les différents squelettes proposés.
Chacun des cinq squelettes suivants va correspondre en fait aux cinq mots clés présentés dans la partie III. Ces mots clés permettent d'associer des articles (vides) à une saison. Le but de ces squelettes est de justement remplir dynamiquement ces articles à partir des données des tables amap.
Vous retrouverez les squelettes présentés ci­dessous dans le dossier « includes » du plugin.
Ces squelettes pourront être appelés par le code suivant judicieusement placé dans votre squelette article.html : <BOUCLE_mot_amap_1 (ARTICLES) {id_article}{titre_mot=amap_agenda}{0,1}> <INCLURE{fond=../amap/includes/amap_agenda}{id_article}{id_evenement}> </BOUCLE_mot_amap_1> Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 10 / 19
<BOUCLE_mot_amap_2 (ARTICLES) {id_article}{titre_mot=amap_contrat}{0,1}> <INCLURE{fond=../amap/includes/amap_contrat}{id_article}{id_evenement}{id_produit}
{id_saison}> </BOUCLE_mot_amap_2> <BOUCLE_mot_amap_3 (ARTICLES) {id_article}{titre_mot=amap_sortie}{0,1}> <INCLURE{fond=../amap/includes/amap_sortie}{id_article}> </BOUCLE_mot_amap_3> <BOUCLE_mot_amap_4 (ARTICLES) {id_article}{titre_mot=amap_responsable}{0,1}> <INCLURE{fond=../amap/includes/amap_responsable}{id_article}> </BOUCLE_mot_amap_4> <BOUCLE_mot_amap_5 (ARTICLES) {id_article}{titre_mot=amap_vacance}{0,1}> <INCLURE{fond=../amap/includes/amap_vacance}{id_article}> </BOUCLE_mot_amap_5>
Si vous souhaitez également pouvoir générer des pdf à partir de ces articles, vous devrez de même modifier votre squelette article_pdf.html.
IMPORTANT : Les squelettes amap_agenda et amap_contrat dépendent du plugin agenda et de la table spip_evenements du plugin. Ils ne fonctionneront donc pas si ce plugin n'a pas été installé et que le lien entre la table spip_evenements et la table amap_evenements n'a pas été fait.
Cependant dans une configuration sans le plugin agenda, vous pouvez créer un article par exemple intitulé « Agenda des distributions de la saison 1 » dans lequel vous pouvez insérer l'appel du modèle suivant : <amap_agenda|
id_saison=1> De plus, vous pouvez exploiter le modèle « amap_contrat » présent dans le dossier modèles, qui permet d'afficher les contrats pour un produit et une saison donnée en paramètre de l'appel du modèle : <amap_contrat|id_produit=2|
id_saison=1|tri=id_contrat>
IV.1. SQUELETTE AMAP_AGENDA Ce squelette est appelé via l'agenda. En effet, si vous avez associé des évènements agenda à un article et que vous avez bien défini le mot clé « amap_agenda » pour cet article, quand vous cliquerez dans l'agenda public sur un événement, l'article correspondant sera automatiquement appelé.
L'url appelé doit comporter l'identifiant de l'article et l'identifiant de l'évènement (c'est à dire le numéro de l'évènement sur lequel l'internaute a cliqué).
Pour cela, vous devez modifier le squelette agenda_mois ainsi :
<BOUCLE_mois(EVENEMENTS) {agendafull date_debut,date_fin, mois, #ENV{annee}, #ENV{mois}} >[(#DATE_DEBUT|
Agenda_memo_full{#DATE_FIN,#TITRE,#DESCRIPTIF,#LIEU,#URL_ARTICLE&id_evenement=#ID_EVENEMENT, calendrier­couleur[(#ID_SECTEUR| modulo{14,1})],#HORAIRE})]</BOUCLE_mois>[(#DATE| Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 11 / 19
Agenda_affiche_full{<:aucun_article:>, 'mois'} )]<//B_mois>
Vous devrez également modifier les squelettes agenda_semaine et agenda_jour afin de prévoir toutes les interactions possibles entre l'internaute et l'agenda.
Ces modifications sont nécessaires car par défaut les squelettes du plugin Agenda ne créent pas de liens comportant l'identifiant de l'évènement appelant.
IV.2. SQUELETTE AMAP_CONTRAT Ce squelette est appelé via un lien situé dans le squelette précédent. Il permet d'afficher les contrats (et donc les personnes associées) pour un produit et une saison donnés. Seules les personnes (contrats) qui ont un panier pour la date de distribution choisie sont affichées. Ainsi, le squelette permet de filtrer les contrats débutant un peu plus tard dans la saison.
Le responsable de la distribution n'aura donc plus qu'à imprimer le tableau avant la distribution et à cocher au fur et à mesure que les amapiens viendront chercher leur panier pendant la distribution.
Le tableau présente également les vacances et les remplaçants éventuellement associés, si ceux­ci ont été au préalable enregistrés dans le système d'information.
IV.3. SQUELETTE AMAP_RESPONSABLE Ce squelette va permettre de lister les responsables des distributions portant sur des dates postérieures à la date du jour.
De plus les visiteurs pourront se proposer pour assurer une distribution pour chaque date des distributions à venir, à l'aide du formulaire « inscription ». La cohérence du système d'information oblige donc à bien faire correspondre les auteurs de spip avec les identifiants des personnes dans l'annuaire (table amap_personne).
En effet quand un visiteur se connecte au site, Spip ne connaît que l'identifiant de l'auteur connecté. C'est donc le seul lien que le programme a pour identifier l'internaute...
IV.4. SQUELETTE AMAP_SORTIE Ce squelette va lister par produit toutes les sorties à le fermes prévues pour la saison. Un formulaire permet de plus de s'inscrire aux sorties postérieures à la date de connexion.
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 12 / 19
Une fois encore le formulaire repose sur une correspondance entre les auteurs spip et l'annuaire de l'AMAP. Nous recommandons donc une nouvelle fois de créer les fiches dans l'annuaire à partir des logins des auteurs (voir la section III.2 du document).
IV.5. SQUELETTE AMAP_VACANCE Ce squelette liste toutes les vacances de la saison (seules les dates de distribution postérieures à la date de connexion sont en fait listées), c'est à dire toutes les personnes qui ne pourront pas venir chercher leur panier à une distribution de la saison. C'est pourquoi le squelette propose une formulaire qui permet aux personnes connectées de se proposer pour prendre le panier vacant.
Un deuxième formulaire permet à la personne connectée d'inscrire une vacance pour la saison, c'est à dire de proposer son panier aux autres amapiens.
V. MODE OPÉRATOIRE POUR LE PLUGIN AMAP
●
créer les tables amap avec le script « create­InnoDB.sql ».
●
connectez­vous dans l'espace rédacteur à l'aide du compte administrateur
●
passer en mode « interface complète »
●
Activer le plugin AMAP
●
compléter la section mot clés avec les mots clés amap (amap_agenda, amap_contrat, amap_sortie, amap_vacance, amap_responsable)
●
créer une rubrique « AMAP­mon_nom »
●
créer une rubrique « Bureau » (ou « Membre ») afin de pouvoir restreindre ensuite l'accès de certains éléments aux amapiens (données à caractères privées)
●
dans la rubrique « AMAP­mon_nom » : Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 ●
●
page 13 / 19
●
créer un article vide (ex de titre : « distributions de la saison 1 ») et notez le numéro de l'article
●
associer le mot clé « amap_agenda» à l'article crée
●
publier l'article
●
associer des évènements de l'agenda à l'article (les dates correspondant bien sûr aux distributions prévues). N'oubliez pas de configurer l'heure.
Dans le rubrique bureau :
●
créer un article vide (ex de titre : « contrats de la saison 1 ») et noter le numéro de l'article
●
associer le clé « amap_contrat » à l'article crée
●
publier l'article
●
créer un article vide (ex de titre : «sorties à la ferme de la saison 1») et noter le numéro de l'article
●
associer le clé « amap_sortie» à l'article crée
●
publier l'article
●
créer un article vide (ex de titre : «responsables de distribution de la saison 1») et noter le numéro de l'article
●
associer le clé « amap_responsable» à l'article créée
●
publier l'article
●
créer un article vide (ex de titre : «vacances de la saison 1») et noter le numéro de l'article
●
associer le clé « amap_vacance» à l'article créée
●
publier l'article
Dans le gestionnaire AMAP (via le bouton Configuration)
●
créer une saison en précisant les numéros des différents articles :
●
id_agenda : numéro de l'article amap_agenda
●
id_contrat : numéro de l'article amap_contrat
●
id_sortie : numéro de l'article amap_sortie
●
id_responsable : numéro de l'article amap_responsable
●
id_vacance : numéro de l'article amap_vacance
●
Renseigner les produits dans la rubrique « produits » de la page Configuration. Vous pouvez également utiliser le script « insert­InnoDB­produits.sql » qui insère dans les tables le produit légume, ainsi que des familles et variétés des légumes, différentes banques, et les types de contrat standards...
●
Renseigner les lieux de distribution dans la rubrique « lieux » de la page Configuration
●
dans la rubrique évènements de la page Distribution
●
choisir la saison que vous venez de créer
●
mettre à jour les évènements à partir des données de l'agenda (vous pouvez assigner un lieu à tous les évènements créés)
●
Vous devez maintenant associer des produits aux distributions (rubrique « produits » de la page distribution).
●
Créer les fiches des amapiens (paysans et consommateurs) dans l'annuaire. Je rappelle ici qu'il est préférable de créer les fiches à partir des logins de spip (il faut donc créer auparavant les différents auteurs ou demander aux personnes de s'inscrire sur le site).
●
Créer vos premier contrats via la page Contrat (rubrique liste)
●
Renseigner la composition de vos paniers dans la page paniers
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 14 / 19
●
Vous pouvez enfin créer autant d'articles que de produits et y insérer l'appel du modèle « amap_contrat » qui permettra de lister sur une page l'ensemble des contrats de chaque produit. Pour cela il suffit de copier/coller dans le corps de l'article la syntaxe suivante : <amap_contrat|id_produit=1|id_saison=1|tri=id_contrat>
●
IMPORTANT : il est au regard de la CNIL et par simple respect pour la vie privée de vos amapiens (paysans et mangeurs/consommateurs), vraiment préférable de restreindre l'accès à la rubrique « Bureau » (d'où son nom) afin de rendre ces articles comportant des données sensibles uniquement accessibles aux membres de l'Amap (utilisez pour cela le plugin « accès restreint par groupes » via le bouton Auteurs (installez­le si cela n'est pas déjà fait).
●
Créer un « groupe bureau »
●
Restreindre l'accès de la rubrique « Bureau » à ce groupe
●
Ajouter les membres du groupe (a priori, toutes les personnes de l'annuaire) (vous pouvez utiliser l'ajout par statut, par exemple, tous les administrateurs et les rédacteurs)
VI. MODE OPÉRATOIRE POUR LE SITE DADA_BEESPIP
●
installer beespip
●
créer les tables amap avec le script « create­InnoDB.sql ».
●
connectez­vous dans l'espace rédacteur à l'aide du compte administrateur
●
passer en mode « interface complète »
●
Activer les plugins
●
compléter la section mot clés avec les mots clés amap (amap_agenda, amap_contrat, amap_sortie, amap_vacance, amap_responsable)
●
créer une rubrique « AMAP­mon_nom »
●
créer une rubrique « Bureau » (ou « Membre ») afin de pouvoir restreindre ensuite l'accès de certains éléments aux amapiens (données à caractères privées)
●
dans la rubrique AMAP­mon_nom : ●
●
créer un article vide (ex de titre : « distributions de la saison 1 ») et noter le numéro de l'article
●
associer le mot clé « amap_agenda»à l'article créé
●
associer également le mot clé « exclu » à l'article, le squelette appelé à partir du mot clé attend un événement de l'agenda, vous n'obtiendrez rien en appelant l'article du menu...
●
publier l'article
●
associer des évènements de l'agenda à l'article (les dates correspondant bien sûr aux distributions prévues). N'oubliez pas de configurer l'heure.
Dans le rubrique bureau :
●
créer un article vide (ex de titre : « contrats de la saison 1 ») et noter le numéro de l'article
●
associer le clé « amap_contrat » à l'article créé
●
associer également le mot clé « exclu » à l'article, le squelette appelé à partir du mot clé attend un événement de l'agenda, vous n'obtiendrez rien en appelant l'article du menu...
●
publier l'article
●
créer un article vide (ex de titre : «sorties à la ferme de la saison 1») et noter le numéro de l'article
●
associer le clé « amap_sortie» à l'article créé
●
publier l'article
●
créer un article vide (ex de titre : «responsables de distribution de la saison 1») et noter le numéro de l'article
●
associer le clé « amap_responsable» à l'article créé
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 ●
page 15 / 19
●
publier l'article
●
créer un article vide (ex de titre : «vacances de la saison 1») et noter le numéro de l'article
●
associer le clé « amap_vacance» à l'article créé
●
publier l'article
Dans le gestionnaire AMAP (via le bouton Configuration)
●
créer une saison en précisant les numéros des différents articles :
●
id_agenda : numéro de l'article amap_agenda
●
id_contrat : numéro de l'article amap_contrat
●
id_sortie : numéro de l'article amap_sortie
●
id_responsable : numéro de l'article amap_responsable
●
id_vacance : numéro de l'article amap_vacance
●
Renseigner les produits dans la rubrique « produits » de la page Configuration. Vous pouvez également utiliser le script « insert­InnoDB­produits.sql » qui insère dans les tables le produit légume, ainsi que des familles et variétés des légumes, différentes banques, des types de contrat standards...
●
Renseigner les lieux de distribution dans la rubrique « lieux » de la page Configuration
●
dans la rubrique évènements de la page Distribution
●
choisir la saison que vous venez de créer
●
mettre à jour les évènements à partir des données de l'agenda (vous pouvez assigner un lieu à tous les évènements créés)
●
Vous devez maintenant associer des produits aux distributions (rubrique « produits » de la page distribution).
●
Créer les fiches des amapiens (paysans et consommateurs) dans l'annuaire. Je rappelle ici, qu'il est préférable de créer les fiches à partir des logins de spip (il faut donc créer auparavant les différents auteurs ou demander aux personnes de s'inscrire sur le site).
●
Créer vos premier contrats via la page Contrat (rubrique liste)
●
renseigner la composition de vos paniers dans la page paniers
●
Avant de tester le bon fonctionnement, je vous recommande de configurer beespip pour qu'il utiliser le calendrier public (option d'affichage dans la rubrique « affichage » de la page de configuration de beespip).
●
Vous pouvez également au même endroit choisir de convertir les articles en pdf, cela sera pratique pour l'impression hebdomadaire avant les distributions.
●
Vous pouvez enfin créer autant d'articles que de produits et y insérer l'appel du modèle « amap_contrat » qui permettra de lister sur une page l'ensemble des contrats de chaque produit. Pour cela il suffit de copier/coller dans le corps de l'article la syntaxe suivante : <amap_contrat|id_produit=1|id_saison=1|tri=id_contrat>
●
IMPORTANT : il est au regard de la CNIL et par simple respect pour la vie privée de vos amapiens, vraiment préférable de restreindre l'accès à la rubrique « bureau » (d'où son nom) afin de rendre ces articles comportant des données sensibles uniquement accessibles par les membres de l'Amap (utilisez pour cela le plugin « accès restreint par groupes » via le bouton Auteurs.
●
Créer un « groupe bureau »
●
restreindre l'accès de la rubrique « Bureau » à ce groupe
●
ajouter les membres du groupe (a priori, toutes les personnes de l'annuaire) (vous pouvez utiliser l'ajout par statut, par exemple, tous les administrateurs et les rédacteurs)
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 16 / 19
VII. AMÉLIORATIONS POSSIBLES
VII.1. DANS LE CODE VII.1.1.
Remarques générales
L'encodage des caractères peut poser certains problèmes. Il faudrait peutêtre concertir les caractères spécifiques à la langue française en code HTML (exemple « &eacute; » pour le « é »). En effet, quand on édite dans un formulaire un champ même ayant le code "&eacute;" stockés dans la base, il est remplacé ensuite par l'encodage latin (utilié par défaut) du « é ».
L' appel de script create­utf8.sql pourrait être automatique à l'activation du plugin. Mais a priori, le processus actuel de spip est prévu avec des variables globales et des tableaux associatifs, mais ne rend pas possible les contraintes d'intégrité fonctionnelle utilisés par le plugin AMAP.
IL serait intéressant également aussi que la sauvegarde des tables soient intégrer à la sauvegarde générale de spip ou sinon, il faudrait prévoir dans un nouveau formulaire..
VII.1.2.
Changement de l'accès au gestionnaire dans l'espace rédacteur
Vous pouvez assez facilement ouvrir l'accès aux formulaires du plugin à tous les rédacteurs. Pour cela, vous devrez décommenter certaines de code et en commenter (c'est à dire mettre en commentaire avec le symbole « // ») d'autres.
Tout d'abord dans le fichier « amap_pipeline.php », vous devrez avoir :
$boutons_admin['naviguer']­>sousmenu["amap_config"]= new Bouton(
$boutons_admin['naviguer']­>sousmenu["amap_config"]= new Bouton(
à la place de :
$boutons_admin['configuration']­>sousmenu["amap_config"]= new Bouton(
Ainsi le bouton « gestion Amap » apparaîtra dans le menu « Édition ». Ensuite, dans les fichiers des pages (configuration, annuaire, contrats, distributions, paniers) présents dans le dossier « exec » du plugin, vous devrez modifier les droit d'accès, en remplaçant le code :
if ($connect_statut != '0minirezo') {
par le code suivant :
if (!( ($connect_statut == '0minirezo') || ($connect_statut == '1comite') )) {
Une fois encore, vous n'avez qu'à commenter et décommenter le code...
VII.2. POUR LES SQUELETTES Une dernière remarque concernant les squelettes « amap_responsable_liste.html » et « amap_vacance_liste », ils utilisent tous les deux une syntaxe php qui permet de récupérer l'identifiant de l'auteur connectée (permettant ainsi via un formulaire, aux visiteurs de se proposer).
En installant le plugin SESSION (qui devrait être présent dans le core de spip dans un prochain upgrade), on peut utiliser ensuite l'instruction [(#SESSION{id_auteur})] dans le squelette pour récupérer l'id de l'auteur.. Sinon en php (peut­être que ça ne marchera plus dans un prochain upgrade), on utilise la syntaxe suivante :
<?php echo $GLOBALS['auteur_session']['id_auteur']; ?>
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 17 / 19
VIII. ANNEXE
Voici un extrait du code du squelette article_pdf.html que vous pouvez insérer dans votre squelette :
<BOUCLE_mot_amap_1 (ARTICLES) {id_article}{titre_mot=amap_agenda}{0,1}> <BOUCLE_agenda_distribution_1(EVENEMENTS){id_evenement=#ENV{id_evenement}}> <BOUCLE_amap_saison_1(amap_saison){id_agenda=#ID_ARTICLE}> $texte .= '<p>La distribution du <strong>[(#DATE_DEBUT|affdate)]</strong>, de la saison <strong>#ID_SAISON</strong>, aura lieu '; <BOUCLE_amap_evenements_1(amap_evenements){id_evenement=#ENV{id_evenement}}> <BOUCLE_amap_lieu_1(amap_lieu){id_lieu=#ID_LIEU}> $texte .= '<strong>#NOM_LIEU</strong> (#RUE_LIEU ­ #CP_LIEU #VILLE_LIEU)<br/>[contact: (#TELEPHONE_LIEU)]'; </BOUCLE_amap_lieu_1> $texte .= '</p> <p>Le(s) responsable(s) de la distribution sont : </p> <p>'; <BOUCLE_amap_personne_11(amap_personne){id_personne=#ID_PERSONNE1}> $texte .= '<strong>#PRENOM #NOM</strong>'; </BOUCLE_amap_personne_11> <BOUCLE_amap_personne_12(amap_personne){id_personne=#ID_PERSONNE2}> $texte .= '<strong>[, (#PRENOM)] #NOM</strong>'; </BOUCLE_amap_personne_12> <BOUCLE_amap_personne_13(amap_personne){id_personne=#ID_PERSONNE3}> $texte .= '<strong>[ et (#PRENOM)] #NOM</strong>'; </BOUCLE_amap_personne_13> $texte .= '</p>'; </BOUCLE_amap_evenements_1> <BOUCLE_amap_produit_distribution_1(amap_produit_distribution)
{id_evenement=#ENV{id_evenement}}> <BOUCLE_amap_produit_1(amap_produit){id_produit=#ID_PRODUIT}> $texte .= '<p>La composition du panier <strong>#LABEL_PRODUIT</strong> est :</p> <table width="500" cellpadding="5" border="1" rules="all"> <tr> <td> <strong> <center>Id</center> </strong> </td> <td> <strong> <center>famille</center> </strong> </td> <td> <strong> <center>vari&eacute;t&eacute;</center> </strong> </td> <td> <strong> <center>quantit&eacute;</center> </strong> </td> <td> <strong> <center>poids</center> </strong> </td> </tr>'; <BOUCLE_amap_panier_1(amap_panier){id_produit=#ID_PRODUIT}
{id_evenement=#ENV{id_evenement}}> $texte .= '<tr> <td><center> #COMPTEUR_BOUCLE </center></td> <td>'; <BOUCLE_amap_famille_1(amap_famille_variete){id_produit=#ID_PRODUIT}
{id_famille=#ID_FAMILLE}> $texte .= '#LABEL_FAMILLE'; </BOUCLE_amap_famille_1> $texte .= '</td> <td> '; <BOUCLE_amap_variete_1(amap_variete){id_variete=#ID_VARIETE}
{id_famille=#ID_FAMILLE}> $texte .= '#LABEL_VARIETE'; </BOUCLE_amap_variete_1> $texte .= '</td> <td> #QUANTITE </td> <td> #POIDS </td> </tr>'; </BOUCLE_amap_panier_1> $texte .= '</table>'; </BOUCLE_amap_produit_1> </BOUCLE_amap_produit_distribution_1> </BOUCLE_amap_saison_1> </BOUCLE_agenda_distribution_1> </BOUCLE_mot_amap_1> <BOUCLE_mot_amap_2 (ARTICLES) {id_article}{titre_mot=amap_contrat}{0,1}> <BOUCLE_agenda_contrat_2(EVENEMENTS){id_evenement=#ENV{id_evenement}}> $texte .= '<p>Pour la distribution du <strong>[(#DATE_DEBUT|affdate)]</strong> de la saison <strong>#ID_SAISON</strong>, '; <BOUCLE_amap_produit_2(amap_produit){id_produit=#ENV{id_produit}}> $texte .= 'les contrats <strong>#LABEL_PRODUIT</strong> sont :</p>'; </BOUCLE_amap_produit_2> $texte .= '<table width="750" cellpadding="5" border="1" rules="all"> <tr> <td align="center" width="130"><strong>d&eacute;but contrat</strong></td> <td align="center" width="70"><strong>1/2 panier</strong></td> Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 page 18 / 19
<td align="center" width="225"><strong>personne</strong></td> <td align="center" width="225"><strong>remplacant</strong></td> <td align="center" width="50"><strong>pass&eacute;</strong></td> </tr>'; <BOUCLE_liste_evenements_2(EVENEMENTS){date_debut<=#DATE_DEBUT}> <BOUCLE_amap_contrat_2(amap_contrat){debut_contrat=#ID_EVENEMENT}
{id_saison=#ENV{id_saison}}{id_produit=#ENV{id_produit}}> $texte .= '<tr> <td align="center">[(#DATE_DEBUT|affdate)]</td> <td align="center">[(#DEMI_PANIER|=={1}|?{oui,})]</td> <td align="center">'; <BOUCLE_amap_personne_21(amap_personne){id_personne=#ID_PERSONNE}> $texte .= '#PRENOM #NOM ([(#FIXE||?{[(#PORTABLE||?{#FIXE­
#PORTABLE,#FIXE})],#PORTABLE})])'; </BOUCLE_amap_personne_21> $texte .= ' </td> <td align="center">'; <BOUCLE_amap_vacance_2(amap_vacance){id_contrat=#ID_CONTRAT}
{id_evenement=#ENV{id_evenement}}> <BOUCLE_amap_personne_22(amap_personne){id_personne=#ID_REMPLACANT}> $texte .= ' #PRENOM #NOM ([(#FIXE||?{[(#PORTABLE||?{#FIXE­
#PORTABLE,#FIXE})],#PORTABLE})])'; </BOUCLE_amap_personne_22> $texte .= ' [(#REMPLACANT_EXT)]'; </BOUCLE_amap_vacance_2> $texte .= ' </td> <td>&nbsp;</td> </tr>'; </BOUCLE_amap_contrat_2> </BOUCLE_liste_evenements_2> $texte .= '</table>'; </BOUCLE_agenda_contrat_2> </BOUCLE_mot_amap_2> <BOUCLE_mot_amap_3 (ARTICLES) {id_article}{titre_mot=amap_sortie}{0,1}> <BOUCLE_amap_saison_3(amap_saison){id_sortie=#ID_ARTICLE}> $texte .= '<p><strong>Pour la saison #ID_SAISON</strong></p>'; <BOUCLE_amap_produit_3(amap_produit)> $texte .= '<p><strong>#LABEL_PRODUIT</strong>:</p> <table cellpadding="5" border="1" rules="all"> <tr> <td align="center">date de sortie</td> <td align="center">nom participant</td> </tr>'; <BOUCLE_amap_sortie_3(amap_sortie){id_produit=#ID_PRODUIT}{id_saison=#ID_SAISON}> <BOUCLE_amap_participation_3(amap_participation_sortie){id_sortie=#ID_SORTIE}> <BOUCLE_amap_personne_31(amap_personne){id_personne=#ID_PERSONNE}> $texte .= '<tr> <td align="center"> [(#DATE_SORTIE|affdate)] </td> <td align="center"> #PRENOM #NOM </td> </tr>'; </BOUCLE_amap_personne_31> </BOUCLE_amap_participation_3> </BOUCLE_amap_sortie_3> $texte .= '</table>'; </BOUCLE_amap_produit_3> </BOUCLE_amap_saison_3> </BOUCLE_mot_amap_3> <BOUCLE_mot_amap_4 (ARTICLES) {id_article}{titre_mot=amap_responsable}{0,1}> <BOUCLE_amap_saison_4(amap_saison){id_responsable=#ID_ARTICLE}> $texte .= '<p>Les responsables de distributions pour la <strong>saison #ID_SAISON</strong> sont :<p> <table width="700" cellpadding="5" border="1" rules="all"> <tr> <td align="center"><strong>date</strong></td> <td align="center"><strong>personne 1</strong></td> <td align="center"><strong>personne 2</strong></td> <td align="center"><strong>personne 3</strong></td> </tr>'; <BOUCLE_amap_evenements_4(amap_evenements){id_saison}{date_evenement>=#DATE}{par date_evenement}> $texte .= ' <tr> <td align="center" width="120"> [(#DATE_EVENEMENT|affdate)] </td> Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
Manuel du plugin AMAP pour Spip v1.1 <td>'; <BOUCLE_amap_personne_41(amap_personne){id_personne=#ID_PERSONNE1}> $texte .= '#PRENOM #NOM'; </BOUCLE_amap_personne_41> $texte .= ' </td> <td>'; <BOUCLE_amap_personne_42(amap_personne){id_personne=#ID_PERSONNE2}> $texte .= '#PRENOM #NOM'; </BOUCLE_amap_personne_42> $texte .= ' </td> <td>'; <BOUCLE_amap_personne_43(amap_personne){id_personne=#ID_PERSONNE3}> $texte .= '#PRENOM #NOM'; </BOUCLE_amap_personne_43> $texte .= ' </td> </tr>'; </BOUCLE_amap_evenements_4> $texte .= '</table>'; </BOUCLE_amap_saison_4> </BOUCLE_mot_amap_4> <BOUCLE_mot_amap_5 (ARTICLES) {id_article}{titre_mot=amap_vacance}{0,1}> <BOUCLE_amap_saison_5(amap_saison){id_vacance=#ID_ARTICLE}> $texte .= ' <p>pour la <strong>saison #ID_SAISON</strong></p>'; <BOUCLE_amap_produit_5(amap_produit)> $texte .= ' <p><strong>#LABEL_PRODUIT</strong></p> <table cellpadding="5" border="1" rules="all"> <tr> <td align="center"><strong>date</strong></td> <td align="center"><strong>nom contrat</strong></td> <td align="center"><strong>nom remplacant</strong></td> </tr>'; <BOUCLE_amap_evenements_5(amap_evenements){id_saison=#ID_SAISON}
{date_evenement>=#DATE}{par date_evenement}> <BOUCLE_amap_vacance_5(amap_vacance){id_evenement=#ID_EVENEMENT}> $texte .= ' <tr>'; <BOUCLE_amap_contrat_5(amap_contrat){id_contrat=#ID_CONTRAT}
{id_produit=#ID_PRODUIT}{id_saison=#ID_SAISON}> $texte .= ' <td align="center">[(#DATE_EVENEMENT|affdate)]</td>'; <BOUCLE_amap_personne_51(amap_personne){id_personne=#ID_PERSONNE}> $texte .= ' <td align="center">#PRENOM #NOM</td>'; </BOUCLE_amap_personne_51> <BOUCLE_amap_personne_52(amap_personne){id_personne=#ID_REMPLACANT}> $texte .= ' <td align="center">#PRENOM #NOM</td>'; </BOUCLE_amap_personne_52> $texte .= ' [<td align="center">(#REMPLACANT_EXT)</td>]'; </BOUCLE_amap_contrat_5> $texte .= ' </tr>'; </BOUCLE_amap_vacance_5> </BOUCLE_amap_evenements_5> $texte .= ' </table>'; </BOUCLE_amap_produit_5> </BOUCLE_amap_saison_5> </BOUCLE_mot_amap_5>
Copyright stéphane Moulinet / dadaprod 2008, licence GNU/LINUX
page 19 / 19