/** * 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; }