<?php


define('WEBSVNSCRIPT', '/WebSVN/listing.php', true);   // Cesta k WebSVN skriptu
define('WIKISERVER',   'wiki',                true);   // Jméno Wiki serveru (co se strčí místo jména stávajícího serveru)


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 CheckEnvironment()
{
  // POZOR DOPSAT
}

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 CreateLink($InternetWebPath, $Title='')
// Vstupem je cesta do jiného webu.
// a volitelně title (zobrazí se při najetí myši na odkaz).
// Vrací řetězec s odkazem
{
  $Link  = '<a href="'.$InternetWebPath.'"';
  if ($Title != '')
    $Link .= "\n".'   title="'.$Title.'"';
  $Link .= '>';
  $Link .= $Title;
  $Link .= '</a>';

  return $Link;
}

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 CreateWikiLink($Name, $Lang, $Title)
// Vytvoří odkaz do Wiki podle jména modulu a jazyka
{
  // Ukousni verzi a revizi modulu (například 01A)
  $Name = preg_replace('/[0-9][0-9][a-z]$/i', '', $Name); 
  $Name = htmlspecialchars($Name);

  // Sestav odkaz
  $Link  = '<a href="http://';
  $Link .= preg_replace('/^.+?\./', WIKISERVER.'.', $_SERVER['SERVER_NAME']);
  $Link .= '/doku.php?id='.$Lang.':'.$Name;
  $Link .= '"';
  
  if ($Title!='')
    $Link .= "\n".'   title="'.htmlspecialchars($Title).'"';
  $Link .= '>Wiki</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;
}


?>