Rev Author Line No. Line
944 miho 1 <?php
2  
3 // DirMetadata
4 // -----------
5 //
6 // Modul zpracování popisného souboru pro popis obsahu adresáře/projektu
7 //
8 // (c)miho www.mlab.cz 2007, free software
9 //
10 // Formát souboru DIRINFO viz komentáře v souboru DIRINFO
11 //
12  
13  
14 //require_once('Common.php'); // Společné funkce
15  
16  
17 // Objekt pro zpracování informace o adresáři
18 class DirMetadata
19 {
20 public $DirData; // Sem se načtou data o adresáři v podobě klíč=>hodnota
21 private $Valid; // Zde je příznak platnosti
22  
23 function LoadDirInfo($FileName, $Lang)
1869 kaklik 24 // Funkce načte informace ze souboru $FileName do vlastní paměti
944 miho 25 // Cesta je od DOCUMENT_ROOT.
26 // Funkce bere v potaz zadaný jazyk, pokud není pro daný jazyk
27 // informace dostupná, použije se infromace bez udaného jazyka.
28 // Pokud není k dispozici soubor, vrací false.
29 // Soubor může být prázdný a není to chyba.
30 {
31 // Zruš předchozí informaci
32 $this->Valid = FALSE;
33 $this->DirData = array();
34  
35 // Jméno popisného souboru na cestě
36 $FileName = $_SERVER['DOCUMENT_ROOT'].$FileName;
37  
38 // Ověř existenci popisného souboru
39 if (!is_file($FileName))
40 return FALSE;
41  
42 // Načti popisný soubor
43 $File = @file($FileName);
44 if ($File===FALSE)
45 return FALSE;
46  
47 // Vyhoď komentáře (po řádcích)
48 foreach($File as $Key => $Line)
49 if (substr(ltrim($Line), 0, 2) == '//')
50 unset($File[$Key]);
51  
52 // Sestav z pole jeden retězec
53 $File = implode($File);
54  
55 // Vyhledej v souboru informace
56 $PatternKey = '\[(?P<Key>[a-z,A-Z,0-9,\-\_\.]+)\]';
57 $PatternKeyNext = '(?=\[(?:[a-z,A-Z,0-9,\-\_\.]+)\])';
58 $PatternValue = '(?P<Value>.*?)';
59 $Pattern = '/'.$PatternKey.'\s*'.$PatternValue.'\s*'.$PatternKeyNext.'/su';
60 preg_match_all($Pattern, $File, $Temp);
61  
62 // Sestav pole dat
63 $Data = array();
64 foreach($Temp['Key'] as $Key => $KeyName)
65 {
66 $Data[$KeyName] = trim(htmlspecialchars($Temp['Value'][$Key], ENT_NOQUOTES));
67 //echo '{'.$KeyName.'->'.$Data[$KeyName].'<-}'."\n";
68 }
69 unset($Temp);
70  
71 // Aplikuj jazyk
72 // Priorita je "uvedený jazyk"/"bez jazyka"
73 foreach($Data as $Key => $Value) // projdi vše
74 {
75 $Temp = explode('.', $Key, 2); // základní část klíče
76 if (isset($Temp[1])) // existuje přípona
77 {
78 if ($Temp[1] == $Lang) // přípona
79 $Data[$Temp[0]] = $Value; // zkopíruj jazykovou hodnotu
80 unset($Data[$Key]); // klíč s příponou vyhoď
81 }
82 }
83  
84 // Uschovej si získaná data
85 $this->Valid = TRUE;
86 $this->DirData = $Data;
87  
88 // Soubor byl nalezen a načten
89 return TRUE;
90 }
91  
92  
93 function GetVariable($Key)
94 // Vrací řetězec s informaci podle klíče
95 // Když data nejsou, vrací prázdný řetězec
96 // Klíčem je jméno informace ze souboru DIRINFO bez jazykové přípony
97 {
98 // Test na přítomnost informace
99 if (isset($this->DirData[$Key]))
100 return $this->DirData[$Key];
101 else
102 return '';
103 }
104  
105 function GetString($VarName, $Wrap=0)
106 // Vrátí parametr jako jeden řetězec s redukovanými bílými znaky
107 // Volitelně vloží odřádkování do delších řetězců
108 {
109 $Temp = $this->GetVariable($VarName);
110 $Temp = preg_replace('/\s+/su', ' ', $Temp);
111 if ($Wrap!=0)
112 wordwrap($Temp, $Wrap);
113 return $Temp;
114 }
115  
116 // function GetList
117  
118 function GetValid()
119 // Vrátí TRUE pokud je načtená informace o adresáři
120 {
121 return $this->Valid;
122 }
123  
124 }
125  
126 /*
127 function WrapString($String, $Wrap=0)
128 // Volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet
129 // znaků a odstranění nadbytečných mezer
130 {
131 if ($Wrap!=0)
132 {
133 // Proveď zalámání hodnoty
134 preg_replace('/\s+/su', ' ', $Temp);
135 $String = wordwrap($String, $Wrap);
136 }
137 return $String;
138 }
139  
140 */
141 ?>