DokuWiki

It's better when it's simple

Outils pour utilisateurs

Outils du site


fr:plugin:bureaucracy

Extension Bureaucracy

Compatible avec DokuWiki

  • 2024-02-06 "Kaos" inconnu
  • 2023-04-04 "Jack Jackrum" inconnu
  • 2022-07-31 "Igor" inconnu
  • 2020-07-29 "Hogfather" oui

plugin Créez facilement des formulaires HTML pour collecter des données qui peuvent être envoyées par courrier électronique ou utilisées pour créer des pages.

Dernière mise à jour
2022-02-09
Fournit
Syntax, Action
Dépôt
Source
En conflit avec
bureaucracy-au, bureaucracyau, form

Cette extension ne se trouve ni dans la catégorie «plugin» ni dans la catégorie «template» et est par conséquent ignorée.

Similaire à bureaucracyau, conform, contact, contactmodern, form, openas

étiquettes : create, email, form, poll

Requis par calendoku, dirtylittlehelper, pagemod, qrcodescanner

L'extension Bureaucracy vous permet de créer des formulaires HTML à l'intérieur de DokuWiki. La validation du format d'entrée est gérée automatiquement par l'extension et ne nécessite aucun codage. L'entrée utilisateur peut être envoyée par courriel à une adresse pré-configurée ou utilisée pour créer de nouvelles pages à l'aide d'un modèle.

Téléchargement et installation

Télécharger et installer l'extension en utilisant le gestionnaire d'extensions ou en la téléchargeant à partir de l'URL au-dessus qui pointe vers la dernière version de l'extension. Veuillez vous référer à la page extensions sur la manière d'installer des extensions manuellement.

Journal des modifications

Extensions additionnelles recommandées

Vous pouvez utiliser sur un wiki ouvert l'extension CAPTCHA pour éviter le spam automatisé. Lorsque l'extension captcha est installée, Bureaucracy intègre automatiquement la vérification captcha dans la soumission de son formulaire.

L'extension SMTP peut vous aider lorsque votre DokuWiki ne peut pas envoyer de courriels.

Lorsque vous utilisez l'action de modèle Bureaucracy, vous pouvez ajouter dans le modèle un dataentry du plugin Data qui structure et stocke vos informations pour une bonne accessibilité, alors que le dataentry vous pouvez utiliser des espaces réservés de Bureaucracy pour placer des informations à partir du formulaire.

La récente extension Struct s'inspire pour beaucoup de l'extension Data et permet une gestion centralisée de la structure des données et des données recherchées tout en conservant la fonctionnalité de l'extension data. L'extension Struct supporte l'intégration avec l'extension Bureaucracy. Cela permet de réutiliser les mécanismes d'entrée des différents types dans les formulaires Bureaucracy et la création de données structurées lorsque les pages sont créées à l'aide de l'action de modèle Bureaucracy.

Actions additionnelles

Une extension supplémentaire à examiner est l'extension Pagemod qui ajoute une action pagemod à l'extension Bureaucracy pour ajouter des données à une page existante (en plus de la fonctionnalité actuelle de modèles et de courriel)

Champs additionnels

L'extension Data peut être utile dans les modèles comme mentionné précédemment, mais il fournit également un champ data_aliastextbox, qui vous permet de créer des champs avec des types et des alias de type de l'extension data. Certains de ces types ont une bonne disposition, par ex. Pagesuggestions ou liste en utilisant des options prédéfinies des alias de type. Voir par exemple.

Avec l'extension Struct, vous pouvez utiliser n'importe quel champ de n'importe quel schéma défini comme un champ dans un formulaire Bureaucracy. Mais vous pouvez également ajouter un schéma entier au formulaire.

Avertissement

Sans le CAPTCHA, cette extension ne devrait être utilisée que pour des wikis fermés car il pourrait facilement être utilisé comme passerelle de spam.

Usage

Commençons par un exemple:

A sample form with validation errors

<form>
Action mail me@example.com
Thanks "Thanks for submitting your valuable data."
Fieldset "A set of fields"
Textbox  "Employee Name" "=Your Name"
number "Your Age" >13 <99
email "Your E-Mail Address"
textbox "Occupation (optional)" !
password "Some password"

fieldset "even more fields"
select "Please select an option" "Peaches|Apples|Oranges"
static "Some static text that could be an agreement"
yesno "Read the agreement?"
textarea "Tell me about your self"
textbox "You need to write 'agree' here" /^agree$/
submit "Submit Query"
</form>

Comme vous pouvez le voir, vous pouvez définir une adresse électronique à laquelle les données doivent être envoyées et un texte de remerciement à indiquer lorsqu'un utilisateur a soumis le formulaire. Ce qui suit sont les différents champs à remplir.

Définition des champs

  • Les champs sont définis en donnant un type et un label.
    • Pour les boutons fieldset et submit, le label est optionnel.
  • Certains champs, comme le type select, nécessite un troisième paramètre.
  • Des contraintes supplémentaires peuvent être ajoutées après les options principales.
  • Les arguments doivent être protégés par des guillemets lorsqu'ils contiennent des espaces e.g. "S p a c e s"
  • Y compris un " en utilisant "" par exemple "Avec " "guillemets"" dans la chaîne"

L'extension se charge de valider le formulaire, les types de champs et les contraintes d'ensemble.

Champs

  • action
    • Le premier paramètre doit être une action prise en charge (voir plus bas).
      Actuellement sont supportés mail, template, script et pagemod ou Action struct_lookup (si cette extension respective est installée).
    • Paramètres supplémentaires pour le type mail:
      • une ou plusieurs adresses électroniques où envoyer les données (requis)
    • Paramètres supplémentaires pour le type template (modèle):
      • nom d'une page ou d'un espace de noms (:) à utiliser comme modèle ou un trait de soulignement unique _ pour essayer d'utiliser le modèle d'espace de noms cible (utiliser un chemin absolu) (requis)
      • namespace:préfixe ou espace de noms: (attention aux deux points :) où de nouvelles pages seront créées (facultatif)
      • séparateur à utiliser lors de la combinaison de plusieurs champs dans le nom de page (facultatif)
    • Paramètres additionnels pour le type script :
      • le nom du fichier script dans le répertoire conf/plugin/bureaucracy/
    • Plusieurs actions peuvent être définies en ajoutant un autre champ d'action
  • thanks
    • définit un texte à afficher lorsque le formulaire a été soumis. (facultatif)
  • fieldset
    • crée un nouvel ensemble de champs
    • le label est facultatif
    • peut être affiché/masqué en fonction de la valeur d'un autre champ au-dessus (voir plus bas)
      • la commutation dépend du champ donné comme second paramètre (facultatif)
      • l'ensemble de champs est affiché au fur et à mesure que ce champ est défini ou correspond exactement à la valeur donnée comme troisième paramètre (facultatif)
  • static
    • ajoute du texte statique au formulaire
  • wiki
    • similaire à statique, mais analyse l'entrée en tant que syntaxe Wiki
    • doit être utilisé avec parcimonie car il est coûteux en calcul
  • textbox
    • crée un champ de saisie simple ligne
    • nécessite un label
  • password
    • crée un champ de saisie de mot de passe de ligne unique
    • nécessite un label
  • email
    • crée un champ de saisie d'une ligne simple
    • nécessite un label
    • l'entrée est validée pour être une adresse courriel valide
    • l'argument @@ marque l'adresse courriel comme adresse de réponse à l'action du courriel
    • crée un champ de saisie simple ligne
    • nécessite un label
    • l'entrée est validée pour être numérique
    • peut être pré-rempli avec le nombre incrémenté automatiquement, voir exemple.
  • textarea
    • crée un champ de saisie multiligne
    • nécessite un label
    • pour changer la taille par défaut de 10 lignes à N lignes, utilisez l'argument xN (x23) (facultatif)
    • crée une case à cocher
    • nécessite un label
    • a besoin de valeurs par défaut pour yes et no (​ "=true value" "!false value" ). En cas d'utilisation pour un ensemble de champs (fieldset), les valeurs par défaut ne sont pas requises.
  • select
    • crée une liste déroulante
    • nécessite un label
    • a besoin d'un second argument contenant les options de sélection séparées par le caractère | (barre verticale)
      ( "Pêches | Pommes | Oranges" )
  • multiselect
    • permet de sélectionner plusieurs valeurs
    • nécessite un label
    • a besoin d'un second argument contenant les options de sélection séparées par le caractère | (barre verticale)
      ( "Pêches | Pommes | Oranges" )
    • exemple: multiselect “Label” “Opt1|Opt2|Opt3” =Opt1,Opt3
    • Dans le mode d'action Courriel: toutes les options seront jointes avec le caractère “, ” dans le message courriel.
    • Dans le mode d'action Modèle:
      • si le champ est marqué avec le caractère “@”, toutes les options sélectionnées seront jointes comme séparateurs de page
      • durant la substitution du modèle, toutes les options seront jointes avec le caractère “, ” ou vous pouvez fournir un séparateur optionnel : @@Label(separator)@@
  • radio
    • crée un ensemble de boutons radio
    • nécessite un label
    • a besoin d'un second argument contenant les options radio séparées par le caractère | (barre verticale)
      ("Pêches|Pommes|Oranges")
  • hidden
    • crée un champ invisible avec des données statiques
    • nécessite un label
    • a besoin d'un paramètre de valeur par défaut ( "=une certaine valeur"
  • hiddenautoinc
    • nécessite un label
    • crée un champ invisible avec un nombre qui s'incrémente de 1 sur chaque formulaire
  • submit
    • crée un bouton de soumission (obligatoire)
    • le label de bouton est facultatif
  • user / users
    • un utilisateur de DokuWiki ou une liste d'utilisateurs de DokuWiki
    • nécessite un label
    • fournit l’auto-complétion
  • date
    • une date au format AAAA-MM-JJ
    • nécessite un label
    • fournit un sélecteur de date
  • time
    • une heure dans le format (H)H:MM(: SS)
    • nécessite un label
  • usemailtemplate template_id
    • le contenu du <code html> .. </code> et <code text> .. </code> à la page du modèle est utilisé dans le courrier électronique de l'action de courriel, au lieu de la table par défaut avec les valeurs de champ.
    • template_id est un id de page absolu ou relatif. Si il est relatif, il est résolu par rapport à l'id de la page du formulaire
  • addpage page_tpl page_tgt
    • ajoute une autre page page_tgt basée sur une page de modèle page_tpl
    • uniquement pour l'utilisation de l'action de modèle
    • page_tpl est un id de page absolu ou relatif. Si il est relatif, il est résolu par rapport à la page du formulaire
    • page_tgt est relatif à la destination de la page créée par le champ d'action. Par exemple, action tente de créer new:destination, puis addpage essayera d'ajouter new:destination:page_tgt
    • lorsque dans le champ action un ! est donné comme modèle, ce modèle est ignoré et seuls les modèles ajoutés par addpage sont utilisés.
  • labels
    • le paramètre est une page wiki contenant une liste de traductions de labels
  • file
    • permet à l'utilisateur de sélectionner un fichier au téléversement (lequel est ajouté au média par l'action de modèle, ou ajouté comme fichier joint à l'action courriel)
    • nécessite un label
    • un paramètre additionnel optionnel permet de spécifier dans quel namespace (catégorie) le téléversement doit se faire. Les caractères . et .. peuvent être utilisés pour l'emplacement de la nouvelle page en chemin relatif. Par défaut : .
  • data_aliastextbox (extension nécessaire)
    • requiert l'extension Data pour afficher le champ (Voir l'exemple)
    • nécessite un label
    • un paramètre supplémentaire commence par le soulignement _ pour le type de champ, en utilisant la syntaxe de type dataplugin
      • datatypes avec un alias de type qui définit 'valeurs valides' apparaîtra comme un champ de sélection (multi)
      • sinon, il apparaît comme une boîte de texte habituelle, parfois avec des fonctionnalités ajoutées comme datepicker et pagesuggestions
  • struct_field + struct_fieldhidden (extension nécessaire)
  • struct_schema (extension nécessaire)

Contraintes et valeurs par défaut

  • commence avec un > suivi d'un nombre pour exiger une donnée numérique plus grande que le nombre donné
  • commence avec un < suivi d'un nombre pour exiger une donnée numérique plus petite que le nombre donné
  • commence avec un = pour paramétrer une valeur par défaut. Vous pouvez également utiliser des espaces réservés.
  • utilisez un simple caractère ! pour rendre le champ optionnel
  • utiliser un simple caractère ^ pour prioriser un champ (uniquement possible pour un seul champ par page)
  • utiliser un simple caractère @ pour que sa valeur soit utilisée pour le nom de page en mode modèle (la valeur sera ajoutée au nom de page, séparée par un trait de soulignement)
  • utiliser un simple caractère @@ pour marquer la valeur d'un champ comme Réponse à, comme envoi vers une adresse dans le mode courriel
  • utiliser un nombre de 0000 pour un champ numérique, pour compléter jusqu'à la même longueur avec des zéros les valeurs saisies
  • utilisez ++ pour un champ nombre pour incrémenter automatiquement le compteur sur chaque soumission de formulaire.
  • entourez une expression régulière avec le caractère / pour obliger le champ à correspondre à un motif de regex avant que la saisie ne soit acceptée (casse non sensible) Exemples (pour des informations supplémentaires voir en dessous):
    • /^[^\/:]+$/ bien pour les noms de page, les caractères / et : ne sont pas autorisés
    • /^[0-9 \/()+\-]+$/ utile pour les numéros de téléphone, autorise seulement les nombres et les caractères ()-+/
  • configure un message si l'expression régulière ne correspond pas au motif attendu en utilisant **Message. Exemple:
    • textbox "Votre nom de page" /^[^\/:]+$/ "**N'utilisez pas / ou : dans votre nom de page"
  • Seulement pour le champ de l'extension data: commence avec un _ pour définir des types d'alias.

Guide sommaire des expressions régulières

Une expression régulière est utilisée pour définir le motif d'un texte. Dans ces usages les plus simples (tels qu'utilisés ici), si le motif peut être trouvé, alors le texte est accepté. En cas d'échec, alors le texte est rejeté. Sous bureacracy, au moment où l'on clique sur le bouton soumettre, les boites de texte sont comparées à leurs expressions régulières. Si le test passe, alors la soumission continue, si le test échoue alors la soumission rejette le formulaire pour être corrigé.

La plus simple expression régulière est un simple caractère: /a/. Ceci indique que le texte d'entrée, (la chaîne) doit contenir quelque part en elle la lettre “a”. «Accès» passerait, comme le ferait la chaîne «sauvegarde», mais «Hello World» échouerait.

L'expression régulière peut contenir une suite de caractères: /abc/ qui demande que la chaîne “abc” soit trouvée quelque part. Apprend ton “abc” passe mais “a bc” échoue (car il y a un espace entre “a” et “b”).

Fréquemment, vous souhaitez sélectionner un caractère parmi des caractères. Les crochets permet de grouper un nombre d'alternatives ensemble: /[abc]/ signifie aussi bien que “a” ou “b” ou “c” doit apparaître quelque part dans la chaîne. Une étendue est également possible, [a-z] signifie n'importe quel caractère en minuscule compris entre “a” et “z”

Pour résumer, /rfc[0-9][0-9][0-9][0-9]/ cible n'importe quelle suite à 4 chiffres suivant rfc (pour “request for comments”) comme “rfc0248” ou “rfc4027”. Les éléments entre crochets sont appelés meta-caractères au sens où il ne représentent pas de vrais caractères (comme par exemple “a”) mais affectent la manière dont la chaîne sera interprétée. Il y a un certain nombre de méta-caractères dont les plus importants sont:

  • “^” correspond au début d'une chaîne.
  • “$” correspond à la fin d'une chaîne.
  • “*” signifie que le caractère précédent apparaîtra 0 ou plusieurs fois.
  • “+” signifie que le caractère précédent apparaîtra 1 ou plusieurs fois.
  • “\” signifie que le prochain caractère sera considéré comme un caractère ordinaire et non un méta-caractère.

