PloneFormGen

Présentation de PloneFormGen

Qu’est ce que PloneFormGen ?

PloneFormGen est un produit permettant la création en ligne de formulaire pour Plone.

On trouvera de la documentation sur http://plone.org/products/ploneformgen/documentation

Qu’est-ce que l’on peut faire avec PloneFormGen ?

Outre la création à travers le web des formulaires, on pourra stocker les informations qui y seront saisies en vue de les réutiliser et de les exporter au format csv.

De plus la possibilité de créer des adaptateurs appelant des scripts Python en fin de saisie permettent par exemple de créer des instances de n’importe quel type de contenu et de les remplir à partir des informations préalablement saisies.

Installation de PloneFormGen

Pour installer PloneFormGen le plus simple est de l’ajouter à son buildout.

Si vous ne savez pas ce qu’est un buildout vous pouvez lire le chapitre Introduction à zc.buildout et Création d’un buildout Plone avec ZopeSkel.

Pour cela ajouter Products.PloneFormGen à la section egg de la partie instance :

[instance]
# ...
eggs =
    # ...
    Products.PloneFormGen

Refaites votre buildout, démarrez, puis ajoutez le produit.

Création d’un formulaire

La création d’un formulaire commence par la création d’un Formulaire dans la liste Ajout d’un élément.

Vous obtenez alors :

../_images/AjouterFormulairePersonnalise.jpg

Ajout d’un formulaire personnalisé.

Le formulaire est un répertoire qui permet de définir votre formulaire et qui contiendra les éléments qui vont le constituer.

Remarquez également la barre des propriétés qui va permettre d’accéder à la définition du comportement du formulaire (onglet Overrides).

Saisissez un titre et une description.

Vous pouvez changer le nom des boutons de soumission ou d’annulation.

Par défaut le comportement d’un formulaire personnalisé est d’envoyer un mail avec les informations saisies par les utilisateurs. Ce comportement est réalisé par un “adaptateur d’action” nommé “Gestionnaire de mél”. Par la suite nous verrons comment remplacer cet adaptateur par celui que nous aurons créé.

Vous pourrez aussi définir une page de remerciement qui viendra remplacer celle par défaut qui se contente d’afficher les valeurs saisies dans le formulaire.

Pour des raisons de confidentialité vous pourrez forcer la saisie des informations via une connexion chiffrée à condition d’avoir configuré votre serveur pour qu’il gère le ssl et donc d’avoir un certificat X509.

Vous pouvez ensuite saisir le prologue et l’épilogue du formulaire.

Enregistrez.

Vous êtes alors redirigé vers votre formulaire qui affiche le titre, la description, le prologue, les champs de saisie “Votre adresse mél”, “Sujet”, et “Commentaires”, le bouton “Envoyer” et pour finir votre épilogue.

../_images/VueFormulaireParDefaut.jpg

Vue d’un formulaire.

Nous verrons comment ajouter d’autres champs et supprimer ceux existants par défaut.

Si vous avez correctement configuré le mailhost de votre instance Plone, le résultat des formulaires sera envoyé par mél à destination du contact “Adresse d’expéditeur des courriels pour le site” (modifiable en cliquant sur Configuration du site puis Envoi de courriels).

Après avoir appuyé sur Envoyer l’utilisateur est redirigé sur la page de remerciement qui récapitule les valeurs entrées.

Les différents composants d’un formulaire

Cliquez sur l’onglet édition de votre formulaire puis cliquez sur l’onglet Overrides des propriétés.

../_images/OngletDeProprietes.jpg

Onglets d’accès aux propriétés d’un formulaire

Vous accédez alors à la page suivante :

../_images/ProprieteOverrides.jpg

Paramétrage du comportement d’un formulaire

Le champ “Action de validation personnalisée” permet d’exécuter un script personnalisé qui sera appelé après l’action associée au formulaire (par défaut l’envoi de mél).

Le champ “Action personnalisée du formulaire” permet d’exécuter un script personnalisé en lieu et place de l’envoi de mél.

Le champ “Script de configuration du formulaire” permet d’exécuter un script avant l’affichage du formulaire pour par exemple remplir les champs avec des valeurs calculées.

Le champ “Script post-validation” permet d’exécuter un script ayant pour objectif de valider la cohérence des valeurs saisies les une vis-à-vis des autres ou vis à vis de données extérieures.

Le champ “Injection de contenu d’entête” permet de compléter la page html avec par exemple des liens vers des ressources css ou javascripts.

La case à cocher “CSRF Protection” permet d’éviter les liens html ou l’insertion de javascript lors de la saisie des valeurs du formulaire.

Plus d’informations sur l’overrides : http://plone.org/products/ploneformgen/documentation/tutorial/customizing-ploneformgen

Pour ajouter des champs ou des actions il suffit de cliquer sur l’un des types disponibles depuis le menu Ajout d’un élément.

../_images/AjoutDUnElement.jpg

Ajout d’un champ ou d’une action

