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