<?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 (str_starts_with(ltrim($Line), '//'))
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;
}
}
?>