Rev 4985 Rev 4987
1 <?php 1 <?php
2   2  
3   3  
4 // ********************************* 4 // *********************************
5 // Konfigurace 5 // Konfigurace
6 // ********************************* 6 // *********************************
7   7  
8   8  
9 define('DIRINFO', 'DirInfo.txt', true); // Jméno souboru s informacemi o adresáři 9 define('DIRINFO', 'DirInfo.txt'); // Jméno souboru s informacemi o adresáři
10 define('PRJINFO', 'PrjInfo.txt', true); // Jméno souboru s informacemi o projektu 10 define('PRJINFO', 'PrjInfo.txt'); // Jméno souboru s informacemi o projektu
11   11  
12 define('PERMALINK', '/PermaLink', true); // Začátek cesty s permalinkem (zpracovává mod_rewrite) 12 define('PERMALINK', '/PermaLink'); // Začátek cesty s permalinkem (zpracovává mod_rewrite)
13 define('LISTSCRIPT', 'List', true); // Jméno skriptu v rootu pro výpis 13 define('LISTSCRIPT', 'List'); // Jméno skriptu v rootu pro výpis
14 define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu 14 define('WEBSVNSCRIPT', '/WebSVN/listing.php'); // Cesta k WebSVN skriptu
15 define('WIKISERVER', 'wiki', true); // Jméno Wiki serveru (co se strčí místo jména stávajícího serveru) 15 define('WIKISERVER', 'wiki'); // Jméno Wiki serveru (co se strčí místo jména stávajícího serveru)
16   16  
17 // Cesta k templejtům 17 // Cesta k templejtům
18 define('TEMPLATE_PATH', 'Server/PrjInfo/Templates', true); // Cesta do adresáře s templejty 18 define('TEMPLATE_PATH', 'Server/PrjInfo/Templates'); // Cesta do adresáře s templejty
19 define('TEMPLATE_PERMALINK', TEMPLATE_PATH . '/PermaLink.ihtml', true); // Zobrazení PermaLinku (přípona jazyka se doplní sama) 19 define('TEMPLATE_PERMALINK', TEMPLATE_PATH . '/PermaLink.ihtml'); // Zobrazení PermaLinku (přípona jazyka se doplní sama)
20 define('TEMPLATE_PERMALINK_PATH', TEMPLATE_PATH . '/PermaLinkPath.ihtml', true); // Zobrazení PermaLinku s cestou (přípona jazyka se doplní sama) 20 define('TEMPLATE_PERMALINK_PATH', TEMPLATE_PATH . '/PermaLinkPath.ihtml'); // Zobrazení PermaLinku s cestou (přípona jazyka se doplní sama)
21 define('TEMPLATE_LISTDIR', TEMPLATE_PATH . '/ListDir.ihtml', true); // Zobrazení sekce (přípona jazyka se doplní sama) 21 define('TEMPLATE_LISTDIR', TEMPLATE_PATH . '/ListDir.ihtml'); // Zobrazení sekce (přípona jazyka se doplní sama)
22 define('TEMPLATE_LISTPRJ', TEMPLATE_PATH . '/ListPrj.ihtml', true); // Zobrazení projektu (přípona jazyka se doplní sama) 22 define('TEMPLATE_LISTPRJ', TEMPLATE_PATH . '/ListPrj.ihtml'); // Zobrazení projektu (přípona jazyka se doplní sama)
23   23  
24   24  
25 // ********************************* 25 // *********************************
26 // Obecné funkce 26 // Obecné funkce
27 // ********************************* 27 // *********************************
28   28  
29   29  
30 // Ukončení běhu při chybě 30 // Ukončení běhu při chybě
31 function Error($str) 31 function Error($str)
32 { 32 {
33 echo '<b>Ups...<b><br>'.PHP_EOL.$str.PHP_EOL; 33 echo '<b>Ups...<b><br>'.PHP_EOL.$str.PHP_EOL;
34 exit; 34 exit;
35 } 35 }
36   36  
37   37  
38 // Vytiskni strukturu s názvem 38 // Vytiskni strukturu s názvem
39 function print_rx($Nadpis, $Struktura) 39 function print_rx($Nadpis, $Struktura)
40 { 40 {
41 print $Nadpis.PHP_EOL; 41 print $Nadpis.PHP_EOL;
42 print str_pad('', strpos($Nadpis.PHP_EOL, PHP_EOL), '-').PHP_EOL; 42 print str_pad('', strpos($Nadpis.PHP_EOL, PHP_EOL), '-').PHP_EOL;
43 $str=print_r($Struktura, true); 43 $str=print_r($Struktura, true);
44 $str = ' '.str_replace(PHP_EOL, PHP_EOL.' ', $str); 44 $str = ' '.str_replace(PHP_EOL, PHP_EOL.' ', $str);
45 print $str.PHP_EOL; 45 print $str.PHP_EOL;
46 } 46 }
47   47  
48   48  
49 // ********************************* 49 // *********************************
50 // Výroba odkazů 50 // Výroba odkazů
51 // ********************************* 51 // *********************************
52   52  
53   53  
54 // Ze zadané cesty a pole s názvy souborů slepí HTML odkazy 54 // Ze zadané cesty a pole s názvy souborů slepí HTML odkazy
55 // na jednotlivé soubory 55 // na jednotlivé soubory
56 function CreateFilesLink2($Path, $FileNames, $Glue) 56 function CreateFilesLink2($Path, $FileNames, $Glue)
57 { 57 {
58 $Path = htmlspecialchars($Path); 58 $Path = htmlspecialchars($Path);
59   59  
60 $Glue = " $Glue\n"; 60 $Glue = " $Glue\n";
61 $Result = ''; 61 $Result = '';
62 foreach($FileNames as $Name) 62 foreach($FileNames as $Name)
63 { 63 {
64 $Name = htmlspecialchars($Name); 64 $Name = htmlspecialchars($Name);
65 $Result .= "<a href=\"$Path/$Name \">$Name</a>" . $Glue; 65 $Result .= "<a href=\"$Path/$Name \">$Name</a>" . $Glue;
66 } 66 }
67 $Result=substr($Result, 0, -strlen($Glue)); 67 $Result=substr($Result, 0, -strlen($Glue));
68 return $Result; 68 return $Result;
69 } 69 }
70   70  
71   71  
72 /* 72 /*
73 // Vyrobí HTML odkaz na soubor/adresář/skript 73 // Vyrobí HTML odkaz na soubor/adresář/skript
74 function CreateLinkHTML($Path, $Text, $Title='') 74 function CreateLinkHTML($Path, $Text, $Title='')
75 { 75 {
76 $Path = htmlspecialchars($Path); 76 $Path = htmlspecialchars($Path);
77   77  
78 $Title = htmlspecialchars($Title); 78 $Title = htmlspecialchars($Title);
79   79  
80 $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"'; 80 $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"';
81 if ($Title != '') 81 if ($Title != '')
82 $Link .= "\n".' title="'.$Title.'"'; 82 $Link .= "\n".' title="'.$Title.'"';
83 $Link .= '>'; 83 $Link .= '>';
84 if (basename($FileName)=='') 84 if (basename($FileName)=='')
85 $Link .= '(root)'; 85 $Link .= '(root)';
86 else 86 else
87 $Link .= basename($FileName); 87 $Link .= basename($FileName);
88 $Link .= '</a>'; 88 $Link .= '</a>';
89   89  
90 return $Link; 90 return $Link;
91 91
92 } 92 }
93 */ 93 */
94   94  
95 function CreateSVNLink($Path, $Lang, $Title) 95 function CreateSVNLink($Path, $Lang, $Title)
96 // Vytvoří odkaz do WebSVN podle cesty a jazyka 96 // Vytvoří odkaz do WebSVN podle cesty a jazyka
97 { 97 {
98 $Path = htmlspecialchars($Path); 98 $Path = htmlspecialchars($Path);
99   99  
100 $Link = '<a href="http://'; 100 $Link = '<a href="http://';
101 $Link .= $_SERVER['SERVER_NAME']; 101 $Link .= $_SERVER['SERVER_NAME'];
102 $Link .= WEBSVNSCRIPT; 102 $Link .= WEBSVNSCRIPT;
103 $Link .= '?repname=MLAB&amp;path='; 103 $Link .= '?repname=MLAB&amp;path=';
104 $Link .= $Path; 104 $Link .= $Path;
105 $Link .= '/'; 105 $Link .= '/';
106 if ($Lang=='cs') 106 if ($Lang=='cs')
107 $Link .= '&amp;langchoice=Česky'; 107 $Link .= '&amp;langchoice=Česky';
108 else 108 else
109 $Link .= '&amp;langchoice=English'; 109 $Link .= '&amp;langchoice=English';
110 $Link .= '"'; 110 $Link .= '"';
111 if ($Title!='') 111 if ($Title!='')
112 $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; 112 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
113 $Link .= '>WebSVN</a>'; 113 $Link .= '>WebSVN</a>';
114   114  
115 return $Link; 115 return $Link;
116 } 116 }
117   117  
118   118  
119 function CreateWikiLink($Name, $Lang, $Title) 119 function CreateWikiLink($Name, $Lang, $Title)
120 // Vytvoří odkaz do Wiki podle jména modulu a jazyka 120 // Vytvoří odkaz do Wiki podle jména modulu a jazyka
121 { 121 {
122 // Ukousni verzi a revizi modulu (například 01A) 122 // Ukousni verzi a revizi modulu (například 01A)
123 $Name = preg_replace('/[0-9][0-9][a-z]$/i', '', $Name); 123 $Name = preg_replace('/[0-9][0-9][a-z]$/i', '', $Name);
124 $Name = htmlspecialchars($Name); 124 $Name = htmlspecialchars($Name);
125   125  
126 // Sestav odkaz 126 // Sestav odkaz
127 $Link = '<a href="http://'; 127 $Link = '<a href="http://';
128 $Link .= preg_replace('/^.+?\./', WIKISERVER.'.', $_SERVER['SERVER_NAME']); 128 $Link .= preg_replace('/^.+?\./', WIKISERVER.'.', $_SERVER['SERVER_NAME']);
129 $Link .= '/doku.php?id='.$Lang.':'.$Name; 129 $Link .= '/doku.php?id='.$Lang.':'.$Name;
130 $Link .= '"'; 130 $Link .= '"';
131   131  
132 if ($Title!='') 132 if ($Title!='')
133 $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; 133 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
134 $Link .= '>Wiki</a>'; 134 $Link .= '>Wiki</a>';
135   135  
136 return $Link; 136 return $Link;
137 } 137 }
138   138  
139   139  
140 function CreatePicturesLink($Path, $Glue, $Alt='', $NoPicture, $Width='') 140 function CreatePicturesLink($Path, $Glue, $Alt='', $NoPicture, $Width='')
141 // Najde na uvedené cestě obrázky, které mají v názvu Small 141 // Najde na uvedené cestě obrázky, které mají v názvu Small
142 // a sestaví na ně odkaz. Pokud není žádný obrázek, vytvoří odkaz na obrázek 142 // a sestaví na ně odkaz. Pokud není žádný obrázek, vytvoří odkaz na obrázek
143 // v parametru $NoPicture. 143 // v parametru $NoPicture.
144 { 144 {
145 // Najdi všechny soubory 145 // Najdi všechny soubory
146 $Files = array(); 146 $Files = array();
147 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*') as $File) 147 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*') as $File)
148 { 148 {
149 if (is_file($File)) 149 if (is_file($File))
150 { 150 {
151 // Jen jméno souboru 151 // Jen jméno souboru
152 $File = substr($File, 1+strlen($_SERVER['DOCUMENT_ROOT'].$Path)); 152 $File = substr($File, 1+strlen($_SERVER['DOCUMENT_ROOT'].$Path));
153   153  
154 // TOHLE ASI RADĚJI PŘEZ REGEX 154 // TOHLE ASI RADĚJI PŘEZ REGEX
155   155  
156 // Odděl příponu 156 // Odděl příponu
157 $DotPos = strrpos($File, '.'); 157 $DotPos = strrpos($File, '.');
158 $Extension = substr($File, $DotPos+1); 158 $Extension = substr($File, $DotPos+1);
159 $BaseName = substr($File, 0, $DotPos); 159 $BaseName = substr($File, 0, $DotPos);
160   160  
161 // Vezmi obrázky, které mají ve jméně Small 161 // Vezmi obrázky, které mají ve jméně Small
162 if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png') 162 if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png')
163 and strpos($BaseName, 'Small')>0 ) 163 and strpos($BaseName, 'Small')>0 )
164 { 164 {
165 $Files[] = $Path.'/'.$File; 165 $Files[] = $Path.'/'.$File;
166 } 166 }
167 } 167 }
168 } 168 }
169   169  
170 // V adresáři nejsou žádné vhodné obrázky 170 // V adresáři nejsou žádné vhodné obrázky
171 if (count($Files) == 0) 171 if (count($Files) == 0)
172 { 172 {
173 // Není na co udělat odkaz 173 // Není na co udělat odkaz
174 if ($NoPicture=='') 174 if ($NoPicture=='')
175 return ''; 175 return '';
176 // Přidej odkaz nikam 176 // Přidej odkaz nikam
177 $Files[] = $NoPicture; 177 $Files[] = $NoPicture;
178 } 178 }
179   179  
180 // Udělej odkazy na pole souborů 180 // Udělej odkazy na pole souborů
181 $Alt = htmlspecialchars($Alt); 181 $Alt = htmlspecialchars($Alt);
182 $Line = ''; 182 $Line = '';
183 $FirstGlue = TRUE; 183 $FirstGlue = TRUE;
184 foreach($Files as $File) 184 foreach($Files as $File)
185 { 185 {
186 $File = htmlspecialchars($File); 186 $File = htmlspecialchars($File);
187   187  
188 if(!$FirstGlue) 188 if(!$FirstGlue)
189 $Line .= ' '.$Glue."\n"; 189 $Line .= ' '.$Glue."\n";
190 $FirstGlue = FALSE; 190 $FirstGlue = FALSE;
191   191  
192 $Line .= '<a href="'.$File.'">'."\n"; 192 $Line .= '<a href="'.$File.'">'."\n";
193 $Line .= '<img src="'.$File.'"'."\n"; 193 $Line .= '<img src="'.$File.'"'."\n";
194 if($Width!='') 194 if($Width!='')
195 $Line .= ' width="' . $Width . '"'."\n"; 195 $Line .= ' width="' . $Width . '"'."\n";
196 $Line .= ' alt="'.$Alt.'">'."\n"; 196 $Line .= ' alt="'.$Alt.'">'."\n";
197 $Line .= '</a>'."\n"; 197 $Line .= '</a>'."\n";
198 } 198 }
199   199  
200 return $Line; 200 return $Line;
201 } 201 }
202   202  
203 // Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT) 203 // Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT)
204 // a volitelně title (zobrazí se při najetí myši na odkaz). 204 // a volitelně title (zobrazí se při najetí myši na odkaz).
205 // Vrací řetězec s odkazem 205 // Vrací řetězec s odkazem
206 function CreateFileLink($FileName, $Title='') 206 function CreateFileLink($FileName, $Title='')
207 { 207 {
208 $FileName = htmlspecialchars($FileName); 208 $FileName = htmlspecialchars($FileName);
209   209  
210 $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"'; 210 $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"';
211 if ($Title != '') 211 if ($Title != '')
212 $Link .= "\n".' title="'.$Title.'"'; 212 $Link .= "\n".' title="'.$Title.'"';
213 $Link .= '>'; 213 $Link .= '>';
214 if (basename($FileName)=='') 214 if (basename($FileName)=='')
215 $Link .= '(root)'; 215 $Link .= '(root)';
216 else 216 else
217 $Link .= basename($FileName); 217 $Link .= basename($FileName);
218 $Link .= '</a>'; 218 $Link .= '</a>';
219   219  
220 return $Link; 220 return $Link;
221 } 221 }
222   222  
223   223  
224 // Vyrobí odkaz na projekt 224 // Vyrobí odkaz na projekt
225 // vstupem je cesta k projektu (začíná lomítkem) a volitelně jazyk 225 // vstupem je cesta k projektu (začíná lomítkem) a volitelně jazyk
226 function CreateProjectLink($Path, $Lang='') 226 function CreateProjectLink($Path, $Lang='')
227 { 227 {
228 if($Lang!='') 228 if($Lang!='')
229 $Lang .= '.'; 229 $Lang .= '.';
230 return 'http://' . $_SERVER["HTTP_HOST"] . $Path . '/' . LISTSCRIPT . '.' .$Lang . 'html'; 230 return 'http://' . $_SERVER["HTTP_HOST"] . $Path . '/' . LISTSCRIPT . '.' .$Lang . 'html';
231 } 231 }
232   232  
233   233  
234 // Provede přesměrování na projekt na zadané cestě (volitelně i s jazykem) 234 // Provede přesměrování na projekt na zadané cestě (volitelně i s jazykem)
235 function Redirect($Path, $Lang='') 235 function Redirect($Path, $Lang='')
236 { 236 {
237 $NewUrl = CreateProjectLink($Path, $Lang); 237 $NewUrl = CreateProjectLink($Path, $Lang);
238 // print "Redirect: $NewUrl<br>"; 238 // print "Redirect: $NewUrl<br>";
239 header("HTTP/1.1 301 Moved Permanently"); 239 header("HTTP/1.1 301 Moved Permanently");
240 header("Location: $NewUrl"); 240 header("Location: $NewUrl");
241 header("Connection: close"); 241 header("Connection: close");
242 die(); 242 die();
243 } 243 }
244   244  
245   245  
246 // Provede přesměrování na projekt na zadané cestě (volitelně i s jazykem) 246 // Provede přesměrování na projekt na zadané cestě (volitelně i s jazykem)
247 function RedirectToFile($Path) 247 function RedirectToFile($Path)
248 { 248 {
249 // print "Redirect: $NewUrl<br>"; 249 // print "Redirect: $NewUrl<br>";
250 header("HTTP/1.1 301 Moved Permanently"); 250 header("HTTP/1.1 301 Moved Permanently");
251 header("Location: $Path"); 251 header("Location: $Path");
252 header("Connection: close"); 252 header("Connection: close");
253 die(); 253 die();
254 } 254 }
255   255  
256   256  
257 // Dostává cestu k souboru a jazyk. Zkusí ověřit existenci souboru s doplněným 257 // Dostává cestu k souboru a jazyk. Zkusí ověřit existenci souboru s doplněným
258 // zadaným jazykem, dále zkusí angličtinu a nakonec zkusí nemodifikovaný název. 258 // zadaným jazykem, dále zkusí angličtinu a nakonec zkusí nemodifikovaný název.
259 // Vrací jméno souboru s tou variantou, kterou našel. 259 // Vrací jméno souboru s tou variantou, kterou našel.
260 function LangFile($FileName, $Lang) 260 function LangFile($FileName, $Lang)
261 { 261 {
262 // Najdi příponu (poslední tečka) 262 // Najdi příponu (poslední tečka)
263 $Pos = strrpos($FileName, '.'); 263 $Pos = strrpos($FileName, '.');
264 if ($Pos === false) 264 if ($Pos === false)
265 return ''; 265 return '';
266 if ($Pos < strrchr($FileName, '/')) 266 if ($Pos < strrchr($FileName, '/'))
267 return ''; 267 return '';
268   268  
269 // Zkus doplnit zadaný jazyk 269 // Zkus doplnit zadaný jazyk
270 $File = substr($FileName, 0, $Pos+1).$Lang.substr($FileName, $Pos); 270 $File = substr($FileName, 0, $Pos+1).$Lang.substr($FileName, $Pos);
271   271  
272 if (is_file($File)) 272 if (is_file($File))
273 return $File; 273 return $File;
274   274  
275 // Zkus doplnit en 275 // Zkus doplnit en
276 $File = substr($FileName, 0, $Pos+1).'en'.substr($FileName, $Pos); 276 $File = substr($FileName, 0, $Pos+1).'en'.substr($FileName, $Pos);
277   277  
278 if (is_file($File)) 278 if (is_file($File))
279 return $File; 279 return $File;
280   280  
281 // Zkus soubor tak jak je 281 // Zkus soubor tak jak je
282 if (is_file($FileName)) 282 if (is_file($FileName))
283 return $FileName; 283 return $FileName;
284   284  
285 // Nic nevyšlo 285 // Nic nevyšlo
286 return ''; 286 return '';
287 } 287 }
288   288  
289   289  
290   290  
291   291  
292 // Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem 292 // Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem
293 // Volitelně lze zadat title (zobrazí se při najetí myši na odkaz). 293 // Volitelně lze zadat title (zobrazí se při najetí myši na odkaz).
294 // Cesta se chápe v rámci webu (od DOCUMENT_ROOT). 294 // Cesta se chápe v rámci webu (od DOCUMENT_ROOT).
295 // Vrací řetězec s odkazy 295 // Vrací řetězec s odkazy
296 function CreateFilesLink($Path, $Glue, $Title='') 296 function CreateFilesLink($Path, $Glue, $Title='')
297 { 297 {
298 // Při lepení odřádkujeme aby byl generovaný kód strukturovaný 298 // Při lepení odřádkujeme aby byl generovaný kód strukturovaný
299 $Glue = ' '.$Glue."\n"; 299 $Glue = ' '.$Glue."\n";
300   300  
301 // Pro každou položku 301 // Pro každou položku
302 $Line = ''; 302 $Line = '';
303 $Ofset = strlen($_SERVER['DOCUMENT_ROOT']); 303 $Ofset = strlen($_SERVER['DOCUMENT_ROOT']);
304 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName) // GLOB_BRACE??????????? 304 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName) // GLOB_BRACE???????????
305 { 305 {
306 // Sestav odkaz 306 // Sestav odkaz
307 if (is_file($DirName)) 307 if (is_file($DirName))
308 $Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title); 308 $Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title);
309 } 309 }
310   310  
311 // Vrať výsledek ale bez lepidla na začátku 311 // Vrať výsledek ale bez lepidla na začátku
312 return substr($Line, strlen($Glue)); 312 return substr($Line, strlen($Glue));
313 } 313 }
314   314  
315   315  
316 // ********************************* 316 // *********************************
317 // Zpracování stromu sekcí a projektů 317 // Zpracování stromu sekcí a projektů
318 // ********************************* 318 // *********************************
319   319  
320   320  
321 // Vrací true/false na základě validní struktury sekce (adresáře) 321 // Vrací true/false na základě validní struktury sekce (adresáře)
322 // (testuje přítomnost DIRINFO souboru) 322 // (testuje přítomnost DIRINFO souboru)
323 function IsDir($Path) 323 function IsDir($Path)
324 { 324 {
325 return is_file($_SERVER['DOCUMENT_ROOT'].$Path.'/'.DIRINFO); 325 return is_file($_SERVER['DOCUMENT_ROOT'].$Path.'/'.DIRINFO);
326 } 326 }
327   327  
328   328  
329 // Vrací true/false na základě validní struktury projektu 329 // Vrací true/false na základě validní struktury projektu
330 // (testuje přítomnost PRJINFO a pokud není tak heuristiku) 330 // (testuje přítomnost PRJINFO a pokud není tak heuristiku)
331 function IsPrj($Path) 331 function IsPrj($Path)
332 { 332 {
333 // Existuje popisný soubor projektu 333 // Existuje popisný soubor projektu
334 if(is_file($_SERVER['DOCUMENT_ROOT'].$Path.'/'.PRJINFO)) 334 if(is_file($_SERVER['DOCUMENT_ROOT'].$Path.'/'.PRJINFO))
335 return true; 335 return true;
336   336  
337 // Není popis projektu, nastupuje heuristika 337 // Není popis projektu, nastupuje heuristika
338 if(is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/DOC')) 338 if(is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/DOC'))
339 return true; 339 return true;
340 if(is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/SCH')) 340 if(is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/SCH'))
341 return true; 341 return true;
342   342  
343 // Nic nezabralo, není platný projekt 343 // Nic nezabralo, není platný projekt
344 return false; 344 return false;
345 } 345 }
346   346  
347   347  
348 // Funkce vrací pole obsahující pole Projects a pole Sections 348 // Funkce vrací pole obsahující pole Projects a pole Sections
349 function RecurseDirs($Path) 349 function RecurseDirs($Path)
350 { 350 {
351 $Dirs = array(); 351 $Dirs = array();
352 $Path = rtrim($Path, '/'); 352 $Path = rtrim($Path, '/');
353 $Items = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); 353 $Items = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR);
354   354  
355 // If not valid directory (vracím prázdný výsledek) 355 // If not valid directory (vracím prázdný výsledek)
356 if(!is_array($Items)) 356 if(!is_array($Items))
357 return $Dirs; 357 return $Dirs;
358   358  
359 // Recourse the directory tree (přidávám nalezené adresáře ke konci pole) 359 // Recourse the directory tree (přidávám nalezené adresáře ke konci pole)
360 for($i=0; $i<count($Items); $i++) 360 for($i=0; $i<count($Items); $i++)
361 { 361 {
362 if (is_file($Items[$i].'/'.DIRINFO)) 362 if (is_file($Items[$i].'/'.DIRINFO))
363 { 363 {
364 $SubDirs = glob($Items[$i] . '/*', GLOB_ONLYDIR); 364 $SubDirs = glob($Items[$i] . '/*', GLOB_ONLYDIR);
365 $Items = array_merge($Items, $SubDirs); 365 $Items = array_merge($Items, $SubDirs);
366 } 366 }
367 } 367 }
368   368  
369 // Remove invalid items (with no DIRINFO/PRJINFO) and Local Path 369 // Remove invalid items (with no DIRINFO/PRJINFO) and Local Path
370 $Sections=array(); 370 $Sections=array();
371 $Projects=array(); 371 $Projects=array();
372 $EatLeftChars = strlen($_SERVER['DOCUMENT_ROOT']); 372 $EatLeftChars = strlen($_SERVER['DOCUMENT_ROOT']);
373 foreach($Items as $Key => $Data) 373 foreach($Items as $Key => $Data)
374 { 374 {
375 // Remove web path 375 // Remove web path
376 $Data = substr($Data, $EatLeftChars); 376 $Data = substr($Data, $EatLeftChars);
377 if(IsDir($Data)) 377 if(IsDir($Data))
378 $Sections[]=$Data; 378 $Sections[]=$Data;
379 elseif (IsPrj($Data)) 379 elseif (IsPrj($Data))
380 $Projects[]=$Data; 380 $Projects[]=$Data;
381 } 381 }
382   382  
383 // Sort Sections 383 // Sort Sections
384 sort($Sections, SORT_STRING); 384 sort($Sections, SORT_STRING);
385   385  
386 // Sort Projects 386 // Sort Projects
387 sort($Projects, SORT_STRING); 387 sort($Projects, SORT_STRING);
388   388  
389 // Return combined result 389 // Return combined result
390 $All["Projects"] = $Projects; 390 $All["Projects"] = $Projects;
391 $All["Sections"] = $Sections; 391 $All["Sections"] = $Sections;
392 return $All; 392 return $All;
393 } 393 }
394   394  
395   395  
396 // ********************************* 396 // *********************************
397 // Permalinky 397 // Permalinky
398 // ********************************* 398 // *********************************
399   399  
400   400  
401 // Filtr pro náhradu nepohodlných znaků v permalinku 401 // Filtr pro náhradu nepohodlných znaků v permalinku
402 // Nahrazuje všechny znaky kromě písmen a čísel, odstraní diakritiku 402 // Nahrazuje všechny znaky kromě písmen a čísel, odstraní diakritiku
403 // u českých znaků 403 // u českých znaků
404 function PermaLinkFilter($String) 404 function PermaLinkFilter($String)
405 { 405 {
406 // Odstraň diakritiku 406 // Odstraň diakritiku
407 $SubstTable = array ( 407 $SubstTable = array (
408 "ě" => "e", "š" => "s", "č" => "c", "ř" => "r", "ž" => "z", "ý" => "y", "á" => "a", 408 "ě" => "e", "š" => "s", "č" => "c", "ř" => "r", "ž" => "z", "ý" => "y", "á" => "a",
409 "í" => "i", "é" => "e", "ď" => "d", "ť" => "t", "ň" => "n", "ů" => "u", "ú" => "u", 409 "í" => "i", "é" => "e", "ď" => "d", "ť" => "t", "ň" => "n", "ů" => "u", "ú" => "u",
410 "Ě" => "E", "Š" => "S", "Č" => "C", "Ř" => "R", "Ž" => "Z", "Ý" => "Y", "Á" => "A", 410 "Ě" => "E", "Š" => "S", "Č" => "C", "Ř" => "R", "Ž" => "Z", "Ý" => "Y", "Á" => "A",
411 "Í" => "I", "É" => "E", "Ď" => "D", "Ť" => "T", "Ň" => "N", "Ů" => "U", "Ú" => "U" 411 "Í" => "I", "É" => "E", "Ď" => "D", "Ť" => "T", "Ň" => "N", "Ů" => "U", "Ú" => "U"
412 ); 412 );
413 $String = strtr($String, $SubstTable); 413 $String = strtr($String, $SubstTable);
414   414  
415 // Nahraď nepohodlné znaky mínusem 415 // Nahraď nepohodlné znaky mínusem
416 $String = preg_replace("~[^A-Z0-9]+~ui", "-", $String); 416 $String = preg_replace("~[^A-Z0-9]+~ui", "-", $String);
417   417  
418 // Odtsraň duplicity mínusů 418 // Odtsraň duplicity mínusů
419 $String = preg_replace("~-+~u", "-", $String); 419 $String = preg_replace("~-+~u", "-", $String);
420   420  
421 // Odstraň počáteční a koncové mínusy 421 // Odstraň počáteční a koncové mínusy
422 $String = ltrim(rtrim($String,'-'),'-'); 422 $String = ltrim(rtrim($String,'-'),'-');
423   423  
424 return $String; 424 return $String;
425 } 425 }
426   426  
427   427  
428 // Vrací z cesty platný permalink 428 // Vrací z cesty platný permalink
429 // Vstupem je cesta k projektu nebo k sekci, z ní se vrací jen název (poslední část cesty) 429 // Vstupem je cesta k projektu nebo k sekci, z ní se vrací jen název (poslední část cesty)
430 function PermaLinkCreateKey($ProjectPath) 430 function PermaLinkCreateKey($ProjectPath)
431 { 431 {
432 // Odstraň cestu 432 // Odstraň cestu
433 $PermaLinkKey = basename($ProjectPath); 433 $PermaLinkKey = basename($ProjectPath);
434   434  
435 // Odstraň nepohodlné znaky 435 // Odstraň nepohodlné znaky
436 $PermaLinkKey = PermaLinkFilter($PermaLinkKey); 436 $PermaLinkKey = PermaLinkFilter($PermaLinkKey);
437   437  
438 // Hotovo 438 // Hotovo
439 return $PermaLinkKey; 439 return $PermaLinkKey;
440 } 440 }
441   441  
442   442  
443 // Zvýrazní jméno projektu (poslední část zadané cesty dá do značky span) 443 // Zvýrazní jméno projektu (poslední část zadané cesty dá do značky span)
444 function MarkPath($Path) 444 function MarkPath($Path)
445 { 445 {
446 $Pos = strrpos($Path, '/'); 446 $Pos = strrpos($Path, '/');
447 if($Pos===false) 447 if($Pos===false)
448 return "<span class='Marked'>".$Path."</span>"; 448 return "<span class='Marked'>".$Path."</span>";
449 else 449 else
450 return substr($Path, 0, $Pos+1)."<span class='Marked'>".substr($Path, $Pos+1)."</span>"; 450 return substr($Path, 0, $Pos+1)."<span class='Marked'>".substr($Path, $Pos+1)."</span>";
451 } 451 }
452   452  
453   453  
454 // Vytvoří z klíče (upravený název projektu či sekce) celý klikací permalinkový odkaz 454 // Vytvoří z klíče (upravený název projektu či sekce) celý klikací permalinkový odkaz
455 // Je-li zadána přídavná cesta tak ji přidá na konec 455 // Je-li zadána přídavná cesta tak ji přidá na konec
456 // ??????????????????????????? k čemu se použije $AditionalPath ?????????????? možná zrušit 456 // ??????????????????????????? k čemu se použije $AditionalPath ?????????????? možná zrušit
457 function PermaLinkCreateLink($PermaLinkKey, $AditionalPath='') 457 function PermaLinkCreateLink($PermaLinkKey, $AditionalPath='')
458 { 458 {
459 $AditionalPath = ltrim($AditionalPath, '/'); 459 $AditionalPath = ltrim($AditionalPath, '/');
460 $AditionalPath = rtrim($AditionalPath, '/'); 460 $AditionalPath = rtrim($AditionalPath, '/');
461 if($AditionalPath!=='') 461 if($AditionalPath!=='')
462 $AditionalPath = '/'.$AditionalPath; 462 $AditionalPath = '/'.$AditionalPath;
463 $PermaLinkKey = PermaLinkCreateKey($PermaLinkKey); 463 $PermaLinkKey = PermaLinkCreateKey($PermaLinkKey);
464 return 'http://'.$_SERVER['HTTP_HOST'].PERMALINK.'/'.$PermaLinkKey.$AditionalPath; 464 return 'http://'.$_SERVER['HTTP_HOST'].PERMALINK.'/'.$PermaLinkKey.$AditionalPath;
465 } 465 }
466   466  
467   467  
468 // Na základě pole se všemi projekty a sekcemi vytvoří pole permalinků se všemi projekty a sekcemi 468 // Na základě pole se všemi projekty a sekcemi vytvoří pole permalinků se všemi projekty a sekcemi
469 function PermaLinkCreateArray($ProjectsArray) 469 function PermaLinkCreateArray($ProjectsArray)
470 { 470 {
471 $PermaLinkArray = array(); 471 $PermaLinkArray = array();
472   472  
473 foreach($ProjectsArray['Projects'] as $Data) 473 foreach($ProjectsArray['Projects'] as $Data)
474 { 474 {
475 $PermaLink = PermaLinkCreateKey($Data); 475 $PermaLink = PermaLinkCreateKey($Data);
476 $PermaLinkArray[] = array('SortKey' => mb_strtolower($PermaLink), 'PermaLink' => $PermaLink, 'Path' => $Data, 'Type' => 'Project'); 476 $PermaLinkArray[] = array('SortKey' => mb_strtolower($PermaLink), 'PermaLink' => $PermaLink, 'Path' => $Data, 'Type' => 'Project');
477 } 477 }
478   478  
479 foreach($ProjectsArray['Sections'] as $Data) 479 foreach($ProjectsArray['Sections'] as $Data)
480 { 480 {
481 $PermaLink = PermaLinkCreateKey($Data); 481 $PermaLink = PermaLinkCreateKey($Data);
482 $PermaLinkArray[] = array('SortKey' => mb_strtolower($PermaLink), 'PermaLink' => $PermaLink, 'Path' => $Data, 'Type' => 'Section'); 482 $PermaLinkArray[] = array('SortKey' => mb_strtolower($PermaLink), 'PermaLink' => $PermaLink, 'Path' => $Data, 'Type' => 'Section');
483 } 483 }
484   484  
485 return $PermaLinkArray; 485 return $PermaLinkArray;
486 } 486 }
487   487  
488   488  
489 // V zadaném poli odkazů najde klíč a vrátí pole s nalezenými shodami 489 // V zadaném poli odkazů najde klíč a vrátí pole s nalezenými shodami
490 // (v případě neshody vrací prázdné pole, ignoruje velikost písmen) 490 // (v případě neshody vrací prázdné pole, ignoruje velikost písmen)
491 function PermaLinkFind($AllPermas, $Key) 491 function PermaLinkFind($AllPermas, $Key)
492 { 492 {
493 $Key = mb_strtolower($Key); 493 $Key = mb_strtolower($Key);
494 $Key = PermaLinkFilter($Key); 494 $Key = PermaLinkFilter($Key);
495 $KeyLen = strlen($Key); 495 $KeyLen = strlen($Key);
496 $Result = array(); 496 $Result = array();
497 if($KeyLen!==0) 497 if($KeyLen!==0)
498 { 498 {
499 foreach($AllPermas as $Data) 499 foreach($AllPermas as $Data)
500 { 500 {
501 /* 501 /*
502 // Hledej permalinky, které začínají jako zadaný klíč 502 // Hledej permalinky, které začínají jako zadaný klíč
503 if(mb_strtolower(substr($Data['PermaLink'], 0, $KeyLen))===$Key) 503 if(mb_strtolower(substr($Data['PermaLink'], 0, $KeyLen))===$Key)
504 $Result[] = $Data; 504 $Result[] = $Data;
505 */ 505 */
506 // Hledej permalinky, které obsahují zadaný klíč 506 // Hledej permalinky, které obsahují zadaný klíč
507 if(strpos(mb_strtolower($Data['PermaLink']), $Key)!==false) 507 if(str_contains(mb_strtolower($Data['PermaLink']), $Key))
508 $Result[] = $Data; 508 $Result[] = $Data;
509 } 509 }
510 return $Result; 510 return $Result;
511 } 511 }
512 } 512 }
513 ?> 513 ?>