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