{HEADER END}
{COMPARE START}

MLAB

Porovnej cestu:  Revize
S umístěním:  Revize

Toto porovnání ukazuje změny pro převedení /Server (Revize 909) na /Server (Revize 944)

Reverzní porovnání

GenIndex/Common.php
Nový soubor

@@ -0,0 +1,313 @@

<?php
define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu
function Error($str)
// Ukončení běhu při chybhě
{
echo '<b>Ups...<b>'.$str;
exit;
}
function WrapString($String, $Wrap=0)
// Provede odstranění nadbytečných bílých znaků
// a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků
{
// Odstaň bílé znaky
$String = preg_replace('/\s+/su', ' ', $String);
// Volitelné nalámání
if ($Wrap!=0)
$String = wordwrap($String, $Wrap);
return $String;
}
function 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 CreateFileLink($FileName, $Title='')
// Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT)
// a volitelně title (zobrazí se při najetí myši na odkaz).
// Vrací řetězec s odkazem
{
$FileName = htmlspecialchars($FileName);
$Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"';
if ($Title != '')
$Link .= "\n".' title="'.$Title.'"';
$Link .= '>';
if (basename($FileName)=='')
$Link .= '(root)';
else
$Link .= basename($FileName);
$Link .= '</a>';
return $Link;
}
function CreateFilesLink($Path, $Glue, $Title='')
// Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem
// Volitelně lze zadat title (zobrazí se při najetí myši na odkaz).
// Cesta se chápe v rámci webu (od DOCUMENT_ROOT).
// Vrací řetězec s odkazy
{
// Při lepení odřádkujeme aby byl generovaný kód strukturovaný
$Glue = ' '.$Glue."\n";
// Pro každou položku
$Line = '';
$Ofset = strlen($_SERVER['DOCUMENT_ROOT']);
foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName)
{
// Sestav odkaz
if (is_file($DirName))
$Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title);
}
// Vrať výsledek ale bez lepidla na začátku
return substr($Line, strlen($Glue));
}
function CreateScriptLink($Params, $DirName='', $Title='')
// Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako
// pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě
// v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root
{
// Připoj volitelné jméno adresáře
if ($DirName!='')
$Params['path'] = $Params['path'].'/'.$DirName;
// Odvoď jméno z názvu adresáře
$DirName = basename($Params['path']);
if ($DirName == '')
{
$DirName = '(root)';
$Params['path'] = '/';
}
// Zpracuj pole parametrů
$ParamsLine = '';
$LocalGlue = '';
foreach($Params as $Key => $Value)
{
$ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value);
$LocalGlue = '&amp;';
}
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&amp;path=';
$Link .= $Path;
$Link .= '/';
if ($Lang=='cs')
$Link .= '&amp;langchoice=Česky';
else
$Link .= '&amp;langchoice=English';
$Link .= '"';
if ($Title!='')
$Link .= "\n".' title="'.htmlspecialchars($Title).'"';
$Link .= '>WebSVN</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;
}
?>


GenIndex/Templates/Modules.en.ihtml
Nový soubor

@@ -0,0 +1,108 @@

<!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 -->
<table>
<tr>
<td> <h1 class='Small'>$InfoPath</h1> </td>
</tr>
</table>
$InfoPathTitle = "The Easy Way Back ..."
<!-- Řádky indexu se vkládají sem -->
$InfoLine
<!-- Formát vkládané řádky -->
$InfoLine =
"
<hr>
<h2 class='Small'>$InfoName</h2>
<p>
$InfoPicture&nbsp;
$InfoDescripion<br>
$InfoWebSVN&nbsp;
$InfoHTML&nbsp;
$InfoPDF
</p>
"
<!-- Lepidlo pro spojování více odkazů najednou v jedné položce -->
$InfoGlue = "&nbsp;"
<!-- Co se dává do položek, které nemají obsah -->
$InfoNoInfo = "--"
$InfoSVNTitle = "Accsess to All Files"
</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>


GenIndex/Templates/NoPicture.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream


GenIndex/Templates/NoPicture.jpg

