#!/usr/bin/perl
# Internetový obchod s hrami / nízkoúrovňové funkce
# (c) 2007 Dan Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL

package pomoc;
use utf8;
# Přidat Danovy sdílené knihovny. Skript běžící pod uživatelem apache by je jinak nenašel.
BEGIN {unshift(@INC, "/home/dan/lib") unless(grep {$_ =~ m-/home/dan/lib-} @INC);}
use dzcgi;
require 5.000;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(urlpar odkazpar formpar urlstat odkazstat odsadit);



#------------------------------------------------------------------------------
# Vyrobí relativní URL, které vede zpět na tento skript, ale s jinými
# parametry. Používá se ve funkci odkazpar(), která výstup dále obalí HTML
# značkami <a href=...>...</a>, ale hodí se také uživateli, který potřebuje
# vložit odkaz např. do značky <form>. Toho osvobozuje od globální proměnné
# %main::pole, od znalosti řetězce "prodej.pl" a od modulu dzcgi.
#------------------------------------------------------------------------------
sub urlpar
{
    # Parametry funkce popisují nové parametry, se kterými se má zavolat tento skript, ve tvaru atribut=hodnota.
    my $parametry = dzcgi::sestavit_parametry(\%main::pole, @_);
    return "prodej.pl?$parametry";
}



#------------------------------------------------------------------------------
# Vyrobí odkaz, který vede zpět na tento skript, ale s jinými parametry.
#------------------------------------------------------------------------------
sub odkazpar
{
    my $text = shift;
    # Ostatní parametry funkce popisují nové parametry, se kterými se má zavolat tento skript, ve tvaru atr=hodnota
    my $url = urlpar(@_);
    return "<a href=\"$url\">$text</a>";
}



#------------------------------------------------------------------------------
# Vygeneruje pro každý neprázdný parametr CGI neviditelné pole formuláře,
# kterým se dá tento parametr předat dál. Neviditelná pole je vhodné
# vygenerovat na začátku formuláře, aby je bylo možné v případě potřeby přebít
# novými hodnotami.
#------------------------------------------------------------------------------
sub formpar
{
    my $konfig = shift; # odkaz na hash s dosavadními parametry skriptu
    if($konfig eq "")
    {
        $konfig = \%main::pole;
    }
    my $html;
    foreach my $parametr (keys(%{$konfig}))
    {
        unless($konfig->{$parametr} =~ m/^\s*$/)
        {
            $html .= "<input type=hidden name=\"$parametr\" value=\"$konfig->{$parametr}\">\n";
        }
    }
    return $html;
}



#------------------------------------------------------------------------------
# Vyrobí URL do statických stránek na témže serveru.
#------------------------------------------------------------------------------
sub urlstat
{
    my $cesta = shift; # absolutní cesta odkazu v rámci serveru
    $cesta =~ s-^/--;
    return "http://hrejsi.cz/$cesta";
}



#------------------------------------------------------------------------------
# Vyrobí odkaz do statických stránek na témže serveru.
#------------------------------------------------------------------------------
sub odkazstat
{
    my $text = shift;
    my $cesta = shift; # absolutní cesta odkazu v rámci serveru
    my $url = urlstat($cesta);
    return "<a href=\"$url\">$text</a>";
}



#------------------------------------------------------------------------------
# Odsadí každý řádek textu o udaný počet mezer. Čistě estetická funkce, kterou
# používáme pro odsazení částí zdrojáku HTML, které jsme získali jako výstup
# funkcí, ale vzhledem ke kontextu by měly být odsazené. Na vzhled výsledného
# dokumentu v prohlížeči to nemá žádný vliv.
#------------------------------------------------------------------------------
sub odsadit
{
    my $text = shift;
    my $n = shift; # kolik mezer vložit na začátek každého řádku
    my $mezery = join("", map {" "} (1..$n));
    $text =~ s/^/$mezery/mg;
    return $text;
}



1;