Par exemple /^[yn]$/ signifie que la chaîne doit commencer par “y” ou “n” et n'ont aucun caractère suivant. “y” et “n” sont donc les seules chaînes possibles dans ce cas de figure. /^I[0-9]+$/ cherche la correspondance des routes inter Etats US: “I12”, “I66” et ainsi de suite. Parfois, ce qui peut prêter à confusion, “^” a un autre sens quand il apparaît juste après un crochet ouvrant car il est une négation du contenu. /[^ab]/ correspond à n'importe quel caractère autre que “a” ou “b”.

Regardons maintenant les exemples suivants. /^[^\/:]+$/ spécifie avec le méta-caractère (“^”)qu'on parle du commencement de la chaîne, le deuxième (“^”) après le crochet ouvert indique la négation et donc accepte tous les caractères autres que “/” or “:” (“[^\/:]”, notez que “\” est utilisé pour rendre la caractère “/” comme un slash normal), et le (“+”) signifie que ces caractères seront présents 1 ou plusieurs fois et enfin, “$” signifie la fin de chaîne. Dans ce cas, “/home/doc.txt” échouera car il y a des slash présents, “puzzled” est accepté.

Pour finir /^[0-9 \/()+\-]+$/. La chaîne complète consiste en un ou plusieurs caractères entre (“^” et “+$”). Ces caractères doivent être parmi ceux décrits entre (“[” et “]”), des nombres (“0-9”), espaces (“ ”), slash et parenthèses (“\/” et “()”), plus et moins(“+\-”).

Pour plus d'informations:

Noms de label externes

Par défaut, tous les labels donnés sont utilisés. Par exemple, ils sont affichés dans le formulaire et sont utilisés comme espaces réservés dans le mode du modèle. Dans certains cas, vous pourriez vouloir utiliser des mots simples pour les champs mais avoir des labels plus expressifs dans le formulaire.

Cela peut être accompli en définissant des traductions de label dans une page wiki séparée et en donnant la page dans le champ labels:

<form>
action mail me@example.com
labels mylabels

fieldset "field"
textbox  "name"
number   "age" >13 <99
submit   "submit"
</form>

La page de traduction nécessite une simple liste wiki avec des items nommés sous la forme label = traduction:

  * field  = Tell us about yourself"
  * name   = Your Name
  * age    = Your Age
  * submit = Send your Data

Le formulaire suivant résulterait de ce qui précède:

Dépendances avec les ensembles de champs (fieldsets)

Parfois, une partie d'un formulaire ne doit être active que lorsqu'une certaine réponse a été choisie pour une question précédente. Des dépendances simples comme celles-ci peuvent être créées à l'aide des ensembles de champs Fieldsets.

Prenons l'exemple suivant:

<form>
action    mail me@example.com

fieldset  "Your Order"
textbox   "Your Name"
select    "What do you want"  "Car|Blimp"

fieldset  "Car Parameters" "What do you want" "Car"
number    "Number of Wheels"
textbox   "Extras"

fieldset  "Blimp Parameters" "What do you want" "Blimp"
select    "Filling" "Helium|Hot Air"
number    "Size"

fieldset  "Payment"
yesno     "Can you pay right now?"

fieldset  "Details" "Can you pay right now?"
textbox   "Name"
number    "Amount"

fieldset  "Confirm Order"
submit "Submit Query"
</form>

Dans cet exemple, un utilisateur peut choisir de commander une voiture ou un dirigeable. Selon son choix, le second ou le troisième champ sera caché ou affiché en conséquence. Le second paramètre du champ fieldset fait référence à un champ précédemment défini et le troisième paramètre à la valeur que ce champ doit avoir pour afficher le fieldset. Seules les correspondances exactes sont prises en charge ici, il est donc préférable de combiner cette fonctionnalité avec un champ select comme indiqué ci-dessus.

Lorsque l'utilisateur marque la case du champ yesno dans le quatrième champ, le cinquième champ est affiché, de sorte que les détails corrects peuvent être notés. Ici il n'y a pas de troisième paramètre donné à la fieldset, donc il va vérifier si le champ référencé est défini. (Il ne cherchera pas les valeurs par défaut éventuellement définies par "=Value" "!Not Value" . Si vous avez besoin de la valeur du yesno dans un modèle, vous devez fournir les valeurs par défaut explicitement).

NOTE:

  • Apparemment, les dépendances ne fonctionnent pas lorsque le choix est fourni par “radio” (seulement “select” et “yesno” fonctionnent) pour une raison quelconque. Il y aurait peut-être une explication logique à cela.

Dépendances avec des ensembles de champs - création de deux niveaux de sélections

Comment utiliser les dépendances pour adapter une liste de sélection.

Premier niveau “select” list

select "Vehicule" "Car|Motorbike"

Second niveau “select” lists:

fieldset  "Car spareparts" "Vehicule" "Car"
select "Sparepart1" "4 wheels|steering wheel"

et

fieldset  "Motorbike spareparts" "Vehicule" "Motorbike"
select "Sparepart2" "3 wheels|handle bar"

Pour créer une seule destination aux deux arguments “Sparepart1” and “Sparepart2” utilisez le constructeur

@@Sparepart1|@@@@Sparepart2|@@

Celui choisi sera rempli et le non choisi sera remplacé par une chaîne vide "".

Champs pré-remplis depuis les liens

Parfois, vous pouvez faire un lien vers un formulaire de Bureaucracy et remplir au préalable un ou plusieurs champs. Cela peut être facilement réalisé en ajoutant des paramètres à votre lien en utilisant le motif @ d'enveloppe des noms de champ.

