/** * Hakee tietokannasta henkilön nimen ja palauttaa sen. Ellei löydy, * palauttaa merkkijonon "tuntematon". * @param <type> $id */ public function hae_henkilon_nimi($id) { $nimi = "Tuntematon"; $tk_henkilo_olio = $this->tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $id); if ($tk_henkilo_olio !== Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $nimi = $tk_henkilo_olio->etunimi . " " . $tk_henkilo_olio->sukunimi; $this->lisaa_kommentti("Henkilön nimi tietokannassa: " . $nimi); } else { $this->lisaa_kommentti("Henkilön nimen haku tietokannasta ei onnistunut!"); $this->lisaa_virheilmoitus("Henkilön nimen haku tietokannasta ei onnistunut!"); } return $nimi; }
/** * Konstruktorin "overloading" eli eri konstruktorit eri parametreille * ei ole tuettu PHP:ssä. Kierrän tämän antamalla parametreille, joita * ei käytetä, vakioarvon, joka tarkoittaa, ettei parametri käytössä. * * @param Tietokantaolio $tietokantaolio * @param <type> $tk_pikakommenttiolio Tietokantahausta saatava yksi rivi * oliona. */ function __construct($tietokantaolio, $id) { $this->TAULUNIMI_PIKAKOMMENTIT = Tietokannan_taulunimet::$pikakommentit; $this->virheilmot = array(); $this->tietokantaolio = $tietokantaolio; if ($id == Pikakommentti::$PARAMETRI_EI_KAYTOSSA) { $this->id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; } else { $this->id = $id; } $this->henkilo_id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->tallennushetki_sek = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->muokkaushetki_sek = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->kohde_id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->kohde_tyyppi = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->kommentti = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->tk_pikakommenttiolio = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; // Haetaan ja sijoitetaan tietokantarivin arvot, jos se on // olemassa eli parametri käytössä. if ($id != Pikakommentti::$PARAMETRI_EI_KAYTOSSA) { // Haetaan pikakommentin tiedot tietokannasta: try { $taulunimi = "pikakommentit"; $sarakenimi = "id"; $hakuarvo = $id; $tk_pikakommenttiolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); // Kun olio löytyy, asetetaan tiedot paikalleen: if ($tk_pikakommenttiolio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $this->henkilo_id = $tk_pikakommenttiolio->henkilo_id; $this->tallennushetki_sek = $tk_pikakommenttiolio->tallennushetki_sek; $this->muokkaushetki_sek = $tk_pikakommenttiolio->muokkaushetki_sek; $this->kohde_id = $tk_pikakommenttiolio->kohde_id; $this->kohde_tyyppi = $tk_pikakommenttiolio->kohde_tyyppi; $this->kommentti = $tk_pikakommenttiolio->kommentti; $this->olio_loytyi_tietokannasta = true; } else { // Jos mitään ei löydy, muutetaan ei-määritellyksi: $tk_pikakommenttiolio = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->olio_loytyi_tietokannasta = false; } // Otetaan ylös tiedot luokan muuttujaaan. $this->tk_pikakommenttiolio = $tk_pikakommenttiolio; } catch (Exception $virhe) { nollaa_muuttujat(); } } }
/** * Hakee sen olion tietokannasta, johon parametrina annettu arvo (raaka-id) * viittaa ja palauttaa sen oikeantyyppisen luokan oliona * (Kokonaisuus, Tehtava, Ratkaisu,...). * * Palauttaa yllä mainitun tyyppisen olion, jonka tietojen löytymisen * tietokannasta tarkistetaan muuttujan "olio_loytyi_tietokannasta"-muuttujan * avulla. Ellei parametri ole hyvä, palautetaan arvo * $MUUTTUJAA_EI_MAARITELTY. * * * @param type $id_raaka * @param type * @param Tietokantaolio $tietokantaolio * @return \Ratkaisu */ public static function hae_viittausolio_id_raaka($id_raaka, $tietokantaolio) { $olio_id = Elementti::irrota_elem_olion_id($id_raaka); $oliotyyppi = Elementti::irrota_elem_olion_tyyppi($id_raaka); if ($oliotyyppi === Oliotyyppi::$KOKONAISUUS) { $taulunimi = Kokonaisuusolio::$taulunimi; $sarakenimi = Kokonaisuusolio::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Kokonaisuusolio($id, $tietokantaolio); } else { if ($oliotyyppi === Oliotyyppi::$TEHTAVA) { $taulunimi = Tehtava::$taulunimi; $sarakenimi = Tehtava::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Tehtava::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Tehtava($id, $tietokantaolio); } else { if ($oliotyyppi === Oliotyyppi::$RATKAISU) { $taulunimi = Ratkaisu::$taulunimi; $sarakenimi = Ratkaisu::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Ratkaisu::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Ratkaisu($id, $tietokantaolio); } else { $palautettava = Elementti::$MUUTTUJAA_EI_MAARITELTY; } } } return $palautettava; }
/** * Palauttaa true, jos henkilö on alaikäinen tai yli-ikäinen (!), muuten false. * @param <type> $id Kysyttävän henkilön tunniste. * @param Tietokantaolio $tietokantaolio */ function on_alaikainen_tai_elakkeella($id, $tietokantaolio) { $alaikainen = true; $kayttaja = $tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $id); if ($kayttaja !== Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $svuosi = $kayttaja->syntymavuosi; $skk = $kayttaja->syntymakk; $spaiva = $kayttaja->syntymapaiva; if (on_ialtaan_vahintaan(18, $spaiva, $skk, $svuosi) && !on_ialtaan_vahintaan(65, $spaiva, $skk, $svuosi)) { $alaikainen = false; } } return $alaikainen; }
/** * Tutkii, onko parametrin mukaisessa tietokantataulussa kyseistä arvoa * kyseisessä sarakkeessa. Jos on vähintää yksi, palauttaa arvon true, * muuten false. * * Tätä käytetään muun muassa unique-arvojen tarkistamiseen ennen * tietokantaan tallentamista (esim. kayttajatunnus). * * @param type $taulunimi * @param type $sarakenimi * @param type $arvo // ARvo, jonka olemassaoloa tutkitaan. * @param Tietokantaolio $tietokantaolio */ static function arvo_jo_kaytossa($taulunimi, $sarakenimi, $arvo, $tietokantaolio) { $palaute = true; $tulos = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $arvo); if ($tulos == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $palaute = false; } return $palaute; }
/** * Palauttaa yhden keskustelun html-koodin halutulla tavalla, eli joko * näytetään kaikki kommentit tai vain osa ($kiinni = true). * * @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 vanhaa viestiä näytetään korkeintaan, * kun keskustelu on "kiinni"-tilassa. * @param int $aikaraja uusien viestien alkuaika sekunteina. Tätä vanhempia * näytetään vain $kiinni_lkm kpl. * @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_keskusteluVANHA($kesk_id, $auki, $kiinni_lkm, $aikaraja, $tietokantaolio, $kuningas, $oma_id) { $palaute = "ei_onnistunut"; $mj = ""; // html-koodi $on_piilotettavia = false; // Näytetäänkö kaikki kommentit? // 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") { // 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 = $tietokantaolio->hae_osumarivit_olioina($viestihaku1); $kommenttien_lkm = sizeof($viestitaulu1); // 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: // Haetaan ensin ensimmäisen uuden viestin sijainnin indeksin: $eka_uusi_taulukkoid = -1; for ($i = 0; $i < sizeof($viestitaulu1); $i++) { $v = $viestitaulu1[$i]; // Otetaan id ylös vain 1. kerran: if ($v->tallennushetki_sek > $aikaraja && $eka_uusi_taulukkoid == -1) { $eka_uusi_taulukkoid = $i; } } // Sitten päästään kopioimaan kommentteja: $alkuindeksi = 0; // Jos vanhoja enemmän kuin näytetään: if ($eka_uusi_taulukkoid > $kiinni_lkm) { $alkuindeksi = $eka_uusi_taulukkoid - $kiinni_lkm; $on_piilotettavia = true; } 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; // Muokkauksen/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; } // 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); } else { $viesti = new Viesti($nyk_olio, true); } $mj .= $viesti->palauta_html($on_valintaruutu, $lahettaja, $kommenttien_lkm, $on_piilotettavia, $auki); } $palaute = $mj; } return $palaute; }
/** * Poistaa yhden kuvan, sen pikkukuvat ja siihen liittyvät kuva_albumi_linkit * tai bkuvalinkit. * * Lisäys 15.1.2012: Poistaa myös kuvaan liittyvät pikakommentit! * * Palauttaa viestin onnistumisesta. * * @param <type> $oma_id * @param <type> $id_kuva * @param Tietokantaolio $tietokantaolio * @param <type> $kokoelmanimi * @return string Palauteviesti */ function poista_kuva($oma_id, $id_kuva, $tietokantaolio, $kokoelmanimi) { // Haetaan kuvan src poistoa varten: $hakulause = "SELECT src, tiedostonimi, henkilo_id\n FROM kuvat\n WHERE id = {$id_kuva}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $osumataulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos); if (sizeof($osumataulukko) == 0) { $src = ""; $tiedostonimi = ""; $henkilo_id = ""; } else { $src = $osumataulukko[0]->src; $tiedostonimi = $osumataulukko[0]->tiedostonimi; $henkilo_id = $osumataulukko[0]->henkilo_id; } // Varmistus: kuvan poistoon pitää olla kuvan tallentaja tai hallitsija- //valtuudet: $taulunimi = "henkilot"; $sarakenimi = "id"; $hakuarvo = $oma_id; $henkilo_olio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($henkilo_olio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $valtuus = $henkilo_olio->valtuudet; } else { $valtuus = Valtuudet::$RAJOITETTU; } if ($oma_id == $henkilo_id || $valtuus == Valtuudet::$HALLINTA) { // POistetaan kuvatiedot tietokannasta: $taulu = "kuvat"; $taulun_sarake = "id"; $hakuarvo = $id_kuva; $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); // Määritellään pikkukuvien kansio-osoite: $pikkukuvien_kansio = Kuva::$kansion_os_kuvat_pikkukuvat; if ($kokoelmanimi == Kuva::$KUVAT_BONGAUS) { $pikkukuvien_kansio = Kuva::$kansion_os_bongauskuvat_pikkukuvat; } // Jos kuvan poisto onnistui, poistetaan myös orvoiksi jääneet linkit: if ($ilmoitus == "onnistui") { $osoite_minikuva1 = $pikkukuvien_kansio . "/" . Kuva::$pikkukuva1_nimen_osa . $tiedostonimi; $osoite_minikuva2 = $pikkukuvien_kansio . "/" . Kuva::$pikkukuva2_nimen_osa . $tiedostonimi; $osoite_minikuva3 = $pikkukuvien_kansio . "/" . Kuva::$pikkukuva3_nimen_osa . $tiedostonimi; // Tämä tuhoaa tiedoston lopullisesti: $todellinen_poisto = unlink($src); $todellinen_poistomini1 = unlink($osoite_minikuva1); $todellinen_poistomini2 = unlink($osoite_minikuva2); $todellinen_poistomini3 = unlink($osoite_minikuva3); // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO; paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); // Varmistetaan poistot: if ($todellinen_poisto) { $ilmoitus = "Kuvan poisto ok!"; } else { $ilmoitus = "Virhe kuvan poistossa! Kuvan tiedot poistettu\n tietokannasta, mutta kuvatiedoston poisto ei onnistunut. "; } if ($todellinen_poistomini1) { $ilmoitus .= " Poistettu: minikuva1"; } else { $ilmoitus .= " Virhe: minikuvan1 poisto epäonnistui!"; } if ($todellinen_poistomini2) { $ilmoitus .= " minikuva2"; } else { $ilmoitus .= " Virhe: minikuvan2 poisto epäonnistui!"; } if ($todellinen_poistomini3) { $ilmoitus .= " ja minikuva3 JESS!"; } else { $ilmoitus .= " Virhe: minikuvan3 poisto epäonnistui!"; } //=============== PIkakommenttien poisto =========================== // Luodaan Kontrolleri_pikakommentit-olio, joka huolehtii //orpojen pikakommenttien poistosta (parametriolio tarvitaan siihen): $paraolio = new Parametrit($kokoelmanimi, $oma_id, $tietokantaolio); $kontrolleri = new Kontrolleri_pikakommentit($tietokantaolio, $paraolio, ""); if ($kokoelmanimi == Kuva::$KUVAT_ALBUMIT) { $kohde_tyyppi = Pikakommentti::$KOHDE_KUVA_TAVIS; $kohde_id = $id_kuva; } else { if ($kokoelmanimi == Kuva::$KUVAT_BONGAUS) { $kohde_tyyppi = Pikakommentti::$KOHDE_KUVA_BONGAUS; $kohde_id = $id_kuva; } } $poistettu_lkm = $kontrolleri->poista_pikakommentit($tietokantaolio, $kohde_tyyppi, $kohde_id); if ($poistettu_lkm == 0) { $ilmoitus .= "<br /> Poistettavia pikakommentteja ei löytynyt."; } else { $ilmoitus .= "<br /> Pikakommentit (" . $poistettu_lkm . " kpl) poistettu."; } //================================================================== // Haetaan ja poistetaan linkit. Kerrallakin voisi poistaa delete- // lauseella, mutta se tuntuu vähän uskaliaalta. Näin ainakin poisto // pysyy hanskassa, eikä nopeudella lie tässä niin väliä. if ($kokoelmanimi == Kuva::$KUVAT_ALBUMIT) { $taulunimi = "kuva_albumi_linkit"; } else { if ($kokoelmanimi == Kuva::$KUVAT_BONGAUS) { $taulunimi = "bkuvalinkit"; } else { $taulunimi = "tuntematon"; $ilmoitus .= " VIRHE linkkien poistossa! Kokoelmanimi '" . $kokoelmanimi . "' tuntematon!"; } } if ($taulunimi != "tuntematon") { $hakulause = "SELECT id\n FROM {$taulunimi}\n WHERE kuva_id = {$id_kuva}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $linkit = $tietokantaolio->hae_osumarivit_olioina($hakutulos); $poistetut_linkit_lkm = 0; foreach ($linkit as $linkki) { $taulu = $taulunimi; $taulun_sarake = "id"; $hakuarvo = $linkki->id; $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); if ($ilm == "onnistui") { $poistetut_linkit_lkm++; } } $ilmoitus .= "<br /> Linkit (" . $poistetut_linkit_lkm . " kpl) poistettu."; } } else { $ilmoitus = " Virhe kuvan poistossa! Yritä uudelleen!"; } } else { $ilmoitus = "Ei valtuuksia kuvan poistoon!"; } return $ilmoitus; }
if (!isset($_SESSION['tunnistus']) || $_SESSION['tunnistus'] != 'kunnossa') { header("Location: ../tunnistus.php?piip=" . time()); exit; } else { require_once '../asetukset/tietokantayhteys.php'; require_once '../php_yleinen/Tietokantaolio.php'; // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); $kuva_id = isset($_REQUEST['kuva_id']) ? (int) $_REQUEST['kuva_id'] : -1; // Koko määrittelee sen, mikä tietokannan kuvista haetaan: $koko = isset($_REQUEST['koko']) ? $_REQUEST['koko'] : ""; if ($kuva_id > 0) { $taulunimi = "kuvat"; $sarakenimi = "id"; $hakuarvo = $kuva_id; $kuva_dbolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($kuva_dbolio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { header('Content-type: ' . $kuva_dbolio->tiedostotunnus); header('Content-length: ' . $kuva_dbolio->tiedostokoko); $kuva = $kuva_dbolio->minikuva2; if ($koko == "pieni") { $kuva = $kuva_dbolio->minikuva1; } echo $kuva; } else { header('HTTP/1.0 404 Kuvaa ei löytyny'); } } $tietokantaolio->sulje_tietokanta($dbnimi); }