Rev 960 Rev 1491
1 <?php 1 <?php
2   2  
3   3  
4 define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu 4 define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu
-   5 define('WIKISERVER', 'wiki', true); // Jméno Wiki serveru (co se strčí místo jména stávajícího serveru)
5   6  
6   7  
7 function Error($str) 8 function Error($str)
8 // Ukončení běhu při chybhě 9 // Ukončení běhu při chybhě
9 { 10 {
10 echo '<b>Ups...<b>'.$str; 11 echo '<b>Ups...<b>'.$str;
11 exit; 12 exit;
12 } 13 }
13   14  
14   15  
15 function WrapString($String, $Wrap=0) 16 function WrapString($String, $Wrap=0)
16 // Provede odstranění nadbytečných bílých znaků 17 // Provede odstranění nadbytečných bílých znaků
17 // a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků 18 // a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků
18 { 19 {
19 // Odstaň bílé znaky 20 // Odstaň bílé znaky
20 $String = preg_replace('/\s+/su', ' ', $String); 21 $String = preg_replace('/\s+/su', ' ', $String);
21 22
22 // Volitelné nalámání 23 // Volitelné nalámání
23 if ($Wrap!=0) 24 if ($Wrap!=0)
24 $String = wordwrap($String, $Wrap); 25 $String = wordwrap($String, $Wrap);
25   26  
26 return $String; 27 return $String;
27 } 28 }
28   29  
29   30  
30 function CheckEnvironment() 31 function CheckEnvironment()
31 { 32 {
32 // POZOR DOPSAT 33 // POZOR DOPSAT
33 } 34 }
34   35  
35 function CheckWebPath($Path) 36 function CheckWebPath($Path)
36 // Zadaná cesta se chápe jako cesta uvnitř webu (vzhledem k document root). 37 // Zadaná cesta se chápe jako cesta uvnitř webu (vzhledem k document root).
37 // Případné relativní části (/../..) převede na absolutní a zkontroluje 38 // Případné relativní části (/../..) převede na absolutní a zkontroluje
38 // výsledek, zda nevybočuje mimo web. 39 // výsledek, zda nevybočuje mimo web.
39 // Na začátku nechá lomítko, na konci ho odstraní. 40 // Na začátku nechá lomítko, na konci ho odstraní.
40 // Pokud je výsledná cesta neplatná, vrátí prázdný řetězec. Kontroluje, zda 41 // Pokud je výsledná cesta neplatná, vrátí prázdný řetězec. Kontroluje, zda
41 // zadaný adresář existuje. 42 // zadaný adresář existuje.
42 { 43 {
43 // Převeď cestu na opravdovou, odstraň relativní odkazy 44 // Převeď cestu na opravdovou, odstraň relativní odkazy
44 $Path = realpath($_SERVER['DOCUMENT_ROOT'].$Path); 45 $Path = realpath($_SERVER['DOCUMENT_ROOT'].$Path);
45   46  
46 // Zkontroluj, zda jsme nevybočili z webu 47 // Zkontroluj, zda jsme nevybočili z webu
47 if ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_SERVER['DOCUMENT_ROOT']) ) ) 48 if ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_SERVER['DOCUMENT_ROOT']) ) )
48 { 49 {
49 // Shoda - odstraň DOCUMENT_ROOT část cesty 50 // Shoda - odstraň DOCUMENT_ROOT část cesty
50 return substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) ); 51 return substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) );
51 } 52 }
52 else 53 else
53 { 54 {
54 // Vybočili jsme z webu 55 // Vybočili jsme z webu
55 return ''; 56 return '';
56 } 57 }
57 } 58 }
58   59  
59   60  
60 function GetSection($Path) 61 function GetSection($Path)
61 // Vrátí první část cesty (to je to, co nazýváme sekce) 62 // Vrátí první část cesty (to je to, co nazýváme sekce)
62 { 63 {
63 // Ignoruj lomítko na začátku 64 // Ignoruj lomítko na začátku
64 $Path = ltrim($Path, '/'); 65 $Path = ltrim($Path, '/');
65   66  
66 // Vykousni první slovo až po lomítko 67 // Vykousni první slovo až po lomítko
67 $Section = substr($Path, 0, strpos($Path.'/', '/')); 68 $Section = substr($Path, 0, strpos($Path.'/', '/'));
68   69  
69 // Ošetři root 70 // Ošetři root
70 if ($Section=='') 71 if ($Section=='')
71 $Section = "(root)"; 72 $Section = "(root)";
72   73  
73 // Vrať výsledek 74 // Vrať výsledek
74 return $Section; 75 return $Section;
75 } 76 }
76   77  
77   78  
78 function LangFile($FileName, $Lang) 79 function LangFile($FileName, $Lang)
79 // Dostává cestu k souboru a jazyk. Zkusí ověřit existenci souboru s doplněným 80 // Dostává cestu k souboru a jazyk. Zkusí ověřit existenci souboru s doplněným
80 // zadaným jazykem, dále zkusí angličtinu a nakonec zkusí nemodifikovaný název. 81 // zadaným jazykem, dále zkusí angličtinu a nakonec zkusí nemodifikovaný název.
81 // Vrací jméno souboru s tou variantou, kterou našel. 82 // Vrací jméno souboru s tou variantou, kterou našel.
82 { 83 {
83 // Najdi příponu (poslední tečka) 84 // Najdi příponu (poslední tečka)
84 $Pos = strrpos($FileName, '.'); 85 $Pos = strrpos($FileName, '.');
85 if ($Pos === false) 86 if ($Pos === false)
86 return ''; 87 return '';
87 if ($Pos < strrchr($FileName, '/')) 88 if ($Pos < strrchr($FileName, '/'))
88 return ''; 89 return '';
89   90  
90 // Zkus doplnit zadaný jazyk 91 // Zkus doplnit zadaný jazyk
91 $File = substr($FileName, 0, $Pos+1).$Lang.substr($FileName, $Pos); 92 $File = substr($FileName, 0, $Pos+1).$Lang.substr($FileName, $Pos);
92   93  
93 if (is_file($File)) 94 if (is_file($File))
94 return $File; 95 return $File;
95   96  
96 // Zkus doplnit en 97 // Zkus doplnit en
97 $File = substr($FileName, 0, $Pos+1).'en'.substr($FileName, $Pos); 98 $File = substr($FileName, 0, $Pos+1).'en'.substr($FileName, $Pos);
98 if (is_file($File)) 99 if (is_file($File))
99 return $File; 100 return $File;
100   101  
101 // Zkus soubor tak jak je 102 // Zkus soubor tak jak je
102 if (is_file($FileName)) 103 if (is_file($FileName))
103 return $FileName; 104 return $FileName;
104   105  
105 // Nic nevyšlo 106 // Nic nevyšlo
106 return ''; 107 return '';
107 } 108 }
108   109  
109   110  
110 function CreateFileLink($FileName, $Title='') 111 function CreateFileLink($FileName, $Title='')
111 // Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT) 112 // Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT)
112 // a volitelně title (zobrazí se při najetí myši na odkaz). 113 // a volitelně title (zobrazí se při najetí myši na odkaz).
113 // Vrací řetězec s odkazem 114 // Vrací řetězec s odkazem
114 { 115 {
115 $FileName = htmlspecialchars($FileName); 116 $FileName = htmlspecialchars($FileName);
116   117  
117 $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"'; 118 $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"';
118 if ($Title != '') 119 if ($Title != '')
119 $Link .= "\n".' title="'.$Title.'"'; 120 $Link .= "\n".' title="'.$Title.'"';
120 $Link .= '>'; 121 $Link .= '>';
121 if (basename($FileName)=='') 122 if (basename($FileName)=='')
122 $Link .= '(root)'; 123 $Link .= '(root)';
123 else 124 else
124 $Link .= basename($FileName); 125 $Link .= basename($FileName);
125 $Link .= '</a>'; 126 $Link .= '</a>';
126   127  
127 return $Link; 128 return $Link;
128 } 129 }
129   130  
130 function CreateFilesLink($Path, $Glue, $Title='') 131 function CreateFilesLink($Path, $Glue, $Title='')
131 // Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem 132 // Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem
132 // Volitelně lze zadat title (zobrazí se při najetí myši na odkaz). 133 // Volitelně lze zadat title (zobrazí se při najetí myši na odkaz).
133 // Cesta se chápe v rámci webu (od DOCUMENT_ROOT). 134 // Cesta se chápe v rámci webu (od DOCUMENT_ROOT).
134 // Vrací řetězec s odkazy 135 // Vrací řetězec s odkazy
135 { 136 {
136 // Při lepení odřádkujeme aby byl generovaný kód strukturovaný 137 // Při lepení odřádkujeme aby byl generovaný kód strukturovaný
137 $Glue = ' '.$Glue."\n"; 138 $Glue = ' '.$Glue."\n";
138 139
139 // Pro každou položku 140 // Pro každou položku
140 $Line = ''; 141 $Line = '';
141 $Ofset = strlen($_SERVER['DOCUMENT_ROOT']); 142 $Ofset = strlen($_SERVER['DOCUMENT_ROOT']);
142 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName) 143 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName)
143 { 144 {
144 // Sestav odkaz 145 // Sestav odkaz
145 if (is_file($DirName)) 146 if (is_file($DirName))
146 $Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title); 147 $Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title);
147 } 148 }
148   149  
149 // Vrať výsledek ale bez lepidla na začátku 150 // Vrať výsledek ale bez lepidla na začátku
150 return substr($Line, strlen($Glue)); 151 return substr($Line, strlen($Glue));
151 } 152 }
152   153  
153   154  
154 function CreateScriptLink($Params, $DirName='', $Title='') 155 function CreateScriptLink($Params, $DirName='', $Title='')
155 // Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako 156 // Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako
156 // pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě 157 // pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě
157 // v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root 158 // v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root
158 { 159 {
159 // Připoj volitelné jméno adresáře 160 // Připoj volitelné jméno adresáře
160 if ($DirName!='') 161 if ($DirName!='')
161 $Params['path'] = $Params['path'].'/'.$DirName; 162 $Params['path'] = $Params['path'].'/'.$DirName;
162   163  
163 // Odvoď jméno z názvu adresáře 164 // Odvoď jméno z názvu adresáře
164 $DirName = basename($Params['path']); 165 $DirName = basename($Params['path']);
165 if ($DirName == '') 166 if ($DirName == '')
166 { 167 {
167 $DirName = '(root)'; 168 $DirName = '(root)';
168 $Params['path'] = '/'; 169 $Params['path'] = '/';
169 } 170 }
170   171  
171 // Zpracuj pole parametrů 172 // Zpracuj pole parametrů
172 $ParamsLine = ''; 173 $ParamsLine = '';
173 $LocalGlue = ''; 174 $LocalGlue = '';
174 foreach($Params as $Key => $Value) 175 foreach($Params as $Key => $Value)
175 { 176 {
176 $ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value); 177 $ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value);
177 $LocalGlue = '&amp;'; 178 $LocalGlue = '&amp;';
178 } 179 }
179 unset($LocalGlue); 180 unset($LocalGlue);
180   181  
181 // Sestav odkaz 182 // Sestav odkaz
182 $Link = '<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$ParamsLine.'"'; 183 $Link = '<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$ParamsLine.'"';
183 if ($Title!='') 184 if ($Title!='')
184 $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; 185 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
185 $Link .= ">$DirName</a>"; 186 $Link .= ">$DirName</a>";
186   187  
187 return $Link; 188 return $Link;
188 } 189 }
189   190  
190   191  
191 function CreateScriptLinkPath($Params, $Title) 192 function CreateScriptLinkPath($Params, $Title)
192 // Vstupem je cesta (začínající /) od DOCUMENT_ROOT 193 // Vstupem je cesta (začínající /) od DOCUMENT_ROOT
193 // Výsledkem je řádka odkazů na jednotlivé adresáře cesty 194 // Výsledkem je řádka odkazů na jednotlivé adresáře cesty
194 // Odkazy jsou odkazy na skript s parametrem cesty a jazyka 195 // Odkazy jsou odkazy na skript s parametrem cesty a jazyka
195 // Vstupem je pole parametrů ze kterých použijeme parametr 'path', 196 // Vstupem je pole parametrů ze kterých použijeme parametr 'path',
196 // ostatní jen umístíme do odkazů. 197 // ostatní jen umístíme do odkazů.
197 { 198 {
198 // Rozděl cestu na kousky 199 // Rozděl cestu na kousky
199 $Parts = explode('/', $Params['path']); 200 $Parts = explode('/', $Params['path']);
200 if ($Parts[0]=='') 201 if ($Parts[0]=='')
201 array_shift($Parts); // vyhoď případnou prázdnou položku 202 array_shift($Parts); // vyhoď případnou prázdnou položku
202   203  
203 // Začínáme od rootu 204 // Začínáme od rootu
204 $TempPath = ''; 205 $TempPath = '';
205   206  
206 // Odkaz na root (je vždy) 207 // Odkaz na root (je vždy)
207 $Params['path'] = $TempPath; 208 $Params['path'] = $TempPath;
208 $Link = CreateScriptLink($Params, '', $Title); 209 $Link = CreateScriptLink($Params, '', $Title);
209   210  
210 // Je něco víc než root? 211 // Je něco víc než root?
211 if (isset($Parts[0]) && $Parts[0]!='') 212 if (isset($Parts[0]) && $Parts[0]!='')
212 { 213 {
213 // Odkaz na všechny další adresáře cesty 214 // Odkaz na všechny další adresáře cesty
214 foreach($Parts as $Key => $Value) 215 foreach($Parts as $Key => $Value)
215 { 216 {
216 // Přidej adresář 217 // Přidej adresář
217 $TempPath .= '/'.$Value; 218 $TempPath .= '/'.$Value;
218   219  
219 // Vyrob odkaz 220 // Vyrob odkaz
220 $Link .= " /\n"; 221 $Link .= " /\n";
221 $Params['path'] = $TempPath; 222 $Params['path'] = $TempPath;
222 $Link .= CreateScriptLink($Params, '', $Title); 223 $Link .= CreateScriptLink($Params, '', $Title);
223 } 224 }
224 } 225 }
225   226  
226 // Vrať výsledek 227 // Vrať výsledek
227 return $Link; 228 return $Link;
228 } 229 }
229   230  
230   231  
231 function CreateSVNLink($Path, $Lang, $Title) 232 function CreateSVNLink($Path, $Lang, $Title)
232 // Vytvoří odkaz do WebSVN podle cesty a jazyka 233 // Vytvoří odkaz do WebSVN podle cesty a jazyka
233 { 234 {
234 $Path = htmlspecialchars($Path); 235 $Path = htmlspecialchars($Path);
235   236  
236 $Link = '<a href="http://'; 237 $Link = '<a href="http://';
237 $Link .= $_SERVER['SERVER_NAME']; 238 $Link .= $_SERVER['SERVER_NAME'];
238 $Link .= WEBSVNSCRIPT; 239 $Link .= WEBSVNSCRIPT;
239 $Link .= '?repname=MLAB&amp;path='; 240 $Link .= '?repname=MLAB&amp;path=';
240 $Link .= $Path; 241 $Link .= $Path;
241 $Link .= '/'; 242 $Link .= '/';
242 if ($Lang=='cs') 243 if ($Lang=='cs')
243 $Link .= '&amp;langchoice=Česky'; 244 $Link .= '&amp;langchoice=Česky';
244 else 245 else
245 $Link .= '&amp;langchoice=English'; 246 $Link .= '&amp;langchoice=English';
246 $Link .= '"'; 247 $Link .= '"';
247 if ($Title!='') 248 if ($Title!='')
248 $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; 249 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
249 $Link .= '>WebSVN</a>'; 250 $Link .= '>WebSVN</a>';
250   251  
-   252 return $Link;
-   253 }
-   254  
-   255  
-   256 function CreateWikiLink($Name, $Lang, $Title)
-   257 // Vytvoří odkaz do Wiki podle jména modulu a jazyka
-   258 {
-   259 // Ukousni verzi a revizi modulu (například 01A)
-   260 $Name = preg_replace('/[0-9][0-9][a-z]$/i', '', $Name);
-   261 $Name = htmlspecialchars($Name);
-   262  
-   263 // Sestav odkaz
-   264 $Link = '<a href="http://';
-   265 $Link .= preg_replace('/^.+?\./', WIKISERVER.'.', $_SERVER['SERVER_NAME']);
-   266 $Link .= '/doku.php?id='.$Lang.':'.$Name;
-   267 $Link .= '"';
-   268
-   269 if ($Title!='')
-   270 $Link .= "\n".' title="'.htmlspecialchars($Title).'"';
-   271 $Link .= '>Wiki</a>';
-   272  
251 return $Link; 273 return $Link;
252 } 274 }
253   275  
254   276  
255 function CreatePicturesLink($Path, $Glue, $Alt='', $NoPicture) 277 function CreatePicturesLink($Path, $Glue, $Alt='', $NoPicture)
256 // Najde na uvedené cestě obrázky, které mají v názvu Small 278 // Najde na uvedené cestě obrázky, které mají v názvu Small
257 // a sestaví na ně odkaz. Pokud není žádný obrázek, vytvoří odkaz na obrázek 279 // a sestaví na ně odkaz. Pokud není žádný obrázek, vytvoří odkaz na obrázek
258 // v parametru $NoPicture. 280 // v parametru $NoPicture.
259 { 281 {
260 // Najdi všechny soubory 282 // Najdi všechny soubory
261 $Files = array(); 283 $Files = array();
262 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*') as $File) 284 foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*') as $File)
263 { 285 {
264 if (is_file($File)) 286 if (is_file($File))
265 { 287 {
266 // Jen jméno souboru 288 // Jen jméno souboru
267 $File = substr($File, 1+strlen($_SERVER['DOCUMENT_ROOT'].$Path)); 289 $File = substr($File, 1+strlen($_SERVER['DOCUMENT_ROOT'].$Path));
268 290
269 // TOHLE ASI RADĚJI PŘEZ REGEX 291 // TOHLE ASI RADĚJI PŘEZ REGEX
270   292  
271 // Odděl příponu 293 // Odděl příponu
272 $DotPos = strrpos($File, '.'); 294 $DotPos = strrpos($File, '.');
273 $Extension = substr($File, $DotPos+1); 295 $Extension = substr($File, $DotPos+1);
274 $BaseName = substr($File, 0, $DotPos); 296 $BaseName = substr($File, 0, $DotPos);
275 297
276 // Vezmi obrázky, které mají ve jméně Small 298 // Vezmi obrázky, které mají ve jméně Small
277 if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png') 299 if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png')
278 and strpos($BaseName, 'Small')>0 ) 300 and strpos($BaseName, 'Small')>0 )
279 { 301 {
280 $Files[] = $Path.'/'.$File; 302 $Files[] = $Path.'/'.$File;
281 } 303 }
282 } 304 }
283 } 305 }
284   306  
285 // V adresáři nejsou žádné vhodné obrázky 307 // V adresáři nejsou žádné vhodné obrázky
286 if (count($Files) == 0) 308 if (count($Files) == 0)
287 { 309 {
288 // Není na co udělat odkaz 310 // Není na co udělat odkaz
289 if ($NoPicture=='') 311 if ($NoPicture=='')
290 return ''; 312 return '';
291 // Přidej odkaz nikam 313 // Přidej odkaz nikam
292 $Files[] = $NoPicture; 314 $Files[] = $NoPicture;
293 } 315 }
294   316  
295 // Udělej odkazy na pole souborů 317 // Udělej odkazy na pole souborů
296 $Alt = htmlspecialchars($Alt); 318 $Alt = htmlspecialchars($Alt);
297 $Line = ''; 319 $Line = '';
298 $FirstGlue = TRUE; 320 $FirstGlue = TRUE;
299 foreach($Files as $File) 321 foreach($Files as $File)
300 { 322 {
301 $File = htmlspecialchars($File); 323 $File = htmlspecialchars($File);
302   324  
303 if(!$FirstGlue) 325 if(!$FirstGlue)
304 $Line .= ' '.$Glue."\n"; 326 $Line .= ' '.$Glue."\n";
305 $FirstGlue = FALSE; 327 $FirstGlue = FALSE;
306   328  
307 $Line .= '<a href="'.$File.'">'."\n"; 329 $Line .= '<a href="'.$File.'">'."\n";
308 $Line .= '<img src="'.$File.'"'."\n"; 330 $Line .= '<img src="'.$File.'"'."\n";
309 $Line .= ' width="150"'."\n"; 331 $Line .= ' width="150"'."\n";
310 $Line .= ' alt="'.$Alt.'">'."\n"; 332 $Line .= ' alt="'.$Alt.'">'."\n";
311 $Line .= '</a>'."\n"; 333 $Line .= '</a>'."\n";
312 } 334 }
313   335  
314 return $Line; 336 return $Line;
315 } 337 }
316   338  
317   339  
318 ?> 340 ?>