Imaginer le formulaire donné dans la section précédente est sur une page appelée orderform. Voici comment vous pouvez créer un lien vers un formulaire pour commander des dirigeables à air chaud:

[[orderform?@What do you want@=Blimp&@Filling@=Hot Air|Order a Hot Air Blimp!]]

Modes d'Action

Bureaucracy fait trois choses:

  1. il affiche une forme propre
  2. il valide l'entrée utilisateur
  3. il donne à l'utilisateur l'entrée d'un mode d'action

La dernière étape consiste à traiter les données. Quelle action doit être utilisée est définie dans le champ action comme décrit ci-dessus. Actuellement, trois modes sont pris en charge: mail, template et script. Des modes supplémentaires (par exemple pour stocker les données dans une base de données) peuvent facilement être ajoutés.

Mode d'action Courriel

C'est une action simple. Lorsqu'il est utilisé par défaut, tous les commentaires des utilisateurs seront envoyés par courrier électronique à l'adresse courriel configurée. Voir l'exemple pour savoir comment l'utiliser. Vous pouvez spécifier plusieurs adresses de destinataires séparées par des espaces.

Exemple d'automatisation du courrier électronique à une adresse que l'utilisateur entre:

Fieldset "Some Information"
Textbox "Employee Name"
email Email_Address
  
Action mail @@email_address@@
  • si vous ajoutez le champ usemailtemplate, vous pouvez définir un autre contenu pour le courrier électronique. Le modèle doit contenir deux blocs de code avec le texte et la version html du message. L'autre texte sur la page est ignoré. Dans le modèle, vous pouvez utiliser des espaces réservés.
  • avec le champ subject, vous pouvez remplacer le sujet par défaut
  • et en marquant les champs avec l'option @@, vous ajoutez des adresses de réponse (Reply-To) au courriel.

Exemple:

action mail @MAIL@ forename@surname.name 
usemailtemplate your:template
subject "new special subject"
your:template
====== Mail template page ======

<code html>
Dear @@Your Name@@,

You are <b>great<b>, you just <i>purchased</i> our @@What do you want@@!

We will deliver it fast as possible, see the 
<a href="http://example.com/conditions">conditions</a>.

Kind regards,
Future Machines company
</code>

<code text>
Dear @@Your Name@@,

You are great, you just purchased our @@What do you want@@!

We will deliver it fast as possible, see [1].

Kind regards,
Future Machines company

[1] http://example.com/conditions
</code>

Mode d'action Modèle

Cette action utilise des pages données en tant que modèle, remplace des espaces réservés définis par l'entrée utilisateur et crée des pages wiki. C'est un concept très puissant, mais un peu complexe.

La ligne d'action se présente comme suit:

action template [template] [destination] [separator]
  • template est
    • soit une simple page,
    • ou un espace de noms entier (finissant par :). Lorsqu'un espace de noms est donné, tous les sous-espaces de noms et les pages seront copiés dans la destination et les modèles de remplacement seront appliqués à toutes les pages.
    • Lorsque vous spécifiez un caractère de soulignement (_) en tant que nom de modèle, l'extension essaiera d'utiliser le modèle de catégories configuré de l'espace de noms de destination.
    • et ! ignore ce modèle, mais en nécessite au moins un par le biais du champ addpage
  • destination dit à Bureaucracy où créer la(es) nouvelle(s) page(s). Il s'agit habituellement d'un espace de noms (deux points). Pour plus de détails, reportez-vous à la section dessous
  • separator de nouveaux noms de page peuvent être créés en utilisant plusieurs valeurs de champ de formulaire. Ce caractère définit la façon dont ceux-ci doivent être concaténés (voir la méthode 1 de la section dessous)

Définition de la(es) destination(s)

Lorsque vous utilisez le mode modèle, vous devez définir où les pages résultantes doivent être créées. Il existe plusieurs façons de le faire.

Méthode 1 La méthode la plus simple consiste à spécifier un espace de noms de sortie et à marquer vos champs de nommage à l'aide du caractère @. Voici un exemple:

<form>
action   template userstpl users: :

fieldset "Create Your User Page"
select   "What's your Continent?" "Europe|N. America|S. America|Asia|Australia|Africa" @
textbox  "What's your Name?" @
textarea "Enter a short bio" !
submit
</form>

Cela va créer une nouvelle page en utilisant le continent et les champs de nom. Par exemple. Si je remplis “Europe” et “Andi” pour ces champs, la page résultante sera users:europe:andi.

Méthode 2 Parfois vous voulez un peu plus de contrôle sur le résultat de(s) nom(s) de pages. Cela peut être réalisé en utilisant des marqueurs de position dans le paramètre de destination et en omettant le marqueur @ dans les définitions de champ.

Les espaces réservés sont les noms de champs entourés par des caractères @@. De plus, tous les paramètres strftime peuvent être utilisés. Prenons un autre exemple:

<form>
action   template userstpl "users:%Y:@@What's your Name?@@:start"

fieldset "Create Your User Page"
select   "What's your Continent?" "Europe|N. America|S. America|Asia|Australia"
textbox  "What's your Name?"
textarea "Enter a short bio" !
yesno    "Do have publication?"

fieldset "Add your publications" "Do have publication?"
textarea "Publications:"
addpage   users:publicationtemplate publications

fieldset "Finish"
submit
</form>

Ce qui précède crée un espace de noms basé sur l'année en cours et mon nom puis crée une page d'accueil à l'intérieur: users:2012:andi:start

