/**
 * Hakee tietokannasta liikkujien nimet ja palauttaa ne tekstinä.
 * @param <type> $tietokantaolio olio, joka sis&auml;lt&auml;&auml; yhteystiedot tietokantaan.
 * @return <type> Palauttaa merkkijonon, jota muokattu html:
 */
function hae_liikkujat($tietokantaolio, $omaid)
{
    $hakulause = "SELECT id, etunimi, sukunimi\n                    FROM henkilot\n                    WHERE id != '{$omaid}'";
    $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
    $nimet_taulukko_all = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
    //============= SUODATUS ALKU ======================
    $nimet_taulukko = array();
    $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
    foreach ($nimet_taulukko_all as $osuma) {
        $henkilo_id = $osuma->id;
        if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
            array_push($nimet_taulukko, $osuma);
        }
    }
    //============= SUODATUS LOPPU =====================
    $nimet = '';
    //kirjoita_elementtiin("nimet","Eka liikkuja on ".$nimet_taulukko[0]->etunimi);
    foreach ($nimet_taulukko as $nyk_olio) {
        // Otetaan mukaan vain sellaiset henkilöt, joilla on suorituksia:
        $tulos = $tietokantaolio->hae_eka_osuma_oliona("suoritukset", "henkilo_id", $nyk_olio->id);
        if ($tulos != "tuntematon") {
            // Haetaan uusien pikakommenttien lkm:
            $uusien_pk_lkm = Kontrolleri_pikakommentit::hae_henkilon_uusien_suorituspikakomm_lkm($omaid, $tietokantaolio, $nyk_olio->id);
            // Siivotaan mahdollinen URL:n kautta kulkeva liikenne.
            $kayt_ind = rawurlencode($nyk_olio->id);
            $omaind = rawurlencode($omaid);
            $etu = rawurlencode($nyk_olio->etunimi);
            $suku = rawurlencode($nyk_olio->sukunimi);
            $kysely = "kayttajaid={$kayt_ind}&enimi={$etu}&snimi={$suku}&omaid={$omaind}";
            // Alla huomaa, ett&auml; kysely pit&auml;&auml; olla lainausmerkeiss&auml;! Muuten ei toimi.
            $mj = <<<HASSUTAPA
                    <a
                    onclick="toteutaAJAX('suoritus_kyselyt.php',
                    '{$kysely}',
                    'reagoi','post', 'text')">
                    {$nyk_olio->etunimi} {$nyk_olio->sukunimi} {$uusien_pk_lkm}
                    </a>
HASSUTAPA;
            $nimet .= $mj;
        }
    }
    return $nimet;
}
 /**
  * Staattinen metodi, jonka avulla voidaan hakea kaikki tiettyyn
  * kohteeseen (parametrina annetaan kohdetyyppi ja -id) liittyvät
  * pikakommentit ja palautetaan ne Pikakommentti-luokan olioina taulukossa.
  * 
  * Palauttaa taulukon myös, vaikka mitään ei löydy. Tällöin taulukko on tyhjä.
  * 
  * Jonkin verran raskas operaatio, koska yleisen haun jälkeen jokaisen
  * osuman kohdalla suoritetaan erillinen haku (Pikakommentti-olion luonti).
  * Voisi ehkä rajoittaa lukumäärää, jos tarvis.
  * 
  * @param type $kohde_tyyppi
  * @param type $kohde_id
  * @param type $tietokantaolio
  */
 public static function hae_pikakommentit($omaid, $kohde_tyyppi, $kohde_id, $tietokantaolio)
 {
     $palautustaulukko = array();
     // Haetaan pikakommenttien lkm ja tarkastetaan samalla, onko uusia.
     $hakulause = "SELECT id, henkilo_id\n                    FROM pikakommentit\n                    WHERE kohde_tyyppi =" . $kohde_tyyppi . " AND kohde_id=" . $kohde_id . " ORDER BY tallennushetki_sek DESC";
     $osumat_kaikki = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
     //============= SUODATUS ALKU ======================
     $osumat = array();
     $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
     foreach ($osumat_kaikki as $osuma) {
         $henkilo_id = $osuma->henkilo_id;
         if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
             array_push($osumat, $osuma);
         }
     }
     //============= SUODATUS LOPPU =====================
     foreach ($osumat as $tk_pk) {
         $pk = new Pikakommentti($tietokantaolio, $tk_pk->id);
         // Jos kaikki kunnossa, lisätään taulukkoon:
         if ($pk->olio_loytyi_tietokannasta) {
             array_push($palautustaulukko, $pk);
         }
     }
     return $palautustaulukko;
 }
                     // Tämä laskee myös yksityisiin lisätyt kuvat:
                     /*$hakulause = "SELECT COUNT(*) AS uudet_lkm
                       FROM kuvat
                       WHERE tallennusaika_sek > ".
                               $_SESSION['kuvat_katsottu_viimeksi'];*/
                     // Ei ota huomioon yksityisiin kansioihin lisättyjä kuvia:
                     $hakulause = "SELECT kuvat.id, kuvat.henkilo_id AS henkilo_id\n                        FROM kuvat\n                        JOIN kuva_albumi_linkit AS linkit\n                        ON kuvat.id = linkit.kuva_id\n                        JOIN albumit\n                        ON albumit.id = linkit.albumi_id\n                        WHERE (kuvat.tallennusaika_sek > " . $_SESSION['kuvat_katsottu_viimeksi'] . "\n                        AND albumit.suojaus <> " . Albumisuojaus::$YKSITYINEN . ")";
                     $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
                     if ($hakutulos != false) {
                         $osumataulukko_kaikki = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
                         //============= SUODATUS ALKU ======================
                         $kuvataulukko = array();
                         $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
                         foreach ($osumataulukko_kaikki as $osuma) {
                             $henkilo_id = $osuma->henkilo_id;
                             if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
                                 array_push($kuvataulukko, $osuma);
                             }
                         }
                         //============= SUODATUS LOPPU =====================
                         $lkm = sizeof($kuvataulukko);
                     }
                     echo $lkm;
                 } else {
                     echo "Tuntematon kysely!";
                 }
             }
         }
     }
 }
 /******************* KESKUSTELUHAKU ************************************/
