<?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ářiclass DirMetadata{public $DirData; // Sem se načtou data o adresáři v podobě klíč=>hodnotaprivate $Valid; // Zde je příznak platnostifunction 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 souboruif (!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íčeif (isset($Temp[1])) // existuje přípona{if ($Temp[1] == $Lang) // přípona$Data[$Temp[0]] = $Value; // zkopíruj jazykovou hodnotuunset($Data[$Key]); // klíč s příponou vyhoď}}// Uschovej si získaná data$this->Valid = TRUE;$this->DirData = $Data;// Soubor byl nalezen a načtenreturn 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 informaceif (isset($this->DirData[$Key]))return $this->DirData[$Key];elsereturn '';}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 GetListfunction 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í hodnotypreg_replace('/\s+/su', ' ', $Temp);$String = wordwrap($String, $Wrap);}return $String;}*/?>