#!/usr/bin/perl
# Zobrazí nebo zpracuje hlasovací formulář.
# Copyright © 2011-2016 Klára a Dan Zemanovi <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL

use utf8; # říct Perlu, že konstantní řetězce ve zdrojáku jsou v UTF
use Encode; # funkce pro překódování
use DBI; # spolupráce se serverem MySQL
# Říct Perlu, kde najde Danovy sdílené knihovny.
# CGI skripty běží pod uživatelem apache, který nemá tyto knihovny v cestě.
use lib '/s/w/lib/dan';
use dancgi; # čtení parametrů z webu nebo z ARGV
use cas; # práce s daty a časem
use jazyky; # jazykové verze textů
use csort; # jazykově závislé řazení podle abecedy
use mso; # funkce pro generování stránek o olympiádě
binmode(STDOUT, ':utf8'); # říct Perlu, že UTF chceme i na výstupu


# Připojit se k databázi.
$databaze = mso::pripojit_se_k_databazi();
# Každý rok je potřeba nejdříve v databázi na serveru vytvořit novou tabulku,
# ta stará tam zůstane jako archív. Dá se to udělat tak, že u loňské tabulky dám
# export do SQL, v tom, co dostanu, umažu dlouhý příkaz INSERT pro vložení dat,
# zbude nějaká inicializace a příkaz CREATE, v něm změním jméno tabulky na nový rok,
# pak to zase vložím do záložky SQL databáze mso na serveru.
# Potom musíme změnit název tabulky i tady.
$tabulka = 'hlasovani_2017';