/**
 * Haetaan aikarajaa uudempia viestejä luokasta $teema ja palautetaan
 * kokonaisluku, joka on nolla, jos viestejä ei löydy tai muu virhe
 * tapahtuu. Ei oteta mukaan käyttäjän omia viestejä, koska se on turhaa.
 * Käyttäjä tietää kuitenkin, onko kirjoittanut viestejä.
 *
 * Palauttaa aina luvun, joka on nolla tai isompi.
 */
function hae_uusien_viestien_lkm($omaid, $teema, $tietokantaolio, $aikaraja)
{
    $hakulause = "SELECT id, henkilo_id FROM viestit\n                WHERE (tallennushetki_sek > " . $aikaraja . "\n                AND teema_id = {$teema}\n                AND henkilo_id <> {$omaid})";
    $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
    // Palauttaa aina taulukon, joka voi olla tyhjä:
    $osumataulukko_kaikki = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
    //============= SUODATUS ALKU ==========================================
    $osumataulukko = array();
    $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
    foreach ($osumataulukko_kaikki as $osuma) {
        $henkilo_id = $osuma->henkilo_id;
        if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
            array_push($osumataulukko, $osuma);
        }
    }
    //============= SUODATUS LOPPU =========================================
    return sizeof($osumataulukko);
}
 /**
  * Palauttaa suodatinlomakkeen koodin. Vähän täällä on turhan
  * paljon logiikkaa mukana, mutta välillä sitä on kyllä vaikea
  * välttää, tai sitten pitäisi tehdä osittain myös html
  * valmiiksi muualla.
  */
 public function toteuta_nayta_suodatinlomake()
 {
     // Henkilöt: ===========================================================
     $name_arvo = Kayttajakontrolleri::$suodatin_name_omistaja_id;
     $taulunimi = Henkilo::$taulunimi;
     $omistaja = "";
     // Täällä on myös omistaja, mutta se poistetaan myöhemmin.
     $kaikki_henkilot = Henkilo::hae_kaikki_henkilot($this->get_tietokantaolio());
     $kohdehenkilot = array();
     // Erotetaan omistaja & admin ja kohdehenkilöt:
     foreach ($kaikki_henkilot as $henkilo) {
         if ($henkilo instanceof Henkilo) {
             if ($henkilo->get_id() == $this->get_parametriolio()->omaid) {
                 $omistaja = $henkilo;
             } else {
                 if ($henkilo->get_arvo(Henkilo::$sarakenimi_valtuudet) == Valtuudet::$HALLINTA) {
                     // Ei tehdä mitään. Hallitsijaa ei voi suodattaa :)
                 } else {
                     array_push($kohdehenkilot, $henkilo);
                 }
             }
         }
     }
     // Tarkistetaan suodattimet ja lisätään suodatustiedot henkilo-olioihin:
     foreach ($kohdehenkilot as $henkilo) {
         if (Suodatin::on_jo_olemassa($omistaja->get_id(), $henkilo->get_id(), $this->get_tietokantaolio())) {
             $henkilo->setSuodatus_kohde(Henkilo::$suodatus_ON);
         }
         // Ja toisin päin:
         if (Suodatin::on_jo_olemassa($henkilo->get_id(), $omistaja->get_id(), $this->get_tietokantaolio())) {
             $henkilo->setSuodatus_lahde(Henkilo::$suodatus_ON);
         }
     }
     $paluupainike = Html::luo_button(Kayttajatekstit::$suodattimet_lomaketeksti_painike_takaisin, array(Maarite::onclick("piilota_suodatuslomake", array())));
     $this->get_palauteolio()->set_sisalto($this->kayttajanakymat->nayta_suodatinlomake($omistaja, $kohdehenkilot, $paluupainike));
     return $this->get_palauteolio();
 }
