No changes between revisions
| /Server/PrjInfo/Common.php |
|---|
| 0,0 → 1,513 |
| <?php |
| // ********************************* |
| // Konfigurace |
| // ********************************* |
| define('DIRINFO', 'DirInfo.txt', true); // Jméno souboru s informacemi o adresáři |
| define('PRJINFO', 'PrjInfo.txt', true); // Jméno souboru s informacemi o projektu |
| define('PERMALINK', '/PermaLink', true); // Začátek cesty s permalinkem (zpracovává mod_rewrite) |
| define('LISTSCRIPT', 'List', true); // Jméno skriptu v rootu pro výpis |
| define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu |
| define('WIKISERVER', 'wiki', true); // Jméno Wiki serveru (co se strčí místo jména stávajícího serveru) |
| // Cesta k templejtům |
| define('TEMPLATE_PATH', 'Server/PrjInfo/Templates', true); // Cesta do adresáře s templejty |
| define('TEMPLATE_PERMALINK', TEMPLATE_PATH . '/PermaLink.ihtml', true); // Zobrazení PermaLinku (přípona jazyka se doplní sama) |
| define('TEMPLATE_PERMALINK_PATH', TEMPLATE_PATH . '/PermaLinkPath.ihtml', true); // Zobrazení PermaLinku s cestou (přípona jazyka se doplní sama) |
| define('TEMPLATE_LISTDIR', TEMPLATE_PATH . '/ListDir.ihtml', true); // Zobrazení sekce (přípona jazyka se doplní sama) |
| define('TEMPLATE_LISTPRJ', TEMPLATE_PATH . '/ListPrj.ihtml', true); // Zobrazení projektu (přípona jazyka se doplní sama) |
| // ********************************* |
| // Obecné funkce |
| // ********************************* |
| // Ukončení běhu při chybě |
| function Error($str) |
| { |
| echo '<b>Ups...<b><br>'.PHP_EOL.$str.PHP_EOL; |
| exit; |
| } |
| // Vytiskni strukturu s názvem |
| function print_rx($Nadpis, $Struktura) |
| { |
| print $Nadpis.PHP_EOL; |
| print str_pad('', strpos($Nadpis.PHP_EOL, PHP_EOL), '-').PHP_EOL; |
| $str=print_r($Struktura, true); |
| $str = ' '.str_replace(PHP_EOL, PHP_EOL.' ', $str); |
| print $str.PHP_EOL; |
| } |
| // ********************************* |
| // Výroba odkazů |
| // ********************************* |
| // Ze zadané cesty a pole s názvy souborů slepí HTML odkazy |
| // na jednotlivé soubory |
| function CreateFilesLink2($Path, $FileNames, $Glue) |
| { |
| $Path = htmlspecialchars($Path); |
| $Glue = " $Glue\n"; |
| $Result = ''; |
| foreach($FileNames as $Name) |
| { |
| $Name = htmlspecialchars($Name); |
| $Result .= "<a href=\"$Path/$Name \">$Name</a>" . $Glue; |
| } |
| $Result=substr($Result, 0, -strlen($Glue)); |
| return $Result; |
| } |
| /* |
| // Vyrobí HTML odkaz na soubor/adresář/skript |
| function CreateLinkHTML($Path, $Text, $Title='') |
| { |
| $Path = htmlspecialchars($Path); |
| $Title = htmlspecialchars($Title); |
| $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 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, $Width='') |
| // 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"; |
| if($Width!='') |
| $Line .= ' width="' . $Width . '"'."\n"; |
| $Line .= ' alt="'.$Alt.'">'."\n"; |
| $Line .= '</a>'."\n"; |
| } |
| return $Line; |
| } |
| // 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 |
| function CreateFileLink($FileName, $Title='') |
| { |
| $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; |
| } |
| // Vyrobí odkaz na projekt |
| // vstupem je cesta k projektu (začíná lomítkem) a volitelně jazyk |
| function CreateProjectLink($Path, $Lang='') |
| { |
| if($Lang!='') |
| $Lang .= '.'; |
| return 'http://' . $_SERVER["HTTP_HOST"] . $Path . '/' . LISTSCRIPT . '.' .$Lang . 'html'; |
| } |
| // Provede přesměrování na projekt na zadané cestě (volitelně i s jazykem) |
| function Redirect($Path, $Lang='') |
| { |
| $NewUrl = CreateProjectLink($Path, $Lang); |
| // print "Redirect: $NewUrl<br>"; |
| header("HTTP/1.1 301 Moved Permanently"); |
| header("Location: $NewUrl"); |
| header("Connection: close"); |
| die(); |
| } |
| // Provede přesměrování na projekt na zadané cestě (volitelně i s jazykem) |
| function RedirectToFile($Path) |
| { |
| // print "Redirect: $NewUrl<br>"; |
| header("HTTP/1.1 301 Moved Permanently"); |
| header("Location: $Path"); |
| header("Connection: close"); |
| die(); |
| } |
| // 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. |
| function LangFile($FileName, $Lang) |
| { |
| // 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 ''; |
| } |
| // 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 |
| function CreateFilesLink($Path, $Glue, $Title='') |
| { |
| // 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) // GLOB_BRACE??????????? |
| { |
| // 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)); |
| } |
| // ********************************* |
| // Zpracování stromu sekcí a projektů |
| // ********************************* |
| // Vrací true/false na základě validní struktury sekce (adresáře) |
| // (testuje přítomnost DIRINFO souboru) |
| function IsDir($Path) |
| { |
| return is_file($_SERVER['DOCUMENT_ROOT'].$Path.'/'.DIRINFO); |
| } |
| // Vrací true/false na základě validní struktury projektu |
| // (testuje přítomnost PRJINFO a pokud není tak heuristiku) |
| function IsPrj($Path) |
| { |
| // Existuje popisný soubor projektu |
| if(is_file($_SERVER['DOCUMENT_ROOT'].$Path.'/'.PRJINFO)) |
| return true; |
| // Není popis projektu, nastupuje heuristika |
| if(is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/DOC')) |
| return true; |
| if(is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/SCH')) |
| return true; |
| // Nic nezabralo, není platný projekt |
| return false; |
| } |
| // Funkce vrací pole obsahující pole Projects a pole Sections |
| function RecurseDirs($Path) |
| { |
| $Dirs = array(); |
| $Path = rtrim($Path, '/'); |
| $Items = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); |
| // If not valid directory (vracím prázdný výsledek) |
| if(!is_array($Items)) |
| return $Dirs; |
| // Recourse the directory tree (přidávám nalezené adresáře ke konci pole) |
| for($i=0; $i<count($Items); $i++) |
| { |
| if (is_file($Items[$i].'/'.DIRINFO)) |
| { |
| $SubDirs = glob($Items[$i] . '/*', GLOB_ONLYDIR); |
| $Items = array_merge($Items, $SubDirs); |
| } |
| } |
| // Remove invalid items (with no DIRINFO/PRJINFO) and Local Path |
| $Sections=array(); |
| $Projects=array(); |
| $EatLeftChars = strlen($_SERVER['DOCUMENT_ROOT']); |
| foreach($Items as $Key => $Data) |
| { |
| // Remove web path |
| $Data = substr($Data, $EatLeftChars); |
| if(IsDir($Data)) |
| $Sections[]=$Data; |
| elseif (IsPrj($Data)) |
| $Projects[]=$Data; |
| } |
| // Sort Sections |
| sort($Sections, SORT_STRING); |
| // Sort Projects |
| sort($Projects, SORT_STRING); |
| // Return combined result |
| $All["Projects"] = $Projects; |
| $All["Sections"] = $Sections; |
| return $All; |
| } |
| // ********************************* |
| // Permalinky |
| // ********************************* |
| // Filtr pro náhradu nepohodlných znaků v permalinku |
| // Nahrazuje všechny znaky kromě písmen a čísel, odstraní diakritiku |
| // u českých znaků |
| function PermaLinkFilter($String) |
| { |
| // Odstraň diakritiku |
| $SubstTable = array ( |
| "ě" => "e", "š" => "s", "č" => "c", "ř" => "r", "ž" => "z", "ý" => "y", "á" => "a", |
| "í" => "i", "é" => "e", "ď" => "d", "ť" => "t", "ň" => "n", "ů" => "u", "ú" => "u", |
| "Ě" => "E", "Š" => "S", "Č" => "C", "Ř" => "R", "Ž" => "Z", "Ý" => "Y", "Á" => "A", |
| "Í" => "I", "É" => "E", "Ď" => "D", "Ť" => "T", "Ň" => "N", "Ů" => "U", "Ú" => "U" |
| ); |
| $String = strtr($String, $SubstTable); |
| // Nahraď nepohodlné znaky mínusem |
| $String = preg_replace("~[^A-Z0-9]+~ui", "-", $String); |
| // Odtsraň duplicity mínusů |
| $String = preg_replace("~-+~u", "-", $String); |
| // Odstraň počáteční a koncové mínusy |
| $String = ltrim(rtrim($String,'-'),'-'); |
| return $String; |
| } |
| // Vrací z cesty platný permalink |
| // Vstupem je cesta k projektu nebo k sekci, z ní se vrací jen název (poslední část cesty) |
| function PermaLinkCreateKey($ProjectPath) |
| { |
| // Odstraň cestu |
| $PermaLinkKey = basename($ProjectPath); |
| // Odstraň nepohodlné znaky |
| $PermaLinkKey = PermaLinkFilter($PermaLinkKey); |
| // Hotovo |
| return $PermaLinkKey; |
| } |
| // Zvýrazní jméno projektu (poslední část zadané cesty dá do značky span) |
| function MarkPath($Path) |
| { |
| $Pos = strrpos($Path, '/'); |
| if($Pos===false) |
| return "<span class='Marked'>".$Path."</span>"; |
| else |
| return substr($Path, 0, $Pos+1)."<span class='Marked'>".substr($Path, $Pos+1)."</span>"; |
| } |
| // Vytvoří z klíče (upravený název projektu či sekce) celý klikací permalinkový odkaz |
| // Je-li zadána přídavná cesta tak ji přidá na konec |
| // ??????????????????????????? k čemu se použije $AditionalPath ?????????????? možná zrušit |
| function PermaLinkCreateLink($PermaLinkKey, $AditionalPath='') |
| { |
| $AditionalPath = ltrim($AditionalPath, '/'); |
| $AditionalPath = rtrim($AditionalPath, '/'); |
| if($AditionalPath!=='') |
| $AditionalPath = '/'.$AditionalPath; |
| $PermaLinkKey = PermaLinkCreateKey($PermaLinkKey); |
| return 'http://'.$_SERVER['HTTP_HOST'].PERMALINK.'/'.$PermaLinkKey.$AditionalPath; |
| } |
| // Na základě pole se všemi projekty a sekcemi vytvoří pole permalinků se všemi projekty a sekcemi |
| function PermaLinkCreateArray($ProjectsArray) |
| { |
| $PermaLinkArray = array(); |
| foreach($ProjectsArray['Projects'] as $Data) |
| { |
| $PermaLink = PermaLinkCreateKey($Data); |
| $PermaLinkArray[] = array('SortKey' => mb_strtolower($PermaLink), 'PermaLink' => $PermaLink, 'Path' => $Data, 'Type' => 'Project'); |
| } |
| foreach($ProjectsArray['Sections'] as $Data) |
| { |
| $PermaLink = PermaLinkCreateKey($Data); |
| $PermaLinkArray[] = array('SortKey' => mb_strtolower($PermaLink), 'PermaLink' => $PermaLink, 'Path' => $Data, 'Type' => 'Section'); |
| } |
| return $PermaLinkArray; |
| } |
| // V zadaném poli odkazů najde klíč a vrátí pole s nalezenými shodami |
| // (v případě neshody vrací prázdné pole, ignoruje velikost písmen) |
| function PermaLinkFind($AllPermas, $Key) |
| { |
| $Key = mb_strtolower($Key); |
| $Key = PermaLinkFilter($Key); |
| $KeyLen = strlen($Key); |
| $Result = array(); |
| if($KeyLen!==0) |
| { |
| foreach($AllPermas as $Data) |
| { |
| /* |
| // Hledej permalinky, které začínají jako zadaný klíč |
| if(mb_strtolower(substr($Data['PermaLink'], 0, $KeyLen))===$Key) |
| $Result[] = $Data; |
| */ |
| // Hledej permalinky, které obsahují zadaný klíč |
| if(strpos(mb_strtolower($Data['PermaLink']), $Key)!==false) |
| $Result[] = $Data; |
| } |
| return $Result; |
| } |
| } |
| ?> |
| /Server/PrjInfo/CommonOld.php |
|---|
| 0,0 → 1,312 |
| <?php |
| define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu |
| define('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 chybě |
| { |
| 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 ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_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 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; |
| } |
| ?> |
| /Server/PrjInfo/DirMetadata.php |
|---|
| 0,0 → 1,125 |
| <?php |
| // DirMetadata |
| // ----------- |
| // |
| // Modul zpracování popisného souboru pro popis obsahu adresáře/projektu |
| // |
| // (c)miho www.mlab.cz 2007, free software |
| // |
| // Formát souboru DIRINFO viz komentáře v souboru DIRINFO |
| // |
| //require_once('Common.php'); // Společné funkce |
| // Objekt pro zpracování informace o adresáři |
| class DirMetadata |
| { |
| public $DirData; // Sem se načtou data o adresáři v podobě klíč=>hodnota |
| private $Valid; // Zde je příznak platnosti |
| function LoadDirInfo($FileName, $Lang) |
| // Funkce načte informace ze souboru $FileName do vlastní paměti |
| // Cesta je od DOCUMENT_ROOT. |
| // Funkce bere v potaz zadaný jazyk, pokud není pro daný jazyk |
| // informace dostupná, použije se infromace bez udaného jazyka. |
| // Pokud není k dispozici soubor, vrací false. |
| // Soubor může být prázdný a není to chyba. |
| { |
| // Zruš předchozí informaci |
| $this->Valid = FALSE; |
| $this->DirData = array(); |
| // Jméno popisného souboru na cestě |
| $FileName = $_SERVER['DOCUMENT_ROOT'].$FileName; |
| // Ověř existenci popisného souboru |
| if (!is_file($FileName)) |
| return FALSE; |
| // Načti popisný soubor |
| $File = @file($FileName); |
| if ($File===FALSE) |
| return FALSE; |
| // Vyhoď komentáře (po řádcích) |
| foreach($File as $Key => $Line) |
| if (substr(ltrim($Line), 0, 2) == '//') |
| unset($File[$Key]); |
| // Sestav z pole jeden retězec |
| $File = implode($File); |
| // Vyhledej v souboru informace |
| $PatternKey = '\[(?P<Key>[a-z,A-Z,0-9,\-\_\.]+)\]'; |
| $PatternKeyNext = '(?=\[(?:[a-z,A-Z,0-9,\-\_\.]+)\])'; |
| $PatternValue = '(?P<Value>.*?)'; |
| $Pattern = '/'.$PatternKey.'\s*'.$PatternValue.'\s*'.$PatternKeyNext.'/su'; |
| preg_match_all($Pattern, $File, $Temp); |
| // Sestav pole dat |
| $Data = array(); |
| foreach($Temp['Key'] as $Key => $KeyName) |
| { |
| $Data[$KeyName] = trim(htmlspecialchars($Temp['Value'][$Key], ENT_NOQUOTES)); |
| //echo '{'.$KeyName.'->'.$Data[$KeyName].'<-}'."\n"; |
| } |
| unset($Temp); |
| // Aplikuj jazyk |
| // Priorita je "uvedený jazyk"/"bez jazyka" |
| foreach($Data as $Key => $Value) // projdi vše |
| { |
| $Temp = explode('.', $Key, 2); // základní část klíče |
| if (isset($Temp[1])) // existuje přípona |
| { |
| if ($Temp[1] == $Lang) // přípona |
| $Data[$Temp[0]] = $Value; // zkopíruj jazykovou hodnotu |
| unset($Data[$Key]); // klíč s příponou vyhoď |
| } |
| } |
| // Uschovej si získaná data |
| $this->Valid = TRUE; |
| $this->DirData = $Data; |
| // Soubor byl nalezen a načten |
| return TRUE; |
| } |
| function GetVariable($Key) |
| // Vrací řetězec s informaci podle klíče |
| // Když data nejsou, vrací prázdný řetězec |
| // Klíčem je jméno informace ze souboru DIRINFO bez jazykové přípony |
| { |
| // Test na přítomnost informace |
| if (isset($this->DirData[$Key])) |
| return $this->DirData[$Key]; |
| else |
| return ''; |
| } |
| function GetString($VarName, $Wrap=0) |
| // Vrátí parametr jako jeden řetězec s redukovanými bílými znaky |
| // Volitelně vloží odřádkování do delších řetězců |
| { |
| $Temp = $this->GetVariable($VarName); |
| $Temp = preg_replace('/\s+/su', ' ', $Temp); |
| if ($Wrap!=0) |
| wordwrap($Temp, $Wrap); |
| return $Temp; |
| } |
| // function GetList |
| function GetValid() |
| // Vrátí TRUE pokud je načtená informace o adresáři |
| { |
| return $this->Valid; |
| } |
| } |
| ?> |
| /Server/PrjInfo/List.php |
|---|
| 0,0 → 1,664 |
| <?php |
| error_reporting(E_ALL); // nastavení varování při ladění |
| require_once('Common.php'); // Společné funkce |
| require_once('TemplateEngine.php'); // Stroj pro práci s templejty |
| require_once('DirMetadata.php'); // Modul pro načítání informace o adresářích |
| define('WRAP', 70, true); // Lámání řetězcových hodnot |
| // Stavová informace |
| // ----------------- |
| // |
| // Tento skript používá pro přenesení stavu ke kliemtovi a zpět dvě stavové |
| // proměnné prostřednictvím odkazu (zpracová ModRewrite, definováno v konfiguraci webu). |
| // Jsou to: |
| // |
| // lang - zde je kód jazyka, chybějící kód se přesměruje na angličtinu |
| // |
| // path - zde se uvádí cesta vůči DOCUMENT_ROOT webu, neplatná cesta se přesměruje |
| // na root |
| // |
| // Vyzvedni si parametry z URL |
| // --------------------------- |
| // Vyzvedni jazyk z předaného parametru |
| $Lang = (is_string($_GET['lang'])) ? $_GET['lang'] : $Lang = 'en'; |
| $Params['lang'] = $Lang; |
| //print "Lang:{$Lang}<br>"; |
| // Převezmi cestu, a odstraň lomítko na konci (na začátku lomítko je) |
| $Path = (is_string($_GET['path'])) ? $_GET['path'] : $Path = ''; |
| $Path = '/'.ltrim(rtrim($Path, '/'), '/'); |
| // Decode entities ? |
| // $LinkFull=htmlspecialchars_decode($LinkFull); |
| // Ulož |
| $Params['path'] = $Path; |
| //print "Path:{$Path}<br>"; |
| // Načti metadata pro sekci (první adresář) |
| // Nikdy nevěř tomu, co přijde od klienta |
| $SectionDirInfo = new DirMetadata(); |
| $SectionDirInfo->LoadDirInfo('/'.GetSection($Path).'/'.DIRINFO, $Lang); |
| if($Path!='/') |
| { |
| if(!$SectionDirInfo->GetValid()) |
| Redirect('', $Lang); // Neexistující sekci přesměruj na root |
| } |
| // Pokus se načíst informace jako by cesta vedla do adresáře |
| $ThisDirInfo = new DirMetadata(); |
| $ThisDirInfo->LoadDirInfo($Path.'/'.DIRINFO, $Lang); |
| if($ThisDirInfo->GetValid()) |
| { |
| // Založ objekt templejtu a načti jej |
| $Template = new TemplateEngine(); |
| $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_LISTDIR, $Lang); |
| if ($error!='') |
| Error($error); |
| // Generuj dynamický obsah do proměnných objektu Template |
| ListDir($SectionDirInfo, $ThisDirInfo, $Template, $Params); |
| // Odešli výsledek klientovi |
| echo $Template->GetPage(); |
| return; |
| } |
| // Pokus se načíst informace jako by cesta vedla do projektu |
| $ThisDirInfo->LoadDirInfo($Path.'/'.PRJINFO, $Lang); |
| if($ThisDirInfo->GetValid()) |
| { |
| // Založ objekt templejtu a načti jej |
| $Template = new TemplateEngine(); |
| $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_LISTPRJ, $Lang); |
| if ($error!='') |
| Error($error); |
| // Generuj dynamický obsah do proměnných objektu Template |
| ListPrj($SectionDirInfo, $ThisDirInfo, $Template, $Params); |
| // Odešli výsledek klientovi |
| echo $Template->GetPage(); |
| return; |
| } |
| // Neplatná cesta (ani adresář, ani projekt) |
| Redirect('/', $Lang); |
| return; |
| function CreateListLinkHTML($Params, $DirName='', $Title='') |
| { |
| // Spoj cestu a (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)'; |
| } |
| // Jméno skriptu (statické jméno je pomocí mod_rewrite přesměrováno na tento skript) |
| $ScriptName = '/' . LISTSCRIPT; |
| $ScriptName .= ($Params['lang'] !== '') ? '.'.$Params['lang'] : ''; |
| $ScriptName .= '.html'; |
| // Sestav odkaz |
| $Link = "<a href=\"{$Params['path']}{$ScriptName}\""; |
| if ($Title!='') |
| $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; |
| $Link .= ">$DirName</a>"; |
| return $Link; |
| } |
| function CreateListLinkPathHTML($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 (obsahuje cestu i jazyk) |
| { |
| // 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 = CreateListLinkHTML($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 .= CreateListLinkHTML($Params, '', $Title); |
| } |
| } |
| // Vrať výsledek |
| return $Link; |
| } |
| function ListDir($SectionDirInfo, $ThisDirInfo, $Template, $Params) |
| // Tato funkce vkládá informace do objektu Template pro výpis seznamu |
| // položek v adresáři (seznam projektů a sekcí v zadaném adresáři) |
| { |
| // Lokálně používané parametry pěkně při ruce |
| $Path = $Params['path']; |
| $Lang = $Params['lang']; |
| // HTML hlavička - doplň sekci |
| $Template->SetVariable('InfoSection', GetSection($Path)); |
| // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře) |
| // do proměnných templejtu |
| foreach($SectionDirInfo->DirData as $Key => $Value) |
| { |
| $Template->SetVariable($Key, $Value, WRAP); |
| } |
| foreach($ThisDirInfo->DirData as $Key => $Value) |
| { |
| $Template->SetVariable($Key, $Value, WRAP); |
| } |
| // Klikací řádka s cestou |
| $Template->SetVariable('InfoPath', |
| CreateListLinkPathHTML($Params, $Template->GetString('InfoPathTitle'))); |
| // Permalink |
| $Template->SetVariable('InfoPermaLink', PermaLinkCreateLink($Path)); |
| // Procházej adresář |
| // ----------------- |
| // Odstraň lomítko u prázdné cesty aby se nezdvojovalo |
| if ($Params['path']=='/') |
| $Params['path'] = ''; |
| // Objekt pro načítání informací o adresářích a projektech |
| $DirInfo = new DirMetadata(); |
| // Abych nešahal pořád do objektu, použiju proměnnou |
| $Glue = $Template->GetVariable('InfoGlue'); |
| // Sem se střádá mezivýsledek |
| // Zvlášť adresáře a projekty aby byly oddělené ve výsledku |
| $LinesDir = ''; // Adresáře |
| $LinesPrj = ''; // Projekty |
| // Procházení adresářem |
| $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); |
| // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči |
| foreach ($Dir as $Key => $DirName) |
| { |
| $DirName = basename($DirName); |
| $NewDir[$DirName] = $DirName; |
| } |
| $Dir = $NewDir; |
| unset($NewDir); |
| // Setřídění adresářů podle preferovaného třídění ze [SortPreferences] |
| $NewDir = array(); |
| $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění |
| if ($Sort!='') |
| { |
| $Sort = explode("\n", $Sort); |
| // Najdi a přendej nalezené položky |
| foreach ($Sort as $Value) |
| { |
| $Value = trim($Value); |
| if (isset($Dir[$Value])) |
| { |
| // Zařaď do nového pole |
| $NewDir[] = $Value; |
| // Vyhoď ze starého |
| unset($Dir[$Value]); |
| } |
| } |
| // Přendej zbylé položky |
| foreach ($Dir as $Value) |
| { |
| $NewDir[] = $Value; |
| } |
| $Dir = $NewDir; |
| unset($NewDir); |
| } |
| // Zpracování položek |
| foreach ($Dir as $DirName) |
| { |
| // Načti informace o (každém) adresáři |
| $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang); |
| // Pokud to není adresář, tak načti informace o projektu |
| if (!$DirInfoValid) |
| { |
| $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang) |
| or |
| // Heuristika pro projekty, které ještě nemají popis |
| $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC') |
| or |
| $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH'); |
| } |
| // Zkontroluj, zda jsme v platné sekci |
| if ($DirInfoValid || $ProjectInfoValid) |
| { |
| // Připrav si proměnné |
| unset($Variables); |
| foreach($DirInfo->DirData as $Key => $Value) |
| { |
| $Variables[$Key] = $DirInfo->GetString($Key, WRAP); |
| } |
| $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) |
| : $DirName; |
| $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150); |
| $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); |
| $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); |
| if (!$DirInfoValid) |
| { |
| $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle')); |
| } |
| $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); |
| $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); |
| $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); |
| // Vlož info o dostupnosti na UST |
| if($DirInfo->GetString('InfoBuyUST')!= '') |
| { |
| $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST'); |
| } |
| // Poukni proměnné do vzoru a střádej si výsledek |
| if ($DirInfoValid) |
| $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| else |
| $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| } |
| } |
| // Slož k sobě obě části (adresář / separátor / projekt) |
| if ($LinesDir!='' and $LinesPrj!='') |
| $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj; |
| else |
| $Lines = $LinesDir.$LinesPrj; |
| // Teď sestavené položky ulož do proměnné "InfoLine" objektu |
| $Template->SetVariable('InfoLine', $Lines); |
| } |
| function ListPrj($SectionDirInfo, $ThisDirInfo, $Template, $Params) |
| // Tato funkce vkládá informace do objektu Template pro výpis informací |
| // o projektu (náhled, informace, odkazy na dokuemntaci etc.) |
| { |
| // Lokálně používané parametry pěkně při ruce |
| $Path = $Params['path']; |
| $Lang = $Params['lang']; |
| // Abych nešahal pořád do objektu, použiju proměnnou |
| $Glue = $Template->GetVariable('InfoGlue'); |
| // HTML hlavička - doplň sekci |
| $Template->SetVariable('InfoSection', GetSection($Path)); |
| // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře) |
| // do proměnných templejtu |
| foreach($SectionDirInfo->DirData as $Key => $Value) |
| { |
| $Template->SetVariable($Key, $Value, WRAP); |
| } |
| foreach($ThisDirInfo->DirData as $Key => $Value) |
| { |
| $Template->SetVariable($Key, $Value, WRAP); |
| } |
| // Klikací řádka s cestou |
| $Template->SetVariable('InfoPath', |
| CreateListLinkPathHTML($Params, $Template->GetString('InfoPathTitle'))); |
| // Permalink |
| $Template->SetVariable('InfoPermaLink', PermaLinkCreateLink($Path)); |
| // Zpracuj informace o projektu |
| // ---------------------------- |
| unset($Variables); |
| // Převezmi data z popisu projektu |
| foreach($ThisDirInfo->DirData as $Key => $Value) |
| { |
| $Variables[$Key] = $ThisDirInfo->GetString($Key, WRAP); |
| } |
| $Template->SetVariable('InfoVariables', $Variables); |
| // Odkaz na obrázky k projektu |
| $Template->SetVariable('InfoPictures', CreatePicturesLink($Path, $Template->GetString('InfoPicturesGlue'), 'Ilustrative Picture', '', 200)); |
| // Data do tabulky |
| $Template->SetVariable('InfoText', CreateFilesLink($Path.'/DOC/{HTML/*.[hH][tT][mM][lL],*.[pP][dD][fF]}', $Glue)); |
| $Template->SetVariable('InfoWebSVN', CreateSVNLink($Path, $Lang, $Template->GetString('InfoSVNTitle'))); |
| $Variables['InfoName'] = basename($Path); |
| /* $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) |
| : $DirName; |
| $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150); |
| $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); |
| $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); |
| if (!$DirInfoValid) |
| { |
| $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle')); |
| } |
| $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); |
| $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); |
| $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); |
| // Vlož info o dostupnosti na UST |
| if($DirInfo->GetString('InfoBuyUST')!= '') |
| { |
| $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST'); |
| } |
| */ |
| // Poukni proměnné do vzoru a střádej si výsledek |
| $LinesPrj = $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| $Template->SetVariable('InfoLine', $LinesPrj); |
| /* |
| // Objekt pro načítání informací o adresářích a projektech |
| $DirInfo = new DirMetadata(); |
| // Abych nešahal pořád do objektu, použiju proměnnou |
| $Glue = $Template->GetVariable('InfoGlue'); |
| // Sem se střádá mezivýsledek |
| // Zvlášť adresáře a projekty aby byly oddělené ve výsledku |
| $LinesDir = ''; // Adresáře |
| $LinesPrj = ''; // Projekty |
| // Procházení adresářem |
| $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); |
| // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči |
| foreach ($Dir as $Key => $DirName) |
| { |
| $DirName = basename($DirName); |
| $NewDir[$DirName] = $DirName; |
| } |
| $Dir = $NewDir; |
| unset($NewDir); |
| // Setřídění adresářů podle preferovaného třídění ze [SortPreferences] |
| $NewDir = array(); |
| $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění |
| if ($Sort!='') |
| { |
| $Sort = explode("\n", $Sort); |
| // Najdi a přendej nalezené položky |
| foreach ($Sort as $Value) |
| { |
| $Value = trim($Value); |
| if (isset($Dir[$Value])) |
| { |
| // Zařaď do nového pole |
| $NewDir[] = $Value; |
| // Vyhoď ze starého |
| unset($Dir[$Value]); |
| } |
| } |
| // Přendej zbylé položky |
| foreach ($Dir as $Value) |
| { |
| $NewDir[] = $Value; |
| } |
| $Dir = $NewDir; |
| unset($NewDir); |
| } |
| // Zpracování položek |
| foreach ($Dir as $DirName) |
| { |
| // Načti informace o (každém) adresáři |
| $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang); |
| // Pokud to není adresář, tak načti informace o projektu |
| if (!$DirInfoValid) |
| { |
| $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang) |
| or |
| // Heuristika pro projekty, které ještě nemají popis |
| $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC') |
| or |
| $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH'); |
| } |
| // Zkontroluj, zda jsme v platné sekci |
| if ($DirInfoValid || $ProjectInfoValid) |
| { |
| // Připrav si proměnné |
| unset($Variables); |
| foreach($DirInfo->DirData as $Key => $Value) |
| { |
| $Variables[$Key] = $DirInfo->GetString($Key, WRAP); |
| } |
| $Variables['InfoName'] = ($DirInfoValid or $ProjectInfoValid) ? CreateListLinkHTML($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) |
| : $DirName; |
| $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Ilustrative Picture', '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'), 150); |
| $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); |
| $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); |
| if (!$DirInfoValid) |
| { |
| $Variables['InfoWIKI'] = CreateWikiLink($DirName, $Params['lang'], $Template->GetString('InfoWikiTitle')); |
| } |
| $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); |
| $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); |
| $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); |
| // Vlož info o dostupnosti na UST |
| if($DirInfo->GetString('InfoBuyUST')!= '') |
| { |
| $Variables['InfoBuy'] = CreateLink($DirInfo->GetString('InfoBuyUST'),'UST'); |
| } |
| // Poukni proměnné do vzoru a střádej si výsledek |
| if ($DirInfoValid) |
| $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| else |
| $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| } |
| } |
| // Slož k sobě obě části (adresář / separátor / projekt) |
| if ($LinesDir!='' and $LinesPrj!='') |
| $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj; |
| else |
| $Lines = $LinesDir.$LinesPrj; |
| // Teď sestavené položky ulož do proměnné "InfoLine" objektu |
| $Template->SetVariable('InfoLine', $Lines); |
| */ |
| } |
| // ************************************* |
| 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 xxxCheckWebPath($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 ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_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 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 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; |
| } |
| ?> |
| /Server/PrjInfo/PermaLink.php |
|---|
| 0,0 → 1,312 |
| <?php |
| // Zpracovává odkazy ve formátu http://www.mlab.cz/PermaLink/Projekt/DalšíCesta |
| // Skript se volá ze souborů /PermaLink.cs.php a /PermaLink.en.php kde se nastavuje proměnná $Lang |
| // První slovo (až po lomítko) za PermaLink se chápe jako jméno modulu/projektu nebo adresáře/sekce. |
| // Pokud zadanému jménu odpovídá jediný odkaz, provede se hned přesměrování, jinak se vypíše seznam kandidátů. |
| // Pro snadné odkázání lze permanentní odkaz doplnit cestou k adresáři či souboru v rámci projektu. |
| define(DISPLAY_ALL_IF_EMPTY , true); // Povol zobrazení všech sekcí a projektů když je zadaný prázdný permalink |
| define(MAX_DEPTH, 50); // Maximální hloubka prohledávání adresářů (pojistka proti zacyklené struktuře adresářů) |
| require_once('Common.php'); // Modul společných funkcí |
| require_once('DirMetadata.php'); // Modul pro načítání informace o adresářích |
| require_once('TemplateEngine.php'); // Stroj pro práci s templejty |
| // Převezmi odkaz |
| if($_REQUEST['PermaLink']!='') |
| // Odkaz z formuláře |
| $LinkFull = $_REQUEST['PermaLink']; |
| else |
| // Odkaz z cesty |
| $LinkFull = $_SERVER['PATH_INFO']; |
| // Decode entities ? |
| // $LinkFull=htmlspecialchars_decode($LinkFull); |
| // Split PermaLink and aditional Path |
| $LinkFull = ltrim($LinkFull, DIRECTORY_SEPARATOR); |
| $LinkFull = rtrim($LinkFull, DIRECTORY_SEPARATOR); |
| $SeparatorPosition = strpos($LinkFull, DIRECTORY_SEPARATOR); |
| if ($SeparatorPosition===false) |
| { |
| $LinkPath = ''; |
| $Link = $LinkFull; |
| } |
| else |
| { |
| $LinkPath = substr($LinkFull, $SeparatorPosition+1); |
| $Link = substr($LinkFull, 0, $SeparatorPosition); |
| } |
| unset($SeparatorPosition); |
| // Najdi cíle pro PermaLink |
| $PermaLinkArray = array(); |
| if(DISPLAY_ALL_IF_EMPTY or !($Link==='')) |
| { |
| // Načti seznam všech projektů a sekcí (od začátku) |
| $ProjectsAndSections = RecurseDirs('/'); |
| // Převeď projekty a sekce na permalinky |
| $AllPermas = PermaLinkCreateArray($ProjectsAndSections); |
| unset($ProjectsAndSections); |
| if($LinkFull==='') |
| { |
| // Prázdný permalink - zkopíruj vše |
| $PermaLinkArray = $AllPermas; |
| } |
| else |
| { |
| // Najdi zadaný permalink |
| $PermaLinkArray = PermaLinkFind($AllPermas, PermaLinkCreateKey($Link)); |
| } |
| unset($AllPermas); |
| } |
| $PermaLinkCount = count($PermaLinkArray); |
| //print_rx('Found Permalinks', $PermaLinkArray); |
| // Nalezen právě jeden odkaz bez přídavné cesty - rovnou přesměruj |
| if($PermaLinkCount==1 and $LinkPath==='') |
| Redirect($PermaLinkArray[0]['Path'], $Lang); // ------------------------------------->>> |
| // Setřiď nalezené (třídí primárně podle první položky, což je lowercase verze permalinku) |
| sort($PermaLinkArray); |
| // *************************** |
| // Zpracuj PermaLink bez cesty |
| // *************************** |
| if ($LinkPath==='') |
| { |
| // Založ objekt templejtu a načti jej |
| $Template = new TemplateEngine(); |
| $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_PERMALINK, $Lang); |
| if ($error!='') |
| Error($error); |
| // Generuj dynamický obsah do proměnných (společná část) |
| $Template->SetVariable('InfoThisLink', $LinkFull ); |
| $Template->SetVariable('InfoThisServer', $_SERVER['HTTP_HOST']); |
| // Nalezeno více položek - zjisti více informací a vlož je do templejtu |
| $Lines = ''; |
| if($PermaLinkCount>1) |
| { |
| // Nachystej společné hodnoty z templejtu |
| $PictureGlue = $Template->GetVariable('InfoPictureGlue'); |
| $PictureAlt = $Template->GetVariable('InfoPictureAlt'); |
| $PictureNoPicture = '/'.TEMPLATE_PATH.'/'.$Template->GetVariable('InfoNoPicture'); |
| // Načti informace o projektu |
| $DirInfo = new DirMetadata(); |
| foreach($PermaLinkArray as $Data) |
| { |
| // Naplň proměnné pro definici položky |
| // Type / Picture / PermaLink / Path |
| $Variables['InfoType'] = $Data['Type']; |
| $Variables['InfoPicture'] = CreatePicturesLink($Data['Path'], $PictureGlue, $PictureAlt, $PictureNoPicture, 150); |
| $Variables['InfoPermaLink'] = "<a href=\"".PermaLinkCreateLink($Data['PermaLink'])."\">{$Data['PermaLink']}</a>"; |
| $PathMarked = MarkPath($Data['Path']); |
| $Variables['InfoPath'] = "<a href=\"".CreateProjectLink($Data['Path'], $Lang)."\">$PathMarked</a>"; |
| unset($PathMarked); |
| // Zjisti informace o projektu |
| if($Data['Type']==="Section") |
| $DirInfo->LoadDirInfo($Data['Path'].'/'.DIRINFO, $Lang); |
| else |
| $DirInfo->LoadDirInfo($Data['Path'].'/'.PRJINFO, $Lang); |
| // Vlož všechny zjištěné informace |
| foreach($DirInfo->DirData as $Key => $ItemInfo) |
| $Variables[$Key] = $ItemInfo; |
| // Ošetři chybějící popis |
| if($Variables['InfoShortDescription']=='' and $Variables['InfoLongDescription']=='') |
| $Variables['InfoShortDescription'] = $Template->GetVariable('InfoNoText'); |
| // Proveď substituci a střádej výsledek (po položkách) |
| $Lines .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| // Zahoď nalezená data (aby se nepoužily v dalším cyklu) |
| unset($Variables); |
| } |
| // Vlož řádky do templejtu |
| $Template->SetVariable('InfoLine', $Lines); |
| } |
| else |
| { |
| // Nenalezeno nic (nebo prázdné zadání) |
| $Template->SetVariable('InfoLine', $Template->GetVariable('InfoNoData')); |
| } |
| // Odešli výsledek klientovi |
| echo $Template->GetPage(); |
| return; |
| } |
| else |
| // ************************** |
| // Zpracuj PermaLink s cestou |
| // ************************** |
| { |
| // Založ objekt templejtu a načti jej |
| $Template = new TemplateEngine(); |
| $error = $Template->LoadTemplate($_SERVER['DOCUMENT_ROOT'].'/'.TEMPLATE_PERMALINK_PATH, $Lang); |
| if ($error!='') |
| Error($error); |
| // Generuj dynamický obsah do proměnných (společná část) |
| $Template->SetVariable('InfoThisLink', $LinkFull ); |
| $Template->SetVariable('InfoThisServer', $_SERVER['HTTP_HOST']); |
| // Načti proměnné z templejtu |
| $Glue = $Template->GetVariable('InfoNamesGlue'); |
| // Prohledej adresáře (nestriktní verze) |
| // ------------------------------------- |
| $FilesPathArray = array(); |
| $FilesPathCount = 0; |
| // Rozděl cestu na dílky |
| $LinkPathArray = explode('/', $LinkPath); |
| $LinkPathDepth = count($LinkPathArray); |
| //print_rx("Path to be found", $LinkPathArray); |
| // Cyklus přes všechny nalezené permalinky |
| foreach($PermaLinkArray as $Item) |
| { |
| // Rekurentně procházej atrukturu adresáře |
| // Podadresáře přidávej průběžně na konec pole |
| // První položka je hloubka zanoření (indexuje $LinkPathArray) |
| // Střádej nalezené položky do pole $LinkPathData |
| $Dirs = array(); |
| $Dirs[] = array('Depth'=>0, 'Path'=>$Item['Path']); |
| // Omez hloubku procházení adresářů |
| for ($i=0; $i<count($Dirs) and $i<MAX_DEPTH; $i++) |
| { |
| //print "At Depth " . $Dirs[$i]['Depth'] . " Reading Directory " . $Dirs[$i]['Path'] . PHP_EOL; |
| //print "Looking for " . $LinkPathArray[$Dirs[$i]['Depth']] . PHP_EOL; |
| $GlobFlags = GLOB_NOSORT; |
| if ($LinkPathDepth>$Dirs[$i]['Depth']+1) |
| { |
| // Nejsme ještě u konce cesty - přidej jen adresáře |
| $GlobFlags |= GLOB_ONLYDIR; |
| } |
| // Čti adresáře |
| $SubDirs = glob($_SERVER['DOCUMENT_ROOT'].$Dirs[$i]['Path'].DIRECTORY_SEPARATOR.'*', $GlobFlags); |
| foreach($SubDirs as $Item) |
| { |
| // Převeď na cestu od rootu webu |
| $CurentName = basename($Item); |
| $CurentPath = $Dirs[$i]['Path' ]; |
| $CurentDepth = $Dirs[$i]['Depth']; |
| //print " $CurentName\n"; |
| // ===> POROVNÁNÍ JE ZDE <=== |
| if(mb_strtolower(PermaLinkFilter($CurentName))===mb_strtolower(PermaLinkFilter($LinkPathArray[$CurentDepth]))) |
| { |
| //print" ^----> $CurentDepth : $CurentPath/$CurentName\n"; |
| // Přidej další adresář do rekurze |
| if(is_dir($Item)) |
| { |
| $Dirs[] = array('Depth'=>$CurentDepth+1, 'Path'=>$CurentPath.'/'.$CurentName); |
| } |
| // Nalezený soubor v adresáři |
| if(is_file($Item)) |
| { |
| //print " ^----> File: $Item\n"; |
| $FilesPathArray[$Dirs[$i]['Path']][]=$CurentName; |
| $FilesPathCount++; |
| } |
| } |
| // V posledním adresáři přidej všechny soubory |
| if($CurentDepth>=$LinkPathDepth) |
| { |
| //print " Test ".$_SERVER['DOCUMENT_ROOT'].$CurentPath.'/'.$CurentName.PHP_EOL; |
| if (is_file($_SERVER['DOCUMENT_ROOT'].$CurentPath.'/'.$CurentName)) |
| { |
| //print " ^----> File All: $Item\n"; |
| $FilesPathArray[$CurentPath][]=$CurentName; |
| $FilesPathCount++; |
| } |
| } |
| } |
| //print("\n"); |
| } |
| } |
| //print_rx('Found Files', $FilesPathArray); |
| //print "Files Found Count $FilesPathCount\n"; |
| /* |
| // Prohledej adresáře a soubory (striktní verze) |
| // --------------------------------------------- |
| $EatIt = strlen($_SERVER['DOCUMENT_ROOT']); |
| foreach($PermaLinkArray as $Item) |
| { |
| $Path = $_SERVER['DOCUMENT_ROOT'].$Item['Path'].DIRECTORY_SEPARATOR.$LinkPath; |
| if (is_file($Path)) |
| { |
| $FilesPathArray[substr(dirname($Path), $EatIt)] = array(basename($Path)); |
| $FilesPathCount++; |
| } |
| if (is_dir($Path)) |
| { |
| foreach (scandir($Path) as $DirItem) |
| { |
| if (is_file($Path.DIRECTORY_SEPARATOR.$DirItem)) |
| { |
| $FilesPathArray[substr($Path, $EatIt)][]=$DirItem; |
| $FilesPathCount++; |
| } |
| } |
| } |
| } |
| print_rx('Nalezene soubory', $FilesPathArray); |
| print "$FilesPathCoutn\n"; |
| */ |
| // Nalezen právě jeden odkaz na soubor - rovnou přesměruj |
| if($FilesPathCount===1) |
| { |
| reset($FilesPathArray); |
| $tmp = current($FilesPathArray); |
| $Path = key($FilesPathArray).'/'.$tmp[0]; |
| RedirectToFile($Path); // ------------------------------------->>> |
| } |
| // Nalezeno více položek - zjisti více informací a vlož je do templejtu |
| $Lines = ''; |
| if($FilesPathCount>0) |
| { |
| foreach($FilesPathArray as $Path=>$FileArray) |
| { |
| $Variables['InfoName']=CreateFilesLink($Path, '<br>', ''); |
| $FileNames = ''; |
| foreach($FileArray as $FileItem) |
| { |
| $FileNames .= '<br> '.$FileItem; |
| } |
| $Variables['InfoPath'] = $Path; |
| $Variables['InfoNames'] = CreateFilesLink2($Path, $FileArray, $Glue); |
| // Proveď substituci a střádej výsledek (po položkách) |
| $Lines .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| // Zahoď nalezená data (aby se nepoužily v dalším cyklu) |
| unset($Variables); |
| } |
| // Vlož řádky do templejtu |
| $Template->SetVariable('InfoLine', $Lines); |
| } |
| else |
| { |
| // Nenalezeno nic |
| $Template->SetVariable('InfoLine', $Template->GetVariable('InfoNoData')); |
| } |
| // Odešli výsledek klientovi |
| echo $Template->GetPage(); |
| return; |
| } |
| ?> |
| /Server/PrjInfo/TemplateEngine.php |
|---|
| 0,0 → 1,277 |
| <?php |
| // Template Engine |
| // --------------- |
| // |
| // Tento modul zpracovává tmplejty a strká do nich dynamicky generované |
| // informace a vytváří tak dynamické HTML stránky s oddělenou logikou |
| // programu a vzhledu. |
| // |
| // Více viz popis činnosti v konentáři na začátku templejtu |
| // |
| // (c)miho www.mlab.cz 2007, free software |
| // |
| // Typické použití objektu je toto: |
| // |
| // - Založ objekt templejtu (new) |
| // - $Template = new TemplateEngine(); |
| // |
| // - Načti templejt ze souboru do objektu (ošetři chybu!) |
| // - $error = $Template->LoadTemplate($TemplateFile); |
| // |
| // - Tady se provádí generování masa, je možné použít proměnné, |
| // - modifikovat proměnné a nechat provéstsubstituce v proměnných |
| // - do řetězců. |
| // |
| // $Template->SetVariable('InfoTitle','Generovaný seznam'); |
| // - první parametr je jméno proměnné, druhý je jeho nový obsah |
| // |
| // $Line = $Template->GetVariable('InfoLine') |
| // - vrací obsah proměnné nebo prázdný řetězec |
| // |
| // - Připrav si proměnné, které se budou strkat do vzorového řetězce |
| // $Variables[InfoName] = 'nějaká informace pro proměnnou InfoName'; |
| // $Variables[InfoPicture] = 'jiná informace pro proměnnou InfoPicture'; |
| // - aplikuj (nahraď) proměnné na vzorový řetězec z propměnné 'InfoLine' |
| // $Line = $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| // |
| // - Nakonec se aplikují proměnné do nataženého templejtu a výsledek |
| // - se pošle klientovi |
| // echo $Template->GetPage(); |
| // |
| // Objekt pro zpracování templejtu |
| class TemplateEngine |
| { |
| private $Page; // Sem se načte templejt a zde se provádí substituce |
| private $Info; // Sem se načtou z templejtu proměnné |
| function ListInfo() |
| // Vypíše nalezené proměnné a jejich hodnoty |
| // Pouze pro ladění |
| { |
| echo "[ ListInfo:\n"; |
| print_r($this->Info); |
| echo ']'; |
| } |
| function LoadTemplate($TemplateFileName, $Lang) |
| // Načte templejt ze souboru, při chybě vrací chybový řetězec |
| // Snaží se rozumně využít informaci o jazyku k otevření správné verze |
| // templejtu. Cesta se zadává bez jazykové části ale s příponou. |
| { |
| // Vlož zadaný jazyk do názvu souboru |
| $TemplateFileName = LangFile($TemplateFileName, $Lang); |
| // Načti template ze souboru (po řádcích do pole) |
| $this->Page = @file($TemplateFileName); |
| if ($this->Page=='') |
| return 'Unable Open Template File'; |
| // Sestav z pole jeden retězec |
| $this->Page = implode($this->Page); |
| // Definice regulárních výrazů pro hledání |
| // --------------------------------------- |
| // Definice vzoru pro hledání komentáře ve tvaru <!-- --> |
| // Komentář je nepojmenované pole |
| // Před a za koentářem mohou být bílé znaky |
| // Uvnitř komentáře nesmí být znak > |
| $PatternComment = '(?:\s*<!--[^>]*--\s*>\s*)'; |
| // (?: nepojemnované pole |
| // \s* volitelné bílé znaky před |
| // <!-- začátek komentáře |
| // [^>]* vniřek komentáře (neobsahuje >) |
| // --\s*> konec komentáře |
| // \s* volitelné bílé znaky za komentářem |
| // ) tady končí komentář |
| // Definice vzoru pro hledání proměnných ve tvaru $InfoXXX |
| $PatternVar ='\$(?P<VarName>Info[a-z,A-Z,0-9,\-\_]+)'; |
| // \$ na začátku $ |
| // (?P<VarName> pojmenované pole VarName je (jméno proměnné bez dolaru) |
| // Info[a-z,A-Z,0-9,\-\_]+ proměnná začíná Info a pak jsou písmena, |
| // ) číslice, mínus a podtržítko |
| // Definice vzoru pro hledání hodnot proměnných ve tvaru = " Hodnota " |
| // Definice hodnot je ve tvaru $InfoXXX="YYY" a mohou být víceřádkové |
| // ( a mohou obsahovat uvnitř další substituce uvozené $, které program |
| // zpracovává ale ne tady) |
| $PatternValue = '\s*=\s*"(?P<VarValue>[^"]*)"'; |
| // \s*=\s* rovná se volitelnými bílými znaky okolo |
| // " hodnota v uvozovkách |
| // (?P<VarValue> parametr s názvem VarValue |
| // [^"]* hodnota nesmí obsahovat uvozovky |
| // ) vracíme hodnotu bez uvozovek |
| // " konec uvozovek |
| // Zparacování vzoru |
| // ----------------- |
| // Najdi na začátku stránky komentář a vykousni ho |
| $pattern = '/^' .$PatternComment. '+/su'; |
| $this->Page = preg_replace($pattern, '', $this->Page); |
| // / oddělovač |
| // ^ od začátku řetězce (jen komentáře na začátku souboru) |
| // $PatternComment komentář (<!-- -->) s bílými znaky okolo |
| // + alespoň jeden komentář |
| // /su modifikátor, . zastupuje i odřádkování, utf8 |
| // Najdi v templejtu substutuční proměnné a vytvoř v poli $Info |
| // prázdné položky pro každou použitou proměnnou. Dělá se to proto, |
| // aby se na konci nepoužité proměnné nahradily prázdným řetězcem. |
| $pattern = '/' .$PatternVar. '/su'; |
| preg_match_all($pattern, $this->Page, $temp); |
| // / oddělovač |
| // .$PatternVar. proměnná ( $InfoXXX ) - parametr VarName |
| // /su modifikátor zajistí, že . zastupuje i odřádkování, utf8 |
| foreach($temp['VarName'] as $key => $value) |
| $this->Info[$value] = ''; |
| unset($temp); |
| // Vytáhni proměnné a jejich hodnoty do pole $Info |
| $pattern = '/' .$PatternVar.$PatternValue. '/su'; |
| // / oddělovač |
| // .$PatternVar. proměnná ( $InfoXXX ) - parametr VarName |
| // .$PatternValue. přiřazení ( = " Hodnota " ) - parametr VarValue |
| // /su modifikátor, . zastupuje i odřádkování, UTF8 |
| preg_match_all($pattern, $this->Page, $temp); |
| foreach($temp['VarName'] as $key => $value) |
| $this->Info[$value] = $temp['VarValue'][$key]; |
| unset($temp); |
| // Vykousej zpracované definice proměnných (a komentáře před nimi) |
| $pattern = '/' .$PatternComment.'?'.$PatternVar.$PatternValue. '/su'; |
| // / oddělovač |
| // .$PatternComment.'?' volitelný komentář před definicí |
| // .$PatternVar. proměnná ( $InfoXXX ) |
| // .$PatternValue. přiřazení ( = " Hodnota " ) |
| // /su modifikátor, . zastupuje i odřádkování, UTF8 |
| $this->Page = preg_replace($pattern, '', $this->Page); |
| } |
| function Indent($StringData, $Indent) |
| // Všechna odřádkování v řetězci $StringData odsadí o hodnotu $Indent pokud je |
| // $Indent číslo nebo o déllku řetězce $Indent pokud je to řetězec |
| { |
| // Velikost odsazení (vyrob číslo) |
| if (is_string($Indent)) |
| $Num = mb_strlen($Indent,'utf-8'); |
| else |
| $Num = 0+$Indent; |
| // Odsazení |
| return $StringData = $Indent.str_replace("\n", "\n".str_repeat(' ', $Num), $StringData); |
| } |
| /* |
| function Substitute($Variables, $String) |
| // Nahradí proměnné v řetězci $String obsahem proměnných z pole $Variables |
| // a vrátí výsledný řetězec |
| { |
| if (is_array($Variables)) |
| { |
| foreach($Variables as $Key => $Value) |
| { |
| // Hledací vzor (hledáme proměnnou s názvem v $Key) |
| $Pattern = '\$'.$Key.'(?=[^a-z,A-Z,0-9,\-\_])'; |
| // \$$Key hledáme $JmenoProměnné |
| // (?= následuje něco, co nemůže být jménem |
| // [^a-z,A-Z,0-9,\-\_] a nezajímá nás |
| // ) |
| // Vkládáme více řádek? |
| $IsMultiline = !(strpos($Value, "\n") === FALSE); |
| if (!$IsMultiline) |
| { |
| // Vkládáme jednoduchý řetězec |
| $String = preg_replace('/'.$Pattern.'/su', $Value, $String); |
| // /su víceřádkové v UTF8 |
| } |
| else |
| { |
| // Vkládáme řetezec s odřádkováním - je třeba odsazovat |
| $String = preg_replace('/(.*)'.$Pattern.'/ue', |
| "\$this->Indent(\$Value, '\\1')", |
| $String); |
| // (.*) hledáme cokoli před vzorem -> první parametr |
| // .$Pattern. proměnná |
| // /ue UTF8, náhrada je php skriptem |
| } |
| } |
| } |
| return $String; |
| } |
| */ |
| function Substitute($Variables, $String) |
| // Nahradí proměnné v řetězci $String obsahem proměnných z pole $Variables |
| // a vrátí výsledný řetězec |
| { |
| // Hledací vzor |
| $Pattern = '/(.*?)\$(Info[a-z,A-Z,0-9,\-\_]+)(?=[^a-z,A-Z,0-9,\-\_])/ue'; |
| // Náhrada s kusem php kódu (nezapomeň, že preg_replace s přepínačem /e vrací oescapované řetězce) |
| $String = preg_replace($Pattern, |
| 'isset($Variables[\'\2\']) |
| ? $this->Indent($Variables[\'\2\'], stripslashes(\'\1\')) |
| : stripslashes(\'\1\') |
| ', |
| $String); |
| return $String; |
| } |
| function SetVariable($VarName, $VarValue, $Wrap=0) |
| // Nastaví hodnotu proměnné |
| // Volitelně provede zálámání na zadaný počet znaků a odstranění nadbytečných mezer |
| { |
| // Volitelné zalámání a odstranění bílých znaků |
| if ($Wrap!=0) |
| $VarValue = WrapString($VarValue, $Wrap); |
| // Uložení do proměnných |
| $this->Info[$VarName] = $VarValue; |
| } |
| function GetVariable($VarName) |
| // Vrátí hodnotu proměnné tak, jak je, včetně mezer a odřádkování |
| { |
| if (isset($this->Info[$VarName])) |
| return $this->Info[$VarName]; |
| else |
| return ''; |
| } |
| function GetString($VarName) |
| // Vrátí parametr jako jeden řetězec s redukovanými bílými znaky |
| // Tedy bez odřádkování a nadbytečných mezer |
| { |
| return WrapString($this->GetVariable($VarName), 0); |
| } |
| function GetPage() |
| // Provede substituce ve stránce a vrátí ji jako řetězec |
| // Substituce bere z proměnné $Info |
| { |
| // Proveď ve stránce substituce proměnných a vrať výsledek |
| return $this->Substitute($this->Info, $this->Page); |
| } |
| } |
| ?> |
| /Server/PrjInfo/Templates/DirInfo.txt |
|---|
| 0,0 → 1,59 |
| // |
| // Toto je popisný soubor pro popis obsahu adresáře (příklad) |
| // |
| // Syntaxe je tato: |
| // |
| // - Všechny řádky začínající znaky // jsou komentáře |
| // |
| // - Soubor je v kódování UTF8 |
| // |
| // - Informace je uvozena značkou [Key] |
| // [Key] je klíč, který říká co je to za informaci |
| // [Key.en] je klíč s informací pro jazyk en |
| // Informace v jazyce má přednost před informací bez jazyka |
| // |
| // - Pokud klíč začíná Info (například [InfoShortDescription] ) tak se tato |
| // informace vloží do místa v templejtu označeném jako $InfoShortDescription |
| // |
| // - Konec souboru je uvozen značkou [End] |
| // |
| // - Informace je prostý text (nepoužívejte HTML značky) |
| // |
| // - Na pořadí položek v souboru nezáleží |
| // |
| // Zavedené klíče, příklad: |
| // |
| // [InfoShortDescription.cs] |
| // Krátký popis (nadpis) v češtině |
| // |
| // [InfoShortDescription.en] |
| // Short description (title) in English |
| // |
| // [InfoShortDescription] |
| // Short descriptpion for other languages |
| // |
| // [InfoLongDescription.en] |
| // A longer description (one paragraph, 2-4 lines max). The whole sentences |
| // with period et the end. |
| // |
| // [InfoLongDescription.cs] |
| // Delší popis na jeden odstavec, tak do 2-4 řádek. V celých větách a tečkou |
| // na konci |
| // |
| // [SortPreferences] |
| // Seznam adresářů pro třídění |
| // |
| [InfoShortDescription.en] |
| [InfoShortDescription.cs] |
| [InfoLongDescription.en] |
| [InfoLongDescription.cs] |
| [InfoBuyUST] |
| [SortPreferences] |
| [End] |
| /Server/PrjInfo/Templates/ListDir.cs.ihtml |
|---|
| 0,0 → 1,186 |
| <!-- Templejt pro tvorbu indexu --> |
| <!-- |
| Templejt |
| ======== |
| Tento templejt je zpracováván substitučním strojem, který funguje tak, že |
| provede tyto úkony: |
| - načte templejt (do své paměti) |
| - vyhodí tento komentář (všechny komentáře před první platnou řádkou) |
| - najde v něm všechny proměnné ve tvaru $InfoXXX a zapamatuje si je |
| - najde v něm všechna nastavení proměnných ve tvaru $InfoXXX = "YYY" a zapamatuje si je |
| - vyhodí z templejtu definice proměnných a případný komentář bezprostředně před definicí |
| Poté je možné programem upravit obsah proměnných (typicky se generují |
| data na základě jiných proměnných a dat z disku na webu). Všechny proměnné |
| jsou programu dostupné v podobě pole, kde klíčem je jméno proměnné (bez |
| dolaru) a hodnotou je řetězec (i prázdý). Program může proměnné modifikovat |
| a definovat další (které se nepoužijí nejsou-li v právě použitém templejtu |
| použity). |
| - provede substituci proměnných jejich obsahem |
| - výsledný řetězec - html stránku - předá klientovi |
| Proměnné |
| ======== |
| Proměnné jsou definovány pouze v templejtu. Co není v templejtu |
| označeno jako proměnná nenahradí se skutečným obsahem. Aby mohl být |
| templejt přehledný je dovoleno používat víceřádkové obsahy proměnných. |
| Definice hodnot je ve tvaru $InfoXXX = "YYY", kde |
| $InfoXXX je jméno proměnné (XXX jsou písmena, číslice, - a _ ) |
| YYY je hodnota proměnné (je v uvozovkách, uvnitř použijte apostrofy) |
| Hodnota proměnné může být na více řádků a může obsahovat odakazy na proměnné, |
| které se nahradí hodnotou těchto proměnných. |
| Definice hodnot proměnných bez jejich použití v templejtu se používá například |
| při definici jazykově závislých řetězců pro program (program je jazykově |
| nezávislý). |
| Substituce |
| ========== |
| Úvodní komentáře na začátku templejtu budou odstraněny. |
| Všechny výskyty proměnných v templejtu budou nahrazeny hodnotou proměnných. |
| Hodnota proměnné může být prázdná, definovaná v templejtu nebo vypočítaná |
| programem. Proměnné mouhou být v templejtu i vícekrát (nahradí se všude). |
| Všechny definice hodnot proměnných se z templejtu odstraní. Nezáleží na místě |
| definice v templejtu. Vícenásobné uvedení hodnoty si (asi) zapamatuje poslední |
| uvedenou hodnotu. |
| --> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="cs"> |
| <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== HLAVICKA ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "Popis není k dispozici" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "Klikací cesta zpět" |
| <!-- PermaLink --> |
| <p> |
| Permanentní odkaz: |
| <a href="$InfoPermaLink" |
| title="Permanentní odkaz je zkrácený odkaz na projekt nebo sekci, který se nezmění ani při změně struktury webu.">$InfoPermaLink</a> |
| </p> |
| <table> |
| <tr> |
| <th>Název</th> |
| <th>Náhled</th> |
| <th>Popis</th> |
| <th>Projektová data</th> |
| <th>Možnost nákupu</th> |
| <th>Dokumentace</th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoName</td> |
| <td> $InfoPicture</td> |
| <td> <p><i> $InfoDescripion</i></p> |
| <p class='Small'> $InfoLongDescription</p></td> |
| <td> $InfoWebSVN <br> $InfoWIKI</td> |
| <td> $InfoBuy</td> |
| <td> $InfoPDF <br> $InfoHTML</td> |
| </tr> |
| " |
| <!-- Formát elementu pro oddělení adresářů a projektů --> |
| $InfoSeparator = |
| " |
| <tr> |
| <td colspan='6'> <hr> </td> |
| </tr>" |
| <!-- Lepidlo pro spojování více odkazů najednou v jedné položce --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoNoInfo = "--" |
| $InfoSVNTitle = "Přístup ke všem souborům" |
| $InfoWikiTitle = "Wiki stránka pro modul" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== PATIČKA ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/ListDir.en.ihtml |
|---|
| 0,0 → 1,129 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.en.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="en"> |
| <!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== HEADER ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the header </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the menu </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "No Description Available" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "The Easy Way Back ..." |
| <!-- PermaLink --> |
| <p> |
| Permanent Link: |
| <a href="$InfoPermaLink" |
| title="Permanent Link is abbreviated link to project or section which will not be changed when web structure is updated.">$InfoPermaLink</a> |
| </p> |
| <table> |
| <tr> |
| <th>Name</th> |
| <th>View</th> |
| <th>Description</th> |
| <th>Project information</th> |
| <th>Buy possibility</th> |
| <th>Documentation</th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoName</td> |
| <td> $InfoPicture</td> |
| <td> <p><i> $InfoDescripion</i></p> |
| <p class='Small'> $InfoLongDescription</p></td> |
| <td> $InfoWebSVN <br> $InfoWIKI</td> |
| <td> $InfoBuy</td> |
| <td> $InfoPDF <br> $InfoHTML</td> |
| </tr> |
| " |
| <!-- Formát elementu pro oddělení adresářů a projektů --> |
| $InfoSeparator = |
| " |
| <tr> |
| <td colspan='6'> <hr> </td> |
| </tr>" |
| <!-- Lepidlo pro spojování více odkazů najednou v jedné položce --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoNoInfo = "--" |
| $InfoSVNTitle = "Access to All Project Files" |
| $InfoWikiTitle = "Wiki Page for Module" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== FOOTER ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the footer </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/ListPrj.cs.ihtml |
|---|
| 0,0 → 1,134 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="cs"> |
| <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== HLAVICKA ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "Popis není k dispozici" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Center"> |
| $InfoPictures |
| $InfoPicturesGlue = " " |
| <p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "Klikací cesta zpět" |
| <!-- PermaLink --> |
| <p> |
| Permanentní odkaz: |
| <a href="$InfoPermaLink" |
| title="Permanentní odkaz je zkrácený odkaz na projekt nebo sekci, který se nezmění ani při změně struktury webu.">$InfoPermaLink</a> |
| </p> |
| <table> |
| <tr> |
| <th> Textová Část </th> |
| <td> $InfoText </td> |
| </tr> |
| $InfoSchema |
| $InfoWebSVN |
| $InfoWIKI |
| $InfoBuy |
| <!-- Definice jednotlivých položek --> |
| $InfoSchema = |
| " |
| <tr> |
| <th> Schéma a seznam součástek </th> |
| <td> $InfoSchema </td> |
| </tr> |
| " |
| $InfoWebSVN = |
| " |
| <tr> |
| <th> Všechny soubory projektu</th> |
| <td> $InfoWebSVN </td> |
| </tr> |
| " |
| $InfoBuy = |
| " |
| <tr> |
| <th> Možnost nákupu stavebnice </th> |
| <td> $InfoBuy </td> |
| </tr> |
| " |
| <!-- Lepidlo --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPictureXXXX = "NoPicture.jpg" |
| $InfoNoInfo = " " |
| $InfoSVNTitleXXXX = "Přístup ke všem souborům" |
| $InfoWikiTitleXXXX = "Wiki stránka pro modul" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== PATIČKA ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/ListPrj.en.ihtml |
|---|
| 0,0 → 1,129 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.en.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="en"> |
| <!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== HEADER ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the header </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the menu </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "No Description Available" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "The Easy Way Back ..." |
| <!-- PermaLink --> |
| <p> |
| Permanent Link: |
| <a href="$InfoPermaLink" |
| title="Permanent Link is abbreviated link to project or section which will not be changed when web structure is updated.">$InfoPermaLink</a> |
| </p> |
| <table> |
| <tr> |
| <th>Name</th> |
| <th>View</th> |
| <th>Description</th> |
| <th>Project information</th> |
| <th>Buy possibility</th> |
| <th>Documentation</th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoName</td> |
| <td> $InfoPicture</td> |
| <td> <p><i> $InfoDescripion</i></p> |
| <p class='Small'> $InfoLongDescription</p></td> |
| <td> $InfoWebSVN <br> $InfoWIKI</td> |
| <td> $InfoBuy</td> |
| <td> $InfoPDF <br> $InfoHTML</td> |
| </tr> |
| " |
| <!-- Formát elementu pro oddělení adresářů a projektů --> |
| $InfoSeparator = |
| " |
| <tr> |
| <td colspan='6'> <hr> </td> |
| </tr>" |
| <!-- Lepidlo pro spojování více odkazů najednou v jedné položce --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoNoInfo = "--" |
| $InfoSVNTitle = "Access to All Project Files" |
| $InfoWikiTitle = "Wiki Page for Module" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== FOOTER ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the footer </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/NoPicture.jpg |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |
| /Server/PrjInfo/Templates/PermaLink.cs.ihtml |
|---|
| 0,0 → 1,140 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> PermaLink </title> |
| <meta name="keywords" content="PermaLink permanentní odkaz neměnný odkaz"> |
| <meta name="description" content="Stránka pro zpracování permanentních odkazů"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| <style type="text/css"> |
| tr.Section td { |
| background-color: #EEFFEE; /* pozadí tabulky */ |
| } |
| tr.Project td { |
| background-color: #FFFFCC; /* pozadí tabulky */ |
| } |
| .Marked { /* Zvýrazněná část cesty */ |
| color: red; |
| /*font-size: 130%; /**/ |
| font-weight: bolder; |
| } |
| form { |
| background-color: #EEFFEE; |
| padding: 6px; |
| } |
| input { |
| background-color: #FFFFCC; |
| border: solid 1px red; |
| } |
| </style> |
| </head> |
| <body lang="cs" body onLoad="document.forms.FormPermaLink.PermaLink.focus()"> |
| <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== HLAVICKA ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| <h1> Neúplný permanentní odkaz </h1> |
| <p> |
| <i> Zadali jste nejednoznačný nebo neplatný permanentní odkaz. |
| Můžete zadat odkaz přesněji, nebo si vybrat z nalezených kandidátů.</i> |
| <br> |
| Při hledání nezáleží na velikosti písmen, ani na češtině. Hledá se (i částečná) |
| shoda zadaného textu s názvem sekce (adresáře) nebo projektu (modulu). |
| Podrobnosti jak fungují permanentní odkazy naleznete v <a href='/PermaLink/PermaLink'>návodu</a>. |
| </p> |
| <form name="FormPermaLink" method="post" action="http://$InfoThisServer/PermaLink"> |
| <label for="PermaLink">Permanentní odkaz</label> |
| <input type="text" name="PermaLink" value="$InfoThisLink" size="50"> |
| </form> |
| <br> |
| <table> |
| <tr> |
| <th> PermaLink </th> |
| <th class='Center'> Náhled </th> |
| <th> Celá cesta na webu a popis </th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr class='$InfoType'> |
| <td> $InfoPermaLink </td> |
| <td class='Center'> $InfoPicture </td> |
| <td class='Top'> $InfoPath <br> |
| <p> <i> $InfoShortDescription </i> </p> |
| <p class='Small'> $InfoLongDescription </p> </td> |
| </tr> |
| " |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoPictureGlue = "<br>" |
| $InfoPictureAlt = "Ilustrační obrázek" |
| $InfoNoText = "Popis není k dispozici" |
| $InfoNoData = "<tr><td class='Center' colspan='3'> Žádná data </td></tr>" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== PATIČKA ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/PermaLink.en.ihtml |
|---|
| 0,0 → 1,139 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> PermaLink </title> |
| <meta name="keywords" content="PermaLink permanent link stable link"> |
| <meta name="description" content="The page for permanent link processing"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| <style type="text/css"> |
| tr.Section td { |
| background-color: #EEFFEE; /* pozadí tabulky */ |
| } |
| tr.Project td { |
| background-color: #FFFFCC; /* pozadí tabulky */ |
| } |
| .Marked { |
| color: red; /**/ |
| /*font-size: 130%; /**/ |
| font-weight: bolder; /**/ |
| } |
| form { |
| background-color: #EEFFEE; |
| padding: 6px; |
| } |
| input { |
| background-color: #FFFFCC; |
| border: solid 1px red; |
| } |
| </style> |
| </head> |
| <body lang="en" onLoad="document.forms.FormPermaLink.PermaLink.focus()"> |
| <!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== HEADER ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the header </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the menu </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| <h1> Incomplete permanent link </h1> |
| <p> |
| <i> You have entered unambiguous or invalid link. |
| You may enter the link more precisely or you can choose from founded items.</i> |
| <br> |
| Search engine ignores letter case and accent. It looks for (partial) |
| correspondence of given text and section (directory) name or project (module) name. |
| How do permanent liks work is written in <a href='/PermaLink/PermaLink'>documentation</a>. |
| </p> |
| <form name="FormPermaLink" method="post" action="http://$InfoThisServer/PermaLink"> |
| <label for="PermaLink">Permanent Link</label> |
| <input type="text" name="PermaLink" value="$InfoThisLink" size="50"> |
| </form> |
| <br> |
| <table> |
| <tr> |
| <th> PermaLink </th> |
| <th class='Center'> View </th> |
| <th> WEB Path and Description </th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoPermaLink </td> |
| <td class='Center'> $InfoPicture </td> |
| <td class='Top'> $InfoPath <br> |
| <p> <i> $InfoShortDescription </i> </p> |
| <p class='Small'> $InfoLongDescription </p> </td> |
| </tr> |
| " |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoPictureGlue = "<br>" |
| $InfoPictureAlt = "Illustrational Picture" |
| $InfoNoText = "No Description Available" |
| $InfoNoData = "<tr><td class='Center' colspan='3'> Nothing Found </td></tr>" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== FOOTER ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the footer </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/PermaLinkPath.cs.ihtml |
|---|
| 0,0 → 1,117 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> PermaLink </title> |
| <meta name="keywords" content="PermaLink permanentní odkaz neměnný odkaz"> |
| <meta name="description" content="Stránka pro zpracování permanentních odkazů"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| <style type="text/css"> |
| form { |
| background-color: #EEFFEE; |
| padding: 6px; |
| } |
| input { |
| background-color: #FFFFCC; |
| border: solid 1px red; |
| } |
| </style> |
| </head> |
| <body lang="cs" body onLoad="document.forms.FormPermaLink.PermaLink.focus()"> |
| <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== HLAVICKA ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| <h1> Permanentní odkaz s cestou k souborům </h1> |
| <p> |
| <i> Odkazu odpovídá více souborů nebo žádný soubor. |
| Můžete odkaz zadat přesněji, nebo si vybrat z nalezených souborů.</i> |
| <br> |
| Při hledání nezáleží na velikosti písmen, ani na češtině. |
| Podrobnosti jak fungují permanentní odkazy naleznete v <a href='/PermaLink/PermaLink'>návodu</a>. |
| </p> |
| <form name="FormPermaLink" method="post" action="http://$InfoThisServer/PermaLink"> |
| <label for="PermaLink">Permanentní odkaz</label> |
| <input type="text" name="PermaLink" value="$InfoThisLink" size="50"> |
| </form> |
| <br> |
| <table> |
| <tr> |
| <th> Cesta </th> |
| <th> Soubory </th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoPath </td> |
| <td> $InfoNames </td> |
| </tr> |
| " |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNamesGlue = "<br>" |
| $InfoNoData = "<tr><td class='Center' colspan='2'> Žádná data </td></tr>" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== PATIČKA ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/PermaLinkPath.en.ihtml |
|---|
| 0,0 → 1,117 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> PermaLink </title> |
| <meta name="keywords" content="PermaLink permanent link stable link"> |
| <meta name="description" content="The page for permanent link processing"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| <style type="text/css"> |
| form { |
| background-color: #EEFFEE; |
| padding: 6px; |
| } |
| input { |
| background-color: #FFFFCC; |
| border: solid 1px red; |
| } |
| </style> |
| </head> |
| <body lang="en" onLoad="document.forms.FormPermaLink.PermaLink.focus()"> |
| <!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== HEADER ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the header </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the menu </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| <h1> Permanent link with path to file </h1> |
| <p> |
| <i> More than one or none file was found. |
| You may enter the link more precise or you can choose from founded files.</i> |
| <br> |
| It does not matter on letter case nor letter accent. |
| How do permanent liks work is written in <a href='/PermaLink/PermaLink'>documentation</a>. |
| </p> |
| <form name="FormPermaLink" method="post" action="http://$InfoThisServer/PermaLink"> |
| <label for="PermaLink">Permanent Link</label> |
| <input type="text" name="PermaLink" value="$InfoThisLink" size="50"> |
| </form> |
| <br> |
| <table> |
| <tr> |
| <th> Path </th> |
| <th> Files </th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoPath </td> |
| <td> $InfoNames </td> |
| </tr> |
| " |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNamesGlue = "<br>" |
| $InfoNoData = "<tr><td class='Center' colspan='2'> Nothinh Found </td></tr>" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== FOOTER ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the footer </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/PrjInfo.cs.ihtml |
|---|
| 0,0 → 1,134 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="cs"> |
| <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== HLAVICKA ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "Popis není k dispozici" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Center"> |
| $InfoPictures |
| $InfoPicturesGlue = " " |
| <p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "Klikací cesta zpět" |
| <!-- PermaLink --> |
| <p> |
| Permanentní odkaz: |
| <a href="$InfoPermaLink" |
| title="Permanentní odkaz je zkrácený odkaz na projekt nebo sekci, který se nezmění ani při změně struktury webu.">$InfoPermaLink</a> |
| </p> |
| <table> |
| <tr> |
| <th> Textová Část </th> |
| <td> $InfoText </td> |
| </tr> |
| $InfoSchema |
| $InfoWebSVN |
| $InfoWIKI |
| $InfoBuy |
| <!-- Definice jednotlivých položek --> |
| $InfoSchema = |
| " |
| <tr> |
| <th> Schéma a seznam součástek </th> |
| <td> $InfoSchema </td> |
| </tr> |
| " |
| $InfoWebSVN = |
| " |
| <tr> |
| <th> Všechny soubory projektu</th> |
| <td> $InfoWebSVN </td> |
| </tr> |
| " |
| $InfoBuy = |
| " |
| <tr> |
| <th> Možnost nákupu stavebnice </th> |
| <td> $InfoBuy </td> |
| </tr> |
| " |
| <!-- Lepidlo --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPictureXXXX = "NoPicture.jpg" |
| $InfoNoInfo = " " |
| $InfoSVNTitleXXXX = "Přístup ke všem souborům" |
| $InfoWikiTitleXXXX = "Wiki stránka pro modul" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== PATIČKA ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/Templates/PrjInfo.en.ihtml |
|---|
| 0,0 → 1,129 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.en.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"> |
| <link rel="StyleSheet" href="/Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="/Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="/Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="en"> |
| <!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== HEADER ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the header </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the menu </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "No Description Available" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "The Easy Way Back ..." |
| <!-- PermaLink --> |
| <p> |
| Permanent Link: |
| <a href="$InfoPermaLink" |
| title="Permanent Link is abbreviated link to project or section which will not be changed when web structure is updated.">$InfoPermaLink</a> |
| </p> |
| <table> |
| <tr> |
| <th>Name</th> |
| <th>View</th> |
| <th>Description</th> |
| <th>Project information</th> |
| <th>Buy possibility</th> |
| <th>Documentation</th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoName</td> |
| <td> $InfoPicture</td> |
| <td> <p><i> $InfoDescripion</i></p> |
| <p class='Small'> $InfoLongDescription</p></td> |
| <td> $InfoWebSVN <br> $InfoWIKI</td> |
| <td> $InfoBuy</td> |
| <td> $InfoPDF <br> $InfoHTML</td> |
| </tr> |
| " |
| <!-- Formát elementu pro oddělení adresářů a projektů --> |
| $InfoSeparator = |
| " |
| <tr> |
| <td colspan='6'> <hr> </td> |
| </tr>" |
| <!-- Lepidlo pro spojování více odkazů najednou v jedné položce --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoNoInfo = "--" |
| $InfoSVNTitle = "Access to All Project Files" |
| $InfoWikiTitle = "Wiki Page for Module" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== FOOTER ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("/"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the footer </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/PrjInfo/aaa.php |
|---|
| 0,0 → 1,28 |
| <?php phpinfo(); |
| #levenstein - vzdálenost řetězců |
| /* |
| // Read the file, unserialize it to an array |
| $urlArray = unserialize (file_get_contents($arrayFile)); |
| // Write out the serialized array back to disk |
| file_put_contents ($arrayFile, serialize($urlArray)); |
| */ |
| function print_r_tree($data) |
| { |
| // capture the output of print_r |
| $out = print_r($data, true); |
| // replace something like '[element] => <newline> (' with <a href="javascript:toggleDisplay('...');">...</a><div id="..." style="display: none;"> |
| $out = preg_replace('/([ \t]*)(\[[^\]]+\][ \t]*\=\>[ \t]*[a-z0-9 \t_]+)\n[ \t]*\(/iUe',"'\\1<a href=\"javascript:toggleDisplay(\''.(\$id = substr(md5(rand().'\\0'), 0, 7)).'\');\">\\2</a><div id=\"'.\$id.'\" style=\"display: none;\">'", $out); |
| // replace ')' on its own on a new line (surrounded by whitespace is ok) with '</div> |
| $out = preg_replace('/^\s*\)\s*$/m', '</div>', $out); |
| // print the javascript function toggleDisplay() and then the transformed output |
| echo '<script language="Javascript">function toggleDisplay(id) { document.getElementById(id).style.display = (document.getElementById(id).style.display == "block") ? "none" : "block"; }</script>'."\n$out"; |
| } |
| ?> |