Esempio n. 1
0
 /**
  * Hakee käyttäjien havaintomäärät kyseisestä luokasta.
  * @param <type> $ylaluokka_id luku, joka määrää sen, mistä yläluokasta
  * havaintoja haetaan. Jos parametri on alle 1 tai epäluku, etsitään kaikista
  * luokista.
  * @param <type> $tietokantaolio
  * @param <type> $nyk_puolivuotiskauden_nro: 1->kevät 2010, 2-> syksy2010, 
  * 3->kevät2011 jne.
  * @param int $omaid Käyttäjän tunniste.
  */
 static function hae_havaintomaarat($ylaluokka_id, $tietokantaolio, $nyk_puolivuotiskauden_nro, $omaid)
 {
     $palaute = "";
     $ylaluokkaehto = "";
     // Muotoillaan yläluokan lause:
     if (isset($ylaluokka_id) && is_numeric($ylaluokka_id) && $ylaluokka_id > 0) {
         $ylaluokkaehto = "blajiluokat.ylaluokka_id = {$ylaluokka_id}";
     } else {
         $ylaluokkaehto = "blajiluokat.ylaluokka_id <> -1";
     }
     //=======================================================================
     // Haetaan ensin kaikki havainnot:
     $hakulause = "SELECT DISTINCT\n                               henkilot.etunimi AS nimi,\n                               henkilot.id AS henk_id\n                   FROM blajiluokat\n                   JOIN bhavainnot\n                   ON bhavainnot.lajiluokka_id = blajiluokat.id\n                   JOIN henkilot\n                   ON bhavainnot.henkilo_id = henkilot.id\n                   WHERE {$ylaluokkaehto}";
     $havaintohaku = $tietokantaolio->tee_OMAhaku($hakulause);
     $havaintotaulu_kaikki = $tietokantaolio->hae_osumarivit_olioina($havaintohaku);
     //============= SUODATUS ALKU ======================================
     $havaintotaulu = array();
     $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
     foreach ($havaintotaulu_kaikki as $osuma) {
         $henkilo_id = $osuma->henk_id;
         if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
             array_push($havaintotaulu, $osuma);
         }
     }
     //============= SUODATUS LOPPU =====================================
     if (!empty($havaintotaulu)) {
         // Muotoillaan jakso-otsikko:
         $palaute .= "<div id='bongaukset_kaikki'><b>Kaikki</b><br />";
         $havaintotulostaulu = array();
         foreach ($havaintotaulu as $henkilo) {
             $lkm = Havainto::laske_henkilon_bongausten_lkm($tietokantaolio, $henkilo->henk_id, $ylaluokka_id, "Ehi vuan ihan kaikki!");
             $tulosmj = "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_KAIKKI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . ",\"kaikki_jaksot\"," . "\"nayta_kaikki\")'>" . $henkilo->nimi . ": " . $lkm[0] . "</span>" . "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_SUOMI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . ",\"kaikki_jaksot\",\"" . Bongausasetuksia::$nayta_vain_suomessa_havaitut . "\")'>" . " (FI: " . $lkm[1] . ")" . "</span><br />";
             array_push($havaintotulostaulu, array($lkm[0], $tulosmj));
         }
         usort($havaintotulostaulu, "Havainto::vertaa_havaintomaarat");
         foreach ($havaintotulostaulu as $tulos) {
             $palaute .= $tulos[1];
         }
         // Kaikkien loppu:
         $palaute .= "</div>";
     }
     //=======================================================================
     // Haetaan sitten puolivuotiskausittain:
     if (isset($nyk_puolivuotiskauden_nro) && is_numeric($nyk_puolivuotiskauden_nro) && $nyk_puolivuotiskauden_nro > 0) {
         /* Käydään läpi kaikki puolivuotiskaudet, joilla havaintoja tehty. */
         for ($i = 0; $i < $nyk_puolivuotiskauden_nro; $i++) {
             $puolivuotiskauden_nro = $nyk_puolivuotiskauden_nro - $i;
             // Muotoillaan puolivuotiskauden valinta:
             if (is_numeric($puolivuotiskauden_nro)) {
                 $vuosi = floor(2010 + ($puolivuotiskauden_nro - 1) / 2);
                 $kk_alaraja = 0;
                 $kk_ylaraja = 7;
                 if ($puolivuotiskauden_nro % 2 == 0) {
                     $kk_alaraja = 6;
                     $kk_ylaraja = 13;
                 }
                 $jaksoaikaehto = "bhavainnot.vuosi = {$vuosi}\n                                   AND bhavainnot.kk > {$kk_alaraja}\n                                   AND bhavainnot.kk < {$kk_ylaraja}";
             } else {
                 $jaksoaikaehto = "";
                 /* Haetaan kaikki! */
             }
             $hakulause = "SELECT DISTINCT\n                                   henkilot.etunimi AS nimi,\n                                   henkilot.id AS henk_id\n                           FROM blajiluokat\n                           JOIN bhavainnot\n                           ON bhavainnot.lajiluokka_id = blajiluokat.id\n                           JOIN henkilot\n                           ON bhavainnot.henkilo_id = henkilot.id\n                           WHERE {$ylaluokkaehto}\n                           AND {$jaksoaikaehto}\n                           ";
             $havaintohaku = $tietokantaolio->tee_OMAhaku($hakulause);
             $havaintotaulu_kaikki = $tietokantaolio->hae_osumarivit_olioina($havaintohaku);
             //============= SUODATUS ALKU ======================================
             $havaintotaulu = array();
             foreach ($havaintotaulu_kaikki as $osuma) {
                 $henkilo_id = $osuma->henk_id;
                 if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
                     array_push($havaintotaulu, $osuma);
                 }
             }
             //============= SUODATUS LOPPU =====================================
             if (!empty($havaintotaulu)) {
                 // Muotoillaan jakso-otsikko:
                 $palaute .= "<div class='bongaukset_jakso'><b>";
                 if ($puolivuotiskauden_nro % 2 == 0) {
                     $palaute .= "Syksy ";
                 } else {
                     $palaute .= "Kev&auml;t ";
                 }
                 $palaute .= floor(2010 + ($puolivuotiskauden_nro - 1) / 2) . "</b><br />";
                 // Haluan nimet havaintomääräjärjestyksessä, joten teen
                 // uuden taulukon, jossa järjestys oikea. Hmm.
                 // Uuteen taulukkoon tulee jokaisesta henkilöstä tämän
                 // tulosviesti ja lkm pikkutaulukossa.
                 $havaintotulostaulu = array();
                 foreach ($havaintotaulu as $henkilo) {
                     $lkm = Havainto::laske_henkilon_bongausten_lkm($tietokantaolio, $henkilo->henk_id, $ylaluokka_id, $puolivuotiskauden_nro);
                     // Tulostetaan lajimäärät ja lisätään mahdollisuus
                     // klikkaamalla nähdä havaitut lajit.
                     $tulosmj = "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_KAIKKI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . "," . $puolivuotiskauden_nro . "," . "\"nayta_kaikki\")'>" . $henkilo->nimi . ": " . $lkm[0] . "</span>" . "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_SUOMI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . "," . $puolivuotiskauden_nro . ",\"" . Bongausasetuksia::$nayta_vain_suomessa_havaitut . "\")'>" . " (FI: " . $lkm[1] . ")" . "</span><br />";
                     array_push($havaintotulostaulu, array($lkm[0], $tulosmj));
                 }
                 usort($havaintotulostaulu, "Havainto::vertaa_havaintomaarat");
                 foreach ($havaintotulostaulu as $tulos) {
                     $palaute .= $tulos[1];
                 }
                 $palaute .= "</div>";
             }
         }
     }
     return $palaute;
 }