{HEADER END}
{FILE START}

MLAB

[/] [Server/] [GenIndex/] [Common.php] - Revize 944

Přejdi na současnou revizi

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

<?php


define
('WEBSVNSCRIPT''/WebSVN/listing.php'true);   // Cesta k WebSVN skriptu


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 
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 ( == strncmp($Path$_SERVER['DOCUMENT_ROOT'], strlen($_SERVER['DOCUMENT_ROOT']) ) )
  {
    
// Shoda - odstraň DOCUMENT_ROOT část cesty
    
return substr$Pathstrlen($_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($Path0strpos($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($FileName0$Pos+1).$Lang.substr($FileName$Pos);

  if (
is_file($File))
    return 
$File;

  
// Zkus doplnit en
  
$File substr($FileName0$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 
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'].$Path0) 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($Linestrlen($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 
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($File1+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($File0$DotPos);
      
      
// Vezmi obrázky, které mají ve jméně Small
      
if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png')
          and 
strpos($BaseName'Small')>)
      {
        
$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;
}


?>
{FILE END}
{FOOTER START}

Poháněno WebSVN v2.1 alpha 1