Changeset 21 for trunk/include/vtemplate.class.php
- Timestamp:
- Jul 1, 2003, 11:27:20 AM (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/vtemplate.class.php
r2 r21 3 3 * VIRTUAL-TEMPLATE 4 4 * 5 * Version : 1.3. 1 Base Edition ( Juillet 2002 ) build 65 * Version : 1.3.2 Base Edition ( Decembre 2003 ) build 1 6 6 * 7 7 * Address : http://vtemplate.sourceforge.net 8 8 * 9 9 * 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 . 11 11 * + CAMPANA François (fc@netouaibe.com). 12 12 * Licence: GPL. 13 * 14 * 13 15 * 14 * 16 * 15 17 *****************************************************************/ 16 18 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 { 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){ 34 32 // 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 } 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"; 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>"; 108 if ($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 } 112 return -1; 113 } 117 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 } 118 222 } 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; 224 return $this->generated; 225 } 226 227 function inVarList($varname){ 228 return in_array($varname,$this->varlist); 229 } 233 230 234 231 // Fin classe 235 236 237 232 } 233 234 class VTemplate_Private extends Err{ 238 235 /**************************************** 239 240 241 242 243 244 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. 245 242 246 243 /**************************************************************** 247 244 Parsing Functions for Template files. ( PF 1.0 ) 248 ****************************************************************/249 250 245 ****************************************************************/ 246 247 function getNom($code){ 251 248 // Retourne le premier nom de zone qu'il trouve dans le code 252 249 253 250 preg_match("(<!--VTP_([^()]+)-->)sU",$code,$reg); 254 251 255 256 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)); 257 254 258 259 260 261 255 return @$reg[1]; 256 } 257 258 function endTag($code,$nom){ 262 259 // Renvoie TRUE(1) si le tag de fermeture est présent. 263 260 264 265 266 267 268 269 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){ 270 267 // Retourne le source de la zone de nom $nom 271 268 272 273 274 275 276 277 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|"){ 278 275 // Fonction récursive de parsing du fichier template 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 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 304 return 1; 305 } 309 306 310 307 /**************************************************************** 311 308 Session Management functions ( SMF 1.0 ) 312 ****************************************************************/313 314 309 ****************************************************************/ 310 311 function createSession($handle,$zone = "|root|"){ 315 312 // Create a new session of the zone 316 313 $this->sessions[$handle][$zone] = new Session($zone,$this->sources[$zone]["source"],$this->file_name[$handle]); 317 314 318 315 // Create sub-zone 319 320 321 322 323 324 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 } 325 322 326 323 //end createSession 327 324 } 328 325 329 326 330 327 /**************************************************************** 331 328 Global Variable Management Functions ( GVMF 1.0 ) 332 ****************************************************************/333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 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 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){ 356 353 // Set Global var into the opened file 357 358 359 360 361 354 foreach($this->v_global as $name => $val){ 355 $this->setGFile($handle,$name,$val); 356 } 357 return 1; 358 } 362 359 363 360 // Fin VTemplate_Private 364 365 366 367 361 } 362 363 364 class VTemplate extends VTemplate_Private{ 368 365 /**************************************** 369 370 366 * Public Class. * 367 * ***************************************/ 371 368 372 369 … … 376 373 377 374 378 375 function Open($nomfichier){ 379 376 // Ouverture d'un fichier source et retourne le handle de ce fichier 380 377 // Création du handle: 381 378 $handle = "{".count($this->sessions)."}" ; 382 379 383 380 384 381 // Récupération du source à parser 385 386 387 388 389 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); 390 387 391 388 // Store the filename 392 389 $this->file_name[$handle]=$nomfichier; 393 390 394 391 // Parse les zones 395 392 $this->parseZone($source); 396 393 397 394 // Création du tableau de session 398 395 $this->createSession($handle); 399 396 400 397 //Nettoyage des variables temporaires 401 398 $this->sources=NULL; 402 399 403 400 // Set global var. 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 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|"){ 424 421 // Close the current session and all his sub-session 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 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){ 475 472 // Fonction qui ouvre le fichier file et copie ce qu'il y a dedans dans une variable. 476 473 $tab=explode(".",$zone_var); 477 474 478 475 // Récupération nom de la zone et de la variable. 479 480 481 482 483 484 485 486 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 } 488 485 // Teste l'existence de la zone dans la liste 489 490 491 492 493 494 495 496 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); 497 494 498 495 //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; 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; 510 511 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 * 518 On 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) 521 Si $index contient ou est une clef de type zone.clef, la clef sera extraite du texte est servira d'index pour $array 522 523 Vincent 524 */ 525 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 513 598 514 599 515 600 // End VTemplate 516 517 601 } 602 $DEFINE_VTEMPLATE = 1; 518 603 } 519 604 ?>
Note: See TracChangeset
for help on using the changeset viewer.