/** * Hakee tietokannasta tiettyä aikaa uudemmat viestit * ja palauttaa ne tekstinä. Jos samassa keskustelussa on myös vanhempia * viestejä, näyttää niistä korkeintaan haluttu määrä. * * @param Teemat $teemat * @param Tietokantaolio $tietokantaolio olio, * joka sisältää yhteystiedot tietokantaan. * @param int $oma_id Käyttäjän id, jonka avulla voi valita esim. muokattavat. * @param bool $kuningas true, jos käyttäjä on verkon haltija, muuten false. * @param int $teema_id viestiluokan nro (ks hae_teema()). * @param int $aikaraja vanhimman haettavan viestin ikä (timestamp sek). * @param int $vika_viesti_id Viimeksi muokatun viestin id. Esimerkiksi * jos käyttäjä on muokannut viestiä tai laittanut uuden ja haluaa päivittää * sivun, niin on mahdollista tulla aina samaan kohtaan. * @param int $kiinni_lkm näin monta vanhempaa viestiä näytetään yhdessä * keskustelussa korkeintaan. Lisäksi näytetään luonnollisesti uudet. * @return <type> Palauttaa viestit merkkijonona, * jota muokattu html:n avulla. */ function hae_viestit($teemat, $tietokantaolio, $oma_id, $kuningas, &$teema_id, $aikaraja, $vika_viesti_id, $kiinni_lkm) { if (!isset($kiinni_lkm)) { $kiinni_lkm = 2; //oletusarvo } $viestihtml = ''; $alaikainen = true; // VArmistetaan, ettei ala- tai yli-ikäiset näe k-18 viestejä: if (on_alaikainen_tai_elakkeella($oma_id, $tietokantaolio)) { if ($teema_id == 2) { $teema_id = 1; // Ei k-18! } } else { $alaikainen = false; } /* Luodaan etsintätekstikenttä */ $etsin = "<input type='text' id=" . Yleisarvoja::$ETSINTAKENTAN_ID . " onkeyup='etsi(this.value)' title='Kirjoita hakusana(t)'/>"; $etsin_selitys = "Yleishaku: "; $etsin = ""; $etsin_selitys = ""; // Haetaan ensin kaikki viestit, jotka ovat uudempia kuin // aikaraja kyseisestä luokasta: $hakulause = "SELECT * FROM viestit\n WHERE teema_id ='{$teema_id}'\n AND tallennushetki_sek > '{$aikaraja}'\n ORDER by tallennushetki_sek DESC"; $viestihaku = $tietokantaolio->tee_OMAhaku($hakulause); // Viestitaulua voisi suodattaa, jos jaksaa. Ei suurta merkitystä. $viestitaulu = $tietokantaolio->hae_osumarivit_olioina($viestihaku); $teemavalinnat = $teemat->get_teemavalinnat(); $teemaarvot = $teemat->get_teema_arvot(); /* Huomaa teema_id:n välitys: */ $teemavalintahtml = "<select id='teemavalinta' name='teema_id'" . "onChange='hae_viestit(" . $oma_id . "," . $vika_viesti_id . "," . "1" . ",this.options[this.selectedIndex].value)'>"; //Oletusviestiluokka on yleinen: if (!isset($teema_id)) { $teema_id = 1; } // Käydään läpi arvot ja verrataan teema_id:n. Osuma laitetaan valituksi. for ($i = 0; $i < sizeof($teemaarvot); $i++) { if ($teemaarvot[$i] == $teema_id) { $teemavalintahtml .= "<option value='{$teemaarvot[$i]}'" . "selected='selected'>" . $teemavalinnat[$i] . "</option>"; } else { $teemavalintahtml .= "<option value='{$teemaarvot[$i]}'>" . $teemavalinnat[$i] . "</option>"; } } $teemavalintahtml .= "</select>"; /* Lisätään submitpainike kuitenkin (ellei JS käytössä): */ $teemavalintahtml .= "<input id='viestihaku' type='submit' name='toiminta'" . "value='->'/>"; if (sizeof($viestitaulu) == 0) { $viestihtml = "Yhtään " . $teemat->hae_viestien_tuoreusaikakuvaus($teema_id) . " päivää" . " nuorempaa " . "viestiä ei löytynyt!" . "<form method='post'" . "action='index.php?teema_id=" . $teema_id . "'>" . "<input id='uusi' type='submit' name='toiminta'" . "value='Uusi viesti'/>" . "Viestiluokka: " . $teemavalintahtml . $etsin_selitys . $etsin . "</form> "; } else { //Muotoillaan tiedot kauniisti; // Huom. action-arvo pitää olla noin, koska ajaxin kanssa // php-self ohjasi väärälle sivulle . // HUOM! Submit-painikkeiden täytyy olla saman lomakkeen sisällä, jos // halutaan tietoa lomakkeesta ulos (kuten valinnat). $mj = "<form method='post' action='index.php" . "?teema_id=" . $teema_id . "&vika_viesti_id=" . $vika_viesti_id . "'>" . "<div id='napit1'>" . "<input id='uusi' type='submit' name='toiminta'" . "value='Uusi viesti'/><br />" . "<input id='poistonappi' type='submit' name='toiminta'" . "value='Poista valitut'/></div>" . "Viestiluokka: " . $teemavalintahtml . $etsin_selitys . $etsin; $mj .= "<div id='viestitaulu' class='viestitaulu'>"; //"<div id='uusi_viesti'></div>"; // Käydään läpi löytyneet viestit ja haetaan niistä toiseen // taulukkoon niiden keskustelujen id:t (aloitusviestin id / // kommentin emoid), joihin löytyneet viestit kuuluvat. Sitten // haetaan keskustelut järjestyksessä. // // Keskustelut esitetään uusimman viestin mukaisessa järjestyksessä // (riippumatta esim. aloitusviestin lähetysajasta). $keskustelu_id_taulukko = array(); foreach ($viestitaulu as $nyk_olio) { // Haetaan keskusteluid: $k_id = -1; if ($nyk_olio->taso == 1) { $k_id = $nyk_olio->id; } else { // kommentti: $k_id = $nyk_olio->emo_id; } // Hyväksytään vain kunnollinen id: if (isset($k_id) && $k_id > -1) { // Ellei id jo ole $keskustelu_id_taulukossa, // asetetaan se vikaksi. Muuten ei tehdä mitään. $on_jo = false; foreach ($keskustelu_id_taulukko as $id) { if ($id == $k_id) { $on_jo = true; } } if (!$on_jo) { array_push($keskustelu_id_taulukko, $k_id); } } } // Haetaan sitten keskustelut oikeassa järjestyksessä: foreach ($keskustelu_id_taulukko as $kid) { $khtml = hae_keskustelu($kid, false, $kiinni_lkm, $aikaraja, $tietokantaolio, $kuningas, $oma_id); // Jos haku näyttää onnistuneen, lisätään se palautettavaan // merkkijonoon: if ($khtml != "ei_onnistunut") { // Lisätään myös tagit keskustelun ympärille: $mj .= "<div id='" . $kid . "' class='keskustelu'>"; $mj .= $khtml; $mj .= "</div>"; // End of keskustelu $mj .= "<div id='vali" . $kid . "'></div>"; // Välitila, // mm. kommenttilomaketta varten. Ei Käytös!! } } $mj .= "</div>" . "</form>"; $viestihtml = $mj; } // Aika nykyistetään aina, kun uudet viestit on haettu. Trimmaus poistaa // mahdolliset tyhjät merkit. $aikamuuttuja = trim("hakuaika_teema" . $teema_id); $_SESSION[$aikamuuttuja] = time(); // Päivitetään myös teema_id sessiomuuttujaan: $_SESSION['teema_id'] = trim($teema_id); // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$VIESTIEN_KATSELU; paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); return $viestihtml; }
$aikaraja = $teemat->hae_viestien_tuoreusaika($teema_id); } $omat_valtuudet = $_SESSION['tiedot']->valtuudet; $kuningas = on_kuningas_pika($omat_valtuudet); /********************* KOMMENTTILOMAKE ********************************/ // Palauttaa kommentinkirjoituslomakkeen eli viestilomakkeen. if ($kysymys == "kommenttilomake") { $lomakehtml = nayta_viestilomake("", $teema_id, $aihe, $viesti, true, $emoviesti_id, -1, 2, $omaid, $tietokantaolio, $teemat); echo $lomakehtml; } else { if ($kysymys == "muokkauslomake") { $lomakehtml = nayta_viestilomake("", $teema_id, $muok_aihe, $muok_viesti, false, $emoviesti_id, $viesti_id, $taso, $omaid, $tietokantaolio, $teemat); echo $lomakehtml; } else { if ($kysymys == "hae_keskustelu") { $kesk_html = hae_keskustelu($keskustelun_id, $auki, $kiinni_lkm, $aikaraja, $tietokantaolio, $kuningas, $omaid); // Tämä pitää olla, ettei html-tageja lueta elementeiksi. $sis = htmlspecialchars($kesk_html, ENT_NOQUOTES); header('Content-type: text/xml'); // HUOM! encoding alla pitää olla, muuten ääkköset aiheuttavat // ajax-hommissa. Jostakin syystä utf-8 ei toiminut myöskään // omalla palvelimella. Nyt kyllä toimii. // Kerkkaset.fissa pitää olla UTF-8 Hmm.. echo '<?xml version="1.0" encoding="' . $koodaus . '"?>'; echo '<keskustelu>'; echo '<k_id>' . $keskustelun_id . '</k_id>'; echo '<kesk>' . $sis . '</kesk>'; echo '</keskustelu>'; } else { if ($kysymys == "hae_viestit") { // Haetaan viestejä: