Le module Workflow-FormsToPDF
I) Description
Le module Workflow-FormsToPDF sert à l’export des réponses aux questionnaires du plugin Forms dans un template (ou modèle) créé par l’utilisateur. Les réponses sont exportables individuellement dans l’onglet de visualisation de la réponse.
II) Utilisation
1. Création d’un export avec le workflow formstopdf
Vous avez créé un formulaire avec au moins une question et vous avez vérifié que votre utilisateur a bien les droits nécessaires à l’utilisation des workflows.
a. Créer un nouveau workflow
Dans le menu sélectionner : system > gestion des workflows
Cliquer sur créer un workflow.
b. Créer une étape ou deux étapes
Si une seule étape est créée, il sera possible d’exporter la même réponse plusieurs fois. Si deux sont créées, une réponse sera exportable une seule fois.
c. Créer une action associée à votre étape
Cliquer sur « Ajouter une action ».
Dans la page modifier de l’action, sélectionner la tâche « Export d’un formulaire vers une édition pdf », cliquer sur l’icône « plus » pour ajouter.
Cliquer sur modifier le workflow.
d. Créer un nouveau Template
Dans modifier le workflow puis dans modifier la tâche, cliquer sur “Gérer les templates”.
Cliquer sur “Ajouter un template”.
Donner un nom au nouveau template et associer le template à un formulaire puis enregistrer.
Cliquer sur modifier le template nouvellement créé. Les questions et autres éléments associés au formulaire (Bookmark) sont maintenant affichés dans la section à droite de la page. Cliquer sur l’un des Bookmark pour le copier et coller dans le template en création. Le Bookmark sera remplacé par la donnée correspondante lors de la génération du PDF.
Enregistrer le template.
e. Associer le nouveau template au formulaire
Enregistrer le template avec le formulaire associé :
f. Activer le workflow
Dans le menu sélectionner : system > gestion des workflows. Activer le workflow.
g. Associer le Workflow au formulaire
Dans la page de modification du formulaire associer le workflow au formulaire.
h. Exporter une réponse au format PDF
Il est maintenant possible d’exporter les réponses du formulaire selon le Template créé. Aller dans la page visualisation des réponses et cliquer sur une réponse.
Cliquer sur l’action qui a été nommée précédemment.
i. Télécharger le PDF
Dans Système > Mes demandes de fichiers.
Cliquer sur télécharger.
III) Personnaliser l’affichage des types de questions (entrytype)
Le plugin Form propose différents types de questions : date, texte, image, fichier, etc. Pour adapter l’affichage des réponses selon leur type (Entrytype), le module workflow-formstopdf utilise des macros Freemarker (liens wiki macro). Dans le code source du module, il y a une macro dont le rôle est d’appeler la macro qui correspond à l’Entrytype de la question. Cette macro se trouve ici :
lutece-wf-module-workflow-formstopdf/webapp/WEB-INF/templates/admin/plugins/workflow/modules/formspdf/display_entries/displayEntry.ftl
<#macro displayEntry q>
<#if q??>
<#assign entry=q.question.entry>
<#assign list_responses=q.getEntryResponse()>
<#if entry.entryType.beanName == "forms.entryTypeArray">
<@displayEntryTypeArray entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeAutomaticFileReading">
<@displayEntryTypeAutoFileReading entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeCamera">
<@displayEntryTypeCamera entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeCartography">
<@displayEntryTypeCartography entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeCheckbox">
<@displayEntryTypeCheckbox entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeComment">
<@displayEntryTypeComment entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeDate">
<@displayEntryTypeDate entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeFile">
<@displayEntryTypeFile entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeGalleryImage">
<@displayEntryTypeGalleryImage entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeGeolocation">
<@displayEntryTypeGeolocation entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeImage">
<@displayEntryTypeImage entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeMyLuteceUser">
<@displayEntryTypeMyLuteceUser entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeNumber">
<@displayEntryTypeNumber entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeNumbering">
<@displayEntryTypeNumbering entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeRadioButton">
<@displayEntryTypeRadioButton entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeSelect">
<@displayEntryTypeSelect entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeSelectOrder">
<@displayEntryTypeSelectOrder entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeTelephoneNumber">
<@displayEntryTypeTelephoneNumber entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeTermsOfService">
<@displayEntryTypeTermsOfService entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeText">
<@displayEntryTypeText entry=entry list_responses=list_responses />
<#elseif entry.entryType.beanName == "forms.entryTypeTextArea">
<@displayEntryTypeTextArea entry=entry list_responses=list_responses />
<#else>
<@displayEntryTypeText entry=entry list_responses=list_responses />
</#if>
</#if>
</#macro>
Cette macro de redirection prend un paramètre q qui correspond à la valeur de la réponse contenue dans position_X. Pour l’appeler selon la syntaxe choisie :
<#@displayEntry q=position_7/>
ou
[@displayEntry q=position_7/]
Le Bookmark d’une question est en fait un appel à la macro de redirection.
Configuration de la syntaxe des Macros Freemarker
Les balises Freemarker sont habituellement définies de façon similaire à celles de l’HTML avec < et >. Par exemple pour définir une macro : <#macro maMacro arg1>. Et pour l’appeler : <@maMacro arg1= arg1>.
Cette syntaxe est incompatible avec l’utilisation du RichTextEditor qui reformatte les éléments afin de prévenir les bugs d’affichage et les attaques XSS. Par exemple : <@maMacro arg1= arg1> devient <@maMacro arg1= arg1>
Pour utiliser les Bookmarks de réponse (qui sont en fait des appels à des macros) avec le RTE, il faut modifier la syntaxe Freemarker.
Ajouter <#ftl> au tout début du template rend possible l’utilisation des macros Freemarker avec une syntaxe différente qui est compatible avec le RichTextEditor. Pour définir une macro : <#macro maMacro arg1 />. Pour appeler une macro : [@maMacro arg1= arg1/].
Le module ajoute et supprime l’entête <#ftl> automatiquement lors de la modification de l’option ci-dessous.
Sans le RTE, il est possible de configurer l’affichage d’une macro, car le RTE reformate le HTML. Il est aussi plus aisé de personnaliser une macro sans RTE avec la syntaxe en < >, car on peut alors copier et coller les macros d’affichage existantes que l’on souhaite modifier.
Exemple de personnalisation
À l’étape d’édition du template, nous devons sélectionner l’option sans Rich Text editor. Il faut récupérer la macro de l’Entrytype que l’on souhaite modifier dans le code source du module workflow-formstopdf. Ici, on repère la macro : DisplayEntryTypeText. On fait un copier/coller du contenu de la macro dans le formulaire du template.
On peut maintenant modifier la macro pour avoir l’affichage souhaité.
Dans cet exemple, la couleur et le style sont personnalisés.
En résultat, nous avons la réponse dont le style a été personnalisé.