Méthode 3 Lorsque vous utilisez les dépendances avec les ensembles de champs (fieldsets), vous pouvez ajouter des pages supplémentaires lorsqu'un champ est affiché, mais sauter la page lorsque le champ est masqué. Cela peut être réalisé avec le champ spécial addpage.

Il suffit de le mettre dans le fieldset de la question:

addpage additionaltpl somepage

Le deuxième champ de l'exemple ci-dessus ajoute une page de publication, via une case à cocher. Ici, le modèle pour la page supplémentaire est situé en chemin absolu: users: publicationtemplate. Ce n'est que lorsque le champ yesno est coché que la page supplémentaire est créée sur users:2012:andy:start:publications

Création de modèles

Les modèles doivent contenir les mêmes champs que votre formulaire et d'autres espaces réservés sont également disponibles. Certains d'entre eux peuvent être utilisés comme valeurs par défaut des champs de formulaire:

Espace réservé (Placeholder) action
@@Field label@@
##Field label##
Sera remplacé par les valeurs réelles que l'utilisateur remplit dans
le formulaire.
@curNS(arg)@
@getNS(arg)@
@noNS(arg)@
@p_get_first_heading(arg)@
Sera remplacé avec le résultat de la fonction dokuwiki correspondante. arg peut être aussi bien une valeur statique comme @curNS(some:test:value)@ que l'espace réservé d'un champ, par exemple @p_get_first_heading(@@field@@)@.
@@Field label|Nice alternative@@ Pour un champ vide le texte Nice alternative est affiché
@NSBASE@ (seulement pour le mode action modèle) Espace de nom qui contient la nouvlle page.
eg. si la nouvelle page est foo:bar:baz:bang, @NSBASE@ contiendra baz
%Y %F %a %Y-%m-%d %s… etc strftime paramètres pour se référer à l'heure actuelle
%% Remplacé par le caractère % , nécessaire pour éviter les remplacements accidentels de temps dans votre modèle.
@DATE(<datetime>,%%Y-%%m-%%e)@
@DATE(<datetime>)@
Accepte différents formats datetime, qui sont produits dans le format\\demandé strftime. Sans format fourni, renvoie la date
avec le format du paramètre dformat.
@ID@ @USER@ @MAIL@ … etc Les motifs de remplacement de DokuWiki pour les modèles sont également disponibles
​@FORMPAGE_ID@ @FORMPAGE_NS@ @FORMPAGE_CURNS@​ … etc Fonctionne comme les les motifs de remplacement mais fait référence à la page contenant le formulaire
@YEAR@, @MONTH@, @DAY@, @TIME@, @TIMESEC@ Imprime l'actuel: année, mois, jour, heure comme hh:mm
et l'heure comme hh:mm:ss
@TABLEHTML@, @TABLETEXT@ (seulement le mode d'action courriel) tableau Html ou texte de toutes les valeurs de champ
<noinclude>…</noinclude> Les étiquettes et leur contenu sont enlevés
<​noreplace>​…</​noreplace> Le contenu entre <​noreplace>​…</​noreplace>​ est préservé sans réaliser aucun remplacement mais les étiquettes elles-mêmes sont enlevées.
@LANG@ Le code de langue tel qu'il est configuré
@TRANS@ Le code de langue obtenu depuis l'id d'une page du formulaire

Pour le userstpl de l'exemple ci-dessus, vous pourriez avoir la page suivante:

====== @@What's your Name?@@ ======

I'm living in @@What's your Continent?@@. I'm a user since %Y-%m-%d.

@@Enter a short bio|FIXME please fill in your biography@@

Le résultat ressemblera alors un peu à cela avec toutes les données d'utilisateur remplies:

====== Andreas Gohr ======

I'm living in Europe. I'm a user since 2007-12-23.

It's me :-)

Contrôle ACL et l'option runas

Par défaut, cette extension vérifiera les ACLs en mode modèle en utilisant les autorisations de l'utilisateur remplissant le formulaire. Cela signifie que l'utilisateur doit disposer au moins d'autorisations de lecture pour le modèle et de création pour l'espace de noms dans lequel la nouvelle page doit être enregistrée.

Cependant, parfois, vous souhaiterez peut-être donner aux utilisateurs anonymes un moyen de créer des pages dans un espace de noms restreint sans leur donner un accès direct. C'est là que l'option runas entre en jeu. Avec cette option, vous pouvez spécifier un nom d'utilisateur dans le gestionnaire de configuration. L'utilisateur que vous spécifiez ici sera toujours utilisé pour vérifier les autorisations mentionnées ci-dessus, quel que soit l'utilisateur remplissant le formulaire. De cette façon, vous pouvez spécifier l'accès nécessaire pour cet utilisateur virtuel particulier dans le gestionnaire de la liste des contrôles d'accès (ACL).

Remarque: l'utilisateur runas n'a pas besoin d'exister. En fait, il est recommandé d'utiliser un utilisateur non existant. Même lorsqu'il existe, les vérifications d'autorisation sont effectuées uniquement au niveau de l'utilisateur, les groupes de l'utilisateur sont ignorés.

Disponibilité des informations utilisateur(s)

En utilisant un champ user ou users, des données supplémentaires des utilisateurs sélectionnés peuvent être utilisés dans le modèle :

  • '@@user.name@@' sera remplacé par le nom complet de l'utilisateur
  • '@@user.mail@@' sera remplacé par l'adresse courriel de l'utilisateur
  • '@@user.grps@@' sera remplacé par le(s) groupe(s) de l'utilisateur séparé par une virgule
  • '@@user.grps(séparateur)@@' sera remplacé par le(s) groupe(s) de l'utilisateur séparé selon le 'séparateur' indiqué
  • '@@users(séparateur)@@' sera remplacé par la liste des identifiants utilisateurs, séparée selon le 'séparateur' indiqué
  • '@@users(séparateur).name' sera remplacé par la liste des noms complets d'utilisateurs, séparée selon le 'séparateur' indiqué
  • '@@users(séparateur).mail' sera remplacé par la liste des courriels des utilisateurs, séparée selon le 'séparateur' indiqué
  • le séparateur peut être ommis, dans ce cas la virgule est utilisée comme séparateur. Eg. @@users.mail@@, @@users.name@@
  • @@users.grps@@ n'est pas supporté

Le Mode Script

Cette action soumet les données à un script PHP fourni par l'administrateur. Le script peut alors faire ce qu'il veut avec les données.

Le script doit être placé dans le répertoire conf/plugin/bureaucracy/. Il doit contenir une classe ayant pour nom helper_plugin_bureaucracy_handler_scriptname et doit implémenter l'interface dokuwiki\plugin\bureaucracy\interfaces\bureaucracy_handler_interface.

Cela signifie que la classe doit avoir la méthode handleData($fields, $thanks) avec les champs et les messages thanks comme paramètres. Elle retourne le texte à afficher (thanks) en cas de succès ou false en cas d'erreur.

Exemple

Ceci est un simple gestionnaire par script qui imprimera les arguments du formulaire dans un journal de débogage.

<form>
action script example.php
textbox "Type something"
submit "Write to log"
</form>
conf/plugin/bureaucracy/example.php
<?php
use dokuwiki\plugin\bureaucracy\interfaces\bureaucracy_handler_interface;
 
class helper_plugin_bureaucracy_handler_example implements bureaucracy_handler_interface {
 
    /**
     * Log the form fields to DokuWiki's debug log
     */
    public function handleData($fields, $thanks)
    {
        dbglog($fields, __FILE__ . ': ' . __LINE__);
        dbglog($thanks, __FILE__ . ': ' . __LINE__);
 
        return $thanks;
    }
}

Exemples

Champ case à cocher

Un exemple de code pour le champ case à cocher (checkbox):

yesno     "Are you happy?" "=Yes sir" "!No sir"

yesno     "Show fieldset?"
fieldset  "Shown on checking the box" "Show fieldset?"
textbox   "Share your praise"
  • La case à cocher renvoie la valeur par défaut Yes sir en cochant le champ, et No sir en décochant. Le fait de ne pas appliquer de valeur par défaut n'entraîne aucune valeur de retour.
  • Lorsqu'un fieldset fait référence à un champ yesno, aucun troisième argument n'est nécessaire, mais vérifie si le yesno est défini. Aucune valeur par défaut n'est requise pour yesno où dépend le champ, à moins bien sûr que vous souhaitiez une valeur de retour à votre courrier ou modèle à partir de ce champ yesno.

Champ Nombre

number "One"
number "Two" ++
number "Third" >3 <40
hiddenautoinc "Four (notice: conflicts with Two)"
number "Fifth" 000
number "Sixth" ++ 000
  • Le premier champ Nombre accepte uniquement les nombres
  • Le deuxième champ Nombre rappelle le dernier nombre et l'incrémente de un, vous pouvez le changer
  • Troisième champ Nombre accepte n'importe quel nombre entre 3 et 40
  • Le quatrième champ Nombre est masqué et incrémenté chaque fois qu'un formulaire est enregistré. (À l'heure actuelle, ce champ est en conflit avec un champ number auto-incrémental.
  • Le cinquième champ Nombre renvoie des valeurs qui sont complétées par des zéros en tête. L'entrée de 23 sera renvoyée en 023
  • Le sixième champ est une combinaison du deuxième et du cinquième

Développement

Ajout d'un nouveau type de champ

Pour ajouter un nouveau type, vous devez implémenter une extension Helper héritant de helper_plugin_bureaucracy_field. Là, vous voudriez probablement remplacer la méthode renderfield() et probablement d'autres méthodes aussi. Votre champ sera automatiquement disponible en tant que type <plugin>_<composant>. Par exemple, lib/plugins/foo/helper/bang.php crée un nouveau type foo_bang.

Si vous avez besoin de plus de contrôle sur l'ajout d'un ou de plusieurs champs, vous pouvez implémenter une extension Action accrochée à PLUGIN_BUREAUCRACY_FIELD_UNKNOWN. Cet événement a seulement un événement BEFORE et fournit les données suivantes:

$data = array(
   'fields' => &array(), // les champs initialisés à ce jour - ajoutez le votre ici
   'args' => array() // la ligne tokenized, args [0] devrait être votre extension
);

Dans votre gestionnaire, vous devez vérifier que args[0] est le type de champ que vous souhaitez enregistrer. Si c'est le cas, vous devez appeler preventDefault() et ajouter vos propres champs au tableau de fields champs. Le champ ajouté doit être un descendant de helper_plugin_bureaucracy_field!

Ajouter une nouvelle action

Pour ajouter une nouvelle action, créez un nouvelle extension Helper héritant de helper_plugin_bureaucracy_action. Cela fonctionne de manière similaire à l'ajout d'un nouveau champ décrit ci-dessus.

Il y a également un événement que vous pouvez raccrocher appelé PLUGIN_BUREAUCRACY_ACTION_UNKNOWN. Encore une fois, il n'y a qu'un événement BEFORE évitable.

FIXME décrire les données passées en détail. Vérifiez maintenant la source.

Influencer le mode Modèle

L'enregistrement de la dernière page en mode modèle déclenche un événement appelé PLUGIN_BUREAUCRACY_TEMPLATE_SAVE. Dans le mode BEFORE, vous pouvez éviter d'enregistrer la page ou de modifier son contenu. Le mode AFTER de l'événement est déclenché après la création d'une page.

Données transmises:

$data = array(
  'patterns' => &array(), // list of PREG patterns to be replaced
  'values' => &array(), // values for the above patterns
  'id' => string, // ID of the page being written
  'template' => &string, // the loaded template text
  'form' => string, // the page the bureaucracy form was on
  'fields' => helper_plugin_bureaucracy_field[], // all the fields of the form
);

Relié au système de mails

L'événement PLUGIN_BUREAUCRACY_EMAIL_SEND permet aux développeurs d'autres plugins d'accéder aux données du formulaire soumis avant qu'il ne soit réellement envoyé dans actionmail.php.

Cela facilite l'insertion de champs personnalisés dans les e-mails de la bureaucratie.

Les données d'événement incluent les informations des champs de formulaire et toutes les valeurs, afin qu'elles puissent être traitées par des plugins tiers :

<code>
$evdata = [
    'fields' => $fields,
    'values' => &$this->values
];
</code>

Personnalisations

Important ! Voici quelques hacks - rien ne garantit qu'ils fonctionneront toujours et il ne survivront pas à une mise à jour.

En cas de casse, vous devrez recoller les morceaux :-)

