예제 #1
0
/**
 * 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&auml;&auml;n " . $teemat->hae_viestien_tuoreusaikakuvaus($teema_id) . " p&auml;iv&auml;&auml;" . " nuorempaa " . "viesti&auml; ei l&ouml;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;
}
예제 #2
0
     $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ä: