{HEADER END}
{FILE START}

MLAB

[/] [Server/] [GenIndex/] [DirMetadata.php] - Revize 1869

Porovnej s předchozí - Blame - Stáhnout jako soubor

<?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), 02) == '//')
        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('.'$Key2);    // 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;
}

*/
?>
{FILE END}
{FOOTER START}

Poháněno WebSVN v2.1 alpha 1