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