Personnaliser le format Date

NOTE: Les paramètres de configuration pour la fonction PHP strftime dans /conf/dokuwiki.php ont aussi besoin d'être changés (peut aussi être changé via Administrer → Paramètres de Configuration)

$conf['dformat'] = '%d/%m/%Y %H:%M';

Pour changer le format date par défaut de yy-mm-dd à dd-mm-yy (e.g. pour la France)

Modifiez le format du sélecteur de date jQuery /plugins/bureaucracy/script/datepicker.js de:

/**
 * Init datepicker for all date fields
 */
 
jQuery(function(){
    jQuery('.bureaucracy__plugin .datepicker').datepicker({
        dateFormat: "yy-mm-dd",
        changeMonth: true,
        changeYear: true
    });
});

à ceci:

/**
 * Init datepicker for all date fields
 */
 
jQuery(function(){
    jQuery('.bureaucracy__plugin .datepicker').datepicker({
        dateFormat: "dd-mm-yy",
        changeMonth: true,
        changeYear: true
    });
});

Changer le message d'erreur de Bureaucracy dans /bureaucracy/lang/en/lang.php de:

$lang['e_date']          = '"%s" a besoin d'être une date valide dans le format yyyy-mm-dd.';

à ceci:

$lang['e_date']          = '"%s" a besoin d'être une date valide dans le format dd-mm-yyyy.';