/**
 * Palauttaa yhden keskustelun html-koodin halutulla tavalla, eli joko
 * näytetään kaikki kommentit tai vain osa ($kiinni = true).
 *
 * <p>Muutos 27.4.2013: suodatus lisätty, eli jos keskustelun aloittaja-
 * henkilö on suodatettu, ei keskustelua palauteta ollenkaan (tätä on
 * mahdollista hienosäätää tarvittaessa). Muista keskusteluista
 * suodatettujen henkilöiden viestit jätetään yksittäin pois.</p>
 * 
 * @param int $kesk_id Keskustelun id eli aloitusviestin id = kommenttien
 * emo_id.
 * @param bool $auki totuusarvo true, jos kaikki kommentit näytetään, false -
 * vain osa ($kiinni_lkm kappaletta vanhoja + uudet).
 * @param int $kiinni_lkm näin monta viestiä näytetään korkeintaan,
 * kun keskustelu on "kiinni"-tilassa (MUUTTUNUT).
 * @param int $aikaraja uusien viestien alkuaika sekunteina. Tätä vanhempia
 * ei näytetä ollenkaan (riittää toki, että yksi viesti keskustelussa on
 * aikarajaa uudempi).
 * @param Tietokantaolio $tietokantaolio
 * @param bool $kuningas
 * @param int $oma_id Käyttäjän om id.
 * @return string Palauttaa keskustelun html:n ilman alku- ja päätedivtageja
 * (helpottaa näyttötyylin muuttamista ajaxin avulla).
 */
