# Funkce pro načtení databáze her pro účely webové Pokladnice her.
# (c) 2002 - 2007 Daniel Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL



package cist;
use utf8;
use sitesql;
use dzsql;



BEGIN
{
    $databaze = sitesql::connect_obchod('hry');
}



#-----------------------------------------------------------------------------
# Přečte ze souboru tabulku her. Novější (8.12.2005) verze, která už neukládá
# např. autora hry Zatre pod $hry{"zat: autor"}, ale pod $hry{zat}{autor}.
# Hash hashů, kam se údaje ukládají, už není globální, ale odkaz na něj funkce
# vrací jako svůj výsledek.
#-----------------------------------------------------------------------------
sub precist_hry
{
    my $tabulka = dzsql::dotaz($databaze, "kod", "rodina", "nazev", "varianty",
        "upoutavka", "charakteristika", "pocet_hracu", "delka_vysvetlovani",
        "min_delka", "max_delka", "min_vek", "vlivnah", "vlivpam", "vlivkops",
        "vlivzna", "vlivsiry", "strategie0", "nahoda0", "tvorivost0", "pravidla",
        "autor", "rok_vydani", "oceneni", "cesta_k_fotce", "noweb", "slozka_hrejsi",
        "htmlbgr", "htmltext", "htmltuc", "htmllink", "htmlalink", "htmlvlink",
        "poznamka",
        "hry");
    # Získali jsme pole hashů, každý hash odpovídá jedné hře. Předpokládáme,
    # že pole je uspořádané abecedně podle hlavních názvů her (to zajistila
    # databáze před exportem; pro nás by bylo velmi obtížné uspořádat seznam
    # unikódových řetězců). Pro účely snadného vyhledávání her podle kódů si
    # teď ještě vyrobíme hash hashů.
    my %hry;
    for(my $i = 0; $i<=$#{$tabulka}; $i++)
    {
        $hry{$tabulka->[$i]{kod}} = $tabulka->[$i];
    }
    # Načíst alternativní názvy her.
    my $tabulka_nazvu = dzsql::dotaz($databaze, "kod_hry", "nazev", "jazyk", "druh", "nazvy");
    foreach my $nazev (@{$tabulka_nazvu})
    {
        my $kod = $nazev->{kod_hry};
        unless($nazev->{nazev} eq $hry{$kod}{nazev})
        {
            push(@{$hry{$kod}{_dalsi_nazvy}}, $nazev->{nazev});
        }
    }
    # Načíst údaje o jednotlivých provedeních her.
    my $tabulka_provedeni = dzsql::dotaz($databaze, "provedeni_kod", "kod_hry", "provedeni_nazev",
        "vydavatel", "rok_vydani", "vydavatele_kod", "vydavatele_nazev", "dalsi_nazvy",
        "web", "zeme", "psc", "obec", "ulice", "poznamka", "provedeni");
    foreach my $provedeni (@{$tabulka_provedeni})
    {
        my $kod = $provedeni->{kod_hry};
        my $aktualni_vydavatel = $provedeni->{vydavatele_nazev};
        my $vydavatele = $hry{$kod}{_vydavatele};
        # Je-li tohle první provedení dané hry od daného vydavatele, přidat vydavatele
        # do seznamu vydavatelů dané hry.
        unless(grep{$_ eq $aktualni_vydavatel}(@{$vydavatele}))
        {
            push(@{$hry{$kod}{_vydavatele}}, $aktualni_vydavatel);
        }
    }
    # Načíst odkazy týkající se her. Pokud vypisujeme seznam her, potřebujeme
    # akorát vědět, jestli existuje odkaz na pravidla. Pokud vypisujeme stránku
    # hry, potřebujeme znát všechny odkazy a vypsat je.
    my $odkazy = dzsql::dotaz($databaze, "hra", "text", "adresa", "odkazy");
    foreach my $odkaz (@{$odkazy})
    {
        my $kod = $odkaz->{hra};
        push(@{$hry{$kod}{_odkazy}}, $odkaz);
    }
    # Načíst evidenci palubních her a zjistit, které hry máme na hraní.
    my $exemplare = dzsql::dotaz($databaze, "kod_hry", "cislo", "provedeni", "majitel", "kde_se_nachazi", "stitek",
        "zpusob_nabyti", "kdo_a_odkud", "rok_nabyti", "porizovaci_cena", "obnovovaci_cena", "lze_koupit", "chybi",
        "je_dodaci_list", "exemplare");
    foreach my $exemplar (@{$exemplare})
    {
        if($exemplar->{kde_se_nachazi} eq "Paluba")
        {
            my $kod = $exemplar->{kod_hry};
            $hry{$kod}{_na_hrani} = 1;
        }
    }
    # Načíst katalog her na prodej a zjistit, které hry máme na prodej.
    my $prodej = dzsql::dotaz($databaze, "kod_hry", "prodej");
    foreach my $hra (@{$prodej})
    {
        my $kod = $hra->{kod_hry};
        $hry{$kod}{_prodej} = 1;
    }
    return $tabulka;
}



#-----------------------------------------------------------------------------
# Přečte ze souboru tabulku provedení her. Do globálního hashe her pak přidá
# ke každé hře seznam vydavatelů.
#-----------------------------------------------------------------------------
sub precist_provedeni
{
    my $soubor = shift; # cesta k souboru s tabulkou provedení
    my $tabulka = dzsql::dotaz($databaze, "kod_hry", "vydavatele_nazev", "provedeni");
    foreach my $provedeni (@{$tabulka})
    {
        my $aktualni_vydavatel = $provedeni->{vydavatele_nazev};
        my $vydavatele = $hry{$provedeni->{kod_hry}}{_vydavatele};
        # Je-li tohle první provedení dané hry od daného vydavatele, přidat vydavatele
        # do seznamu vydavatelů dané hry.
        unless(grep{$_ eq $aktualni_vydavatel}(@{$vydavatele}))
        {
            push(@{$hry{$provedeni->{kod_hry}}{_vydavatele}}, $aktualni_vydavatel);
        }
    }
}



1;
