예제 #1
0
 /**
  * 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&ouml;n nimi tietokannassa: " . $nimi);
     } else {
         $this->lisaa_kommentti("Henkil&ouml;n nimen haku tietokannasta ei onnistunut!");
         $this->lisaa_virheilmoitus("Henkil&ouml;n nimen haku tietokannasta ei onnistunut!");
     }
     return $nimi;
 }
예제 #2
0
 /**
  * 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();
         }
     }
 }
예제 #3
0
 /**
  * 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;
 }
예제 #4
0
/**
 * 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;
}
예제 #5
0
 /**
  * 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;
 }
예제 #6
0
/**
 * 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;
}
예제 #7
0
/**
 * 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&auml;onnistui!";
            }
            if ($todellinen_poistomini2) {
                $ilmoitus .= " minikuva2";
            } else {
                $ilmoitus .= " Virhe: minikuvan2 poisto ep&auml;onnistui!";
            }
            if ($todellinen_poistomini3) {
                $ilmoitus .= " ja minikuva3 JESS!";
            } else {
                $ilmoitus .= " Virhe: minikuvan3 poisto ep&auml;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&ouml;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&auml; uudelleen!";
        }
    } else {
        $ilmoitus = "Ei valtuuksia kuvan poistoon!";
    }
    return $ilmoitus;
}
예제 #8
0
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&ouml;ytyny');
        }
    }
    $tietokantaolio->sulje_tietokanta($dbnimi);
}