<?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;
  }

}

/*
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;
}

*/
?>