Rev 4985 Rev 4987
1 <?php 1 <?php
2   2  
3 error_reporting(E_ALL); // nastavení varování při ladění 3 error_reporting(E_ALL); // nastavení varování při ladění
4   4  
5 require_once('Common.php'); // Společné funkce 5 require_once('Common.php'); // Společné funkce
6 require_once('TemplateEngine.php'); // Stroj pro práci s templejty 6 require_once('TemplateEngine.php'); // Stroj pro práci s templejty
7 require_once('DirMetadata.php'); // Modul pro načítání informace o adresářích 7 require_once('DirMetadata.php'); // Modul pro načítání informace o adresářích
8   8  
9 define('WRAP', 70, true); // Lámání řetězcových hodnot 9 define('WRAP', 70); // Lámání řetězcových hodnot
10   10  
11 // Stavová informace 11 // Stavová informace
12 // ----------------- 12 // -----------------
13 // 13 //
14 // Tento skript používá pro přenesení stavu ke kliemtovi a zpět dvě stavové 14 // Tento skript používá pro přenesení stavu ke kliemtovi a zpět dvě stavové
15 // proměnné prostřednictvím odkazu (zpracová ModRewrite, definováno v konfiguraci webu). 15 // proměnné prostřednictvím odkazu (zpracová ModRewrite, definováno v konfiguraci webu).
16 // Jsou to: 16 // Jsou to:
17 // 17 //
18 // lang - zde je kód jazyka, chybějící kód se přesměruje na angličtinu 18 // lang - zde je kód jazyka, chybějící kód se přesměruje na angličtinu
19 // 19 //
20 // path - zde se uvádí cesta vůči DOCUMENT_ROOT webu, neplatná cesta se přesměruje 20 // path - zde se uvádí cesta vůči DOCUMENT_ROOT webu, neplatná cesta se přesměruje
21 // na root 21 // na root
22 // 22 //
23   23  
24 // Vyzvedni si parametry z URL 24 // Vyzvedni si parametry z URL
25 // --------------------------- 25 // ---------------------------
26   26  
27 // Vyzvedni jazyk z předaného parametru 27 // Vyzvedni jazyk z předaného parametru
28 $Lang = (is_string($_GET['lang'])) ? $_GET['lang'] : $Lang = 'en'; 28 $Lang = (is_string($_GET['lang'])) ? $_GET['lang'] : $Lang = 'en';
29 $Params['lang'] = $Lang; 29 $Params['lang'] = $Lang;
30 //print "Lang:{$Lang}<br>"; 30 //print "Lang:{$Lang}<br>";
31   31  
32   32  
33 // Převezmi cestu, a odstraň lomítko na konci (na začátku lomítko je) 33 // Převezmi cestu, a odstraň lomítko na konci (na začátku lomítko je)
34 $Path = (is_string($_GET['path'])) ? $_GET['path'] : $Path = ''; 34 $Path = (is_string($_GET['path'])) ? $_GET['path'] : $Path = '';
35 $Path = '/'.ltrim(rtrim($Path, '/'), '/'); 35 $Path = '/'.ltrim(rtrim($Path, '/'), '/');
36   36  
37 // Decode entities ? 37 // Decode entities ?
38 // $LinkFull=htmlspecialchars_decode($LinkFull); 38 // $LinkFull=htmlspecialchars_decode($LinkFull);
39   39  
40 // Ulož 40 // Ulož
41 $Params['path'] = $Path; 41 $Params['path'] = $Path;
42 //print "Path:{$Path}<br>"; 42 //print "Path:{$Path}<br>";
43   43  
44 // Načti metadata pro sekci (první adresář) 44 // Načti metadata pro sekci (první adresář)
45 // Nikdy nevěř tomu, co přijde od klienta 45 // Nikdy nevěř tomu, co přijde od klienta
46 $SectionDirInfo = new DirMetadata(); 46 $SectionDirInfo = new DirMetadata();
47 $SectionDirInfo->LoadDirInfo('/'.GetSection($Path).'/'.DIRINFO, $Lang); 47 $SectionDirInfo->LoadDirInfo('/'.GetSection($Path).'/'.DIRINFO, $Lang);
48 if($Path!='/') 48 if($Path!='/')
49 { 49 {
50 if(!$SectionDirInfo->GetValid()) 50 if(!$SectionDirInfo->GetValid())
51 Redirect('', $Lang); // Neexistující sekci přesměruj na root 51 Redirect('', $Lang); // Neexistující sekci přesměruj na root
52 } 52 }
53   53  
54 // Pokus se načíst informace jako by cesta vedla do adresáře 54 // Pokus se načíst informace jako by cesta vedla do adresáře
55 $ThisDirInfo = new DirMetadata(); 55 $ThisDirInfo = new DirMetadata();
56 $ThisDirInfo->LoadDirInfo($Path.'/'.DIRINFO, $Lang); 56 $ThisDirInfo->LoadDirInfo($Path.'/'.DIRINFO, $Lang);
57 if($ThisDirInfo->GetValid()) 57 if($ThisDirInfo->GetValid())
58 { 58 {
59 // Založ objekt templejtu a načti jej 59 // Založ objekt templejtu a načti jej
60 $Template = new TemplateEngine(); 60 $Template = new TemplateEngine();
61 $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_LISTDIR, $Lang); 61 $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_LISTDIR, $Lang);
62 if ($error!='') 62 if ($error!='')
63 Error($error); 63 Error($error);
64   64  
65 // Generuj dynamický obsah do proměnných objektu Template 65 // Generuj dynamický obsah do proměnných objektu Template
66 ListDir($SectionDirInfo, $ThisDirInfo, $Template, $Params); 66 ListDir($SectionDirInfo, $ThisDirInfo, $Template, $Params);
67   67  
68 // Odešli výsledek klientovi 68 // Odešli výsledek klientovi
69 echo $Template->GetPage(); 69 echo $Template->GetPage();
70 return; 70 return;
71 } 71 }
72   72  
73 // Pokus se načíst informace jako by cesta vedla do projektu 73 // Pokus se načíst informace jako by cesta vedla do projektu
74 $ThisDirInfo->LoadDirInfo($Path.'/'.PRJINFO, $Lang); 74 $ThisDirInfo->LoadDirInfo($Path.'/'.PRJINFO, $Lang);
75 if($ThisDirInfo->GetValid()) 75 if($ThisDirInfo->GetValid())
76 { 76 {
77 // Založ objekt templejtu a načti jej 77 // Založ objekt templejtu a načti jej
78 $Template = new TemplateEngine(); 78 $Template = new TemplateEngine();
79 $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_LISTPRJ, $Lang); 79 $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_LISTPRJ, $Lang);
80 if ($error!='') 80 if ($error!='')
81 Error($error); 81 Error($error);
82   82  
83 // Generuj dynamický obsah do proměnných objektu Template 83 // Generuj dynamický obsah do proměnných objektu Template
84 ListPrj($SectionDirInfo, $ThisDirInfo, $Template, $Params); 84 ListPrj($SectionDirInfo, $ThisDirInfo, $Template, $Params);
85   85  
86 // Odešli výsledek klientovi 86 // Odešli výsledek klientovi
87 echo $Template->GetPage(); 87 echo $Template->GetPage();
88 return; 88 return;
89 } 89 }
90   90  
91 // Neplatná cesta (ani adresář, ani projekt) 91 // Neplatná cesta (ani adresář, ani projekt)
92 Redirect('/', $Lang); 92 Redirect('/', $Lang);
93 return; 93 return;
94   94  
95   95  
96 function CreateListLinkHTML($Params, $DirName='', $Title='') 96 function CreateListLinkHTML($Params, $DirName='', $Title='')
97 { 97 {
98 // Spoj cestu a (volitelné) jméno adresáře 98 // Spoj cestu a (volitelné) jméno adresáře
99 if ($DirName!='') 99 if ($DirName!='')
100 $Params['path'] = $Params['path'].'/'.$DirName; 100 $Params['path'] = $Params['path'].'/'.$DirName;
101   101  
102 // Odvoď jméno z názvu adresáře 102 // Odvoď jméno z názvu adresáře
103 $DirName = basename($Params['path']); 103 $DirName = basename($Params['path']);
104 if ($DirName == '') 104 if ($DirName == '')
105 { 105 {
106 $DirName = '(root)'; 106 $DirName = '(root)';
107 } 107 }
108   108  
109 // Jméno skriptu (statické jméno je pomocí mod_rewrite přesměrováno na tento skript) 109 // Jméno skriptu (statické jméno je pomocí mod_rewrite přesměrováno na tento skript)
110 $ScriptName = '/' . LISTSCRIPT; 110 $ScriptName = '/' . LISTSCRIPT;
111 $ScriptName .= ($Params['lang'] !== '') ? '.'.$Params['lang'] : ''; 111 $ScriptName .= ($Params['lang'] !== '') ? '.'.$Params['lang'] : '';
112 $ScriptName .= '.html'; 112 $ScriptName .= '.html';
113   113  
114 // Sestav odkaz 114 // Sestav odkaz
115 $Link = "<a href=\"{$Params['path']}{$ScriptName}\""; 115 $Link = "<a href=\"{$Params['path']}{$ScriptName}\"";
116 if ($Title!='') 116 if ($Title!='')
117 $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; 117 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
118 $Link .= ">$DirName</a>"; 118 $Link .= ">$DirName</a>";
119   119  
120 return $Link; 120 return $Link;
121 } 121 }
122   122  
123   123  
124 function CreateListLinkPathHTML($Params, $Title) 124 function CreateListLinkPathHTML($Params, $Title)
125 // Vstupem je cesta (začínající /) od DOCUMENT_ROOT 125 // Vstupem je cesta (začínající /) od DOCUMENT_ROOT
126 // Výsledkem je řádka odkazů na jednotlivé adresáře cesty 126 // Výsledkem je řádka odkazů na jednotlivé adresáře cesty
127 // Odkazy jsou odkazy na skript (obsahuje cestu i jazyk) 127 // Odkazy jsou odkazy na skript (obsahuje cestu i jazyk)
128 { 128 {
129 // Rozděl cestu na kousky 129 // Rozděl cestu na kousky
130 $Parts = explode('/', $Params['path']); 130 $Parts = explode('/', $Params['path']);
131 if ($Parts[0]=='') 131 if ($Parts[0]=='')
132 array_shift($Parts); // vyhoď případnou prázdnou položku 132 array_shift($Parts); // vyhoď případnou prázdnou položku
133   133  
134 // Začínáme od rootu 134 // Začínáme od rootu
135 $TempPath = ''; 135 $TempPath = '';
136   136  
137 // Odkaz na root (je vždy) 137 // Odkaz na root (je vždy)
138 $Params['path'] = $TempPath; 138 $Params['path'] = $TempPath;
139 $Link = CreateListLinkHTML($Params, '', $Title); 139 $Link = CreateListLinkHTML($Params, '', $Title);
140   140  
141 // Je něco víc než root? 141 // Je něco víc než root?
142 if (isset($Parts[0]) && $Parts[0]!='') 142 if (isset($Parts[0]) && $Parts[0]!='')
143 { 143 {
144 // Odkaz na všechny další adresáře cesty 144 // Odkaz na všechny další adresáře cesty
145 foreach($Parts as $Key => $Value) 145 foreach($Parts as $Key => $Value)
146 { 146 {
147 // Přidej adresář 147 // Přidej adresář
148 $TempPath .= '/'.$Value; 148 $TempPath .= '/'.$Value;
149   149  
150 // Vyrob odkaz 150 // Vyrob odkaz
151 $Link .= " /\n"; 151 $Link .= " /\n";
152 $Params['path'] = $TempPath; 152 $Params['path'] = $TempPath;
153 $Link .= CreateListLinkHTML($Params, '', $Title); 153 $Link .= CreateListLinkHTML($Params, '', $Title);
154 } 154 }
155 } 155 }
156   156  
157 // Vrať výsledek 157 // Vrať výsledek
158 return $Link; 158 return $Link;
159 } 159 }
160   160  
161   161  
162 function ListDir($SectionDirInfo, $ThisDirInfo, $Template, $Params) 162 function ListDir($SectionDirInfo, $ThisDirInfo, $Template, $Params)
163 // Tato funkce vkládá informace do objektu Template pro výpis seznamu 163 // Tato funkce vkládá informace do objektu Template pro výpis seznamu
164 // položek v adresáři (seznam projektů a sekcí v zadaném adresáři) 164 // položek v adresáři (seznam projektů a sekcí v zadaném adresáři)
165 { 165 {
166 // Lokálně používané parametry pěkně při ruce 166 // Lokálně používané parametry pěkně při ruce
167 $Path = $Params['path']; 167 $Path = $Params['path'];
168 $Lang = $Params['lang']; 168 $Lang = $Params['lang'];
169   169  
170 // HTML hlavička - doplň sekci 170 // HTML hlavička - doplň sekci
171 $Template->SetVariable('InfoSection', GetSection($Path)); 171 $Template->SetVariable('InfoSection', GetSection($Path));
172   172  
173 // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře) 173 // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře)
174 // do proměnných templejtu 174 // do proměnných templejtu
175 foreach($SectionDirInfo->DirData as $Key => $Value) 175 foreach($SectionDirInfo->DirData as $Key => $Value)
176 { 176 {
177 $Template->SetVariable($Key, $Value, WRAP); 177 $Template->SetVariable($Key, $Value, WRAP);
178 } 178 }
179 foreach($ThisDirInfo->DirData as $Key => $Value) 179 foreach($ThisDirInfo->DirData as $Key => $Value)
180 { 180 {
181 $Template->SetVariable($Key, $Value, WRAP); 181 $Template->SetVariable($Key, $Value, WRAP);
182 } 182 }
183   183  
184 // Klikací řádka s cestou 184 // Klikací řádka s cestou
185 $Template->SetVariable('InfoPath', 185 $Template->SetVariable('InfoPath',
186 CreateListLinkPathHTML($Params, $Template->GetString('InfoPathTitle'))); 186 CreateListLinkPathHTML($Params, $Template->GetString('InfoPathTitle')));
187   187  
188 // Permalink 188 // Permalink
189 $Template->SetVariable('InfoPermaLink', PermaLinkCreateLink($Path)); 189 $Template->SetVariable('InfoPermaLink', PermaLinkCreateLink($Path));
190   190  
191 // Procházej adresář 191 // Procházej adresář
192 // ----------------- 192 // -----------------
193   193  
194   194  
195 // Odstraň lomítko u prázdné cesty aby se nezdvojovalo 195 // Odstraň lomítko u prázdné cesty aby se nezdvojovalo
196 if ($Params['path']=='/') 196 if ($Params['path']=='/')
197 $Params['path'] = ''; 197 $Params['path'] = '';
198   198  
199 // Objekt pro načítání informací o adresářích a projektech 199 // Objekt pro načítání informací o adresářích a projektech
200 $DirInfo = new DirMetadata(); 200 $DirInfo = new DirMetadata();
201   201  
202 // Abych nešahal pořád do objektu, použiju proměnnou 202 // Abych nešahal pořád do objektu, použiju proměnnou
203 $Glue = $Template->GetVariable('InfoGlue'); 203 $Glue = $Template->GetVariable('InfoGlue');
204   204  
205 // Sem se střádá mezivýsledek 205 // Sem se střádá mezivýsledek
206 // Zvlášť adresáře a projekty aby byly oddělené ve výsledku 206 // Zvlášť adresáře a projekty aby byly oddělené ve výsledku
207 $LinesDir = ''; // Adresáře 207 $LinesDir = ''; // Adresáře
208 $LinesPrj = ''; // Projekty 208 $LinesPrj = ''; // Projekty
209   209  
210 // Procházení adresářem 210 // Procházení adresářem
211 $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); 211 $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR);
212   212  
213 // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči 213 // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči
214 foreach ($Dir as $Key => $DirName) 214 foreach ($Dir as $Key => $DirName)
215 { 215 {
216 $DirName = basename($DirName); 216 $DirName = basename($DirName);
217 $NewDir[$DirName] = $DirName; 217 $NewDir[$DirName] = $DirName;
218 } 218 }
219 $Dir = $NewDir; 219 $Dir = $NewDir;
220 unset($NewDir); 220 unset($NewDir);
221   221  
222 // Setřídění adresářů podle preferovaného třídění ze [SortPreferences] 222 // Setřídění adresářů podle preferovaného třídění ze [SortPreferences]
223 $NewDir = array(); 223 $NewDir = array();
224 $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění 224 $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění
225 if ($Sort!='') 225 if ($Sort!='')
226 { 226 {
227 $Sort = explode("\n", $Sort); 227 $Sort = explode("\n", $Sort);
228 // Najdi a přendej nalezené položky 228 // Najdi a přendej nalezené položky
229 foreach ($Sort as $Value) 229 foreach ($Sort as $Value)
230 { 230 {
231 $Value = trim($Value); 231 $Value = trim($Value);
232 if (isset($Dir[$Value])) 232 if (isset($Dir[$Value]))
233 { 233 {
234 // Zařaď do nového pole 234 // Zařaď do nového pole
235 $NewDir[] = $Value; 235 $NewDir[] = $Value;
236 // Vyhoď ze starého 236 // Vyhoď ze starého
237 unset($Dir[$Value]); 237 unset($Dir[$Value]);
238 } 238 }
239 } 239 }
240 // Přendej zbylé položky 240 // Přendej zbylé položky
241 foreach ($Dir as $Value) 241 foreach ($Dir as $Value)
242 { 242 {
243 $NewDir[] = $Value; 243 $NewDir[] = $Value;
244 } 244 }
245 $Dir = $NewDir; 245 $Dir = $NewDir;
246 unset($NewDir); 246 unset($NewDir);
247 } 247 }
248   248  
249 // Zpracování položek 249 // Zpracování položek
250 foreach ($Dir as $DirName) 250 foreach ($Dir as $DirName)
251 { 251 {
252 // Načti informace o (každém) adresáři 252 // Načti informace o (každém) adresáři
253 $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang); 253 $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang);
254 // Pokud to není adresář, tak načti informace o projektu 254 // Pokud to není adresář, tak načti informace o projektu
255 if (!$DirInfoValid) 255 if (!$DirInfoValid)
256 { 256 {
257 $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang) 257 $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang)
258 or 258 or
259 // Heuristika pro projekty, které ještě nemají popis 259 // Heuristika pro projekty, které ještě nemají popis
260 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC') 260 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC')
261 or 261 or
262 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH'); 262 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH');
263 } 263 }
264   264  
265 // Zkontroluj, zda jsme v platné sekci 265 // Zkontroluj, zda jsme v platné sekci
266 if ($DirInfoValid || $ProjectInfoValid) 266 if ($DirInfoValid || $ProjectInfoValid)
267 { 267 {
268 // Připrav si proměnné 268 // Připrav si proměnné
269 unset($Variables); 269 unset($Variables);
270 foreach($DirInfo->DirData as $Key => $Value) 270 foreach($DirInfo->DirData as $Key => $Value)
271 { 271 {
272 $Variables[$Key] = $DirInfo->GetString($Key, WRAP); 272 $Variables[$Key] = $DirInfo->GetString($Key, WRAP);
273 } 273 }
274   274  
275 $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) 275 $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription'))
276 : $DirName; 276 : $DirName;
277 $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150); 277 $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'));
278 $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); 278 $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP);
279 $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); 279 $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle'));
280 if (!$DirInfoValid) 280 if (!$DirInfoValid)
281 { 281 {
282 $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle')); 282 $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle'));
283 } 283 }
284 $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); 284 $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue);
285 $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); 285 $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue);
286 $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); 286 $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue);
287   287  
288 // Vlož info o dostupnosti na UST 288 // Vlož info o dostupnosti na UST
289 if($DirInfo->GetString('InfoBuyUST')!= '') 289 if($DirInfo->GetString('InfoBuyUST')!= '')
290 { 290 {
291 $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST'); 291 $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST');
292 } 292 }
293   293  
294 // Poukni proměnné do vzoru a střádej si výsledek 294 // Poukni proměnné do vzoru a střádej si výsledek
295 if ($DirInfoValid) 295 if ($DirInfoValid)
296 $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); 296 $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine'));
297 else 297 else
298 $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); 298 $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine'));
299 } 299 }
300 } 300 }
301   301  
302 // Slož k sobě obě části (adresář / separátor / projekt) 302 // Slož k sobě obě části (adresář / separátor / projekt)
303 if ($LinesDir!='' and $LinesPrj!='') 303 if ($LinesDir!='' and $LinesPrj!='')
304 $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj; 304 $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj;
305 else 305 else
306 $Lines = $LinesDir.$LinesPrj; 306 $Lines = $LinesDir.$LinesPrj;
307   307  
308 // Teď sestavené položky ulož do proměnné "InfoLine" objektu 308 // Teď sestavené položky ulož do proměnné "InfoLine" objektu
309 $Template->SetVariable('InfoLine', $Lines); 309 $Template->SetVariable('InfoLine', $Lines);
310 } 310 }
311   311  
312   312  
313 function ListPrj($SectionDirInfo, $ThisDirInfo, $Template, $Params) 313 function ListPrj($SectionDirInfo, $ThisDirInfo, $Template, $Params)
314 // Tato funkce vkládá informace do objektu Template pro výpis informací 314 // Tato funkce vkládá informace do objektu Template pro výpis informací
315 // o projektu (náhled, informace, odkazy na dokuemntaci etc.) 315 // o projektu (náhled, informace, odkazy na dokuemntaci etc.)
316 { 316 {
317 // Lokálně používané parametry pěkně při ruce 317 // Lokálně používané parametry pěkně při ruce
318 $Path = $Params['path']; 318 $Path = $Params['path'];
319 $Lang = $Params['lang']; 319 $Lang = $Params['lang'];
320   320  
321 // Abych nešahal pořád do objektu, použiju proměnnou 321 // Abych nešahal pořád do objektu, použiju proměnnou
322 $Glue = $Template->GetVariable('InfoGlue'); 322 $Glue = $Template->GetVariable('InfoGlue');
323   323  
324 // HTML hlavička - doplň sekci 324 // HTML hlavička - doplň sekci
325 $Template->SetVariable('InfoSection', GetSection($Path)); 325 $Template->SetVariable('InfoSection', GetSection($Path));
326   326  
327 // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře) 327 // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře)
328 // do proměnných templejtu 328 // do proměnných templejtu
329 foreach($SectionDirInfo->DirData as $Key => $Value) 329 foreach($SectionDirInfo->DirData as $Key => $Value)
330 { 330 {
331 $Template->SetVariable($Key, $Value, WRAP); 331 $Template->SetVariable($Key, $Value, WRAP);
332 } 332 }
333 foreach($ThisDirInfo->DirData as $Key => $Value) 333 foreach($ThisDirInfo->DirData as $Key => $Value)
334 { 334 {
335 $Template->SetVariable($Key, $Value, WRAP); 335 $Template->SetVariable($Key, $Value, WRAP);
336 } 336 }
337   337  
338 // Klikací řádka s cestou 338 // Klikací řádka s cestou
339 $Template->SetVariable('InfoPath', 339 $Template->SetVariable('InfoPath',
340 CreateListLinkPathHTML($Params, $Template->GetString('InfoPathTitle'))); 340 CreateListLinkPathHTML($Params, $Template->GetString('InfoPathTitle')));
341   341  
342 // Permalink 342 // Permalink
343 $Template->SetVariable('InfoPermaLink', PermaLinkCreateLink($Path)); 343 $Template->SetVariable('InfoPermaLink', PermaLinkCreateLink($Path));
344   344  
345   345  
346 // Zpracuj informace o projektu 346 // Zpracuj informace o projektu
347 // ---------------------------- 347 // ----------------------------
348   348  
349   349  
350 unset($Variables); 350 unset($Variables);
351   351  
352 // Převezmi data z popisu projektu 352 // Převezmi data z popisu projektu
353 foreach($ThisDirInfo->DirData as $Key => $Value) 353 foreach($ThisDirInfo->DirData as $Key => $Value)
354 { 354 {
355 $Variables[$Key] = $ThisDirInfo->GetString($Key, WRAP); 355 $Variables[$Key] = $ThisDirInfo->GetString($Key, WRAP);
356 } 356 }
357   357  
358 $Template->SetVariable('InfoVariables', $Variables); 358 $Template->SetVariable('InfoVariables', $Variables);
359   359  
360 // Odkaz na obrázky k projektu 360 // Odkaz na obrázky k projektu
361 $Template->SetVariable('InfoPictures', CreatePicturesLink($Path, $Template->GetString('InfoPicturesGlue'), 'Ilustrative Picture', '', 200)); 361 $Template->SetVariable('InfoPictures', CreatePicturesLink($Path, $Template->GetString('InfoPicturesGlue'), 'Ilustrative Picture', ''));
362   362  
363 // Data do tabulky 363 // Data do tabulky
364 $Template->SetVariable('InfoText', CreateFilesLink($Path.'/DOC/{HTML/*.[hH][tT][mM][lL],*.[pP][dD][fF]}', $Glue)); 364 $Template->SetVariable('InfoText', CreateFilesLink($Path.'/DOC/{HTML/*.[hH][tT][mM][lL],*.[pP][dD][fF]}', $Glue));
365   365  
366 $Template->SetVariable('InfoWebSVN', CreateSVNLink($Path, $Lang, $Template->GetString('InfoSVNTitle'))); 366 $Template->SetVariable('InfoWebSVN', CreateSVNLink($Path, $Lang, $Template->GetString('InfoSVNTitle')));
367   367  
368 $Variables['InfoName'] = basename($Path); 368 $Variables['InfoName'] = basename($Path);
369   369  
370 /* $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) 370 /* $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription'))
371 : $DirName; 371 : $DirName;
372 $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150); 372 $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150);
373 $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); 373 $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP);
374 $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); 374 $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle'));
375 if (!$DirInfoValid) 375 if (!$DirInfoValid)
376 { 376 {
377 $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle')); 377 $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle'));
378 } 378 }
379 $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); 379 $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue);
380 $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); 380 $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue);
381 $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); 381 $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue);
382   382  
383 // Vlož info o dostupnosti na UST 383 // Vlož info o dostupnosti na UST
384 if($DirInfo->GetString('InfoBuyUST')!= '') 384 if($DirInfo->GetString('InfoBuyUST')!= '')
385 { 385 {
386 $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST'); 386 $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST');
387 } 387 }
388 */ 388 */
389 // Poukni proměnné do vzoru a střádej si výsledek 389 // Poukni proměnné do vzoru a střádej si výsledek
390 $LinesPrj = $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); 390 $LinesPrj = $Template->Substitute($Variables, $Template->GetVariable('InfoLine'));
391 $Template->SetVariable('InfoLine', $LinesPrj); 391 $Template->SetVariable('InfoLine', $LinesPrj);
392   392  
393   393  
394 /* 394 /*
395 // Objekt pro načítání informací o adresářích a projektech 395 // Objekt pro načítání informací o adresářích a projektech
396 $DirInfo = new DirMetadata(); 396 $DirInfo = new DirMetadata();
397   397  
398 // Abych nešahal pořád do objektu, použiju proměnnou 398 // Abych nešahal pořád do objektu, použiju proměnnou
399 $Glue = $Template->GetVariable('InfoGlue'); 399 $Glue = $Template->GetVariable('InfoGlue');
400   400  
401 // Sem se střádá mezivýsledek 401 // Sem se střádá mezivýsledek
402 // Zvlášť adresáře a projekty aby byly oddělené ve výsledku 402 // Zvlášť adresáře a projekty aby byly oddělené ve výsledku
403 $LinesDir = ''; // Adresáře 403 $LinesDir = ''; // Adresáře
404 $LinesPrj = ''; // Projekty 404 $LinesPrj = ''; // Projekty
405   405  
406 // Procházení adresářem 406 // Procházení adresářem
407 $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); 407 $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR);
408   408  
409 // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči 409 // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči
410 foreach ($Dir as $Key => $DirName) 410 foreach ($Dir as $Key => $DirName)
411 { 411 {
412 $DirName = basename($DirName); 412 $DirName = basename($DirName);
413 $NewDir[$DirName] = $DirName; 413 $NewDir[$DirName] = $DirName;
414 } 414 }
415 $Dir = $NewDir; 415 $Dir = $NewDir;
416 unset($NewDir); 416 unset($NewDir);
417   417  
418 // Setřídění adresářů podle preferovaného třídění ze [SortPreferences] 418 // Setřídění adresářů podle preferovaného třídění ze [SortPreferences]
419 $NewDir = array(); 419 $NewDir = array();
420 $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění 420 $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění
421 if ($Sort!='') 421 if ($Sort!='')
422 { 422 {
423 $Sort = explode("\n", $Sort); 423 $Sort = explode("\n", $Sort);
424 // Najdi a přendej nalezené položky 424 // Najdi a přendej nalezené položky
425 foreach ($Sort as $Value) 425 foreach ($Sort as $Value)
426 { 426 {
427 $Value = trim($Value); 427 $Value = trim($Value);
428 if (isset($Dir[$Value])) 428 if (isset($Dir[$Value]))
429 { 429 {
430 // Zařaď do nového pole 430 // Zařaď do nového pole
431 $NewDir[] = $Value; 431 $NewDir[] = $Value;
432 // Vyhoď ze starého 432 // Vyhoď ze starého
433 unset($Dir[$Value]); 433 unset($Dir[$Value]);
434 } 434 }
435 } 435 }
436 // Přendej zbylé položky 436 // Přendej zbylé položky
437 foreach ($Dir as $Value) 437 foreach ($Dir as $Value)
438 { 438 {
439 $NewDir[] = $Value; 439 $NewDir[] = $Value;
440 } 440 }
441 $Dir = $NewDir; 441 $Dir = $NewDir;
442 unset($NewDir); 442 unset($NewDir);
443 } 443 }
444   444  
445 // Zpracování položek 445 // Zpracování položek
446 foreach ($Dir as $DirName) 446 foreach ($Dir as $DirName)
447 { 447 {
448 // Načti informace o (každém) adresáři 448 // Načti informace o (každém) adresáři
449 $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang); 449 $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang);
450 // Pokud to není adresář, tak načti informace o projektu 450 // Pokud to není adresář, tak načti informace o projektu
451 if (!$DirInfoValid) 451 if (!$DirInfoValid)
452 { 452 {
453 $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang) 453 $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang)
454 or 454 or
455 // Heuristika pro projekty, které ještě nemají popis 455 // Heuristika pro projekty, které ještě nemají popis
456 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC') 456 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC')
457 or 457 or
458 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH'); 458 $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH');
459 } 459 }
460   460  
461 // Zkontroluj, zda jsme v platné sekci 461 // Zkontroluj, zda jsme v platné sekci
462 if ($DirInfoValid || $ProjectInfoValid) 462 if ($DirInfoValid || $ProjectInfoValid)
463 { 463 {
464 // Připrav si proměnné 464 // Připrav si proměnné
465 unset($Variables); 465 unset($Variables);
466 foreach($DirInfo->DirData as $Key => $Value) 466 foreach($DirInfo->DirData as $Key => $Value)
467 { 467 {
468 $Variables[$Key] = $DirInfo->GetString($Key, WRAP); 468 $Variables[$Key] = $DirInfo->GetString($Key, WRAP);
469 } 469 }
470   470  
471 $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) 471 $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription'))
472 : $DirName; 472 : $DirName;
473 $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150); 473 $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150);
474 $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); 474 $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP);
475 $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); 475 $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle'));
476 if (!$DirInfoValid) 476 if (!$DirInfoValid)
477 { 477 {
478 $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle')); 478 $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle'));
479 } 479 }
480 $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); 480 $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue);
481 $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); 481 $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue);
482 $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); 482 $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue);
483   483  
484 // Vlož info o dostupnosti na UST 484 // Vlož info o dostupnosti na UST
485 if($DirInfo->GetString('InfoBuyUST')!= '') 485 if($DirInfo->GetString('InfoBuyUST')!= '')
486 { 486 {
487 $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST'); 487 $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST');
488 } 488 }
489   489  
490 // Poukni proměnné do vzoru a střádej si výsledek 490 // Poukni proměnné do vzoru a střádej si výsledek
491 if ($DirInfoValid) 491 if ($DirInfoValid)
492 $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); 492 $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine'));
493 else 493 else
494 $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); 494 $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine'));
495 } 495 }
496 } 496 }
497   497  
498 // Slož k sobě obě části (adresář / separátor / projekt) 498 // Slož k sobě obě části (adresář / separátor / projekt)
499 if ($LinesDir!='' and $LinesPrj!='') 499 if ($LinesDir!='' and $LinesPrj!='')
500 $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj; 500 $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj;
501 else 501 else
502 $Lines = $LinesDir.$LinesPrj; 502 $Lines = $LinesDir.$LinesPrj;
503   503  
504 // Teď sestavené položky ulož do proměnné "InfoLine" objektu 504 // Teď sestavené položky ulož do proměnné "InfoLine" objektu
505 $Template->SetVariable('InfoLine', $Lines); 505 $Template->SetVariable('InfoLine', $Lines);
506 */ 506 */
507   507  
508 } 508 }
509   509  
510   510  
511 // ************************************* 511 // *************************************
512   512  
513   513  
514 function WrapString($String, $Wrap=0) 514 function WrapString($String, $Wrap=0)
515 // Provede odstranění nadbytečných bílých znaků 515 // Provede odstranění nadbytečných bílých znaků
516 // a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků 516 // a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků
517 { 517 {
518 // Odstaň bílé znaky 518 // Odstaň bílé znaky
519 $String = preg_replace('/\s+/su', ' ', $String); 519 $String = preg_replace('/\s+/su', ' ', $String);
520   520  
521 // Volitelné nalámání 521 // Volitelné nalámání
522 if ($Wrap!=0) 522 if ($Wrap!=0)
523 $String = wordwrap($String, $Wrap); 523 $String = wordwrap($String, $Wrap);
524   524  
525 return $String; 525 return $String;
526 } 526 }
527   527  
528   528  
529 function xxxCheckWebPath($Path) 529 function xxxCheckWebPath($Path)
530 // Zadaná cesta se chápe jako cesta uvnitř webu (vzhledem k document root). 530 // Zadaná cesta se chápe jako cesta uvnitř webu (vzhledem k document root).
531 // Případné relativní části (/../..) převede na absolutní a zkontroluje 531 // Případné relativní části (/../..) převede na absolutní a zkontroluje
532 // výsledek, zda nevybočuje mimo web. 532 // výsledek, zda nevybočuje mimo web.
533 // Na začátku nechá lomítko, na konci ho odstraní. 533 // Na začátku nechá lomítko, na konci ho odstraní.
534 // Pokud je výsledná cesta neplatná, vrátí prázdný řetězec. Kontroluje, zda 534 // Pokud je výsledná cesta neplatná, vrátí prázdný řetězec. Kontroluje, zda
535 // zadaný adresář existuje. 535 // zadaný adresář existuje.
536 { 536 {
537 // Převeď cestu na opravdovou, odstraň relativní odkazy 537 // Převeď cestu na opravdovou, odstraň relativní odkazy
538 $Path = realpath($_SERVER['DOCUMENT_ROOT'].$Path); 538 $Path = realpath($_SERVER['DOCUMENT_ROOT'].$Path);
539   539  
540 // Zkontroluj, zda jsme nevybočili z webu 540 // Zkontroluj, zda jsme nevybočili z webu
541 if ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_SERVER['DOCUMENT_ROOT']) ) ) 541 if ( str_starts_with($Path, $_SERVER['DOCUMENT_ROOT']) )
542 { 542 {
543 // Shoda - odstraň DOCUMENT_ROOT část cesty 543 // Shoda - odstraň DOCUMENT_ROOT část cesty
544 return substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) ); 544 return substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) );
545 } 545 }
546 else 546 else
547 { 547 {
548 // Vybočili jsme z webu 548 // Vybočili jsme z webu
549 return ''; 549 return '';
550 } 550 }
551 } 551 }
552   552  
553   553  
554 function GetSection($Path) 554 function GetSection($Path)
555 // Vrátí první část cesty (to je to, co nazýváme sekce) 555 // Vrátí první část cesty (to je to, co nazýváme sekce)
556 { 556 {
557 // Ignoruj lomítko na začátku 557 // Ignoruj lomítko na začátku
558 $Path = ltrim($Path, '/'); 558 $Path = ltrim($Path, '/');
559   559  
560 // Vykousni první slovo až po lomítko 560 // Vykousni první slovo až po lomítko
561 $Section = substr($Path, 0, strpos($Path.'/', '/')); 561 $Section = substr($Path, 0, strpos($Path.'/', '/'));
562   562  
563 // Ošetři root 563 // Ošetři root
564 if ($Section=='') 564 if ($Section=='')
565 $Section = "(root)"; 565 $Section = "(root)";
566   566  
567 // Vrať výsledek 567 // Vrať výsledek
568 return $Section; 568 return $Section;
569 } 569 }
570   570  
571   571  
572 function CreateLink($InternetWebPath, $Title='') 572 function CreateLink($InternetWebPath, $Title='')
573 // Vstupem je cesta do jiného webu. 573 // Vstupem je cesta do jiného webu.
574 // a volitelně title (zobrazí se při najetí myši na odkaz). 574 // a volitelně title (zobrazí se při najetí myši na odkaz).
575 // Vrací řetězec s odkazem 575 // Vrací řetězec s odkazem
576 { 576 {
577 $Link = '<a href="'.$InternetWebPath.'"'; 577 $Link = '<a href="'.$InternetWebPath.'"';
578 if ($Title != '') 578 if ($Title != '')
579 $Link .= "\n".' title="'.$Title.'"'; 579 $Link .= "\n".' title="'.$Title.'"';
580 $Link .= '>'; 580 $Link .= '>';
581 $Link .= $Title; 581 $Link .= $Title;
582 $Link .= '</a>'; 582 $Link .= '</a>';
583   583  
584 return $Link; 584 return $Link;
585 } 585 }
586   586  
587   587  
588 function CreateScriptLink($Params, $DirName='', $Title='') 588 function CreateScriptLink($Params, $DirName='', $Title='')
589 // Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako 589 // Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako
590 // pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě 590 // pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě
591 // v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root 591 // v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root
592 { 592 {
593 // Připoj volitelné jméno adresáře 593 // Připoj volitelné jméno adresáře
594 if ($DirName!='') 594 if ($DirName!='')
595 $Params['path'] = $Params['path'].'/'.$DirName; 595 $Params['path'] = $Params['path'].'/'.$DirName;
596   596  
597 // Odvoď jméno z názvu adresáře 597 // Odvoď jméno z názvu adresáře
598 $DirName = basename($Params['path']); 598 $DirName = basename($Params['path']);
599 if ($DirName == '') 599 if ($DirName == '')
600 { 600 {
601 $DirName = '(root)'; 601 $DirName = '(root)';
602 $Params['path'] = '/'; 602 $Params['path'] = '/';
603 } 603 }
604   604  
605 // Zpracuj pole parametrů 605 // Zpracuj pole parametrů
606 $ParamsLine = ''; 606 $ParamsLine = '';
607 $LocalGlue = ''; 607 $LocalGlue = '';
608 foreach($Params as $Key => $Value) 608 foreach($Params as $Key => $Value)
609 { 609 {
610 $ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value); 610 $ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value);
611 $LocalGlue = '&amp;'; 611 $LocalGlue = '&amp;';
612 } 612 }
613 unset($LocalGlue); 613 unset($LocalGlue);
614   614  
615 // Sestav odkaz 615 // Sestav odkaz
616 $Link = '<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$ParamsLine.'"'; 616 $Link = '<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$ParamsLine.'"';
617 if ($Title!='') 617 if ($Title!='')
618 $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; 618 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
619 $Link .= ">$DirName</a>"; 619 $Link .= ">$DirName</a>";
620   620  
621 return $Link; 621 return $Link;
622 } 622 }
623   623  
624   624  
625 function CreateScriptLinkPath($Params, $Title) 625 function CreateScriptLinkPath($Params, $Title)
626 // Vstupem je cesta (začínající /) od DOCUMENT_ROOT 626 // Vstupem je cesta (začínající /) od DOCUMENT_ROOT
627 // Výsledkem je řádka odkazů na jednotlivé adresáře cesty 627 // Výsledkem je řádka odkazů na jednotlivé adresáře cesty
628 // Odkazy jsou odkazy na skript s parametrem cesty a jazyka 628 // Odkazy jsou odkazy na skript s parametrem cesty a jazyka
629 // Vstupem je pole parametrů ze kterých použijeme parametr 'path', 629 // Vstupem je pole parametrů ze kterých použijeme parametr 'path',
630 // ostatní jen umístíme do odkazů. 630 // ostatní jen umístíme do odkazů.
631 { 631 {
632 // Rozděl cestu na kousky 632 // Rozděl cestu na kousky
633 $Parts = explode('/', $Params['path']); 633 $Parts = explode('/', $Params['path']);
634 if ($Parts[0]=='') 634 if ($Parts[0]=='')
635 array_shift($Parts); // vyhoď případnou prázdnou položku 635 array_shift($Parts); // vyhoď případnou prázdnou položku
636   636  
637 // Začínáme od rootu 637 // Začínáme od rootu
638 $TempPath = ''; 638 $TempPath = '';
639   639  
640 // Odkaz na root (je vždy) 640 // Odkaz na root (je vždy)
641 $Params['path'] = $TempPath; 641 $Params['path'] = $TempPath;
642 $Link = CreateScriptLink($Params, '', $Title); 642 $Link = CreateScriptLink($Params, '', $Title);
643   643  
644 // Je něco víc než root? 644 // Je něco víc než root?
645 if (isset($Parts[0]) && $Parts[0]!='') 645 if (isset($Parts[0]) && $Parts[0]!='')
646 { 646 {
647 // Odkaz na všechny další adresáře cesty 647 // Odkaz na všechny další adresáře cesty
648 foreach($Parts as $Key => $Value) 648 foreach($Parts as $Key => $Value)
649 { 649 {
650 // Přidej adresář 650 // Přidej adresář
651 $TempPath .= '/'.$Value; 651 $TempPath .= '/'.$Value;
652   652  
653 // Vyrob odkaz 653 // Vyrob odkaz
654 $Link .= " /\n"; 654 $Link .= " /\n";
655 $Params['path'] = $TempPath; 655 $Params['path'] = $TempPath;
656 $Link .= CreateScriptLink($Params, '', $Title); 656 $Link .= CreateScriptLink($Params, '', $Title);
657 } 657 }
658 } 658 }
659   659  
660 // Vrať výsledek 660 // Vrať výsledek
661 return $Link; 661 return $Link;
662 } 662 }
663   663  
664 ?> 664 ?>