Nous allons détailler les éléments de formulaire ci-après.

L’édition graphique et le placement se font après avoir cliqué sur l’onglet QuickEdit.

../_images/AccesVueParametrage.jpg

Icône d’accès à la vue de paramétrage

On obtient alors une vue ressemblant à :

../_images/ParametrageGraphique.jpg

Paramétrage des éléments du formulaire

Les colonnes “Delete” permettent de supprimer les composants, les colonnes “Edit” permettent d’éditer le composant désigné par la ligne où nous avons cliqué. La colonne “Order” permet par drag and drop de déplacer les champs pour en changer l’ordre alors que la colonne “Enable” permet d’activer ou non une action ou un page de remerciement.

Les différents types de champs

Champ de type Checkbox

L’ajout d’une checkbox permet de créer une checkbox.

../_images/CheckboxField.jpg

Formulaire de paramétrage d’un champ de type checkbox

Signification des champs :

  • Le label du champ correspond au nom du champ il doit être explicite,
  • l’aide doit permettre à l’utilisateur de savoir à quoi sert ce checkbox,
  • le champ obligatoire s’il est coché oblige l’utilisateur à se prononcer,
  • la valeur par défaut (cochée ou non)
  • la chaîne de caractères affichée si la checkbox est cochée,
  • la chaîne de caractères affichée si la checkbox n’est pas cochée.

Comme pour le formulaire les champs possèdent une propriété “Overrides”.

../_images/CheckboxFieldOverrides.jpg

Propriétés overrides des champs de type checkbox

“Expression par défaut” permet de remplir le champ à partir d’une expression TALES évaluée lors du rendu du formulaire, dans le cas du checkbox le résultat doit être “checked” ou la chaine vide “”.

“Validateur personnalisé” permet de saisir une expression TALES validant la saisie, attention généralement le test ne concerne que la valeur du champ et non la cohérence du formulaire qui est réalisé dans le test de post validation.

“Enabling Expression” permet de griser ou non le champ à l’affichage en fonction du résultat de l’expression TALES saisie.

Champ de type date et heure

L’ajout d’un champ date et heure permet de créer une zone de saisie année, mois, jour, heure, minute pouvant être saisie par calendrier.

La valeur par défaut est saisie sous la forme AAAA MM JJ HH mm où les séparateurs peuvent être ‘ ‘, ‘/’, ‘-‘, ‘.’.

Champ de type decimal Number

Il permet de créer des champs de saisie de nombre flottant.

Champ de type conteneur pour groupe de champs

Il permet de créer un dossier qui contiendra des champs et les groupera visuellement à l’écran.

Remarquer que l’édition des champs contenus par le groupe nécessite de passer par la vue Contenus.

Champ de type saisie multiple

Il permet de créer une zone de saisie de lignes de texte.

Les propriétés Overrides offre en plus un champ “Server-Side Variable” qui permet d’utiliser le contenu du champ pour passer des valeurs aux adaptateurs d’actions.

Champ de type sélection multiple

Overrides permet via le champ “Vocabulaire des options” de définir une expression TALES permettant de définir le dictionnaire.

Champ de type mot de passe

Lors de la saisie les lettres seront remplacés par des ‘*’.

Champ de type Rich Label Field

Ce champ permet de faire de la mise en forme.

Champ de type sélection

Overrides permet via le champ “Vocabulaire des options” de définir une expression TALES permettant de définir le dictionnaire.

Les adaptateurs pour scripts

Les adaptateurs de scripts permettent de réaliser des actions sous forme de code Python.

Certaines restrictions de sécurité sont présentes, il n’est donc pas possible d’importer toutes les bibliothèques du langages.

../_images/AdaptateurPourScript.jpg

Édition de l’adaptateur de script

Le champ “proxy role” permet d’exécuter le script avec le rôle Administrateur.

Le champ “corps du script” permet de saisir le code Python.

La propriété Overrides permet de définir une “Condition d’exécution” qui si elle n’est pas vérifiée empêche l’exécution du script.

Exemple d’adaptateur créant un document à partir des données saisies :

# Available parameters:
#  fields  = HTTP request form fields as key value pairs
#  request = The current HTTP request.
#            Access fields by request.form["myfieldname"]
#  ploneformgen = PloneFormGen object
#
# Return value is not processed -- unless you
# return a dictionary with contents. That's regarded
# as an error and will stop processing of actions
# and return the user to the form. Error dictionaries
# should be of the form {'field_id':'Error message'}

from Products.CMFCore.utils import getToolByName
portal = getToolByName(ploneformgen, 'portal_url').getPortalObject()
putils = getToolByName(ploneformgen, 'plone_utils')
title = fields['topic']
masaisie = fields['ma-saisie']
id=putils.normalizeString(title)
portal.invokeFactory('Document', id=id ,title=title,
                      text=u"\n".join(masaisie))
link=portal[id].absolute_url()
request.RESPONSE.redirect(link)

blog comments powered by Disqus