Changeset 63 for trunk


Ignore:
Timestamp:
Sep 5, 2003, 9:25:32 PM (21 years ago)
Author:
z0rglub
Message:

indention of PHP code improved : file becomes more readable :-)

File:
1 edited

Legend:

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

    r21 r63  
    1717 *****************************************************************/
    1818
    19 if ( !isset($DEFINE_VTEMPLATE) ){
    20 define("ALL",1);
    21 define("VARTAG","{#"); // Tag d'ouverture des variables : 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 var $msg;
    29 var $titre;
    30 
    31 function error($errno,$arg="",$code=0,$disp=0){
    32 // Gestion des erreurs
    33 switch($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";
     19if ( !isset( $DEFINE_VTEMPLATE ) )
     20{
     21  define("ALL",1);
     22  // Tag d'ouverture des variables : vous pouvez changer ce paramètre.
     23  define("VARTAG","{#");
     24  define("VTEMPLATE_VERSION","1.3.1");
     25  define("VTEMPLATE_TYPE","BA");
     26  define("VTEMPLATE_BUILD","6");
     27 
     28  class Err {
     29    var $msg;
     30    var $titre;
     31
     32    function error( $errno, $arg = "", $code = 0, $disp = 0 ) {
     33      // Gestion des erreurs
     34      switch ( $errno )
     35      {
     36      case 1:
     37        $this->titre="Erreur de session n° $code";
     38        $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>"       ;
     39        break;
     40      case 2:
     41        $this->titre="Erreur de session n° $code";
     42        $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>";
     43        break;
     44      case 3:
     45        $this->titre="Erreur de session n° $code";
    4446        $var = $arg[1];
    4547        $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";
     48        $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>";
     49        break;
     50      case 4:
     51        $this->titre="Erreur de session n° $code";
    5052        $var = $arg[1];
    5153        $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";
     54        $this->msg = "La variable $var que vous souhaitez valoriser n'existe pas dans la zone $zone.<br>";
     55        break;
     56      case 5:
     57        $this->titre="Erreur de parsing n° $code";
     58        $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>";
     59        break;
     60      case 6:
     61        $this->titre="Erreur de parsing n° $code";
     62        $this->msg = "Vous ne pouvez pas utiliser le même nom ($arg)de zone plusieurs fois.<br>";
     63        break;
     64      case 7:
     65        $this->titre="Erreur de parsing n° $code";
     66        $this->msg = "Vous avez oublié de fermer la zone $arg.<br>";
     67        break;
     68      case 8:
     69        $this->titre="Erreur de traitement n° $code";
     70        $this->msg = "Le fichier template $arg est introuvable.<br>";
     71        break;
     72      case 9:
     73        $this->titre="Erreur de traitement n° $code";
     74        $this->msg = "Impossible d'ouvrir le fichier $arg.Vérifiez les droits de ce fichier.<br>";
     75        break;
     76      case 10:
     77        $this->titre="Erreur de traitement n° $code";
     78        $this->msg = "Impossible de lire le fichier template $arg.<br>";
     79        break;
     80      case 11:
     81        $this->titre="Erreur de traitement n° $code";
     82        $this->msg = "La zone $arg est introuvable.Vérifiez la syntaxe de cette zone.<br>";
     83        break;
     84      case 12: 
     85        $this->titre="Erreur de traitement n° $code";
     86        $this->msg = "La variable $arg est introuvable .Vérifiez la syntaxe de la variable.<br>";       
     87        break;
     88      case 13:
     89        $this->titre="Erreur de traitement n° $code";
     90        $this->msg = "L'identifiant de fichier spécifié n'existe pas.Vérifiez les fonctions Open() de votre script.<br>";
     91        break; 
     92      case 14:
     93        $this->titre="Erreur de traitement n° $code";
    9294        $var = $arg[1];
    9395        $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";
     96        $this->msg = "La variable $var dans le fichier $file est introuvable.Vérifiez la syntaxe de la variable.<br>"; 
     97        break; 
     98      case 15:
     99        $this->titre="Erreur de traitement n° $code";
    98100        $var = $arg[2];
    99101        $zone = $arg[1];
    100102        $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>";
    108 if ($disp){
     103        $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>";
     104        break;
     105      default:
     106        $this->titre = "Erreur inconnue $code"; 
     107        $this->msg = "Veuillez le rapporter aux auteurs de la classe.";
     108      }
     109      $this->titre .= ": <br>";
     110      if ( $disp )
     111      {
    109112        $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>";
    110113        echo "<font face=verdana size=2 color=red><u>$this->titre</u><i>$this->msg</i>$web<br><br></font>";
    111 }
    112 return -1;
    113 }
    114 // Fin classe
    115 }
    116 
    117 class Session extends err{
    118 
    119 var $name;              // Name of the session
    120 var $globalvar = array();  // List of global variable of the session
    121 var $varlist = array();  // List of var in this session
    122 var $subzone = array(); // list of sub-zone
    123 var $temp; // Generated code for the current session
    124 var $generated = NULL; // The final code
    125 var $source; // Source code
    126 var $used=0; // Indicates if the session contain used variable
    127 var $stored; // Give the filename were is stored the session
    128 
    129 function Session($name,$source,$stored){
    130  $this->name = $name;
    131  $this->source = $source;
    132  $this->stored = $stored;
    133  $this->parseVar();
    134 }
    135 
    136 function 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]);
    142 return 1;
    143 }
    144 
    145 function init(){
    146 if($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 }
    151 function closeSession(){
    152 // Check if the zone has been used.   
    153 if(!$this->used) return $this->error(2,array($this->stored,$this->name),"SESSION2",1);
    154 // Set Globals vars.
    155 $this->generateCode();
    156 $this->used=0;
    157 return 1;
    158 }
    159 
    160 function reset(){
    161 $this->used = 0;
    162 $this->generated = NULL;
    163 return 1;
    164 }
    165 
    166 function addSubZone(&$subzone){
    167 $this->subzone[$subzone->name] = &$subzone;
    168 return 1;
    169 }
    170 
    171 function setVar($varname,$value){
    172 if (!$this->used) return $this->error(3,array($this->stored,$this->name,$varname),"SESSION3",1);
    173 if (!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);
    176 return 1;
    177 }
    178 
    179 function dispVar(){
    180  echo "Liste variables de $this->name:<br>";
    181  foreach ( $this->varlist as $vars )
    182     echo "$vars <br>";
    183 }
    184 
    185 function setGlobalVar($varname,$value){
    186 $set = 0;
    187 if (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 
    199 function replaceGlobalVar(){
    200 if ( count($this->globalvar) )
    201 foreach($this->globalvar as $varname => $value){
    202   $regle = "(\\".VARTAG."$varname\})";
    203   $this->temp = preg_replace($regle,$value,$this->temp);
    204 }
    205 }
    206 
    207 
    208 function 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           }
    222     }
    223 $this->generated .= $this->temp;
    224 return $this->generated;
    225 }
    226 
    227 function inVarList($varname){
    228 return in_array($varname,$this->varlist);
    229 }
    230 
    231 // Fin classe
    232 }
    233 
    234 class VTemplate_Private extends Err{
    235 /****************************************
    236 *          Private Class.               *
    237 * ***************************************/
    238 
    239 var $sources=array(); // Sources des zones issues de la premiere partie du parsing.
    240 var $sessions=array(); // Tableau de sessions
    241 var $v_global=array(); // Globla var array.
     114      }
     115      return -1;
     116    }
     117  } // Fin classe
     118
     119  class Session extends err {
     120    var $name;          // Name of the session
     121    var $globalvar = array();  // List of global variable of the session
     122    var $varlist = array();  // List of var in this session
     123    var $subzone = array(); // list of sub-zone
     124    var $temp; // Generated code for the current session
     125    var $generated = NULL; // The final code
     126    var $source; // Source code
     127    var $used=0; // Indicates if the session contain used variable
     128    var $stored; // Give the filename were is stored the session
     129
     130    function Session( $name, $source, $stored ) {
     131      $this->name = $name;
     132      $this->source = $source;
     133      $this->stored = $stored;
     134      $this->parseVar();
     135    }
     136
     137    function parseVar(){
     138      // Récupération des noms des variables
     139      $regle = "|".VARTAG."(.*)}|sU";
     140      preg_match_all ($regle,$this->source,$var1);
     141      // Création du tableau de variable  à partir de la liste parsée.
     142      $this->varlist=@array_merge($var[1],$var1[1]);
     143      return 1;
     144    }
     145
     146    function init(){
     147      if ( $this->used )
     148        return $this->error(1,array($this->stored,$this->name),"SESSION1",1);
     149      // Reset generated code
     150      $this->temp = $this->source;
     151      $this->used = 1;
     152    }
     153
     154    function closeSession(){
     155      // Check if the zone has been used.   
     156      if ( !$this->used )
     157        return $this->error(2,array($this->stored,$this->name),"SESSION2",1);
     158      // Set Globals vars.
     159      $this->generateCode();
     160      $this->used=0;
     161      return 1;
     162    }
     163
     164    function reset(){
     165      $this->used = 0;
     166      $this->generated = NULL;
     167      return 1;
     168    }
     169
     170    function addSubZone( &$subzone ) {
     171      $this->subzone[$subzone->name] = &$subzone;
     172      return 1;
     173    }
     174
     175    function setVar($varname,$value){
     176      if ( !$this->used )
     177        return $this->error(3,array($this->stored,$this->name,$varname),
     178                            "SESSION3",1);
     179      if (!in_array($varname,$this->varlist))
     180        return $this->error(4,array($this->name,$varname),"SESSION4",1);
     181      $regle = "(\\".VARTAG."$varname\})";
     182      $this->temp = preg_replace($regle,$value,$this->temp);
     183      return 1;
     184    }
     185
     186    function dispVar(){
     187      echo "Liste variables de $this->name:<br>";
     188      foreach ( $this->varlist as $vars ) echo "$vars <br>";
     189    }
     190
     191    function setGlobalVar($varname,$value){
     192      $set = 0;
     193      if (in_array($varname,$this->varlist ) )
     194      {
     195        // Replace the var into this session
     196        $this->globalvar[$varname]=$value;   
     197        $set = 1;
     198      }
     199      // Replace the var into sub zones
     200      foreach(array_keys($this->subzone) as $subzone){
     201        $set = $this->subzone[$subzone]->setGlobalVar($varname,$value) || $set;
     202      }
     203      return $set;
     204    }
     205
     206    function replaceGlobalVar(){
     207      if ( count($this->globalvar) )
     208      {
     209        foreach($this->globalvar as $varname => $value) {
     210          $regle = "(\\".VARTAG."$varname\})";
     211          $this->temp = preg_replace($regle,$value,$this->temp);
     212        }
     213      }
     214    }
     215
     216
     217    function generateCode(){
     218      if ($this->used == 0) return $this->generated;
     219      // Replace global var.
     220      if ( count($this->globalvar) ) $this->replaceGlobalVar();
     221      // Replace all unused variable by ""
     222      $regle = "|\\".VARTAG."([^}]*)\}|";
     223      $this->temp = preg_replace($regle,"",$this->temp);
     224      // Generate the subzone(s) code
     225      if(count($this->subzone)){
     226        foreach(array_keys($this->subzone) as $subzone){
     227          $text = ($this->subzone[$subzone]->used) ? $this->subzone[$subzone]->generateCode() : $this->subzone[$subzone]->generated;
     228          $this->temp = preg_replace("(\|$subzone\|)",$text,$this->temp);       
     229          $this->subzone[$subzone]->reset();
     230        }
     231      }
     232      $this->generated .= $this->temp;
     233      return $this->generated;
     234    }
     235
     236    function inVarList($varname){
     237      return in_array($varname,$this->varlist);
     238    }
     239  } // Fin classe
     240
     241  class VTemplate_Private extends Err{
     242    /****************************************
     243     *          Private Class.              *
     244     ****************************************/
     245
     246    var $sources=array(); // Sources des zones issues
     247                          // de la premiere partie du parsing.
     248    var $sessions=array(); // Tableau de sessions
     249    var $v_global=array(); // Globla var array.
    242250
    243251/****************************************************************
     
    245253 ****************************************************************/
    246254
    247 function getNom($code){
    248 // Retourne le premier nom de zone qu'il trouve dans le code
    249 
    250    preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg);
    251    
    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));
    254    
    255    return @$reg[1];
    256 }
    257 
    258 function endTag($code,$nom){
    259 // Renvoie TRUE(1) si le tag de fermeture est présent.
    260 
    261    preg_match("(<!--/VTP_$nom-->)sU",$code,$reg);
    262 
    263 return ($reg[0]!="<!--/VTP_$nom-->") ? 0 : 1;
    264 }
    265 
    266 function getSource($code,$nom,$type=0){
    267 // Retourne le source de la zone de nom $nom
    268 
    269    preg_match_all ("(<!--VTP_$nom-->(.*)<!--/VTP_$nom-->)sU",$code,$reg);
    270 
    271 return $reg[$type][0];
    272 }
    273 
    274 function parseZone($code_source,$nom_zone="|root|"){
    275 // Fonction récursive de parsing du fichier template
    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 
    304 return 1;
    305 }
     255    function getNom($code){
     256      // Retourne le premier nom de zone qu'il trouve dans le code
     257      preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg);   
     258      // Tester la présence des caratère invalides dans le nom ( | et {});
     259      if ( @count( explode("|",$reg[1]))>1
     260           || @count(explode("{",$reg[1]))>1
     261           || @count(explode("}",$reg[1]))>1 )
     262        exit($this->error(5,$reg[1],"PARSE1",1));
     263      return @$reg[1];
     264    }
     265
     266    function endTag($code,$nom){
     267      // Renvoie TRUE(1) si le tag de fermeture est présent.
     268      preg_match("(<!--/VTP_$nom-->)sU",$code,$reg);
     269      return ($reg[0]!="<!--/VTP_$nom-->") ? 0 : 1;
     270    }
     271
     272    function getSource($code,$nom,$type=0){
     273      // Retourne le source de la zone de nom $nom
     274      preg_match_all ("(<!--VTP_$nom-->(.*)<!--/VTP_$nom-->)sU",$code,$reg);
     275      return $reg[$type][0];
     276    }
     277
     278    function parseZone($code_source,$nom_zone="|root|"){
     279      // Fonction récursive de parsing du fichier template
     280      // Vérification que la zone n'existe pas
     281      if (isset($this->sources[$nom_zone]))
     282        exit($this->error(6,$nom_zone,"PARSE2",1));
     283      // Enregistrement du code source
     284      $this->sources[$nom_zone]["source"]=$code_source;
     285      // Rappel de la fonction pour chaque fils.
     286      while ($nom_fils=$this->getNom($this->sources[$nom_zone]["source"]) ) {
     287        // Vérification que le tag de fin est présent.
     288        if (!$this->endTag($code_source,$nom_fils))
     289          exit($this->error(7,$nom_fils,"PARSE3",1));
     290        // Parse le fils
     291        $this->parseZone($this->getSource($this->sources[$nom_zone]["source"],$nom_fils,1),$nom_fils);
     292        // Enregistre le nom du fils dans la liste des fils
     293        $this->sources[$nom_zone]["fils"][]=$nom_fils;
     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        // Teste si la zone $nom_fils n'existe pas plusieurs fois
     300        // dans la zone $nom_zone
     301        if (count(explode("|$nom_fils|",$this->sources[$nom_zone]["source"]))>2)
     302          exit($this->error(6,$nom_fils,"PARSE4",1));
     303      } // fin While
     304      return 1;
     305    }
    306306
    307307/****************************************************************
     
    309309 ****************************************************************/
    310310
    311 function createSession($handle,$zone = "|root|"){
    312 // Create a new session of the zone
    313 $this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]);
    314 
    315 // Create sub-zone
    316 if (@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 }
    322                                  
    323 //end createSession
    324 }
     311    function createSession($handle,$zone = "|root|"){
     312      // Create a new session of the zone
     313      $this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]);
     314      // Create sub-zone
     315      if (@count($this->sources[$zone]["fils"])){
     316        foreach($this->sources[$zone]["fils"] as $subzone){       
     317          $this->createSession($handle,$subzone);
     318          $this->sessions[$handle][$zone]->addSubZone($this->sessions[$handle][$subzone]);
     319        }
     320      }
     321      //end createSession
     322    }
    325323
    326324
     
    329327 ****************************************************************/
    330328
    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 
    337 function setGFile($handle,$var,$value) {
    338   return $this->sessions[$handle]["|root|"]->setGlobalVar($var,$value);
    339 }
    340 
    341 function setGAll($var,$value){
    342 $declare = 0;
    343 $this->v_global[$var]=$value;
    344 if (is_array($this->sessions)){
    345     foreach($this->sessions as $handle => $v){
    346                 $declare = $this->setGFile($handle,$var,$value) || $declare;
    347                 }       
    348   }
    349 return $declare;
    350 }
    351 
    352 function setGOpened($handle){
     329    function setGZone($handle,$zone,$var,$value){
     330      // Define Global var for $zone and its sub-zone.
     331      // Set global value to $zone vars.
     332      return $this->sessions[$handle][$zone]->setGlobalVar($var,$value);
     333    }
     334
     335    function setGFile($handle,$var,$value) {
     336      return $this->sessions[$handle]["|root|"]->setGlobalVar($var,$value);
     337    }
     338
     339    function setGAll($var,$value){
     340      $declare = 0;
     341      $this->v_global[$var]=$value;
     342      if (is_array($this->sessions)){
     343        foreach($this->sessions as $handle => $v){
     344          $declare = $this->setGFile($handle,$var,$value) || $declare;
     345        }       
     346      }
     347      return $declare;
     348    }
     349
     350    function setGOpened($handle){
    353351// Set Global var into the opened file
    354 foreach($this->v_global as $name => $val){
    355   $this->setGFile($handle,$name,$val);
    356 }
    357 return 1;
    358 }
     352      foreach($this->v_global as $name => $val){
     353        $this->setGFile($handle,$name,$val);
     354      }
     355      return 1;
     356    }
    359357 
    360358// Fin VTemplate_Private
    361 }
    362 
    363 
    364 class VTemplate extends VTemplate_Private{
     359  }
     360
     361
     362  class VTemplate extends VTemplate_Private{
    365363/****************************************
    366 *          Public Class.                *
    367 * ***************************************/
     364 *         Public Class.                *
     365 * ***************************************/
    368366
    369367
     
    373371
    374372
    375 function Open($nomfichier){
     373    function Open($nomfichier){
    376374// Ouverture d'un fichier source et retourne le handle de ce fichier
    377375// Création du handle:
    378 $handle =  "{".count($this->sessions)."}" ;
     376      $handle =  "{".count($this->sessions)."}" ;
    379377
    380378
    381379// Récupération du source à parser
    382 if (!@file_exists($nomfichier)) return $this->error(8,$nomfichier,"TTT1",1);
    383 if (!$f_id=@fopen($nomfichier,"r")) return $this->error(9,$nomfichier,"TTT2",1);
    384 if (!$source=@fread($f_id, filesize($nomfichier))) return $this->error(10,$nomfichier,"TTT3",1);
    385 clearstatcache();
    386 fclose($f_id);
     380      if (!@file_exists($nomfichier)) return $this->error(8,$nomfichier,"TTT1",1);
     381      if (!$f_id=@fopen($nomfichier,"r")) return $this->error(9,$nomfichier,"TTT2",1);
     382      if (!$source=@fread($f_id, filesize($nomfichier))) return $this->error(10,$nomfichier,"TTT3",1);
     383      clearstatcache();
     384      fclose($f_id);
    387385
    388386// Store the filename
    389 $this->file_name[$handle]=$nomfichier;
     387      $this->file_name[$handle]=$nomfichier;
    390388
    391389// Parse les zones
    392 $this->parseZone($source);
     390      $this->parseZone($source);
    393391
    394392// Création du tableau de session
    395 $this->createSession($handle);
     393      $this->createSession($handle);
    396394
    397395//Nettoyage des variables temporaires
    398 $this->sources=NULL;
     396      $this->sources=NULL;
    399397
    400398// Set global var.
    401 $this->setGOpened($handle);
    402 
    403 $this->addSession($handle);
    404 return $handle;
    405 }
    406 
    407 function newSession($handle="{0}",$nom_zone = "|root|"){
    408 if ( $this->sessions[$handle][$nom_zone]->used ) $this->closeSession($handle,$nom_zone);
    409 $this->addSession($handle,$nom_zone,$cache,$time,$num_session);
    410 return 1;
    411 }
    412 
    413 function 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 
    420 function closeSession($handle="{0}",$nom_zone = "|root|"){
     399      $this->setGOpened($handle);
     400
     401      $this->addSession($handle);
     402      return $handle;
     403    }
     404
     405    function newSession($handle="{0}",$nom_zone = "|root|"){
     406      if ( $this->sessions[$handle][$nom_zone]->used ) $this->closeSession($handle,$nom_zone);
     407      $this->addSession($handle,$nom_zone,$cache,$time,$num_session);
     408      return 1;
     409    }
     410
     411    function addSession($handle="{0}",$nom_zone = "|root|"){
     412      // Does the zone exist ?
     413      if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT4",1);   
     414      $this->sessions[$handle][$nom_zone]->init();
     415      return 1;
     416    }
     417
     418    function closeSession($handle="{0}",$nom_zone = "|root|"){
    421419// Close the current session and all his sub-session
    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 
    429 function setGlobalVar($arg1,$arg2,$arg3){
    430 if ($arg1 == 1){
    431   if (!$this->setGAll($arg2,$arg3)) return $this->error(12,$arg2,"TTT6",1);
    432   return 1;
    433 }
    434 if (!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  }
    443 return 1;
    444 }
    445 
    446 function 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 
    466 function 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 
    471 function setVarF($handle,$zone_var,$file){
     420      // Check if the zone exists.
     421      if(!isset($this->sessions[$handle][$nom_zone])) return $this->error(11,array($nom_zone,$this->file_name[$handle]),"TTT5",1);
     422      // Closing sub-zone
     423      $this->sessions[$handle][$nom_zone]->closeSession();     
     424      return 1;
     425    }
     426
     427    function setGlobalVar($arg1,$arg2,$arg3){
     428      if ($arg1 == 1){
     429        if (!$this->setGAll($arg2,$arg3)) return $this->error(12,$arg2,"TTT6",1);
     430        return 1;
     431      }
     432      if (!isset($this->sessions[$arg1])) return $this->error(13,$arg1,"TTT7",1);
     433      $tab=explode(".",$arg2);
     434      if (count($tab)==1){
     435        if (!$this->setGFile($arg1,$arg2,$arg3)) return $this->error(14,array($this->file_name[$arg1],$arg2),"TTT8",1);
     436      }
     437      else if (count($tab==2)){
     438        if (!isset($this->sessions[$arg1][$tab[0]])) return $this->error(11,array($tab[0],$this->file_name[$arg1],"TTT9",1));
     439        if (!$this->setGZone($arg1,$tab[0],$tab[1],$arg3)) return $this->error(15,array($this->file_name[$arg1],$tab[0],$tab[1]),"TTT10",1);
     440      }
     441      return 1;
     442    }
     443
     444    function setVar($handle,$zone_var,$val){
     445      // Fill the variable
     446      $tab=explode(".",$zone_var);
     447      if(count($tab)==2){
     448        $zone=$tab[0];
     449        $var=$tab[1];
     450      }
     451      else
     452      {
     453        $zone="|root|";
     454        $var=$tab[0];
     455      }
     456
     457      // Teste l'existence de la zone dans la liste
     458      if (!isset($this->sessions[$handle][$zone])) return $this->error(11,array($this->file_name[$handle],$zone),"TTT11",1);
     459
     460      //Enregistre la variable
     461      return $this->sessions[$handle][$zone]->setVar($var,$val);
     462    }
     463
     464    function Parse($handle_dest,$zone_var_dest,$handle_source,$zone_source="|root|"){
     465      if($this->sessions[$handle_source][$zone_source]->used == 1) $this->closeSession($handle_source,$zone_source);
     466      $this->setVar($handle_dest,$zone_var_dest, $this->sessions[$handle_source][$zone_source]->generated);
     467    }
     468
     469    function setVarF($handle,$zone_var,$file){
    472470// Fonction qui ouvre le fichier file et copie ce qu'il y a dedans dans une variable.
    473 $tab=explode(".",$zone_var);
     471      $tab=explode(".",$zone_var);
    474472
    475473// Récupération nom de la zone et de la variable.
    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  }
     474      if(count($tab)==2){
     475        $zone=$tab[0];
     476        $var=$tab[1];
     477      }
     478      else
     479      {
     480        $zone="|root|";
     481        $var=$tab[0];
     482      }
    485483// Teste l'existence de la zone dans la liste
    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
    489 if (!@file_exists($file)) return $this->error(8,$file,"TTT13",1);
    490 if (!$f_id=@fopen($file,"r")) return $this->error(9,$file,"TTT14",1);
    491 if (!$val=@fread($f_id, filesize($file))) return $this->error(10,$file,"TTT15",1);
    492 clearstatcache();
    493 fclose($f_id);
     484      if (!is_object($this->sessions[$handle][$zone])) return $this->error(11,array($handle,$zone),"TTT12",1);
     485
     486      // Récupération du source à lire
     487      if (!@file_exists($file)) return $this->error(8,$file,"TTT13",1);
     488      if (!$f_id=@fopen($file,"r")) return $this->error(9,$file,"TTT14",1);
     489      if (!$val=@fread($f_id, filesize($file))) return $this->error(10,$file,"TTT15",1);
     490      clearstatcache();
     491      fclose($f_id);
    494492
    495493//Enregistre la variable
    496 return $this->sessions[$handle][$zone]->setVar($var,$val);
    497 }
    498 
    499 
    500 
    501 
    502 
    503 function isZone($handle, $zone="|root|")
    504 {
    505 return isset($this->sessions[$handle][$zone]) ;
    506 }
    507 
    508 function Display($handle="{0}",$display=1,$zone="|root|"){
    509         $this->closeSession($handle,$zone);
    510         $c_genere = $this->sessions[$handle][$zone]->generated;
     494      return $this->sessions[$handle][$zone]->setVar($var,$val);
     495    }
     496
     497
     498
     499
     500
     501    function isZone($handle, $zone="|root|")
     502      {
     503        return isset($this->sessions[$handle][$zone]) ;
     504      }
     505
     506    function Display($handle="{0}",$display=1,$zone="|root|"){
     507      $this->closeSession($handle,$zone);
     508      $c_genere = $this->sessions[$handle][$zone]->generated;
    511509       
    512         if ($display) echo $c_genere; else return ($c_genere);
    513 }
     510      if ($display) echo $c_genere; else return ($c_genere);
     511    }
    514512//fonction complementaire version BETA
    515513
    516514/*
    517 *
    518 On peut l'utiliser :
     515 *
     516 On peut l'utiliser :
    519517- SetVarTab($array): tout les couples clef/valeur sont valorisées
    520518- SetVarTab($array,$index) seuls les couples clef/valeur dont la clef est dans le tableau index ou dont la valeur == $index (si pas tableau)
     
    524522*/
    525523
    526 function 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 
    560 function 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 
    598 
    599 
    600 // End VTemplate
    601 }
    602 $DEFINE_VTEMPLATE = 1;
     524    function setVarTab($handle,$zones,$index = array()){
     525      if (is_array($index))
     526      {
     527        if (count($index)>0)
     528        {
     529          reset($index);
     530          while (list (, $key) = each ($index))
     531          {
     532            $tab=explode(".",$key);
     533            if(count($tab)==2){
     534              $var=$tab[1];
     535            }
     536            else
     537            {
     538              $var=$tab[0];
     539            }
     540            setVar($handle,$key,$zones[$var]);
     541          }
     542        }
     543        else
     544        {
     545          reset($zones);
     546          while (list ($key, $val) = each ($zones))
     547          {
     548            setVar($handle,$key,$val);
     549          }
     550        }
     551      }
     552      else
     553      {
     554        setVar($handle,$index,$zones[$index]);
     555      }
     556    }
     557
     558    function setGlobalVarTab($handle,$zones,$index = array()){
     559      if (is_array($index))
     560      {
     561        if (count($index)>0)
     562        {
     563          reset($index);
     564          while (list (, $key) = each ($index))
     565          {
     566            $tab=explode(".",$key);
     567            if ( count( $tab ) == 2 ) $var=$tab[1];
     568            else                      $var=$tab[0];
     569            setGlobalVar( $handle, $key, $zones[$var] );
     570          }
     571        }
     572        else
     573        {
     574          reset($zones);
     575          while (list ($key, $val) = each ($zones))
     576          {
     577            GlobalVar($handle,$key,$val);
     578          }
     579        }
     580      }
     581      else
     582      {
     583        setBlobalVar($handle,$index,$zones[$index]);
     584      }
     585    }
     586    // End VTemplate
     587  }
     588  $DEFINE_VTEMPLATE = 1;
    603589}
    604590?>
Note: See TracChangeset for help on using the changeset viewer.