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