# 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};
# Vždy lze hlasovat pouze pro jeden ročník: ten nejbližší, který bude, případně
# ten, který právě probíhá. Zjistit, který ročník to je, a přepsat parametr rok,
# ať už tam měl uživatel cokoli.
$ted = cas::ted();
$roky = mso::dotazat_se_databaze($databaze, 'rok', 'konec', 'vcasne_prihlasky_do', 'rocniky ORDER BY rok');
for(my $i = 0; $i<=$#{$roky}; $i++)
{
    $konfig{rok} = $roky->[$i]{rok};
    $konfig{vcas} = $roky->[$i]{vcasne_prihlasky_do};
    if($ted->{eden} <= cas::datum2eden($roky->[$i]{konec}))
    {
        last;
    }
}



if($konfig{co} ne 'zpracuj')
{
    zobrazit_hlasovani($databaze, \%konfig);
}
else
{
    zpracovat_hlasovani($databaze, $tabulka, \%konfig);
}



###############################################################################
# PODPROGRAMY
###############################################################################



#------------------------------------------------------------------------------
# Zobrazí hlasovací formulář.
#------------------------------------------------------------------------------
sub zobrazit_hlasovani
{
    my $databaze = shift;
    my $konfig = shift;
    mso::vypsat_stranku(
    {
        'nazev'  => "MSO: $konfig->{rok}: ".jazyky::zjistit('Hlasovani'),
        'nadpis' => jazyky::zjistit('hlasovani_nadpis', $konfig->{rok}),
        'telo'   => hlasovani($databaze, $konfig),
        'rok'    => $konfig->{rok}
    });
}



#------------------------------------------------------------------------------
# Vypíše hlasovací formulář.
#------------------------------------------------------------------------------
sub hlasovani
{
    my $databaze = shift;
    my $konfig = shift;
    my $stranka;
    # Přečíst tabulku akcí.
    my $akce = mso::nacist_akce($databaze, $konfig->{rok});
    # Rozebrat hlasovací kód.
    # Kdyby byl z nějakého důvodu vadný, tak to oznámit hned a vůbec jim nenabídnout hlasovací formulář.
    if($konfig->{hl_kod} =~ m/^(\d\d)(\d\d\d\d\d\d)(\d\d)$/)
    {
        $konfig->{hlasu_celkem}= $1;
        $konfig->{hlasu_celkem} =~ s/^0*(\d+?)$/$1/;
        $konfig->{kod_osoby} = $2;
        if($konfig->{hlasu_celkem} > 10 || $konfig->{hl_kod} % 11 != 0)
        {
            return "<p style='color:red'>Chyba: neplatný hlasovací kód</p>\n";
        }
    }
    else
    {
        return "<p style='color:red'>Chyba: neplatný hlasovací kód '$konfig->{hl_kod}'</p>\n";
    }
    # Vypsat formulář hlasování.
    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, 'telo=hlasovani.pl', 'co=zpracuj');
    $stranka .= "<form class=\"hlasovani\" method=\"post\" action=\"index.pl?$parametry\">\n";
    $stranka .= "<p align=right><b>".jazyky::zjistit("hlasovaci_kod")."$konfig->{hl_kod}<input type=\"hidden\" name=\"hl_kod\" value=\"$konfig->{hl_kod}\"/></b></p>\n";
    $stranka .= "<p>Vážený hráči, zde máte možnost hlasovat o turnajích podle Vaší preference.\n";
    $stranka .= " <br/>Každé hře můžete přidělit 0 - 3 body tak, aby součet bodů u všech byl nejvýše <b>$konfig->{hlasu_celkem} bodů </b> \n";
    $stranka .= " <br/>Hlasovací body jste dostali přidělené (3 - 10 bodů) podle množství a různorodosti turnajů, kterých jste se v předchozích 3 letech zúčastnili.\n";
    $stranka .= " Z tohoto důvodu máte přidělený svůj hlasovací kod. Z každého kodu lze hlasovat pouze jednou.\n";
    $stranka .= " <p><b>Hlasování bude ukončeno 20.8.2017. </b></p><p> Poté zařadíme do programu 3 - 6 turnajů, které získaly nejvíce hlasů.\n";
    $stranka .= "<p>Máte k dispozici: <br/>\n";
    $stranka .= "<b>$konfig->{hlasu_celkem} hlasovacích bodů</b> k rozdělení.<br/>\n";

	#
	# Staré hry
	# Od roku 2017 už jen jedno hlasování, tedy zrušeno rozdělení na novinky a steřinky.
    #
    $stranka .= "<p>Prosíme, přidělte hrám v součtu nejvýše <b>$konfig->{hlasu_celkem} hlasovacích bodů</b>.</p>\n";

    $stranka .= "<p><select type=\"text\" name=\"s7wo\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=7wo\" target=\"pokladnice\">7 divů světa</a> \n";
    $stranka .= "Hra se odehrává postupně ve třech fázích a hráči se snaží budovat svoji civilizaci, k čemuž potřebují shromažďovat zdroje, stavět budovy, rozvíjet své technologie, i úspěšně bojovat.(30 min, 10+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"s7wd\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.zatrolene-hry.cz/spolecenska-hra/7-wonders-duel-5005/\" target=\"pokladnice\">7 divů světa - Duel</a> \n";
    $stranka .= "Hra 7 Wonders: Duel je určena pro dva hráče, čerpá ze známé hry 7 Divů světa a cílem hráčů bude předčit svého soupeře na poli vědeckém, vojenském a státnickém. (30 min, 10+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"s6nm\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=6nm\" target=\"pokladnice\">6 bere</a> \n";
    $stranka .= "Karty s různou bodovou hodnotou se odkládají do řad podle velikosti. Maximální počet karet v řadě je pět. Pokud musíte doplnit šestou, řadu si vezmete a dostanete trestné body. Odhadněte soupeřovy záměry, aby šestá karta nevyšla na Vás! (40-60 min, 10+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sbuh\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=buh\" target=\"pokladnice\">Burgundské hrady</a> \n";
    $stranka .= "Hra se odehrává ve středověké Francii. Hráči na sebe berou role aristokratů. Postupně budují svoje malé království. Staví budovy, hrady, provozují obchod podél řeky, využívají stříbrné doly a přebírají znalosti cestovatelů. (60 - 120 min, 12+) </p>\n";


    $stranka .= "<p><select type=\"text\" name=\"scle\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=cle\" target=\"pokladnice\">Colt Express</a> \n";
    $stranka .= "Expres Union Pacific s 47 cestujícími vyráží z Folsomu v Novém Mexiku. Po chvíli se náhle shora ozvou zvuky dupání a třeskne několik výstřelů. Jen jeden z banditů může splnit svůj cíl: stát se nejbohatším psancem z celého gangu! (30-50 min, 10+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sdix\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=dix\" target=\"pokladnice\">Dixit</a> \n";
    $stranka .= "(Hra Dixit (latinsky \"on řekl\") je hrou vyprávěcí. Hráči se snaží podle karet nastínit příběh - ale musí si počínat obezřetně, aby jejich příběh nebyl ani příliš komplikovaný, ani příliš jednoduchý. (30-40 min, 8+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sdok\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=dok\" target=\"pokladnice\">Doba Kamenná</a> </p>\n";
    $stranka .= "Doba kamenná je doba kamenná. A rozhodně to není doba jednoduchá. Nejdůležitějším úkolem vašeho kmene je obstarat dostatek jídla pro všechny své členy. A proto je potřeba vyrazit na lov, a nebo alespoň vypěstovat obilí na prvních zoraných polích. K úspěchu vašeho kmene je třeba dobré plánování a také kousek štěstí. (50-80 min, 10+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"srfg\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=rfg\" target=\"pokladnice\">Dobyvatelé vesmíru</a> \n";
    $stranka .= "Hráči závodí v průzkumu galaxie - objevují nové planety a vynalézají nové technologie. Vítězí hráč, který získá nejvíce bodů. (45-60 min, 12+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"s5tr\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=5tr\" target=\"pokladnice\">Five Tribes</a>  \n";
    $stranka .= "Five Tribes jsou hrou zasazenou do prostředí daleké Arábie z Příběhů tisíce a jedné noci, v níž hráči dělají vše, co je v jejich silách, aby zprostředkovali setkání příslušníků pěti různých kmenů. (60 min, 13+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"skid\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=kid\" target=\"pokladnice\">Kingdomino</a>  \n";
    $stranka .= "Jako mocní králové hledáte nová místa pro rozšíření svých velkolepých království. Je třeba prozkoumat všechny druhy krajiny - obilná pole, nehostinné skály i rozlehlá jezera a vybrat ta nejlepší místa. Ale pozor, jsou tu i další králové, kteří se poohlížejí po stejných krajinách... Vybudujte to nejskvělejší království! Prosperitu vám zajistí různé druhy krajiny a významné budovy. (15-30 min, 8+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"nlau\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=lau\" target=\"pokladnice\">Land Unter (Povodeň, Země pod vodou)</a> \n";
    $stranka .= "Karetní hra o přežití stoupající hladiny. Hráči mají v ruce karty, které představují počasí. Mají také omezený počet záchranných kruhů, o které postupně přicházejí. Kdo nemá žádný kruh, prohrál. (20-40 min, 10+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"smpo\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=mpo\" target=\"pokladnice\">Marco Polo </a> \n";
    $stranka .= "Vydejte se po stopách Marca Pola na jeho cestách po dálném východě a zažijte slasti i strasti jeho putování. Plánujte své obchodní cesty a obchodujte s velbloudy, zlatem či kořením. Využijte co nejlépe schopností své postavy, za kterou budete hrát, a staňte se nejúspěšnějším obchodníkem! (40-60 min, 12+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"spaw\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=paw\" target=\"pokladnice\">Patchwork </a> \n";
    $stranka .= "Se svou přikrývkou dosáhne zaslouženého vítězství ten, kdo chytře zvolí a nejlépe zkombinuje vybrané záplaty. (30-45 min, 8+)</p>\n";
 
    $stranka .= "<p><select type=\"text\" name=\"spor\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=por\" target=\"pokladnice\">Port Royal </a>\n";
    $stranka .= "Kupci v Port Royal se snaží získat z Karibského moře co nejvíce, pokud se snaží vydělat příliš, riskují, že pro jeden den spláčou nad výsledkem a přijdou o možnost získat cokoli. Získejte přízeň admirálů a guvernérů, získávejte vliv a podporu pro Vaše expedice, které vám pomohou zvítězit. (30-60 min, 8+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"spur\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=pur\" target=\"pokladnice\">Puerto Rico</a> \n";
    $stranka .= "Zlatokop nebo guvernér, osadník nebo stavitel? Ať už v Novém světě hrajete jakoukoliv roli, máte jen jeden cíl: dosáhnout co největšího blahobytu a věhlasu! Kdo bude vlastnit nejvýnosnější plantáže? Kdo postaví nejdůležitější budovy? Kdo dosáhne největšího počtu vítězných bodů…? (90-150 min, 12+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"sre7\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=re7\" target=\"pokladnice\">Red7 </a> \n";
    $stranka .= "Hra obsahuje 7 čísel, 7 barev a 7 různých pravidel pro vítězství. Po každém tahu se pravidlo pro vítězství ve hře může změnit. Kdo není na konci svého tahu ve hře ve vedení, okamžitě prohrává. Zvítězí ten, kdo si dokáže nejlépe poradit se změnami a zůstane poslední ve hře. (30 min, 9+)</p>\n";


    $stranka .= "<p><select type=\"text\" name=\"nspl\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=spl\" target=\"pokladnice\">Splendor</a> \n";
    $stranka .= "V roli bohatého obchodníka za časů renesance budete využívat své zdroje na získávání dolů, dopravních prostředků a řemeslníků, kteří přetvoří surové drahokamy v nádherné šperky. (30-45 min, 10+)</p>\n";

    $stranka .= "<p><select type=\"text\" name=\"ntas\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=tas\" target=\"pokladnice\">Tash-Kalar</a> \n";
    $stranka .= "Tash-Kalar: Aréna legend je strategicko-logická desková hra. Hráči v roli vyvolávači zápasí v aréně sesíláním legendárních bytostí a vzájemně si konkurují v získávání bodů. Prvek náhody je zde velmi malý. (20-40 min, 12+)</p>\n";

    $stranka .= "<p><select type=\"text\" name=\"szug\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=zug\" target=\"pokladnice\">Ticket to Ride</a> \n";
    $stranka .= "Železniční hra podobná Trans Americe. Na mapě spojujete města železniční sítí, přičemž skryté karty určují, která připojená města vám přinesou body. (40-60 min, 8+) </p>\n";

    $stranka .= "<p><select type=\"text\" name=\"strn\">\n";
    $stranka .= "<option value=0 default>0</option>\n";
    $stranka .= "<option value=1>1</option>\n";
    $stranka .= "<option value=2>2</option>\n";
    $stranka .= "<option value=3>3</option>\n";
    $stranka .= "</select>\n";
    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=trn\" target=\"pokladnice\">Trans America či Trans Evropa</a>\n";
    $stranka .= "Stavíte železnice a snažíte se propojit pět vašich měst kolejnicemi. Vaše neúspěchy ženou vaši lokomotivu blíže k závoře. Když do ní někdo narazí, hra končí. Vyhrává ten, kdo je od závory nejdále. (20-40 min, 8+) </p>\n";
	
	#
	# Nové hry  zrušno od roku 2017
    #
    #	$stranka .= "<h3>Volba z her, které měly na Deskohraní do jednoho turnaje (\"nové\" hry)</h3>\n";
    #    $stranka .= "<p>Některé z nich jsou letošní či loňské novinky! Proto u těchto her naleznete vždy krátký popis, snažící se vám danou hru přiblížit. ";
    #	$stranka .= "Stejně jako u \"starých\" i <b>zde máte k dispozici $konfig->{hlasu_celkem} bodů k rozdělení </b> podle Vašeho uvážení.</p>\n";

   
    #    $stranka .= "<p><select type=\"text\" name=\"nalh\">\n";
     #   $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=alh\" target=\"pokladnice\">Alhambra</a> \n";
    #    $stranka .= "Každý hráč staví \"svou\" Alhambru. Hráči se snaží mít většinu v určitém druhu budovy, které jsou k mání jen v určitou dobu, a také mít nejdelší městské hradby. (45-60 min, 8+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"namu\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=amu\" target=\"pokladnice\">Amun-Re</a> \n";
    #    $stranka .= "Hráči se snaží mít nejen co nejvíce pyramid, ale i provincii s nejvíce pyramidami. Potřebné zlato získají výnosem z úrody, a proto je třeba si oběťmi naklonit vládce bohů Amun-Re. (60-120 min, 12+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ncnc\">\n";
     #   $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
     #   $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=cnc\" target=\"pokladnice\">Concordia</a> \n";
    #    $stranka .= "Kolonizujete Římskou říši, budujete města a obchodujete se surovinami. (90-120 min, 12+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"nfar\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
     #   $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
     #   $stranka .= "<option value=3>3</option>\n";
     #   $stranka .= "</select>\n";
     #   $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=far\" target=\"pokladnice\">Farmáři</a> \n";
     #   $stranka .= "Farmáři jsou rodinná hra s jednoduchými pravidly, ve které budete potřebovat i trochu strategie. Obsahuje spoustu dřevěných hracích dílků ve tvaru různých typů ovoce. (40-60 min, 10+) </p>\n";

     #   $stranka .= "<p><select type=\"text\" name=\"nfrs\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=frs\" target=\"pokladnice\">Fresco</a> \n";
    #    $stranka .= "Staňte se na chvíli restaurátorem fresky starobylého kostela. Nominace Spiel des Jahres 2010. (60-80 min, 10+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"nglm\">\n";
     #   $stranka .= "<option value=0 default>0</option>\n";
     #   $stranka .= "<option value=1>1</option>\n";
     #   $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=glm\" target=\"pokladnice\">Glen More</a> \n";
     #   $stranka .= "Jako vůdce skotských horalů rozšiřujete svoje území pokládáním destiček pastvin, vesnic, jezer a hradů. Jediná hra, kde můžete vypálit whisky! :) (60-90 min, 10+) </p>\n";

     #   $stranka .= "<p><select type=\"text\" name=\"nlac\">\n";
     #   $stranka .= "<option value=0 default>0</option>\n";
     #   $stranka .= "<option value=1>1</option>\n";
     #   $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=lac\" target=\"pokladnice\">Lancaster</a> \n";
     #   $stranka .= "Boj o moc mezi šlechtickými rody ve středověké Anglii v období Stoleté války s Francií. (60-90 min, 10+) </p>\n";

     #   $stranka .= "<p><select type=\"text\" name=\"nlnd\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
     #   $stranka .= "<option value=2>2</option>\n";
     #   $stranka .= "<option value=3>3</option>\n";
     #   $stranka .= "</select>\n";
     #   $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=lnd\" target=\"pokladnice\">London</a> \n";
     #   $stranka .= "Vybudujte město od katedrály sv. Pavla až po první metro na světě. Hra je založená na mechanismu vykládání karet, z nichž ale polovinu vždy musíte nabídnout soupeřům! (90-120 min, 13+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"nlui\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
     #   $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=lui\" target=\"pokladnice\">Ludvík XIV</a> \n";
    #    $stranka .= "Hráči jsou dvořané a mají zhruba 100 minut na dosažení svých cílů u dvora. Pochopitelně, svou roli zde hraje i sám Král Slunce. (90-120 min, 12+) </p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"npra\">\n";
     #   $stranka .= "<option value=0 default>0</option>\n";
     #   $stranka .= "<option value=1>1</option>\n";
     #   $stranka .= "<option value=2>2</option>\n";
     #   $stranka .= "<option value=3>3</option>\n";
     #   $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=pra\" target=\"pokladnice\">Pravěk </a> \n";
    #    $stranka .= "Hráči začínají jako prostí lovci a sběrači a snaží se osvojovat nové technologie jako zemědělství. Hra obsahuje podobné mechanismy jako Vysoké napětí. (60-90 min, 12+)</p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ntkn\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
     #   $stranka .= "<option value=1>1</option>\n";
     #   $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
     #   $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=tkn\" target=\"pokladnice\">Takenoko</a> \n";
     #   $stranka .= "Budete obdělávat a zavlažovat pole a snažit se vypěstovat co nejvíce bambusů. Je to totiž jediná potrava, co jí panda, kterou máte na starosti přímo od císaře. (40-60 min, 8+)</p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ntac\">\n";
     #   $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
     #   $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=tac\" target=\"pokladnice\">Tádž Mahal (Taj Mahal)</a> \n";
    #    $stranka .= "Hra o ovládnutí Indie. Hráči v roli maharádžů a princů ve dvanácti kolech procházejí postupně provincie a soupeří mezi sebou o moc a vliv. (75-120 min, 12+)</p>\n";

    #    $stranka .= "<p><select type=\"text\" name=\"ntro\">\n";
    #    $stranka .= "<option value=0 default>0</option>\n";
    #    $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "   <a href=\"http://www.hrejsi.cz/cgi/hry/hry.pl?hra=tro\" target=\"pokladnice\">Troyes</a> \n";
    #    $stranka .= "Hráči se ve hře Troyes ujímají rolí bohatých rodin z kraje Champagne ve Francii a používají svůj vliv na získání a vedení osob ze tří oblastí: armády, duchovních a lidu. Cílem hry je získat co nejvíce slávy, čehož lze dosáhnout vícero způsoby. (90-120 min, 12+)</p>\n";

    #   $stranka .= "<p><select type=\"text\" name=\"novinka1\">\n";
    #   $stranka .= "<option value=0 default>0</option>\n";
    #   $stranka .= "<option value=1>1</option>\n";
    #   $stranka .= "<option value=2>2</option>\n";
    #   $stranka .= "<option value=3>3</option>\n";
    #   $stranka .= "</select>\n";
    #   $stranka .= "Místo pro Váš návrh: <input type=\"text\" name=\"novinka1_nazev\" size=\"30\"/></p>\n";

    #       $stranka .= "<p><select type=\"text\" name=\"novinka2\">\n";
    #       $stranka .= "<option value=0 default>0</option>\n";
    #       $stranka .= "<option value=1>1</option>\n";
    #    $stranka .= "<option value=2>2</option>\n";
    #    $stranka .= "<option value=3>3</option>\n";
    #    $stranka .= "</select>\n";
    #    $stranka .= "Místo pro Váš 2. návrh: <input type=\"text\" name=\"novinka2_nazev\" size=\"30\"/></p>\n";

    my $parametry = dancgi::sestavit_parametry_odkaz($konfig, "telo=hlasovani.pl", "hra=pet", "turnaj=oly");

    $stranka .= "  <table border=\"0\">\n";
    $stranka .= "  </table>\n";

    # Přidat parametry, které uživatele nezajímají, ale my je potřebujeme.
    $stranka .= "  <input type=\"hidden\" name=\"jazyk\"  value=\"$jazyky::jazyk\"/>\n";
    $stranka .= "  <input type=\"hidden\" name=\"co\"     value=\"zpracuj\"/>\n";
    my $cas = cas::ted()->{rmdhms};
    $stranka .= "  <input type=\"hidden\" name=\"casgen\" value=\"$cas\"/>\n";
    # Přidat tlačítka pro odeslání nebo vymazání formuláře.
    $stranka .= "  <p>\n";
    $stranka .= "    <input type=\"submit\" value=\"".jazyky::zjistit("odeslat")."\"/>\n";
    $stranka .= "    <input type=\"reset\"  value=\"".jazyky::zjistit("vymazat")."\"/>\n";
    $stranka .= "  </p>\n";
    $stranka .= "</form>\n";

    return $stranka;
}