Změněné vlastnosti:

Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: GenIndex/Templates/DirInfo.txt
===================================================================
--- GenIndex/Templates/DirInfo.txt (revision 0)
+++ GenIndex/Templates/DirInfo.txt (revision 944)
@@ -0,0 +1,57 @@
+//
+// 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]
+
+[SortPreferences]
+
+[End]
Index: GenIndex/Templates/Modules.cs.ihtml
===================================================================
--- GenIndex/Templates/Modules.cs.ihtml (revision 0)
+++ GenIndex/Templates/Modules.cs.ihtml (revision 944)
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+ $InfoHeadTitle $InfoSection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


+
+
+

+
+
+
+
+
+
+
+
+

+
+ $InfoNoText = "Popis není k dispozici"
+
+


+ $InfoShortDescription
+


+
+


+ $InfoLongDescription
+


+
+
+

$InfoPath


+ $InfoPathTitle = "Klikací cesta zpět"
+
+
+
+
+
+
+
+
+
+
+
+$InfoLine
+
+ $InfoLine =
+ "
+
+
+
+
+
+
+
+
+ "
+
+ $InfoSeparator =
+ "
+
+
+ "
+
+ $InfoGlue = "
"
+
+ $InfoNoPicture = "NoPicture.jpg"
+ $InfoNoInfo = "--"
+ $InfoSVNTitle = "Přístup ke všem souborům"
+
NázevNáhledPopisWebSVNHTMLPDF
$InfoName $InfoPicture

$InfoDescripion


+

$InfoLongDescription

$InfoWebSVN $InfoHTML $InfoPDF


+
+