function hae_keskustelu($kesk_id, $auki, $kiinni_lkm, $aikaraja, $tietokantaolio, $kuningas, $oma_id)
{
    // Haetaan ensin kaikki suodattimet, joissa käyttäjä itse toinen osapuoli:
    $suodattimet = Suodatin::hae_suodattimet($oma_id, $tietokantaolio);
    $omaid = $oma_id;
    // Ei mee sekaisin, molempia voi käyttää.
    $palaute = "ei_onnistunut";
    $mj = "";
    // html-koodi
    $on_piilotettavia = false;
    // Näytetäänkö kaikki kommentit?
    $kommenttien_lkm = 0;
    // keskustelun kommenttien lkm.
    // Haetaan ensin keskustelun aloitusviesti:
    $aloitusviesti = $tietokantaolio->hae_eka_osuma_oliona("viestit", "id", $kesk_id);
    // Ellei tämä onnistunut, ei tehdä mitään. Muuten jatketaan.
    if ($aloitusviesti != "tuntematon") {
        //======================== SUODATUS ALOITUSVIESTI ======================
        // Suodatus liittyen aloitusviestiin:
        $aloitushenkilon_id = $aloitusviesti->henkilo_id;
        // Jos aloittaja suodatetaan, palautetaan tyhjä merkkijono.
        if (Suodatin::henkilo_suodatetaan_kevyt($aloitushenkilon_id, $omaid, $suodattimet)) {
            return $palaute;
        }
        //======================================================================
        // Haetaan kaikki kommentit (joista vain osa näytetään, mutta
        // on hyvä tietää kommenttien kokonaislkm):
        $hakulause1 = "SELECT viestit.*\n                    FROM viestit\n                    WHERE emo_id = '" . $kesk_id . "'\n                    ORDER by tallennushetki_sek ASC";
        $viestihaku1 = $tietokantaolio->tee_OMAhaku($hakulause1);
        $viestitaulu1_kaikki = $tietokantaolio->hae_osumarivit_olioina($viestihaku1);
        //======================== SUODATUS KOMMENTIT ==========================
        $viestitaulu1 = array();
        // Tähän kerätään suodatetut.
        foreach ($viestitaulu1_kaikki as $viesti_tk) {
            $kirjoittaja_id = $viesti_tk->henkilo_id;
            if (!Suodatin::henkilo_suodatetaan_kevyt($kirjoittaja_id, $omaid, $suodattimet)) {
                array_push($viestitaulu1, $viesti_tk);
            }
        }
        //======================== SUODATUS ====================================
        $kommenttien_lkm = sizeof($viestitaulu1);
        // Jos vanhoja enemmän kuin näytetään, on piilotettavia:
        if ($kommenttien_lkm > $kiinni_lkm) {
            $on_piilotettavia = true;
        }
        // Muodostetaan uusi taulukko, johon kopioidaan aloitusviesti ja
        // sopiva määrä kommentteja oikeassa järjestyksessä:
        $kesk_viestit = array();
        array_push($kesk_viestit, $aloitusviesti);
        // Jos näytetään kaikki, kopsataan kaikki. Muuten vain sopiva osa.
        if ($auki) {
            foreach ($viestitaulu1 as $v) {
                array_push($kesk_viestit, $v);
            }
        } else {
            // Ei näytetä kaikkia:
            $alkuindeksi = 0;
            // Jos vanhoja enemmän kuin näytetään:
            if ($kommenttien_lkm > $kiinni_lkm) {
                $alkuindeksi = $kommenttien_lkm - $kiinni_lkm;
            }
            for ($i = $alkuindeksi; $i < sizeof($viestitaulu1); $i++) {
                $v2 = $viestitaulu1[$i];
                array_push($kesk_viestit, $v2);
            }
        }
        // Nyt meillä on aloitusviesti ja kommentit samassa taulukossa
        // oikeassa järjestyksessä ja päästään muotoilemaan viestien html:ää.
        for ($i = 0; $i < sizeof($kesk_viestit); $i++) {
            $nyk_olio = $kesk_viestit[$i];
            // Haetaan lähettäjän tiedot:
            $lahettaja = $tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $nyk_olio->henkilo_id);
            $on_valintaruutu = false;
            $saa_muokata = false;
            // Poiston salliminen. Kuninkaalla kaikki valta.
            if ($lahettaja !== "tuntematon" && $lahettaja->id === $oma_id && $nyk_olio->kommenttien_lkm < '1' || $kuningas) {
                // Valintaruutu sisältää vastaavan
                // tietokantarivin id:n, jotta se valittu rivi löydetään.
                $on_valintaruutu = true;
            }
            // Muokkauksen salliminen. Kuninkaalla kaikki valta.
            if ($lahettaja !== "tuntematon" && $lahettaja->id === $oma_id || $kuningas) {
                $saa_muokata = true;
            }
            // Muotoillaan lähettäjä mahdollistaen sen, että sitä ei löytynyt.
            if ($lahettaja !== "tuntematon") {
                $lahettaja = $lahettaja->etunimi;
            }
            // Luodaan uusi viestiolio (=taulukon eka viesti)):
            if ($i == 0) {
                $viesti = new Viesti($nyk_olio, false, false);
            } else {
                if ($i < sizeof($kesk_viestit) - 1) {
                    $viesti = new Viesti($nyk_olio, true, false);
                } else {
                    // Viimeinen viesti (uusin)
                    $viesti = new Viesti($nyk_olio, true, true);
                }
            }
            $mj .= $viesti->palauta_html($on_valintaruutu, $lahettaja, $kommenttien_lkm, $on_piilotettavia, $auki, $saa_muokata);
        }
        $palaute = $mj;
    }
    return $palaute;
}
 /**
  * Palauttaa muotoillun vastauksen uusien pikakommenttien lukumäärästä,
  * ovat tulleet tietyn henkilön suorituksiin.
  *
  * @param <type> $henkilo_id
  * @param <type> $omaid
  * @param Tietokantaolio $tietokantaolio
  * @return string
  */
 public static function hae_henkilon_uusien_suorituspikakomm_lkm($omaid, $tietokantaolio, $henkilo_id)
 {
     $kohde = Pikakommentti::$KOHDE_LIIKUNTASUORITUS;
     $vikaulosaika = hae_vika_ulosaika($omaid, $tietokantaolio);
     $hakulause = "SELECT pikakommentit.id, pikakommentit.henkilo_id AS henkilo_id\n                    FROM pikakommentit\n                    JOIN suoritukset\n                    ON suoritukset.id = pikakommentit.kohde_id\n                    WHERE (pikakommentit.tallennushetki_sek > {$vikaulosaika}\n                    AND pikakommentit.kohde_tyyppi = {$kohde}\n                    AND suoritukset.henkilo_id = {$henkilo_id}\n                    AND pikakommentit.henkilo_id <> {$omaid})";
     $hakutulos_kaikki = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
     //============= suodatus alku ==========================================
     $hakutulos = array();
     $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
     foreach ($hakutulos_kaikki as $osuma) {
         $henkilo_id = $osuma->henkilo_id;
         if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
             array_push($hakutulos, $osuma);
         }
     }
     //============= suodatus loppu =========================================
     $lkm = sizeof($hakutulos);
     $palaute = "";
     if ($lkm > 0) {
         $title = "Uusien pikakommenttien lkm (edellisen " . "uloskirjautumisen j&auml;lkeen tulleet)";
         $palaute = "<span title='" . $title . "'>(" . $lkm . "*)</span>";
     }
     return $palaute;
 }
