<?php
define('WEBSVNSCRIPT', '/WebSVN/listing.php'); // Cesta k WebSVN skriptu
define('WIKISERVER', 'wiki'); // 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 webu
if ( str_starts_with($Path, $_SERVER['DOCUMENT_ROOT']) )
{
// Shoda - odstraň DOCUMENT_ROOT část cesty
return substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) );
}
else
{
// Vybočili jsme z webu
return '';
}
}
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 root
if ($Section=='')
$Section = "(root)";
// Vrať výsledek
return $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 je
if (is_file($FileName))
return $FileName;
// Nic nevyšlo
return '';
}
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 odkaz
if (is_file($DirName))
$Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title);
}
// Vrať výsledek ale bez lepidla na začátku
return 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áře
if ($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 cesty
foreach($Parts as $Key => $Value)
{
// Přidej adresář
$TempPath .= '/'.$Value;
// Vyrob odkaz
$Link .= " /\n";
$Params['path'] = $TempPath;
$Link .= CreateScriptLink($Params, '', $Title);
}
}
// Vrať výsledek
return $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ě Small
if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png')
and strpos($BaseName, 'Small')>0 )
{
$Files[] = $Path.'/'.$File;
}
}
}
// V adresáři nejsou žádné vhodné obrázky
if (count($Files) == 0)
{
// Není na co udělat odkaz
if ($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;
}
?>