/** * Hakee tietokannasta liikkujien nimet ja palauttaa ne tekstinä. * @param <type> $tietokantaolio olio, joka sisältää 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ä kysely pitää olla lainausmerkeissä! 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älkeen tulleet)"; $palaute = "<span title='" . $title . "'>(" . $lkm . "*)</span>"; } return $palaute; }
/** * 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ä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; }
/** * 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; }