#==============================================================================
# Funkce pro zpracování vyplněného formuláře
#==============================================================================



#------------------------------------------------------------------------------
# Zkontroluje údaje z formuláře, uloží je do databáze, pošle je e-mailem
# organizátorům a uživateli vygeneruje odpověď.
#------------------------------------------------------------------------------
sub zpracovat_hlasovani
{
    my $databaze = shift;
    my $tabulka = shift;
    my $konfig = shift;
    # Údaje z formuláře jsou v hashi %{$konfig} pohromadě s případnými dalšími
    # parametry skriptu. Přidat mezi údaje datum a čas odeslání formuláře.
    $konfig->{casode} = cas::ted()->{rmdhms};
    # Zkontrolovat údaje.
    my $chyby = zkontrolovat_hlasovani($databaze, $tabulka, $konfig);
    # Pokud byla kontrola úspěšná, uložit údaje do databáze a odeslat je e-mailem organizátorům.
    unless(scalar(@{$chyby}))
    {
        ulozit_hlasovani_do_databaze($databaze, $tabulka, $konfig);
        odeslat_hlasovani_e_mailem($databaze, $konfig);
    }
    # Vygenerovat odpověď pro uživatele.
    zobrazit_potvrzovaci_stranku($databaze, $konfig, $chyby);
}