Exemple #8
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;
 }
/**
 * Hakee tietyn albumin sisältämien kuvien tunnisteet eli iideet.
 * Albumin tunniste eli id annetaan parametrina.
 * Palauttaa aina taulukon, joka sisältää kuvien id:t. Taulukko on tyhjä myös,
 * jos tulee jokin virhe.
 */
function hae_albumin_kuvien_idt($albumi_id, $tietokantaolio, $omaid)
{
    // Haetaan albumin kuvien id:t:
    $hakulause = "SELECT kuvat.id, kuvat.henkilo_id AS henkilo_id\n                FROM kuvat\n                JOIN kuva_albumi_linkit AS linkit\n                ON kuvat.id = linkit.kuva_id\n                JOIN albumit\n                ON albumit.id = linkit.albumi_id\n                WHERE (kuvat.nakyvyys = " . Nakyvyys_kuva::$JULKINEN . "\n                OR kuvat.henkilo_id = " . $omaid . ")" . " AND albumit.id = " . $albumi_id . " ORDER BY kuvat.id";
    $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
    $osumat_kaikki = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
    //============= SUODATUS ALKU ======================================
    $osumat = array();
    $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
    foreach ($osumat_kaikki as $osuma) {
        $henkilo_id = $osuma->henkilo_id;
        if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
            array_push($osumat, $osuma);
        }
    }
    //============= SUODATUS LOPPU =====================================
    $id_taul = array();
    if (sizeof($osumat) != 0) {
        foreach ($osumat as $kuva) {
            array_push($id_taul, $kuva->id);
        }
    }
    return $id_taul;
}
 /**
  * Luo suodattimen annetuilla tiedoilla, tallentaa tietokantaan ja 
  * palauttaa uuden suodatinolion onnistuessa ja muuten arvon false.
  * 
  * Virheilmoituksia lisätään tilaisuuden tullen.
  * @param type $omistaja_id
  * @param type $vastapuoli_id
  * @param type $suodatustapa
  * @return Suodatin/Boolean Palauttaa joko Suodatin-luokan olion tai sitten
  * arvon FALSE.
  */
 public function luo_ja_tallenna_suodatin($omistaja_id, $vastapuoli_id, $suodatustapa)
 {
     $id = Suodatin::$MUUTTUJAA_EI_MAARITELTY;
     $suodatin = new Suodatin($id, $this->tietokantaolio);
     $suodatin->set_arvo($omistaja_id, Suodatin::$sarakenimi_omistaja_id);
     $suodatin->set_arvo($vastapuoli_id, Suodatin::$sarakenimi_vastapuoli_id);
     $suodatin->set_arvo($suodatustapa, Suodatin::$sarakenimi_suodatustapa);
     $tallennus = $suodatin->tallenna_uusi();
     if ($tallennus == Suodatin::$OPERAATIO_ONNISTUI) {
         $this->lisaa_kommentti("Suodattimen luominen ok!");
     } else {
         // Lisään vain ilmoituksen, koska aina ei virheellinen toiminto!
         $this->lisaa_kommentti("Virhe suodattimen luomisessa!" . " Ilmoitukset: <br/>" . $suodatin->tulosta_virheilmoitukset() . " <br/>Arvot: henkilo1_id=" . $omistaja_id . ", henkilo2_id=" . $vastapuoli_id . " ja suodatustapa=" . $suodatustapa);
         $suodatin = false;
     }
     return $suodatin;
 }
Exemple #11
0
 /**
  * Vastaa palauttamalla true tai false kysymykseen, onko käyttäjän ja
  * toisen henkilön välillä suodatinta. Jos on, palauttaa true ja muuten false.
  * 
  * <p>Jonkin verran raskas, jos käyttäjiä paljon, koska hakee tietokannasta
  * kaikki käyttäjään liittyvät suodattimet ja vertaa jokaista niistä 
  * kahdesti henkilo_id:hen. Jos tätä kutsutaan jatkuvasti, on tietokanta-
  * haku hiukan turhaan toistuva operaatio. Tällöin voi olla parempi tehdä
  * tietokantahaku erikseen ja kutsua sitten metodia 
  * "henkilo_suodatetaan_kevyt()"</p>
  * 
  * @param type $henkilo_id Vastapuoliehdokkaan tunniste.
  * @param type $omaid Käyttäjän tunniste
  */
 public static function henkilo_suodatetaan($henkilo_id, $omaid)
 {
     // Haetaan kaikki käyttäjään liittyvät suodattimet:
     $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
     $suodatetaan = Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet);
     return $suodatetaan;
 }