// Otetaan kirjautumisaika muistiin. $_SESSION['kirjautumisaika'] = time(); $_SESSION['tiedot'] = $tiedot; aseta_online(true, $_SESSION['tiedot']->id, $tietokantaolio); // Haetaan viimeinen uloskirjautumisaika: $viimeksi_ulos = hae_vika_ulosaika($_SESSION['tiedot']->id, $tietokantaolio); // Tallennetaan viimeinen uloskirjautumisaika sessiomuuttujaan: // (tarvitaan esim. uusien pikakommenttien selvittämisessä) $_SESSION['edellinen_uloskirjausaika_sek'] = $viimeksi_ulos; // Haetaan ikä $alaikainen = true; if (!on_alaikainen_tai_elakkeella($_SESSION['tiedot']->id, $tietokantaolio)) { $alaikainen = false; } /* Luodaan teemat-olio alaikäisyyden huomioon ottoa yms. varten: */ $teemat = new Teemat($alaikainen); // Asetetaan hakuajat sessiomuuttujaan ensimmäisellä kerralla: $teema_idt = $teemat->get_teema_arvot(); // Seuraavassa trim, koska joskus tuli ongelmaa tyhjistä // välimerkeistä for ($i = 0; $i < sizeof($teema_idt); $i++) { $aikamuuttuja = trim("hakuaika_teema" . $teema_idt[$i]); $_SESSION[$aikamuuttuja] = $viimeksi_ulos; } // Haetaan yleisten lukemattomien viestien lkm täällä, koska // muuten uusien lkm häviää automaattisen viestien // näyttämisen takia. $omaid = $_SESSION['tiedot']->id; $teema = 1; // Yleinen-luokan tunnus. $uusien_yleisten_lkm = hae_uusien_viestien_lkm($omaid, $teema, $tietokantaolio, $viimeksi_ulos);
/** * 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; }
$ilmoitus = ""; $linkkipalkkiteksti = ""; $viestitieto = ""; $muokkauslaatikko = ""; // Tarkastetaan käyttäjän ikä: $alaikainen = true; if (!on_alaikainen_tai_elakkeella($omaid, $tietokantaolio)) { $alaikainen = false; } // Varmistetaan, ettei alayli-ikäinen pääse K_18-osioon: if ($alaikainen && $teema_id == Teemat::$K_18_arvo) { $teema_id = Teemat::$YLEINEN_arvo; $_SESSION['teema_id'] = Teemat::$YLEINEN_arvo; } /* Luodaan teemat-olio alaikäisyyden huomioon ottoa yms. varten: */ $teemat = new Teemat($alaikainen); // Haetaan aikaraja näytettäville viesteille (teemat.php): $aikaraja = $teemat->hae_viestien_tuoreusaika($parametriolio->teema_id); // Linkkipalkkiin tiedot viestiluokista ja uusista viesteistä. // true/false -arvot eivät tunnu kulkevan, joten muunnetaan luvuiksi: if ($alaikainen) { $alaikaindeksi = 1; } else { $alaikaindeksi = 0; } $viestiluokat = ""; $luokat = $teemat->get_teemavalinnat(); $arvot = $teemat->get_teema_arvot(); for ($i = 0; $i < sizeof($luokat); $i++) { $viestiluokat .= "<a onClick = 'aseta_luokka(" . $alaikaindeksi . "," . $omaid . "," . $parametriolio->vika_viesti_id . ",\n 1," . $arvot[$i] . ")'>" . $luokat[$i] . " (<span id='uudet" . $arvot[$i] . "'>\n 0 </span>)</a>"; }
// tapahtuvaksi. if (!online($_SESSION['tiedot']->id, $tietokantaolio)) { $kansiotaso = 2; toteuta_passiivinen_ulos_toiminto($kansiotaso); echo Yleisarvoja::$istunto_vanhentunut; exit; } /******************************************************************/ // Ikätarkistus: if (!on_alaikainen_tai_elakkeella($omaid, $tietokantaolio)) { $alaikainen = false; } else { $alaikainen = true; } /* Luodaan teemat-olio alaikäisyyden huomioon ottoa yms. varten: */ $teemat = new Teemat($alaikainen); if ($teema_id == 2 || $_SESSION['teema_id'] == Teemat::$K_18_arvo) { if ($alaikainen) { $teema_id = Teemat::$YLEINEN_arvo; $_SESSION['teema_id'] = Teemat::$YLEINEN_arvo; } } // Joillekin luokille pitempi näkyvyys: if ($oletusaikaraja) { // Haetaan aikaraja näytettäville viesteille (teemat.php): $aikaraja = $teemat->hae_viestien_tuoreusaika($teema_id); } $omat_valtuudet = $_SESSION['tiedot']->valtuudet; $kuningas = on_kuningas_pika($omat_valtuudet); /********************* KOMMENTTILOMAKE ********************************/ // Palauttaa kommentinkirjoituslomakkeen eli viestilomakkeen.