- Timestamp:
- Sep 5, 2003, 9:25:32 PM (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/vtemplate.class.php
r21 r63 17 17 *****************************************************************/ 18 18 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"; 19 if ( !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"; 44 46 $var = $arg[1]; 45 47 $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"; 50 52 $var = $arg[1]; 51 53 $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"; 92 94 $var = $arg[1]; 93 95 $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"; 98 100 $var = $arg[2]; 99 101 $zone = $arg[1]; 100 102 $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 { 109 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>"; 110 113 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. 242 250 243 251 /**************************************************************** … … 245 253 ****************************************************************/ 246 254 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 } 306 306 307 307 /**************************************************************** … … 309 309 ****************************************************************/ 310 310 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 } 325 323 326 324 … … 329 327 ****************************************************************/ 330 328 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 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){ 353 351 // 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 } 359 357 360 358 // Fin VTemplate_Private 361 }362 363 364 class VTemplate extends VTemplate_Private{359 } 360 361 362 class VTemplate extends VTemplate_Private{ 365 363 /**************************************** 366 * Public Class. *367 * ***************************************/364 * Public Class. * 365 * ***************************************/ 368 366 369 367 … … 373 371 374 372 375 function Open($nomfichier){373 function Open($nomfichier){ 376 374 // Ouverture d'un fichier source et retourne le handle de ce fichier 377 375 // Création du handle: 378 $handle = "{".count($this->sessions)."}" ;376 $handle = "{".count($this->sessions)."}" ; 379 377 380 378 381 379 // 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); 387 385 388 386 // Store the filename 389 $this->file_name[$handle]=$nomfichier;387 $this->file_name[$handle]=$nomfichier; 390 388 391 389 // Parse les zones 392 $this->parseZone($source);390 $this->parseZone($source); 393 391 394 392 // Création du tableau de session 395 $this->createSession($handle);393 $this->createSession($handle); 396 394 397 395 //Nettoyage des variables temporaires 398 $this->sources=NULL;396 $this->sources=NULL; 399 397 400 398 // 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 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|"){ 421 419 // Close the current session and all his sub-session 422 423 424 // Closing sub-zone425 $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 variable448 $tab=explode(".",$zone_var);449 if(count($tab)==2){450 $zone=$tab[0];451 $var=$tab[1];452 }453 else454 {455 $zone="|root|";456 $var=$tab[0];457 }458 459 // Teste l'existence de la zone dans la liste460 if (!isset($this->sessions[$handle][$zone])) return $this->error(11,array($this->file_name[$handle],$zone),"TTT11",1);461 462 //Enregistre la variable463 return $this->sessions[$handle][$zone]->setVar($var,$val);464 }465 466 function Parse($handle_dest,$zone_var_dest,$handle_source,$zone_source="|root|"){467 468 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){ 472 470 // 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); 474 472 475 473 // 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 else481 {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 } 485 483 // 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 à lire489 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); 494 492 495 493 //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 510 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; 511 509 512 513 }510 if ($display) echo $c_genere; else return ($c_genere); 511 } 514 512 //fonction complementaire version BETA 515 513 516 514 /* 517 *518 On peut l'utiliser :515 * 516 On peut l'utiliser : 519 517 - SetVarTab($array): tout les couples clef/valeur sont valorisées 520 518 - SetVarTab($array,$index) seuls les couples clef/valeur dont la clef est dans le tableau index ou dont la valeur == $index (si pas tableau) … … 524 522 */ 525 523 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; 603 589 } 604 590 ?>
Note: See TracChangeset
for help on using the changeset viewer.