#------------------------------------------------------------------------------
# Zkontroluje údaje z formuláře a vrátí seznam chyb, které najde.
#------------------------------------------------------------------------------
sub zkontrolovat_hlasovani
{
    my $databaze = shift;
    my $tabulka = shift;
    my $konfig = shift;
    my @chyby;
    # Zkontrolovat platnost hlasovacího kódu.
    my $kod = $konfig->{kod_hlas} = $konfig->{hl_kod};
    # Kód se skládá z osmi číslic a je dělitelný jedenácti. První dvě číslice znamenají počet hlasů, který není vyšší než 10.
    my $kod_osoby;
    my $n_hlasu;
    my $kontrola;
    if($kod =~ m/^(\d\d)(\d\d\d\d\d\d)(\d\d)$/)
    {
        $konfig->{hlasu_celkem} = $n_hlasu = $1;
        $konfig->{kod_osoby} = $kod_osoby = $2;
        $kontrola = $3;
        if($n_hlasu > 10 || $kod % 11 != 0)
        {
            push(@chyby, 'chyba_neplatny_kod');
        }
        else
        {
            # Zjistit, zda už s tímto kódem někdo nehlasoval.
            my $drivejsi = mso::dotazat_se_databaze($databaze, 'kod_hlas', "$tabulka WHERE kod_osoby = '$kod_osoby'");
            if(scalar(@{$drivejsi}))
            {
                push(@chyby, 'chyba_pouzity_kod');
            }
        }
    }
    else
    {
        push(@chyby, 'chyba_neplatny_kod');
    }
    # Projít všechny parametry.
    # Jestliže jejich název jsou 4 písmena nebo číslice, první je 's' nebo 'n',
    # a jestliže hodnotou parametru je 0, 1, 2 nebo 3, považovat je za kód hry.
    my @stare_hry = grep {m/^s[a-z0-9]{3}$/ && $konfig->{$_} =~ m/^[0-3]$/} (keys(%{$konfig}));
    # Od roku 2017 zrušené novinky a stařinky.
	# my @nove_hry = grep {m/^(n[a-z0-9]{3}|novinka[12])$/ && $konfig->{$_} =~ m/^[0-3]$/} (keys(%{$konfig}));
    $konfig->{stare} = \@stare_hry;
    # $konfig->{nove} = \@nove_hry;
    # Zkontrolovat, že počet hlasů udělených starým hrám nepřekročil maximální počet hlasů, které má dotyčný uživatel k dispozici.
    my $soucet_stare = 0;
    foreach my $hra (@stare_hry)
    {
        $soucet_stare += $konfig->{$hra};
    }
    if($soucet_stare>$n_hlasu)
    {
        push(@chyby, sprintf("chyba_moc_starych_%d_%d", $soucet_stare, $n_hlasu));
    }
    # Zkontrolovat, že počet hlasů udělených novým hrám nepřekročil maximální počet hlasů, které má dotyčný uživatel k dispozici.
    # my $soucet_nove = 0;
    # foreach my $hra (@nove_hry)
    #  {
    #     $soucet_nove += $konfig->{$hra};
    # }
    # if($soucet_nove>$n_hlasu)
    # {
    #     push(@chyby, sprintf("chyba_moc_novych_%d_%d", $soucet_nove, $n_hlasu));
    # }
    # Jestliže novinka1 nebo novinka2 dostala hlas, nesmí zůstat prázdné pole s názvem hry.
    if($konfig->{novinka1}>0 && $konfig->{novinka1_nazev} =~ m/^\s*$/ ||
       $konfig->{novinka2}>0 && $konfig->{novinka2_nazev} =~ m/^\s*$/)
    {
        push(@chyby, 'chyba_prazdna_novinka');
    }
    # Zkontrolovat, že se dal hlas alespoň jedné hře.
    if($soucet_stare==0)  # && $soucet_nove==0)
    {
        push(@chyby, 'chyba_zadne_hlasy');
    }
    return \@chyby;
}