+
+
+
+
+
+
+
+
Index: GenIndex/DirMetadata.php
===================================================================
--- GenIndex/DirMetadata.php (revision 0)
+++ GenIndex/DirMetadata.php (revision 944)
@@ -0,0 +1,141 @@
+ +
+// 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 informacime 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[a-z,A-Z,0-9,\-\_\.]+)\]';
+ $PatternKeyNext = '(?=\[(?:[a-z,A-Z,0-9,\-\_\.]+)\])';
+ $PatternValue = '(?P.*?)';
+ $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;
+ }
+
+}
+
+/*
+function WrapString($String, $Wrap=0)
+// Volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet
+// znaků a odstranění nadbytečných mezer
+{
+ if ($Wrap!=0)
+ {
+ // Proveď zalámání hodnoty
+preg_replace('/\s+/su', ' ', $Temp);
+ $String = wordwrap($String, $Wrap);
+ }
+ return $String;
+}
+
+*/
+?>
Index: GenIndex/GenIndex.php
===================================================================
--- GenIndex/GenIndex.php (revision 0)
+++ GenIndex/GenIndex.php (revision 944)
@@ -0,0 +1,264 @@
+ +
+ 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('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('WRAP', 70, true); // Lámání řetězcových hodnot
+
+ define('TEMPLATEPATH', 'Templates', true); // relativní cesta k templejtům
+ $TemplateFile = 'Modules.ihtml'; // přípona jazyka se doplní sama
+
+
+// Stavová informace
+// -----------------
+//
+// Tento skript používá pro přenesení stavu ke kliemtovi a zpět dvě stavové
+// proměnné prostřednictvím odkazu. Jsou to:
+//
+// lang - zde je kód jazyka, neplatný či chybějící kód se mapuje na angličtinu
+//
+// path - zde se uvádí cesta vůči DOCUMENT_ROOT webu, neplatná cesta se mapuje
+// na cestu k root adresáři webu
+//
+
+// Vyzvedni si parametry z URL
+// ---------------------------
+
+// Parametr cesty z položky path
+// Načteme, ověříme a pokud je něco špatně vracíme root
+$Path = '';
+if (isset($_GET['path']))
+ $Path = CheckWebPath($_GET['path']);
+if ($Path == '')
+ $Path = '/';
+$Params['path'] = $Path;
+
+// Parametr jazyka z položky lang
+// Pozor, tento parametr se nekontroluje a musí se ošetřit až při použití
+// Předpokládá se, že neplatný jazyk se bude chovat jako angličtina
+$Lang = 'en';
+if (isset($_GET['lang']))
+ $Lang = substr($_GET['lang'], 0, 2);
+$Params['lang'] = $Lang;
+
+
+// Proveď zpracování templejtu nahrazovacím strojem
+// ------------------------------------------------
+
+// Založ objekt templejtu
+$Template = new TemplateEngine();
+
+// Načti templejt do objektu
+$error = $Template->LoadTemplate(TEMPLATEPATH.'/'.$TemplateFile, $Params['lang']);
+if ($error!='')
+ Error($error);
+
+// Generuj dynamický obsah do proměnných
+PowerFunction($Template, $Params);
+
+// Odešli výsledek klientovi
+echo $Template->GetPage();
+
+
+function PowerFunction($Template, $Params)
+// Tato funkce vykonává maso (generuje dynamický obsah stránky do podoby pole
+// proměnných. Toto pole se následně použije na modifikaci templejtu .
+{
+ // Lokálně používané prametry pěkně při ruce
+ $Path = $Params['path'];
+ $Lang = $Params['lang'];
+
+ // Zjisti informace o sekci (z prvního adresáře cesty)
+ $SectionDirInfo = new DirMetadata();
+ $SectionDirInfo->LoadDirInfo('/'.GetSection($Path).'/'.DIRINFO, $Lang);
+
+ // Pokud cesta sahá do sekce, která nemá popis spadneme do rootu
+ if(!$SectionDirInfo->GetValid())
+ {
+ $Params['path'] = '/';
+ $Path = $Params['path'];
+ }
+
+ // Zjisti informace o aktuálním adresáři
+ $ThisDirInfo = new DirMetadata();
+ $ThisDirInfo->LoadDirInfo($Path.'/'.DIRINFO, $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',
+ CreateScriptLinkPath($Params, $Template->GetString('InfoPathTitle')));
+
+
+ // 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 ($Path!='' || $Valid)
+ 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 ? CreateScriptLink($Params, $DirName, $DirInfo->GetString('InfoLongDescription'))
+ : $DirName;
+
+ $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Žluťoučký kůň', TEMPLATEPATH.'/'.$Template->GetVariable('InfoNoPicture'));
+ $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP);
+ $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle'));
+ $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);
+
+ // 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);
+}
+
+/*
+//Načtení adresáře
+ if ((Is_Dir($path.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1)) && (substr($soubor1,0,1) <> ".") && (substr($soubor1,0,1) <> "!")) {
+//Nastavení suffixu u obrázků
+ $img = $soubor1."_Small.jpg";
+
+//Pokud existuje náhled obrázku, zobraz ho
+ if (file_exists($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$img)) {
+ echo "\n";
+ } else { echo "\n"; }
+
+//Pokud existuje HTML dokumentace k modulu vytvoř na ni odkaz
+ if (file_exists($path.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1."/DOC/HTML/".$soubor1.".".$lang.".html")) {
+ echo "".$soubor1."\n";
+ } else { echo "".$soubor."".$soubor1."\n"; }
+//Pokud existuje PDF dokumentace k modulu zobraz odkaz
+ if (file_exists($path.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1."/DOC/".$soubor1.".".$lang.".pdf")) {
+ echo "PDF\n";
+ } else { echo "\n-\n"; }
+//WebSVN odkaz
+ echo "WebSVN\n";
+//Pokud existuje stručné info, zobraz ho
+ if (file_exists($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$info1)) {
+ $fp = FOpen ($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$info1, "r");
+ $data = FRead ($fp, FileSize ($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$info1));
+ FClose ($fp);
+ echo "".wordwrap($data, 50, "
")."\n";
+ } else { echo "\nNo description available\n"; }
+ echo "\n\n";
+ }
+
+
+ $PathEncoded = URLEncode($Path.'/'.$FileName);
+
+ $htmllink = "$FileName";
+
+*/
+
+
+?>
Index: GenIndex/TemplateEngine.php
===================================================================
--- GenIndex/TemplateEngine.php (revision 0)
+++ GenIndex/TemplateEngine.php (revision 944)
@@ -0,0 +1,277 @@
+ +
+// Template Engine
+// ---------------
+//
+// Tento modul zpracovává tmplejty a strká do nich dynamicky geenrované
+// 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->SetVariable('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 naaplikují 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 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);
+ }
+}
+
+
+?>


{COMPARE END}
{FOOTER START}

Poháněno WebSVN v2.1 alpha 1