<?phpdefine('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptudefine('WIKISERVER', 'wiki', true); // Jméno Wiki serveru (co se strčí místo jména stávajícího serveru)function Error($str)// Ukončení běhu při chybhě{echo '<b>Ups...<b>'.$str;exit;}function WrapString($String, $Wrap=0)// Provede odstranění nadbytečných bílých znaků// a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků{// Odstaň bílé znaky$String = preg_replace('/\s+/su', ' ', $String);// Volitelné nalámáníif ($Wrap!=0)$String = wordwrap($String, $Wrap);return $String;}function CheckEnvironment(){// POZOR DOPSAT}function CheckWebPath($Path)// Zadaná cesta se chápe jako cesta uvnitř webu (vzhledem k document root).// Případné relativní části (/../..) převede na absolutní a zkontroluje// výsledek, zda nevybočuje mimo web.// Na začátku nechá lomítko, na konci ho odstraní.// Pokud je výsledná cesta neplatná, vrátí prázdný řetězec. Kontroluje, zda// zadaný adresář existuje.{// Převeď cestu na opravdovou, odstraň relativní odkazy$Path = realpath($_SERVER['DOCUMENT_ROOT'].$Path);// Zkontroluj, zda jsme nevybočili z webuif ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_SERVER['DOCUMENT_ROOT']) ) ){// Shoda - odstraň DOCUMENT_ROOT část cestyreturn substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) );}else{// Vybočili jsme z webureturn '';}}function GetSection($Path)// Vrátí první část cesty (to je to, co nazýváme sekce){// Ignoruj lomítko na začátku$Path = ltrim($Path, '/');// Vykousni první slovo až po lomítko$Section = substr($Path, 0, strpos($Path.'/', '/'));// Ošetři rootif ($Section=='')$Section = "(root)";// Vrať výsledekreturn $Section;}function LangFile($FileName, $Lang)// Dostává cestu k souboru a jazyk. Zkusí ověřit existenci souboru s doplněným// zadaným jazykem, dále zkusí angličtinu a nakonec zkusí nemodifikovaný název.// Vrací jméno souboru s tou variantou, kterou našel.{// Najdi příponu (poslední tečka)$Pos = strrpos($FileName, '.');if ($Pos === false)return '';if ($Pos < strrchr($FileName, '/'))return '';// Zkus doplnit zadaný jazyk$File = substr($FileName, 0, $Pos+1).$Lang.substr($FileName, $Pos);if (is_file($File))return $File;// Zkus doplnit en$File = substr($FileName, 0, $Pos+1).'en'.substr($FileName, $Pos);if (is_file($File))return $File;// Zkus soubor tak jak jeif (is_file($FileName))return $FileName;// Nic nevyšloreturn '';}function CreateLink($InternetWebPath, $Title='')// Vstupem je cesta do jiného webu.// a volitelně title (zobrazí se při najetí myši na odkaz).// Vrací řetězec s odkazem{$Link = '<a href="'.$InternetWebPath.'"';if ($Title != '')$Link .= "\n".' title="'.$Title.'"';$Link .= '>';$Link .= $Title;$Link .= '</a>';return $Link;}function CreateFileLink($FileName, $Title='')// Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT)// a volitelně title (zobrazí se při najetí myši na odkaz).// Vrací řetězec s odkazem{$FileName = htmlspecialchars($FileName);$Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"';if ($Title != '')$Link .= "\n".' title="'.$Title.'"';$Link .= '>';if (basename($FileName)=='')$Link .= '(root)';else$Link .= basename($FileName);$Link .= '</a>';return $Link;}function CreateFilesLink($Path, $Glue, $Title='')// Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem// Volitelně lze zadat title (zobrazí se při najetí myši na odkaz).// Cesta se chápe v rámci webu (od DOCUMENT_ROOT).// Vrací řetězec s odkazy{// Při lepení odřádkujeme aby byl generovaný kód strukturovaný$Glue = ' '.$Glue."\n";// Pro každou položku$Line = '';$Ofset = strlen($_SERVER['DOCUMENT_ROOT']);foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName){// Sestav odkazif (is_file($DirName))$Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title);}// Vrať výsledek ale bez lepidla na začátkureturn substr($Line, strlen($Glue));}function CreateScriptLink($Params, $DirName='', $Title='')// Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako// pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě// v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root{// Připoj volitelné jméno adresářeif ($DirName!='')$Params['path'] = $Params['path'].'/'.$DirName;// Odvoď jméno z názvu adresáře$DirName = basename($Params['path']);if ($DirName == ''){$DirName = '(root)';$Params['path'] = '/';}// Zpracuj pole parametrů$ParamsLine = '';$LocalGlue = '';foreach($Params as $Key => $Value){$ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value);$LocalGlue = '&';}unset($LocalGlue);// Sestav odkaz$Link = '<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$ParamsLine.'"';if ($Title!='')$Link .= "\n".' title="'.htmlspecialchars($Title).'"';$Link .= ">$DirName</a>";return $Link;}function CreateScriptLinkPath($Params, $Title)// Vstupem je cesta (začínající /) od DOCUMENT_ROOT// Výsledkem je řádka odkazů na jednotlivé adresáře cesty// Odkazy jsou odkazy na skript s parametrem cesty a jazyka// Vstupem je pole parametrů ze kterých použijeme parametr 'path',// ostatní jen umístíme do odkazů.{// Rozděl cestu na kousky$Parts = explode('/', $Params['path']);if ($Parts[0]=='')array_shift($Parts); // vyhoď případnou prázdnou položku// Začínáme od rootu$TempPath = '';// Odkaz na root (je vždy)$Params['path'] = $TempPath;$Link = CreateScriptLink($Params, '', $Title);// Je něco víc než root?if (isset($Parts[0]) && $Parts[0]!=''){// Odkaz na všechny další adresáře cestyforeach($Parts as $Key => $Value){// Přidej adresář$TempPath .= '/'.$Value;// Vyrob odkaz$Link .= " /\n";$Params['path'] = $TempPath;$Link .= CreateScriptLink($Params, '', $Title);}}// Vrať výsledekreturn $Link;}function CreateSVNLink($Path, $Lang, $Title)// Vytvoří odkaz do WebSVN podle cesty a jazyka{$Path = htmlspecialchars($Path);$Link = '<a href="http://';$Link .= $_SERVER['SERVER_NAME'];$Link .= WEBSVNSCRIPT;$Link .= '?repname=MLAB&path=';$Link .= $Path;$Link .= '/';if ($Lang=='cs')$Link .= '&langchoice=Česky';else$Link .= '&langchoice=English';$Link .= '"';if ($Title!='')$Link .= "\n".' title="'.htmlspecialchars($Title).'"';$Link .= '>WebSVN</a>';return $Link;}function CreateWikiLink($Name, $Lang, $Title)// Vytvoří odkaz do Wiki podle jména modulu a jazyka{// Ukousni verzi a revizi modulu (například 01A)$Name = preg_replace('/[0-9][0-9][a-z]$/i', '', $Name);$Name = htmlspecialchars($Name);// Sestav odkaz$Link = '<a href="http://';$Link .= preg_replace('/^.+?\./', WIKISERVER.'.', $_SERVER['SERVER_NAME']);$Link .= '/doku.php?id='.$Lang.':'.$Name;$Link .= '"';if ($Title!='')$Link .= "\n".' title="'.htmlspecialchars($Title).'"';$Link .= '>Wiki</a>';return $Link;}function CreatePicturesLink($Path, $Glue, $Alt='', $NoPicture)// Najde na uvedené cestě obrázky, které mají v názvu Small// a sestaví na ně odkaz. Pokud není žádný obrázek, vytvoří odkaz na obrázek// v parametru $NoPicture.{// Najdi všechny soubory$Files = array();foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*') as $File){if (is_file($File)){// Jen jméno souboru$File = substr($File, 1+strlen($_SERVER['DOCUMENT_ROOT'].$Path));// TOHLE ASI RADĚJI PŘEZ REGEX// Odděl příponu$DotPos = strrpos($File, '.');$Extension = substr($File, $DotPos+1);$BaseName = substr($File, 0, $DotPos);// Vezmi obrázky, které mají ve jméně Smallif( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png')and strpos($BaseName, 'Small')>0 ){$Files[] = $Path.'/'.$File;}}}// V adresáři nejsou žádné vhodné obrázkyif (count($Files) == 0){// Není na co udělat odkazif ($NoPicture=='')return '';// Přidej odkaz nikam$Files[] = $NoPicture;}// Udělej odkazy na pole souborů$Alt = htmlspecialchars($Alt);$Line = '';$FirstGlue = TRUE;foreach($Files as $File){$File = htmlspecialchars($File);if(!$FirstGlue)$Line .= ' '.$Glue."\n";$FirstGlue = FALSE;$Line .= '<a href="'.$File.'">'."\n";$Line .= '<img src="'.$File.'"'."\n";$Line .= ' width="150"'."\n";$Line .= ' alt="'.$Alt.'">'."\n";$Line .= '</a>'."\n";}return $Line;}?>