1 | <?php |
---|
2 | /***************************************************************** |
---|
3 | * VIRTUAL-TEMPLATE |
---|
4 | * |
---|
5 | * Version : 1.3.2 Base Edition ( Decembre 2003 ) build 1 |
---|
6 | * |
---|
7 | * Address : http://vtemplate.sourceforge.net |
---|
8 | * |
---|
9 | * Authors: |
---|
10 | * + THIEBAUT Jean-Baptiste(J.Baptiste@leweby.com) - http://www.leweby.com . |
---|
11 | * + CAMPANA François (fc@netouaibe.com). |
---|
12 | * Licence: GPL. |
---|
13 | * |
---|
14 | * |
---|
15 | * |
---|
16 | * |
---|
17 | *****************************************************************/ |
---|
18 | |
---|
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"; |
---|
46 | $var = $arg[1]; |
---|
47 | $zone = $arg[0]; |
---|
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"; |
---|
52 | $var = $arg[1]; |
---|
53 | $zone = $arg[0]; |
---|
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"; |
---|
94 | $var = $arg[1]; |
---|
95 | $file = $arg[0]; |
---|
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"; |
---|
100 | $var = $arg[2]; |
---|
101 | $zone = $arg[1]; |
---|
102 | $fichier = $arg[0]; |
---|
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 | { |
---|
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 | } |
---|
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. |
---|
250 | |
---|
251 | /**************************************************************** |
---|
252 | Parsing Functions for Template files. ( PF 1.0 ) |
---|
253 | ****************************************************************/ |
---|
254 | |
---|
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 | |
---|
307 | /**************************************************************** |
---|
308 | Session Management functions ( SMF 1.0 ) |
---|
309 | ****************************************************************/ |
---|
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 | // 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 | } |
---|
323 | |
---|
324 | |
---|
325 | /**************************************************************** |
---|
326 | Global Variable Management Functions ( GVMF 1.0 ) |
---|
327 | ****************************************************************/ |
---|
328 | |
---|
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){ |
---|
351 | // Set Global var into the opened file |
---|
352 | foreach($this->v_global as $name => $val){ |
---|
353 | $this->setGFile($handle,$name,$val); |
---|
354 | } |
---|
355 | return 1; |
---|
356 | } |
---|
357 | |
---|
358 | // Fin VTemplate_Private |
---|
359 | } |
---|
360 | |
---|
361 | |
---|
362 | class VTemplate extends VTemplate_Private{ |
---|
363 | /**************************************** |
---|
364 | * Public Class. * |
---|
365 | * ***************************************/ |
---|
366 | |
---|
367 | |
---|
368 | /**************************************************************** |
---|
369 | Core Functions |
---|
370 | *****************************************************************/ |
---|
371 | |
---|
372 | |
---|
373 | function Open($nomfichier){ |
---|
374 | // Ouverture d'un fichier source et retourne le handle de ce fichier |
---|
375 | // Création du handle: |
---|
376 | $handle = "{".count($this->sessions)."}" ; |
---|
377 | |
---|
378 | |
---|
379 | // Récupération du source à parser |
---|
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); |
---|
385 | |
---|
386 | // Store the filename |
---|
387 | $this->file_name[$handle]=$nomfichier; |
---|
388 | |
---|
389 | // Parse les zones |
---|
390 | $this->parseZone($source); |
---|
391 | |
---|
392 | // Création du tableau de session |
---|
393 | $this->createSession($handle); |
---|
394 | |
---|
395 | //Nettoyage des variables temporaires |
---|
396 | $this->sources=NULL; |
---|
397 | |
---|
398 | // Set global var. |
---|
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|"){ |
---|
419 | // Close the current session and all his sub-session |
---|
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){ |
---|
470 | // Fonction qui ouvre le fichier file et copie ce qu'il y a dedans dans une variable. |
---|
471 | $tab=explode(".",$zone_var); |
---|
472 | |
---|
473 | // Récupération nom de la zone et de la variable. |
---|
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 | } |
---|
483 | // Teste l'existence de la zone dans la liste |
---|
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); |
---|
492 | |
---|
493 | //Enregistre la variable |
---|
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; |
---|
509 | |
---|
510 | if ($display) echo $c_genere; else return ($c_genere); |
---|
511 | } |
---|
512 | //fonction complementaire version BETA |
---|
513 | |
---|
514 | /* |
---|
515 | * |
---|
516 | On peut l'utiliser : |
---|
517 | - SetVarTab($array): tout les couples clef/valeur sont valorisées |
---|
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) |
---|
519 | Si $index contient ou est une clef de type zone.clef, la clef sera extraite du texte est servira d'index pour $array |
---|
520 | |
---|
521 | Vincent |
---|
522 | */ |
---|
523 | |
---|
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; |
---|
589 | } |
---|
590 | ?> |
---|