Changer la date de validation de Bureaucracy dans /bureaucracy/helper/fielddate.php de:

     * Validate field input
     *
     * @throws Exception when empty or wrong date format
     */
    protected function _validate() {
        parent::_validate();
 
        $value = $this->getParam('value');
        if (!is_null($value) && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) {
            throw new Exception(sprintf($this->getLang('e_date'),hsc($this->getParam('display'))));
        }
    }
}

à ceci:

     * Validate field input
     *
     * @throws Exception when empty or wrong date format
     */
    protected function _validate() {
        parent::_validate();
 
        $value = $this->getParam('value');
        if (!is_null($value) && !preg_match('/^\d{2}-\d{2}-\d{4}$/', $value)) {
            throw new Exception(sprintf($this->getLang('e_date'),hsc($this->getParam('display'))));
        }
    }
}

Depuis la version du 2016-03-11 il est aussi nécessaire de changer ceci:

if(preg_match('/^(\d\d\d\d)-(\d\d?)-(\d\d?)$/', $value, $m)) {

à ceci:

if(preg_match('/^(\d\d?)-(\d\d?)-(\d\d\d\d)$/', $value, $m)) {

SFITCS 2016-11-26 01:16

Ces modifications sont réunies dans une nouvelle extension - Bureaucracy-AU​SFITCS ​2017-03-10 08:23

Personnaliser le message Merci

Pour autoriser l'insertion de code DokuWiki dans le champ Thankyou.

Changer la syntaxe dans bureaucracy/syntax.php de:

$thanks .= '<p>' . $thanks_string . '</p>';

à ceci:

$thanks .= p_render('xhtml',p_get_instructions($data['thanks']),$info);

Ce qui permet alors l'utilisation d'un lien vers la même page lors du traitement d'un formulaire Bureaucracy:

Thanks [[$examplepage|Continue]]

Si le formulaire crée un tableau éditable de l'extension data, le code wiki doit être protégé (entouré de “ ” cotations comme dans l'exemple ci-dessous) FIXME - traduction à revoir : If form creates a data plugin edit table the wiki code needs to….

Thanks "[[$page|Continue]]"

Mise en forme CSS

Bugs connus et demandes de fonctionnalités

Veuillez signaler les bugs et les demandes de fonctionnalités sur: Github bugtracker.

Crédits

Traduction: Digitalin - décembre 2016

fr/plugin/bureaucracy.txt · Dernière modification : 2022-02-09 03:35 de Nafpart

Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki