#!/usr/bin/perl
# Zobrazí seznam přihlášených osob, které zřejmě ještě nemáme v hlavní tabulce osob.
# (c) 2007 Dan Zeman <zeman@ufal.mff.cuni.cz>
# Licence: GNU GPL

use utf8;
use open ":utf8";
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
use mso;
use dancgi;

# Připojit se k databázi.
$databaze = mso::pripojit_se_k_databazi();

# Výchozí nastavení parametrů. Může být přebito parametry z URL/ARGV.
mso::provest_vychozi_nastaveni_parametru(\%konfig, $databaze);
# 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 prihlaseni.pl akce=caroly).
dancgi::rozebrat_parametry($ARGV[0], \%konfig);

# Poslat MIME záhlaví dokumentu.
print("Content-Type: text/html; charset=utf-8\n\n");
# Poslat začátek stránky.
print <<EOF
<html>
  <head>
    <meta http-equiv="Content-Language" content="cs">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Přehled nových osob</title>
  </head>
  <body>
  <h1>Přehled nových osob</h1>
  <p>Následující tabulka obsahuje seznam osob automaticky uložených přihlašovacím formulářem,
     které se nepodařilo najít v&nbsp;databázi podle jména nebo e-mailu, takže asi u nás
     nikdy před tím nehrály. Pokud některá osoba odeslala několik přihlášek, objeví se
     v&nbsp;seznamu několikrát.
     
     Stisknete-li tlačítko <a href="#importovat">Importovat</a> na konci stránky,
     databázový server na kub.cz si ke všem osobám z&nbsp;tohoto seznamu poznamená, že se
     mohou naimportovat do prověřené části databáze. Do Accessu si pak můžete osoby s&nbsp;tímto
     příznakem (a záznamy o tom, na které akce se přihlásily) nasát vkládacím dotazem.
  
     Mějte na paměti, že zde porovnáváme přihlášky s&nbsp;databází <em>vyexportovanou</em>
     z&nbsp;Accessu na kub.cz.
     Pokud jste od posledního exportu prováděli v&nbsp;Accessu změny, toto porovnání nemusí být přesné.</p>
  <form action="prihlasky.pl" method=get>
EOF
;
# Načíst z databáze osoby, které odeslaly přihlašovací formulář.
my $prihlasky = mso::dotazat_se_databaze($databaze, "jmeno", "prijmeni", "obec", "zeme", "pohlavi", "kategorie",
    "clenpaluba", "clenscrabble", "clendama", "clendama2", "clengo", "clenothello", "clenhadanka",
    "email", "poznamka", "cas_odeslani_access", "vs", "kod_osoby", "osoby_auto ORDER BY prijmeni, jmeno");
# Vypsat seznam osob.
vypsat_seznam_osob($prihlasky);
# Poslat konec stránky.
print <<EOF
  <input type=hidden name=zpracovat value="1">
  <a name="importovat"><input type=submit name="importovat" value="Importovat"></a>
  </form>
  </body>
</html>
EOF
;



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



#-----------------------------------------------------------------------------
# Vypíše seznam nových osob.
#-----------------------------------------------------------------------------
sub vypsat_seznam_osob
{
    my $prihlasky = shift;
    my $n_novych = 0;
    # Pokud někdo odeslal více přihlášek, chceme ho v seznamu jen jednou. Proto si pamatovat už vypsané osoby.
    my %hash;
    # Vypsat přihlášky seřazené abecedně podle příjmení a jména (seřazené jsme je už dostali z databáze).
    print("  <table border=\"0\">\n");
    my $i_radek = 0;
    foreach my $p (@{$prihlasky})
    {
        # Pokusit se tuto osobu najít v tabulce osob. Pokud ji najdeme, není nová a tady ji vypisovat nebudeme.
        my $nalezy = mso::najit_osobu($p, $databaze);
        # Pokud sice osobu nemáme v databázi, ale tady už jsme ji jednou vypisovali,
        # protože odeslala více přihlášek, taky ji přeskočit.
        my $cele_jmeno = "$p->{jmeno} $p->{prijmeni}";
        $cele_jmeno =~ s/^\s+//;
        $cele_jmeno =~ s/\s+/&nbsp;/g;
        $cele_jmeno =~ s/\s+$//;
        unless(scalar(@{$nalezy}) || exists($hash{$cele_jmeno}))
        {
            $hash{$cele_jmeno}++;
            $n_novych++;
            my $tdatr = ++$i_radek % 2 ? " bgcolor=#D5D5D5" : " bgcolor=#E5E5E5";
            $tdatr .= " valign=top";
            print("    <tr>\n");
            my $formdatum;
            my $formcas;
            if($p->{cas_odeslani_access} =~ m/(\d+)\.(\d+)\.(\d+)(?:\s+(\d+):(\d+):(\d+))?/)
            {
                $formdatum = sprintf("%d.%d.%d", $1, $2, $3);
                $formcas = sprintf("%d:%02d:%02d", $4, $5, $6);
            }
            else
            {
                $formdatum = $p->{cas_odeslani_access};
            }
            print("      <td$tdatr align=right>$formdatum</td>\n");
            print("      <td$tdatr align=right>$formcas</td>\n");
            print("      <td$tdatr>$p->{jmeno}</td>\n");
            print("      <td$tdatr>$p->{prijmeni}</td>\n");
            print("      <td$tdatr>$p->{obec}</td>\n");
            print("      <td$tdatr>$p->{zeme}</td>\n");
            print("      <td$tdatr>$p->{email}</td>\n");
            print("      <td$tdatr>$p->{pohlavi}</td>\n");
            print("      <td$tdatr>$p->{kategorie}</td>\n");
            # Údaje o členství v organizacích seskupit do jedné buňky.
            my @clenstvi = map
            {
                if($_ eq "clenpaluba") { $_ = "Paluba" }
                elsif($_ eq "clenscrabble") { $_ = "ČAS" }
                elsif($_ eq "clendama") { $_ = "ČFD" }
                elsif($_ eq "clendama2") { $_ = "ČUD" }
                elsif($_ eq "clengo") { $_ = "ČAGo" }
                elsif($_ eq "clenothello") { $_ = "ČFO" }
                elsif($_ eq "clenhadanka") { $_ = "SČHaK" }
            }
            (grep{m/^clen/ && $p->{$_}}(keys(%{$p})));
            my $clenstvi;
            if(scalar(@clenstvi))
            {
                $clenstvi = "Člen ".join(", ", @clenstvi);
            }
            print("      <td$tdatr>$clenstvi</td>\n");
            print("      <td$tdatr>$p->{poznamka}</td>\n");
            print("      <td$tdatr>$p->{vs}</td>\n");
            print("    </tr>\n");
        }
    }
    print("  </table>\n");
    print("  <p>Celkem nalezeno $n_novych nových osob.</p>\n");
}