#------------------------------------------------------------------------------
# Uloží údaje z formuláře do databáze MySQL na serveru.
#------------------------------------------------------------------------------
sub ulozit_hlasovani_do_databaze
{
    my $databaze = shift;
    my $tabulka = shift;
    my $konfig = shift;
    my @nazvy = qw(kod_hlas kod_osoby hlasu_celkem kod_hry hlasu nazev_hry);
    my $seznam_poli = join(', ', @nazvy);
    foreach my $hra (@{$konfig->{stare}}) # , @{$konfig->{nove}}
    {
        next unless($konfig->{$hra}>0);
        my $kod_hry = $hra;
        $kod_hry =~ s/^[sn]// unless($kod_hry =~ m/^novinka/);
        # Řetězcové hodnoty musí být v apostrofech, číselné bez apostrofů.
        my @hodnoty =
        (
            "'$konfig->{kod_hlas}'",
            $konfig->{kod_osoby},
            $konfig->{hlasu_celkem},
            "'$kod_hry'",
            $konfig->{$hra}
        );
        if($hra =~ m/^novinka\d$/)
        {
            my $nazev = $konfig->{$hra.'_nazev'};
            push(@hodnoty, "'$nazev'");
        }
        else
        {
            push(@hodnoty, "''");
        }
        # The MySQL driver must get the data as a sequence of bytes, not of varying-width characters.
        my $seznam_hodnot = encode('utf8', join(', ', @hodnoty));
        my $dotaz = "INSERT INTO $tabulka ($seznam_poli) VALUES ($seznam_hodnot);";
        $databaze->do($dotaz);
    }
}



