You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2011-02-02 00:59:20

sarabanjina
Member
From: Belgium
Registered: 2008-12-13
Posts: 15

Détection des balises de fermeture dans les modèles de notifications

Bonsoir,

J'essaie de créer un modèle de notification assez complexe sous GLPI 0.78.2 permettant par exemple d'afficher le dernier suivi réalisé ainsi que l'historique complet des suivis.

J'utilise pour ce faire un modèle de ce type (sans le formatage HTML pour plus de lisibilité) :

##IFticket.action=Nouveau suivi pour ce ticket##
##FOREACH LAST followups##
Un nouveau suivi pour ce ticket a été ajouté par ##followup.author## : ##followup.description##
##ENDFOREACHfollowups##

Historique des suivis (##ticket.numberoffollowups##)

##FOREACHfollowups##
Le ##followup.date##, ##followup.author## a écrit:
##followup.description##
##ENDFOREACHfollowups##

Il semble que le code de détection des fins de balise soit de type "greedy" et capture le plus de lignes possibles : il détecte la fin de la première balise à la dernière ligne et n'interprète pas le deuxième FOREACH.

En rendant l'expression régulière "ungreedy" (je ne sais pas comment on traduit), tout fonctionne parfaitement :

--- inc/notificationtemplate.class.php.orig     2011-01-24 01:52:54.000000000 +0100
+++ inc/notificationtemplate.class.php  2011-01-24 02:20:21.000000000 +0100
@@ -267,7 +267,7 @@
                          $string, $out)) {
 
          foreach ($out[3] as $id => $tag_infos) {
-            $regex = "/".$out[0][$id]."(.*)##ENDFOREACH".$tag_infos."##/is";
+            $regex = "/".$out[0][$id]."(.*?)##ENDFOREACH".$tag_infos."##/is";
 
             if (preg_match($regex,$string,$tag_out)
                 && isset($data[$tag_infos])

Je ne vois pas de problème potentiel à cette modification qui cherchera la balise de fermeture la plus proche possible de celle d'ouverture (à moins d'avoir plusieurs FOREACH de même type imbriqués, ce qui n'a pas vraiment de sens).

Il semble que la détection du ENDIF soit déjà de type "Ungreedy" via le modifieur "/Uis".

Nicolas

Last edited by sarabanjina (2011-02-02 12:34:14)


GLPI 0.78.2 on Debian Etch 64 bits running on Xen 4.0

Offline

#2 2011-02-03 10:09:31

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Détection des balises de fermeture dans les modèles de notifications

Effectivement le /U du if rend ungreedy le check.
Je le rajoute pour le foreach.

Ticket ajouté et traité : https://forge.indepnet.net/issues/2628


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

Board footer

Powered by FluxBB