#!/usr/bin/perl
# Zobrazí nebo zpracuje přihlašovací formulář.
use dancgi; # čtení parametrů z webu nebo z ARGV
use access; # funkce pro čtení textových tabulek vyexportovaných z MS Accessu
use mso; # funkce pro generování stránek o olympiádě
use utf8; # říct Perlu, že konstantní řetězce ve zdrojáku jsou v UTF
use Encode;
binmode(STDOUT, ":utf8"); # říct Perlu, že UTF chceme i na výstupu
do("cesta.pl"); # Načíst vnější i vnitřní cesty k dokumentům, jak platí na tomto počítači.
# Cesty jsou načteny do hashe %konfig, kam budeme chtít dát i jiné věci, ale nebudeme
# chtít, aby se cesty objevily v nových odkazech jako parametry skriptu. Proto
# musíme přejmenovat jejich klíče. (Zatím si netroufám upravit přímo cesta.pl,
# protože ho používá i řada jiných skriptů a musel bych je všechny projít a opravit.)
$cesta = $konfig{ccesta_html_www};
undef(%konfig);
$konfig{_cesta} = $cesta;



# Načíst parametry z URL.
dancgi::cist_parametry(\%konfig);
# Umožnit volat skript z příkazového řádku a předat parametry tam (např. perl partie.pl zdroj=cas).
dancgi::rozebrat_parametry($ARGV[0], \%konfig);
# Načíst formulář.
if($konfig{co} eq "zpracuj")
{
    dancgi::cist_formular_post(\%konfig);
}
if($konfig{jazyk} eq "")
{
    $konfig{jazyk} = "cs";
}
$jazyky::jazyk = $konfig{jazyk};



# Pošle mailem údaje vyplněné uživatelem a uživateli vygeneruje odpověď
if($konfig{co} eq "zpracuj")
{
    # Umí vytisknout celý konfig.
    while(my ($klic, $hodnota) = each (%konfig))
    {
        $tisk.="\$konfig{$klic} = \"$hodnota\"\n";
    }
    mso::vypsat_stranku(
    {
        "nazev"  => "MSO: $konfig{rok}: ".jazyky::zjistit("Prihlaska"),
        "nadpis" => jazyky::zjistit("potvrzeni"),
        "telo"   => mso::potvrdit_prihl(\%konfig),
        "rok"    => "2004"
    });
    # Pošle mail s vyplněným formulářem
    $prihlaska .= "Jméno: $konfig{jmeno} $konfig{prijmeni}\n";
    $prihlaska .= "Obec: $konfig{obec} \n";
    if($konfig{zemejina} !~ m/^\s*$/)
    {
        $prihlaska .= "Země: $konfig{zemejina} \n";
    }
    else
    {
        $prihlaska .= "Země: $konfig{zeme} \n";
    }
    $prihlaska .= "Pohlaví: $konfig{pohlavi} \n";
    $prihlaska .= "Kategorie: $konfig{kategorie} \n";
    # Připsat organizace, jichž je členem, ostatní neuvádět.
    foreach my $clen ("paluba", "scrabble", "dama", "go", "othello", "hadanka")
    {
        if($konfig{"clen".$clen})
        {
            $prihlaska .= "Člen $clen: 1\n";
        }
    }
    $prihlaska .= "E-mail: $konfig{email} \n";
    $prihlaska .= "Variabilní symbol: $konfig{vs} \n \n";
    $prihlaska .= "Turnaje: \n";
    # Sestavit seznam akcí, na které se uživatel přihlásil.
    # Vybudovat si také seznam her, aby se daly dát na začátek mailu pro rychlou informaci.
    my %prihlasene_hry;
    my $kody_prihlasenych_turnaju;
    while(my ($klic, $hodnota) = each (%konfig))
    {
        # Zaškrtávátka jednotlivých soutěží mají identifikátor začínající na "turn"
        # a pokračující rokem, kódem hry a kódem turnaje. Zde pouze kontrolujeme,
        # že za "turn" následují 4 číslice (rok). Nekontrolujeme, že je to letošní
        # rok, protože předpokládáme, že přihláška ani nenabízí akce z minulých let.
        if ($klic =~ m/^turn\d\d\d\d/)
        {
            $prihlaska .="$hodnota \n";
            # Zapamatovat si kód hry, pod kterou tato akce patří.
            $prihlasene_hry{substr($klic, 8, 3)}++;
            # Zapamatovat si kód akce.
            $kody_prihlasenych_turnaju .= " ".substr($klic, 8, 6);
        }
    }
    $prihlaska_mail = $prihlaska;
    # Do mailu ještě přidat kódy turnajů.
    $prihlaska_mail .= "Akce:$kody_prihlasenych_turnaju";
    $prihlaska_mail =~ s/<[^>]*>//gs;
    if($konfig{jmeno} eq "test")
    {
        $adresat = "klara\@hrejsi.cz";
        $kopie = "zeman\@ufal.mff.cuni.cz";
    }
    else
    {
        $adresat = "olympiada\@hrejsi.cz";
    }
    if(-e "/usr/lib/sendmail")
    {
        $sendmail = "|/usr/lib/sendmail -oi -t";
    }
    else
    {
        $sendmail = ">posledni-prihlaska.txt";
    }
    open(SENDMAIL, $sendmail) or print "Nemůžu najít sendmail: $!\n";
    print SENDMAIL ("From: Robot Hrejsi <robot\@hrejsi.cz>\n");
    my $jmeno_subject = "$konfig{jmeno} $konfig{prijmeni}";
    $jmeno_subject =~ tr/ÁČĎÉĚÍŇÓŘŠŤÚŮÝŽáčďéěíňóřšťúůýž/ACDEEINORSTUUYZacdeeinorstuuyz/;
    print SENDMAIL ("Reply-to: \"$jmeno_subject\" <$konfig{email}>\n");
    print SENDMAIL ("To: $adresat\n");
    print SENDMAIL ("Cc: $kopie\n");
    print SENDMAIL ("Subject: MSO prihlaska: $jmeno_subject\n");
    print SENDMAIL ("Content-Type: text/plain; charset=\"utf-8\"\n");
    print SENDMAIL ("\n");
    print SENDMAIL (join(", ", sort(keys(%prihlasene_hry))), "\n");
    print SENDMAIL ("Uživatel vyplnil www přihlášku na stránce olympiády těmito údaji:\n\n$prihlaska_mail\n");
    # Někde je chyba. Mailem se neposílá seznam turnajů, na které se uživatel přihlásil. Uživatel je v potvrzovací
    # stránce vidí správně.
    # Přechodné nouzové řešení: Zkopírovat tělo potvrzovací stránky do mailu.
    print SENDMAIL ("\nKopie potvrzovaci stranky:\n");
    print SENDMAIL (mso::potvrdit_prihl(\%konfig));
}
else
{
    # Vypsat přihlášku.
    mso::vypsat_stranku(
    {
        "nazev"  => "MSO: $konfig{rok}: ".jazyky::zjistit("Prihlaska"), 
        "nadpis" => jazyky::zjistit("prihlaska_nadpis", $konfig{rok}),
        "telo"   => mso::prihlaska,
        "rok"    => 2005
    });
}