#------------------------------------------------------------------------------
# Odešle údaje z formuláře e-mailem organizátorům.
#------------------------------------------------------------------------------
sub odeslat_hlasovani_e_mailem
{
    my $databaze = shift;
    my $konfig = shift;
    my $sendmail;
    if(-e "/usr/lib/sendmail")
    {
        $sendmail = "|/usr/lib/sendmail -oi -t";
    }
    else
    {
        $sendmail = ">posledni-prihlaska.txt";
    }
    my $adresat = "klara\@hrejsi.cz, zeman\@ufal.mff.cuni.cz";
    my $mail;
    $mail .= "From: Robot Hrejsi <robot\@hrejsi.cz>\n";
    $mail .= "To: $adresat\n";
    $mail .= "Subject: MSO hlasovani\n";
    $mail .= "Content-Type: text/plain; charset=\"utf-8\"\n";
    $mail .= "Content-Transfer-Encoding: 8bit\n\n";
    # Sestavit tělo zprávy.
    $mail .= "kod = $konfig->{kod_hlas}\n";
    my @hry = grep {$konfig->{$_}>0} (@{$konfig->{stare}});  #  , @{$konfig->{nove}}
    $mail .= join(', ', map {"$_=$konfig->{$_}"} (sort(@hry)))."\n\n";
    $mail .= "novinka1_nazev=$konfig->{novinka1_nazev}\n";
    $mail .= "novinka2_nazev=$konfig->{novinka2_nazev}\n";
    # Odeslat zprávu organizátorům.
    open(SENDMAIL, $sendmail) or print "Nemůžu najít sendmail: $!\n";
    print SENDMAIL ($mail);
    close(SENDMAIL);
    open(KOPIE, ">posledni_hlasovani.txt");
    print KOPIE ($mail);
    close(KOPIE);
    open(KOPIE, ">>archiv_hlasovani.txt");
    print KOPIE ("----------------------------------------------------------------------\n");
    print KOPIE ($mail);
    close(KOPIE);
}



