formcreator
formcreator copied to clipboard
validation de date par rapport à "maintenant" et un décalage
Y a t-il moyen de forcer qu'une date saisie soit inférieure ou supérieure de 'n' jours à la date du jour ? Comme cela, je n'ai pas vu hormis les regexp d'un champs texte... mais ?
Merci
Bonjour
Il n'y a pas de fonctionnalité pour cela. Utiliser des regex peut aider à fixer des bornes, mais je ne vois pas comment utiliser une regex pour faire une borne relative à l'instant présent.
OK Je pensais meme utiliser l'affichage du bouton soumettre que si saisie > date jour... mais apres cela fait entrer trop de possibilité... ou alors il faudrait "imaginer" une requete executable dynamique... un peu complexe
Merci bien
Il est possible d'améliorer le système de conditions pour gérer une forme simple d'expression de date. Pourquoi pas basée sur les expressions d'intervalle prises en charge par PHP:
https://www.php.net/manual/fr/dateinterval.createfromdatestring.php https://www.php.net/manual/fr/function.strtotime.php
La complexité de la fonctionnalité me parait très raisonnable.
Ce qui voudrait dire donc que si l'on souhaite tester une date (saisie) avec un délai (>ou<), il faudrait ajouter 2 champs : nbre et unité (Y, M, D ...)
Non, On peut utiliser la forme actuelle de conditions. Par exemple on écrirait "-1 day" dans la valeur de la condition, qui serait évalué à l'instant présent - 1 jour. L'instant présent est l'instant où la condition est évaluée. Cela arrive quand on modifie un champ du formulaire mais aussi quand il est soumis.
Si cela vous intéresse, vous pouvez prendre contact pour étudier de manière plus approfondie ce développement.
ok, je vois , en effet.
Peut etre connaissez vous le nom de la classe faisant ces tests ?
A mon avis cela serait inséré dans ce champs (entouré ) ?
Je pourrais regarder de mon coté et essayer de proposer quelque chose ?
Si vous voulez esssayer de réaliser cela vous devez savoir que la classe PluginFormcreatorCondition représente chaque ligne d'une expression de condition. La valeur est la colonne show_value
Pour les questions type date, datetime et time regardez les respectivement classes DateField DatetimeFieldet et TimeField . Elles sont toutes dans l'epace de nom GlpiPlugin\Formcreator\Field et contiennent des méthodes pour les comparaisons avec une valeur fournie en argument : equals() et lessThan(). A patir deces méthodes, les autres formes d'inégalités sont déduites automatiquement, il ne doit pas avoir besoin de les modifier.
Le développement devrait avoir lieu à partir de la branche develop pour une éventuelle inclusion en 2.13.0
Je suis désolé, j'ai regardé, j'ai bien trouvé pour la saisie en ligne 404 de inc\condition.class.php -> show_value, mais je ne vois pas comment et ou ajouter les tests :( : je ne connais pas suffisamment php
Pour une implémentation dans une question type datetime, je pense que l'intégralité du code doit être dans les méthodes equals() et greaterThan() (j'ai dit lessThan() tout à l'heure, c'était une erreur).
Il faut créer une méthode protégée qui prend une valeur type chaine et qui détermine si c'est une date ou un expression. Je pense que tenter de convertir la valeur avec DateTime::createFromFormat. ou son constructeur. Ca mérite un peu de réflexion pour trancher. La méthode retourne quelque chose qui dit si c'est une date ou un expression.
Dans equals() et greaterThan() il faut appeler cette nouvelle méthode pour ensuite opérer une comparaison selon 2 algorithmes différents : l'un traitant une simple date, l'autre traitant un intervalle.