Ignore:
Timestamp:
Jul 1, 2003, 11:27:20 AM (21 years ago)
Author:
z0rglub
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/vtemplate.class.php

    r2 r21  
    33 *                      VIRTUAL-TEMPLATE
    44 *
    5  * Version : 1.3.1 Base Edition ( Juillet 2002 ) build 6
     5 * Version : 1.3.2 Base Edition ( Decembre 2003 ) build 1
    66 *
    77 * Address : http://vtemplate.sourceforge.net
    88 *
    99 * Authors:
    10  *   + THIEBAUT Jean-Baptiste(J.Baptiste@leweby.com) - http://www.leweby.com .
     10 *   + THIEBAUT Jean-Baptiste(J.Baptiste@leweby.com)  - http://www.leweby.com .
    1111 *   + CAMPANA François (fc@netouaibe.com).
    1212 * Licence: GPL.
     13 *
     14 *
    1315 *
    14  *
     16 *                       
    1517 *****************************************************************/
    1618
    17 if ( !isset($DEFINE_VTEMPLATE) )
    18 {
    19   define("ALL",1);
    20   define("VARTAG","{#"); // Tag d'ouverture des variables :
    21                          //  vous pouvez changer ce paramètre.
    22   define("VTEMPLATE_VERSION","1.3.1");
    23   define("VTEMPLATE_TYPE","BA");
    24   define("VTEMPLATE_BUILD","6");
    25  
    26  
    27   class Err
    28     {
    29       var $msg;
    30       var $titre;
    31      
    32       function error( $errno, $arg = "", $code = 0, $disp = 0 )
    33         {
     19if ( !isset($DEFINE_VTEMPLATE) ){
     20define("ALL",1);
     21define("VARTAG","{#"); // Tag d'ouverture des variables : vous pouvez changer ce paramètre.
     22define("VTEMPLATE_VERSION","1.3.1");
     23define("VTEMPLATE_TYPE","BA");
     24define("VTEMPLATE_BUILD","6");
     25
     26
     27class Err {
     28var $msg;
     29var $titre;
     30
     31function error($errno,$arg="",$code=0,$disp=0){
    3432// Gestion des erreurs
    35           switch($errno)
    36           {
    37           case 1:
    38             $this->titre="Erreur de session n° $code";
    39             $this->msg = "La zone $arg est déjà ouverte.Avant d'ajouter une session sur cette zone, vous devez la fermer à l'aide de la fonction closeSession().<br>"   ;
    40             break;
    41           case 2:
    42             $this->titre="Erreur de session n° $code";
    43             $this->msg = "Vous tentez de fermer une session de la zone $arg alors qu'aucune session pour cette zone n'existe.Pour ouvrir une session, utilisez la fonction addSession().<br>";
    44             break;
    45           case 3:
    46             $this->titre="Erreur de session n° $code";
    47             $var = $arg[1];
    48             $zone = $arg[0];
    49             $this->msg = "Vous essayez de valoriser la variable $var sans avoir créer de session de la zone $zone.Utilisez la fonction addSession() pour créer une session, puis setVar pour valoriser une variable.<br>";
    50             break;
    51           case 4:
    52             $this->titre="Erreur de session n° $code";
    53             $var = $arg[1];
    54             $zone = $arg[0];
    55             $this->msg = "La variable $var que vous souhaitez valoriser n'existe pas dans la zone $zone.<br>";
    56             break;
    57           case 5:
    58             $this->titre="Erreur de parsing n° $code";
    59             $this->msg = "Vous utilisez des caractère non autorisés pour déclarer vos zones.Vous pouvez utiliser tous les caractères à l'exception de \'{\' , \'#\' \'}\' et \'|\'.<br>";
    60           break;
    61         case 6:
    62           $this->titre="Erreur de parsing n° $code";
    63           $this->msg = "Vous ne pouvez pas utiliser le même nom ($arg)de zone plusieurs fois.<br>";
    64           break;
    65         case 7:
    66           $this->titre="Erreur de parsing n° $code";
    67           $this->msg = "Vous avez oublié de fermer la zone $arg.<br>";
    68           break;
    69         case 8:
    70           $this->titre="Erreur de traitement n° $code";
    71           $this->msg = "Le fichier template $arg est introuvable.<br>";
    72           break;
    73         case 9:
    74           $this->titre="Erreur de traitement n° $code";
    75           $this->msg = "Impossible d'ouvrir le fichier $arg.Vérifiez les droits de ce fichier.<br>";
    76           break;
    77         case 10:
    78           $this->titre="Erreur de traitement n° $code";
    79           $this->msg = "Impossible de lire le fichier template $arg.<br>";     
    80           break;
    81         case 11:
    82           $this->titre="Erreur de traitement n° $code";
    83           $this->msg = "La zone $arg est introuvable.Vérifiez la syntaxe de cette zone.<br>";
    84           break;
    85         case 12: 
    86           $this->titre="Erreur de traitement n° $code";
    87           $this->msg = "La variable $arg est introuvable .Vérifiez la syntaxe de la variable.<br>";     
    88           break;
    89         case 13:
    90           $this->titre="Erreur de traitement n° $code";
    91           $this->msg = "L'identifiant de fichier spécifié n'existe pas.Vérifiez les fonctions Open() de votre script.<br>";
    92           break; 
    93         case 14:
    94           $this->titre="Erreur de traitement n° $code";
    95           $var = $arg[1];
    96           $file = $arg[0];
    97           $this->msg = "La variable $var dans le fichier $file est introuvable.Vérifiez la syntaxe de la variable.<br>";       
    98           break; 
    99         case 15:
    100           $this->titre="Erreur de traitement n° $code";
    101           $var = $arg[2];
    102           $zone = $arg[1];
    103           $fichier = $arg[0];
    104           $this->msg = "La variable $var dans la zone $zone du fichier $fichier est introuvable.Vérifiez la syntaxe de la variable et du nom de la zone.<br>"; 
    105           break;
    106         default:
    107           $this->titre = "Erreur inconnue $code";       
    108           $this->msg = "Veuillez le rapporter aux auteurs de la classe.";
    109         }
    110         $this->titre .= ": <br>";
    111         if ($disp){
    112           $web = "Pour plus d'informations, consultez la <a href=\"http://www.virtual-solution.net/vtemplate/docs/debug-mod.php?version=".VTEMPLATE_VERSION."&build=".VTEMPLATE_BUILD."&type=".VTEMPLATE_TYPE."&error=$code\" target=\"_blank\">doc en ligne</a>";
    113           echo "<font face=verdana size=2 color=red><u>$this->titre</u><i>$this->msg</i>$web<br><br></font>";
    114         }
    115         return -1;
    116       }
     33switch($errno){
     34  case 1:
     35    $this->titre="Erreur de session n° $code";
     36    $this->msg = "La zone $arg est déjà ouverte.Avant d'ajouter une session sur cette zone, vous devez la fermer à l'aide de la fonction closeSession().<br>"   ;
     37  break;
     38  case 2:
     39    $this->titre="Erreur de session n° $code";
     40    $this->msg = "Vous tentez de fermer une session de la zone $arg alors qu'aucune session pour cette zone n'existe.Pour ouvrir une session, utilisez la fonction addSession().<br>";
     41  break;
     42  case 3:
     43    $this->titre="Erreur de session n° $code";
     44        $var = $arg[1];
     45        $zone = $arg[0];
     46    $this->msg = "Vous essayez de valoriser la variable $var sans avoir créer de session de la zone $zone.Utilisez la fonction addSession() pour créer une session, puis setVar pour valoriser une variable.<br>";
     47  break;
     48  case 4:
     49    $this->titre="Erreur de session n° $code";
     50        $var = $arg[1];
     51        $zone = $arg[0];
     52    $this->msg = "La variable $var que vous souhaitez valoriser n'existe pas dans la zone $zone.<br>";
     53  break;
     54  case 5:
     55    $this->titre="Erreur de parsing n° $code";
     56    $this->msg = "Vous utilisez des caractère non autorisés pour déclarer vos zones.Vous pouvez utiliser tous les caractères à l'exception de \'{\' , \'#\' \'}\' et \'|\'.<br>";
     57  break;
     58  case 6:
     59    $this->titre="Erreur de parsing n° $code";
     60    $this->msg = "Vous ne pouvez pas utiliser le même nom ($arg)de zone plusieurs fois.<br>";
     61  break;
     62  case 7:
     63    $this->titre="Erreur de parsing n° $code";
     64    $this->msg = "Vous avez oublié de fermer la zone $arg.<br>";
     65  break;
     66  case 8:
     67    $this->titre="Erreur de traitement n° $code";
     68    $this->msg = "Le fichier template $arg est introuvable.<br>";
     69  break;
     70  case 9:
     71    $this->titre="Erreur de traitement n° $code";
     72    $this->msg = "Impossible d'ouvrir le fichier $arg.Vérifiez les droits de ce fichier.<br>";
     73  break;
     74  case 10:
     75    $this->titre="Erreur de traitement n° $code";
     76    $this->msg = "Impossible de lire le fichier template $arg.<br>";   
     77  break;
     78  case 11:
     79    $this->titre="Erreur de traitement n° $code";
     80    $this->msg = "La zone $arg est introuvable.Vérifiez la syntaxe de cette zone.<br>";
     81  break;
     82  case 12: 
     83    $this->titre="Erreur de traitement n° $code";
     84    $this->msg = "La variable $arg est introuvable .Vérifiez la syntaxe de la variable.<br>";   
     85  break;
     86  case 13:
     87    $this->titre="Erreur de traitement n° $code";
     88    $this->msg = "L'identifiant de fichier spécifié n'existe pas.Vérifiez les fonctions Open() de votre script.<br>";
     89  break; 
     90  case 14:
     91    $this->titre="Erreur de traitement n° $code";
     92        $var = $arg[1];
     93        $file = $arg[0];
     94    $this->msg = "La variable $var dans le fichier $file est introuvable.Vérifiez la syntaxe de la variable.<br>";     
     95  break; 
     96  case 15:
     97    $this->titre="Erreur de traitement n° $code";
     98        $var = $arg[2];
     99        $zone = $arg[1];
     100        $fichier = $arg[0];
     101    $this->msg = "La variable $var dans la zone $zone du fichier $fichier est introuvable.Vérifiez la syntaxe de la variable et du nom de la zone.<br>";       
     102  break;
     103  default:
     104         $this->titre = "Erreur inconnue $code";         
     105     $this->msg = "Veuillez le rapporter aux auteurs de la classe.";
     106}
     107$this->titre .= ": <br>";
     108if ($disp){
     109        $web = "Pour plus d'informations, consultez la <a href=\"http://www.virtual-solution.net/vtemplate/docs/debug-mod.php?version=".VTEMPLATE_VERSION."&build=".VTEMPLATE_BUILD."&type=".VTEMPLATE_TYPE."&error=$code\" target=\"_blank\">doc en ligne</a>";
     110        echo "<font face=verdana size=2 color=red><u>$this->titre</u><i>$this->msg</i>$web<br><br></font>";
     111}
     112return -1;
     113}
    117114// Fin classe
     115}
     116
     117class Session extends err{
     118
     119var $name;              // Name of the session
     120var $globalvar = array();  // List of global variable of the session
     121var $varlist = array();  // List of var in this session
     122var $subzone = array(); // list of sub-zone
     123var $temp; // Generated code for the current session
     124var $generated = NULL; // The final code
     125var $source; // Source code
     126var $used=0; // Indicates if the session contain used variable
     127var $stored; // Give the filename were is stored the session
     128
     129function Session($name,$source,$stored){
     130 $this->name = $name;
     131 $this->source = $source;
     132 $this->stored = $stored;
     133 $this->parseVar();
     134}
     135
     136function parseVar(){
     137 // Récupération des noms des variables
     138 $regle = "|".VARTAG."(.*)}|sU";
     139 preg_match_all ($regle,$this->source,$var1);
     140 // Création du tableau de variable  à partir de la liste parsée.
     141 $this->varlist=@array_merge($var[1],$var1[1]);
     142return 1;
     143}
     144
     145function init(){
     146if($this->used) return $this->error(1,array($this->stored,$this->name),"SESSION1",1);
     147// Reset generated code
     148$this->temp = $this->source;
     149$this->used = 1;
     150}
     151function closeSession(){
     152// Check if the zone has been used.   
     153if(!$this->used) return $this->error(2,array($this->stored,$this->name),"SESSION2",1);
     154// Set Globals vars.
     155$this->generateCode();
     156$this->used=0;
     157return 1;
     158}
     159
     160function reset(){
     161$this->used = 0;
     162$this->generated = NULL;
     163return 1;
     164}
     165
     166function addSubZone(&$subzone){
     167$this->subzone[$subzone->name] = &$subzone;
     168return 1;
     169}
     170
     171function setVar($varname,$value){
     172if (!$this->used) return $this->error(3,array($this->stored,$this->name,$varname),"SESSION3",1);
     173if (!in_array($varname,$this->varlist)) return $this->error(4,array($this->name,$varname),"SESSION4",1);
     174$regle = "(\\".VARTAG."$varname\})";
     175$this->temp = preg_replace($regle,$value,$this->temp);
     176return 1;
     177}
     178
     179function dispVar(){
     180 echo "Liste variables de $this->name:<br>";
     181 foreach ( $this->varlist as $vars )
     182    echo "$vars <br>";
     183}
     184
     185function setGlobalVar($varname,$value){
     186$set = 0;
     187if (in_array($varname,$this->varlist)){
     188  // Replace the var into this session
     189  $this->globalvar[$varname]=$value;   
     190  $set = 1;
     191}
     192  // Replace the var into sub zones
     193  foreach(array_keys($this->subzone) as $subzone){
     194      $set = $this->subzone[$subzone]->setGlobalVar($varname,$value) || $set;
     195  }
     196  return $set;
     197}
     198
     199function replaceGlobalVar(){
     200if ( count($this->globalvar) )
     201foreach($this->globalvar as $varname => $value){
     202  $regle = "(\\".VARTAG."$varname\})";
     203  $this->temp = preg_replace($regle,$value,$this->temp);
     204}
     205}
     206
     207
     208function generateCode(){
     209    if ($this->used == 0) return $this->generated;
     210    // Replace global var.
     211        if ( count($this->globalvar) ) $this->replaceGlobalVar();
     212        // Replace all unused variable by ""
     213    $regle = "|\\".VARTAG."([^}]*)\}|";
     214        $this->temp = preg_replace($regle,"",$this->temp);
     215        // Generate the subzone(s) code
     216        if(count($this->subzone)){
     217          foreach(array_keys($this->subzone) as $subzone){
     218                $text = ($this->subzone[$subzone]->used) ? $this->subzone[$subzone]->generateCode() : $this->subzone[$subzone]->generated;
     219                $this->temp = preg_replace("(\|$subzone\|)",$text,$this->temp);         
     220                $this->subzone[$subzone]->reset();
     221          }
    118222    }
    119 
    120   class Session extends err{
    121 
    122     var $name;          // Name of the session
    123     var $globalvar = array();  // List of global variable of the session
    124     var $varlist = array();  // List of var in this session
    125     var $subzone = array(); // list of sub-zone
    126     var $temp; // Generated code for the current session
    127     var $generated = NULL; // The final code
    128     var $source; // Source code
    129     var $used=0; // Indicates if the session contain used variable
    130     var $stored; // Give the filename were is stored the session
    131 
    132     function Session($name,$source,$stored){
    133       $this->name = $name;
    134       $this->source = $source;
    135       $this->stored = $stored;
    136       $this->parseVar();
    137     }
    138 
    139     function parseVar(){
    140       // Récupération des noms des variables
    141       $regle = "|".VARTAG."(.*)}|sU";
    142       preg_match_all ($regle,$this->source,$var1);
    143       // Création du tableau de variable  à partir de la liste parsée.
    144       $this->varlist=@array_merge($var[1],$var1[1]);
    145       return 1;
    146     }
    147 
    148     function init(){
    149       if($this->used) return $this->error(1,array($this->stored,$this->name),"SESSION1",1);
    150 // Reset generated code
    151       $this->temp = $this->source;
    152       $this->used = 1;
    153     }
    154     function closeSession(){
    155 // Check if the zone has been used.   
    156       if(!$this->used) return $this->error(2,array($this->stored,$this->name),"SESSION2",1);
    157 // Set Globals vars.
    158       $this->generateCode();
    159       $this->used=0;
    160       return 1;
    161     }
    162 
    163     function reset(){
    164       $this->used = 0;
    165       $this->generated = NULL;
    166       return 1;
    167     }
    168 
    169     function addSubZone(&$subzone){
    170       $this->subzone[$subzone->name] = &$subzone;
    171       return 1;
    172     }
    173 
    174     function setVar($varname,$value){
    175       if (!$this->used) return $this->error(3,array($this->stored,$this->name,$varname),"SESSION3",1);
    176       if (!in_array($varname,$this->varlist)) return $this->error(4,array($this->name,$varname),"SESSION4",1);
    177       $regle = "(\\".VARTAG."$varname\})";
    178       $this->temp = preg_replace($regle,$value,$this->temp);
    179       return 1;
    180     }
    181 
    182     function dispVar(){
    183       echo "Liste variables de $this->name:<br>";
    184       foreach ( $this->varlist as $vars )
    185         echo "$vars <br>";
    186     }
    187 
    188     function setGlobalVar($varname,$value){
    189       $set = 0;
    190       if (in_array($varname,$this->varlist)){
    191         // Replace the var into this session
    192         $this->globalvar[$varname]=$value;   
    193         $set = 1;
    194       }
    195       // Replace the var into sub zones
    196       foreach(array_keys($this->subzone) as $subzone){
    197         $set = $this->subzone[$subzone]->setGlobalVar($varname,$value) || $set;
    198       }
    199       return $set;
    200     }
    201 
    202     function replaceGlobalVar(){
    203       if ( count($this->globalvar) )
    204         foreach($this->globalvar as $varname => $value){
    205         $regle = "(\\".VARTAG."$varname\})";
    206         $this->temp = preg_replace($regle,$value,$this->temp);
    207       }
    208     }
    209 
    210 
    211     function generateCode(){
    212       if ($this->used == 0) return $this->generated;
    213       // Replace global var.
    214       if ( count($this->globalvar) ) $this->replaceGlobalVar();
    215       // Replace all unused variable by ""
    216       $regle = "|\\".VARTAG."(.*)\}|";
    217       $this->temp = preg_replace($regle,"",$this->temp);
    218       // Generate the subzone(s) code
    219       if(count($this->subzone)){
    220         foreach(array_keys($this->subzone) as $subzone){
    221           $text = ($this->subzone[$subzone]->used) ? $this->subzone[$subzone]->generateCode() : $this->subzone[$subzone]->generated;
    222           $this->temp = preg_replace("(\|$subzone\|)",$text,$this->temp);       
    223           $this->subzone[$subzone]->reset();
    224         }
    225       }
    226       $this->generated .= $this->temp;
    227       return $this->generated;
    228     }
    229 
    230     function inVarList($varname){
    231       return in_array($varname,$this->varlist);
    232     }
     223$this->generated .= $this->temp;
     224return $this->generated;
     225}
     226
     227function inVarList($varname){
     228return in_array($varname,$this->varlist);
     229}
    233230
    234231// Fin classe
    235   }
    236 
    237   class VTemplate_Private extends Err{
     232}
     233
     234class VTemplate_Private extends Err{
    238235/****************************************
    239  *         Private Class.               *
    240  * ***************************************/
    241 
    242     var $sources=array(); // Sources des zones issues de la premiere partie du parsing.
    243     var $sessions=array(); // Tableau de sessions
    244     var $v_global=array(); // Globla var array.
     236*          Private Class.               *
     237* ***************************************/
     238
     239var $sources=array(); // Sources des zones issues de la premiere partie du parsing.
     240var $sessions=array(); // Tableau de sessions
     241var $v_global=array(); // Globla var array.
    245242
    246243/****************************************************************
    247244            Parsing Functions for Template files.  ( PF 1.0 )
    248 ****************************************************************/
    249 
    250     function getNom($code){
     245 ****************************************************************/
     246
     247function getNom($code){
    251248// Retourne le premier nom de zone qu'il trouve dans le code
    252249
    253       preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg);
     250   preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg);
    254251   
    255       // Tester la présence des caratère invalides dans le nom ( | et {});
    256       if (@count(explode("|",$reg[1]))>1 || @count(explode("{",$reg[1]))>1 || @count(explode("}",$reg[1]))>1) exit($this->error(5,$reg[1],"PARSE1",1));
     252   // Tester la présence des caratère invalides dans le nom ( | et {});
     253   if (@count(explode("|",$reg[1]))>1 || @count(explode("{",$reg[1]))>1 || @count(explode("}",$reg[1]))>1) exit($this->error(5,$reg[1],"PARSE1",1));
    257254   
    258       return @$reg[1];
    259     }
    260 
    261     function endTag($code,$nom){
     255   return @$reg[1];
     256}
     257
     258function endTag($code,$nom){
    262259// Renvoie TRUE(1) si le tag de fermeture est présent.
    263260
    264       preg_match("(<!--/VTP_$nom-->)sU",$code,$reg);
    265 
    266       return ($reg[0]!="<!--/VTP_$nom-->") ? 0 : 1;
    267     }
    268 
    269     function getSource($code,$nom,$type=0){
     261   preg_match("(<!--/VTP_$nom-->)sU",$code,$reg);
     262
     263return ($reg[0]!="<!--/VTP_$nom-->") ? 0 : 1;
     264}
     265
     266function getSource($code,$nom,$type=0){
    270267// Retourne le source de la zone de nom $nom
    271268
    272       preg_match_all ("(<!--VTP_$nom-->(.*)<!--/VTP_$nom-->)sU",$code,$reg);
    273 
    274       return $reg[$type][0];
    275     }
    276 
    277     function parseZone($code_source,$nom_zone="|root|"){
     269   preg_match_all ("(<!--VTP_$nom-->(.*)<!--/VTP_$nom-->)sU",$code,$reg);
     270
     271return $reg[$type][0];
     272}
     273
     274function parseZone($code_source,$nom_zone="|root|"){
    278275// Fonction récursive de parsing du fichier template
    279       // Vérification que la zone n'existe pas
    280       if (isset($this->sources[$nom_zone])) exit($this->error(6,$nom_zone,"PARSE2",1));
    281 
    282       // Enregistrement du code source
    283       $this->sources[$nom_zone]["source"]=$code_source;
    284 
    285       // Rappel de la fonction pour chaque fils.
    286       while($nom_fils=$this->getNom($this->sources[$nom_zone]["source"])){
    287 
    288         // Vérification que le tag de fin est présent.
    289         if (!$this->endTag($code_source,$nom_fils)) exit($this->error(7,$nom_fils,"PARSE3",1));
    290 
    291         // Parse le fils
    292         $this->parseZone($this->getSource($this->sources[$nom_zone]["source"],$nom_fils,1),$nom_fils);
    293 
    294         // Enregistre le nom du fils dans la liste des fils
    295         $this->sources[$nom_zone]["fils"][]=$nom_fils;
    296 
    297         // Remplace le code du fils dans le source du père
    298         $this->sources[$nom_zone]["source"]=str_replace(
    299           $this->getSource($this->sources[$nom_zone]["source"],$nom_fils,0),
    300           "|$nom_fils|",
    301           $this->sources[$nom_zone]["source"]
    302           );
    303         // Teste si la zone $nom_fils n'existe pas plusieurs fois dans la zone $nom_zone
    304         if (count(explode("|$nom_fils|",$this->sources[$nom_zone]["source"]))>2) exit($this->error(6,$nom_fils,"PARSE4",1));
    305       }// fin While
    306 
    307       return 1;
    308     }
     276   // Vérification que la zone n'existe pas
     277   if (isset($this->sources[$nom_zone])) exit($this->error(6,$nom_zone,"PARSE2",1));
     278
     279   // Enregistrement du code source
     280   $this->sources[$nom_zone]["source"]=$code_source;
     281
     282   // Rappel de la fonction pour chaque fils.
     283   while($nom_fils=$this->getNom($this->sources[$nom_zone]["source"])){
     284
     285     // Vérification que le tag de fin est présent.
     286     if (!$this->endTag($code_source,$nom_fils)) exit($this->error(7,$nom_fils,"PARSE3",1));
     287
     288     // Parse le fils
     289     $this->parseZone($this->getSource($this->sources[$nom_zone]["source"],$nom_fils,1),$nom_fils);
     290
     291     // Enregistre le nom du fils dans la liste des fils
     292     $this->sources[$nom_zone]["fils"][]=$nom_fils;
     293
     294     // Remplace le code du fils dans le source du père
     295     $this->sources[$nom_zone]["source"]=str_replace(
     296                                     $this->getSource($this->sources[$nom_zone]["source"],$nom_fils,0),
     297                                     "|$nom_fils|",
     298                                     $this->sources[$nom_zone]["source"]
     299                                     );
     300     // Teste si la zone $nom_fils n'existe pas plusieurs fois dans la zone $nom_zone
     301     if (count(explode("|$nom_fils|",$this->sources[$nom_zone]["source"]))>2) exit($this->error(6,$nom_fils,"PARSE4",1));
     302   }// fin While
     303
     304return 1;
     305}
    309306
    310307/****************************************************************
    311308            Session Management functions ( SMF 1.0 )
    312 ****************************************************************/
    313 
    314     function createSession($handle,$zone = "|root|"){
     309 ****************************************************************/
     310
     311function createSession($handle,$zone = "|root|"){
    315312// Create a new session of the zone
    316       $this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]);
     313$this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]);
    317314
    318315// Create sub-zone
    319       if (@count($this->sources[$zone]["fils"])){
    320         foreach($this->sources[$zone]["fils"] as $subzone){       
    321           $this->createSession($handle,$subzone);
    322           $this->sessions[$handle][$zone]->addSubZone($this->sessions[$handle][$subzone]);
    323         }
    324       }
     316if (@count($this->sources[$zone]["fils"])){
     317   foreach($this->sources[$zone]["fils"] as $subzone){   
     318    $this->createSession($handle,$subzone);
     319    $this->sessions[$handle][$zone]->addSubZone($this->sessions[$handle][$subzone]);
     320   }
     321}
    325322                                 
    326323//end createSession
    327     }
     324}
    328325
    329326
    330327/****************************************************************
    331328            Global Variable Management Functions ( GVMF 1.0 )
    332 ****************************************************************/
    333 
    334     function setGZone($handle,$zone,$var,$value){
    335       // Define Global var for $zone and its sub-zone.
    336       // Set global value to $zone vars.
    337       return $this->sessions[$handle][$zone]->setGlobalVar($var,$value);
    338     }
    339 
    340     function setGFile($handle,$var,$value) {
    341       return $this->sessions[$handle]["|root|"]->setGlobalVar($var,$value);
    342     }
    343 
    344     function setGAll($var,$value){
    345       $declare = 0;
    346       $this->v_global[$var]=$value;
    347       if (is_array($this->sessions)){
    348         foreach($this->sessions as $handle => $v){
    349           $declare = $this->setGFile($handle,$var,$value) || $declare;
    350         }       
    351       }
    352       return $declare;
    353     }
    354 
    355     function setGOpened($handle){
     329 ****************************************************************/
     330
     331 function setGZone($handle,$zone,$var,$value){
     332 // Define Global var for $zone and its sub-zone.
     333   // Set global value to $zone vars.
     334  return $this->sessions[$handle][$zone]->setGlobalVar($var,$value);
     335}
     336
     337function setGFile($handle,$var,$value) {
     338  return $this->sessions[$handle]["|root|"]->setGlobalVar($var,$value);
     339}
     340
     341function setGAll($var,$value){
     342$declare = 0;
     343$this->v_global[$var]=$value;
     344if (is_array($this->sessions)){
     345    foreach($this->sessions as $handle => $v){
     346                $declare = $this->setGFile($handle,$var,$value) || $declare;
     347                }       
     348  }
     349return $declare;
     350}
     351
     352function setGOpened($handle){
    356353// Set Global var into the opened file
    357       foreach($this->v_global as $name => $val){
    358         $this->setGFile($handle,$name,$val);
    359       }
    360       return 1;
    361     }
     354foreach($this->v_global as $name => $val){
     355  $this->setGFile($handle,$name,$val);
     356}
     357return 1;
     358}
    362359 
    363360// Fin VTemplate_Private
    364   }
    365 
    366 
    367   class VTemplate extends VTemplate_Private{
     361}
     362
     363
     364class VTemplate extends VTemplate_Private{
    368365/****************************************
    369  *         Public Class.                *
    370  * ***************************************/
     366*          Public Class.                *
     367* ***************************************/
    371368
    372369
     
    376373
    377374
    378     function Open($nomfichier){
     375function Open($nomfichier){
    379376// Ouverture d'un fichier source et retourne le handle de ce fichier
    380377// Création du handle:
    381       $handle =  "{".count($this->sessions)."}" ;
     378$handle =  "{".count($this->sessions)."}" ;
    382379
    383380
    384381// Récupération du source à parser
    385       if (!@file_exists($nomfichier)) return $this->error(8,$nomfichier,"TTT1",1);
    386       if (!$f_id=@fopen($nomfichier,"r")) return $this->error(9,$nomfichier,"TTT2",1);
    387       if (!$source=@fread($f_id, filesize($nomfichier))) return $this->error(10,$nomfichier,"TTT3",1);
    388       clearstatcache();
    389       fclose($f_id);
     382if (!@file_exists($nomfichier)) return $this->error(8,$nomfichier,"TTT1",1);
     383if (!$f_id=@fopen($nomfichier,"r")) return $this->error(9,$nomfichier,"TTT2",1);
     384if (!$source=@fread($f_id, filesize($nomfichier))) return $this->error(10,$nomfichier,"TTT3",1);
     385clearstatcache();
     386fclose($f_id);
    390387
    391388// Store the filename
    392       $this->file_name[$handle]=$nomfichier;
     389$this->file_name[$handle]=$nomfichier;
    393390
    394391// Parse les zones
    395       $this->parseZone($source);
     392$this->parseZone($source);
    396393
    397394// Création du tableau de session
    398       $this->createSession($handle);
     395$this->createSession($handle);
    399396
    400397//Nettoyage des variables temporaires
    401       $this->sources=NULL;
     398$this->sources=NULL;
    402399
    403400// Set global var.
    404       $this->setGOpened($handle);
    405 
    406       $this->addSession($handle);
    407       return $handle;
    408     }
    409 
    410     function newSession($handle="{0}",$nom_zone = "|root|"){
    411       if ( $this->sessions[$handle][$nom_zone]->used ) $this->closeSession($handle,$nom_zone);
    412       $this->addSession($handle,$nom_zone,$cache,$time,$num_session);
    413       return 1;
    414     }
    415 
    416     function addSession($handle="{0}",$nom_zone = "|root|"){
    417       // Does the zone exist ?
    418       if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT4",1);   
    419       $this->sessions[$handle][$nom_zone]->init();
    420       return 1;
    421     }
    422 
    423     function closeSession($handle="{0}",$nom_zone = "|root|"){
     401$this->setGOpened($handle);
     402
     403$this->addSession($handle);
     404return $handle;
     405}
     406
     407function newSession($handle="{0}",$nom_zone = "|root|"){
     408if ( $this->sessions[$handle][$nom_zone]->used ) $this->closeSession($handle,$nom_zone);
     409$this->addSession($handle,$nom_zone,$cache,$time,$num_session);
     410return 1;
     411}
     412
     413function addSession($handle="{0}",$nom_zone = "|root|"){
     414        // Does the zone exist ?
     415   if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT4",1);   
     416   $this->sessions[$handle][$nom_zone]->init();
     417   return 1;
     418}
     419
     420function closeSession($handle="{0}",$nom_zone = "|root|"){
    424421// Close the current session and all his sub-session
    425       // Check if the zone exists.
    426       if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT5",1);
    427       // Closing sub-zone
    428       $this->sessions[$handle][$nom_zone]->closeSession();     
    429       return 1;
    430     }
    431 
    432     function setGlobalVar($arg1,$arg2,$arg3){
    433       if ($arg1 == 1){
    434         if (!$this->setGAll($arg2,$arg3)) return $this->error(12,$arg2,"TTT6",1);
    435         return 1;
    436       }
    437       if (!isset($this->sessions[$arg1])) return $this->error(13,$arg1,"TTT7",1);
    438       $tab=explode(".",$arg2);
    439       if (count($tab)==1){
    440         if (!$this->setGFile($arg1,$arg2,$arg3)) return $this->error(14,array($this->file_name[$arg1],$arg2),"TTT8",1);
    441       }
    442       else if (count($tab==2)){
    443         if (!isset($this->sessions[$arg1][$tab[0]])) return $this->error(11,array($tab[0],$this->file_name[$arg1],"TTT9",1));
    444         if (!$this->setGZone($arg1,$tab[0],$tab[1],$arg3)) return $this->error(15,array($this->file_name[$arg1],$tab[0],$tab[1]),"TTT10",1);
    445       }
    446       return 1;
    447     }
    448 
    449     function setVar($handle,$zone_var,$val){
    450       // Fill the variable
    451       $tab=explode(".",$zone_var);
    452       if(count($tab)==2){
    453         $zone=$tab[0];
    454         $var=$tab[1];
    455       }
    456       else
    457       {
    458         $zone="|root|";
    459         $var=$tab[0];
    460       }
    461 
    462       // Teste l'existence de la zone dans la liste
    463       if (!isset($this->sessions[$handle][$zone])) return $this->error(11,array($this->file_name[$handle],$zone),"TTT11",1);
    464 
    465       //Enregistre la variable
    466       return $this->sessions[$handle][$zone]->setVar($var,$val);
    467     }
    468 
    469     function Parse($handle_dest,$zone_var_dest,$handle_source,$zone_source="|root|"){
    470       if($this->sessions[$handle_source][$zone_source]->used == 1) $this->closeSession($handle_source,$zone_source);
    471       $this->setVar($handle_dest,$zone_var_dest, $this->sessions[$handle_source][$zone_source]->generated);
    472     }
    473 
    474     function setVarF($handle,$zone_var,$file){
     422          // Check if the zone exists.
     423        if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT5",1);
     424     // Closing sub-zone
     425     $this->sessions[$handle][$nom_zone]->closeSession();       
     426   return 1;
     427}
     428
     429function setGlobalVar($arg1,$arg2,$arg3){
     430if ($arg1 == 1){
     431  if (!$this->setGAll($arg2,$arg3)) return $this->error(12,$arg2,"TTT6",1);
     432  return 1;
     433}
     434if (!isset($this->sessions[$arg1])) return $this->error(13,$arg1,"TTT7",1);
     435 $tab=explode(".",$arg2);
     436 if (count($tab)==1){
     437    if (!$this->setGFile($arg1,$arg2,$arg3)) return $this->error(14,array($this->file_name[$arg1],$arg2),"TTT8",1);
     438 }
     439 else if (count($tab==2)){
     440    if (!isset($this->sessions[$arg1][$tab[0]])) return $this->error(11,array($tab[0],$this->file_name[$arg1],"TTT9",1));
     441    if (!$this->setGZone($arg1,$tab[0],$tab[1],$arg3)) return $this->error(15,array($this->file_name[$arg1],$tab[0],$tab[1]),"TTT10",1);
     442 }
     443return 1;
     444}
     445
     446function setVar($handle,$zone_var,$val){
     447 // Fill the variable
     448$tab=explode(".",$zone_var);
     449 if(count($tab)==2){
     450   $zone=$tab[0];
     451   $var=$tab[1];
     452 }
     453 else
     454 {
     455  $zone="|root|";
     456  $var=$tab[0];
     457 }
     458
     459 // Teste l'existence de la zone dans la liste
     460 if (!isset($this->sessions[$handle][$zone])) return $this->error(11,array($this->file_name[$handle],$zone),"TTT11",1);
     461
     462 //Enregistre la variable
     463 return $this->sessions[$handle][$zone]->setVar($var,$val);
     464}
     465
     466function Parse($handle_dest,$zone_var_dest,$handle_source,$zone_source="|root|"){
     467        if($this->sessions[$handle_source][$zone_source]->used == 1) $this->closeSession($handle_source,$zone_source);
     468          $this->setVar($handle_dest,$zone_var_dest, $this->sessions[$handle_source][$zone_source]->generated);
     469}
     470
     471function setVarF($handle,$zone_var,$file){
    475472// Fonction qui ouvre le fichier file et copie ce qu'il y a dedans dans une variable.
    476       $tab=explode(".",$zone_var);
     473$tab=explode(".",$zone_var);
    477474
    478475// Récupération nom de la zone et de la variable.
    479       if(count($tab)==2){
    480         $zone=$tab[0];
    481         $var=$tab[1];
    482       }
    483       else
    484       {
    485         $zone="|root|";
    486         $var=$tab[0];
    487       }
     476 if(count($tab)==2){
     477   $zone=$tab[0];
     478   $var=$tab[1];
     479 }
     480 else
     481 {
     482  $zone="|root|";
     483  $var=$tab[0];
     484 }
    488485// Teste l'existence de la zone dans la liste
    489       if (!is_object($this->sessions[$handle][$zone])) return $this->error(11,array($handle,$zone),"TTT12",1);
    490 
    491       // Récupération du source à lire
    492       if (!@file_exists($file)) return $this->error(8,$file,"TTT13",1);
    493       if (!$f_id=@fopen($file,"r")) return $this->error(9,$file,"TTT14",1);
    494       if (!$val=@fread($f_id, filesize($file))) return $this->error(10,$file,"TTT15",1);
    495       clearstatcache();
    496       fclose($f_id);
     486 if (!is_object($this->sessions[$handle][$zone])) return $this->error(11,array($handle,$zone),"TTT12",1);
     487
     488 // Récupération du source à lire
     489if (!@file_exists($file)) return $this->error(8,$file,"TTT13",1);
     490if (!$f_id=@fopen($file,"r")) return $this->error(9,$file,"TTT14",1);
     491if (!$val=@fread($f_id, filesize($file))) return $this->error(10,$file,"TTT15",1);
     492clearstatcache();
     493fclose($f_id);
    497494
    498495//Enregistre la variable
    499       return $this->sessions[$handle][$zone]->setVar($var,$val);
    500     }
    501 
    502     function isZone($handle, $zone="|root|")
    503       {
    504         return isset($this->sessions[$handle][$zone]) ;
    505       }
    506 
    507     function Display($handle="{0}",$display=1,$zone="|root|"){
    508       $this->closeSession($handle,$zone);
    509       $c_genere = $this->sessions[$handle][$zone]->generated;
     496return $this->sessions[$handle][$zone]->setVar($var,$val);
     497}
     498
     499
     500
     501
     502
     503function isZone($handle, $zone="|root|")
     504{
     505return isset($this->sessions[$handle][$zone]) ;
     506}
     507
     508function Display($handle="{0}",$display=1,$zone="|root|"){
     509        $this->closeSession($handle,$zone);
     510        $c_genere = $this->sessions[$handle][$zone]->generated;
    510511       
    511       if ($display) echo $c_genere; else return ($c_genere);
    512     }
     512        if ($display) echo $c_genere; else return ($c_genere);
     513}
     514//fonction complementaire version BETA
     515
     516/*
     517*
     518On peut l'utiliser :
     519- SetVarTab($array): tout les couples clef/valeur sont valorisées
     520- SetVarTab($array,$index) seuls les couples clef/valeur dont la clef est dans le tableau index ou dont la valeur == $index (si pas tableau)
     521Si $index contient ou est une clef de type zone.clef, la clef sera extraite du texte est servira d'index pour $array
     522
     523Vincent
     524*/
     525
     526function setVarTab($handle,$zones,$index = array()){
     527        if (is_array($index))
     528        {
     529                if (count($index)>0)
     530                {
     531                        reset($index);
     532                        while (list (, $key) = each ($index))
     533                        {
     534                                $tab=explode(".",$key);
     535                                if(count($tab)==2){
     536                                        $var=$tab[1];
     537                                }
     538                                else
     539                                {
     540                                        $var=$tab[0];
     541                                }
     542                                setVar($handle,$key,$zones[$var]);
     543                        }
     544                }
     545                else
     546                {
     547                        reset($zones);
     548                        while (list ($key, $val) = each ($zones))
     549                        {
     550                                setVar($handle,$key,$val);
     551                        }
     552                }
     553        }
     554        else
     555        {
     556                setVar($handle,$index,$zones[$index]);
     557        }
     558}
     559
     560function setGlobalVarTab($handle,$zones,$index = array()){
     561
     562        if (is_array($index))
     563        {
     564                if (count($index)>0)
     565                {
     566                        reset($index);
     567                        while (list (, $key) = each ($index))
     568                        {
     569                                $tab=explode(".",$key);
     570                                if(count($tab)==2){
     571                                        $var=$tab[1];
     572                                }
     573                                else
     574                                {
     575                                        $var=$tab[0];
     576                                }
     577                                setGlobalVar($handle,$key,$zones[$var]);
     578                        }
     579                }
     580                else
     581                {
     582                        reset($zones);
     583                        while (list ($key, $val) = each ($zones))
     584                        {
     585                                GlobalVar($handle,$key,$val);
     586                        }
     587                }
     588        }
     589        else
     590        {
     591                setBlobalVar($handle,$index,$zones[$index]);
     592        }
     593}
     594
     595
     596
     597
    513598
    514599
    515600// End VTemplate
    516   }
    517   $DEFINE_VTEMPLATE = 1;
     601}
     602$DEFINE_VTEMPLATE = 1;
    518603}
    519604?>
Note: See TracChangeset for help on using the changeset viewer.