#------------------------------------------------------------------------------
# Vygeneruje pro uživatele stránku se zprávou o úspěchu či neúspěchu jím
# odeslaného formuláře.
#------------------------------------------------------------------------------
sub zobrazit_potvrzovaci_stranku
{
    my $databaze = shift;
    my $konfig = shift;
    my $chyby = shift;
    my $nadpis;
    my $stranka;
    # Pokud byly v hlasování nalezeny chyby, upozornit uživatele, že hlasování nebylo přijato.
    if(scalar(@{$chyby}))
    {
        $nadpis = jazyky::zjistit("hlasovani_nadpis_chyba");
        $stranka .= "<h3>".jazyky::zjistit("hlasovani_nadpis2_chyba")."</h3>\n";
        $stranka .= "<ul>\n";
        foreach my $chyba0 (@{$chyby})
        {
            my $chyba = $chyba0;
            my ($k, $n);
            if($chyba =~ m/^chyba_moc_(star|nov)ych_(\d+)_(\d+)$/)
            {
                $chyba = "chyba_moc_${1}ych";
                $k = $2;
                $n = $3;
            }
            # Ke všem chybám by nyní mělo existovat vysvětlení v jazyky.pm.
            # Pokud náhodou neexistuje (někdo přidal nový kód chyby a zapomněl na to), vypíšeme alespoň kód chyby.
            my $hlaseni = jazyky::zjistit("hlasovani_$chyba", $k, $n);
            $hlaseni = $chyba0 if(!defined($hlaseni));
            $stranka .= "  <li>$hlaseni</li>\n";
        }
        $stranka .= "</ul>\n";
    }
    # Pokud byla přihláška bez chyb, ukázat uživateli přehled údajů a oznámit mu, že přihláška byla přijata.
    else
    {
        $nadpis = jazyky::zjistit("hlasovani_potvrzeni");
        $stranka .= jazyky::zjistit("hlasovani_potvrzeni_nadpis");
    }
    # Obalit stránku jednotným záhlavím a zápatím a poslat ji na výstup.
    mso::vypsat_stranku(
    {
        'nazev'  => "MSO: $konfig->{rok}: ".jazyky::zjistit("Hlasovani"),
        'nadpis' => $nadpis,
        'telo'   => $stranka,
        'rok'    => $konfig->{rok}
    });
}
