// 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); $tervehdysnimi = $_SESSION['tiedot']->lempinimi; if (!isset($tervehdysnimi) || $tervehdysnimi == "") { $tervehdysnimi = $_SESSION['tiedot']->etunimi; } $teksti = "<h2>Tervetuloa, " . $tervehdysnimi . "!</h2><a href=\"index.php?uusien_yl_lkm =\n " . $uusien_yleisten_lkm . "\">Jatka</a>"; // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$SISAANKIRJAUTUMINEN; $paivitys = paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); // TEsti: if ($paivitys == Tekstit::$aktiivisuustallennus_virheilm_tallennus_eiok) { $viesti = $paivitys . " (tunnistus.php) TIEDOT: " . "viimeksi_aktiivi= " . $viimeksi_aktiivi . ", aktiivisuuslaji= " . $aktiivisuuslaji . " ja omaid=" . $omaid; } else { // Kirjoitetaan tervehdys ja siirrytään varsinaiselle sivulle. $viesti = $teksti . "<script type='text/javascript'>" . "siirra_hitaasti('index.php?uusien_yl_lkm=" . $uusien_yleisten_lkm . "', 500);</script>"; } } } } } else { if ($ktunnus == "" && $toiminta == 'Kirjaudu') { $viesti = "Käyttäjätunnus ei voi olla tyhjä!"; $sisalto = nayta_kirjautuminen($ktunnus, $hamynimi); }
/** * Poistaa yhden kuvatiedoston ja siihen liittyvät kuvatiedot ja kuvalinkit * tietokannasta (tietokanta hoitaa viimeksimainitut - cascade-määritykset ok). * * @param Parametrit $parametriolio * @return Palaute $palauteolio */ function toteuta_poista_kuva($parametriolio) { $kohde = $parametriolio->kohde_kuva; $id_kuva = $parametriolio->id_kuva; $id_kokon = $parametriolio->id_kokon; $oppiaine_kokon = $parametriolio->oppiaine_kokon; $taso_kokon = $parametriolio->taso_kokon; $id_teht = $parametriolio->id_teht; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $kieli_id = $parametriolio->kieli_id; $omaid = $parametriolio->get_omaid(); $palauteolio = new Palaute(); // Haetaan kuvan src poistoa varten: $hakulause = "SELECT src\n FROM kuvat\n WHERE id = {$id_kuva}"; $taulunimi = "kuvat"; $sarakenimi = "id"; $hakuarvo = $id_kuva; $kuvaolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($kuvaolio == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $src = ""; } else { $src = $kuvaolio->src; } // POistetaan kuvatiedot tietokannasta: $taulu = "kuvat"; $taulun_sarake = "id"; $hakuarvo = $id_kuva; $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); // Jos kuvan poisto onnistui, poistetaan myös orvoiksi jääneet linkit: if ($ilmoitus == Tietokantaolio::$HAKU_ONNISTUI) { // Tämä tuhoaa tiedoston lopullisesti (ellei jo tuhottu): if (file_exists($src)) { $todellinen_poisto = unlink($src); } else { $todellinen_poisto = true; } // Aktiivisuusmerkintä: /* Valitaan oikea aktiivisuusmerkintä: */ if ($kohde === Kuvat::$kohde_kokonaisuus_tiivistelma || $kohde === Kuvat::$kohde_kokonaisuus_selitys) { $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO_KOKONAISUUS; } else { if ($kohde === Kuvat::$kohde_tehtava) { $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO_TEHTAVA; } else { if ($kohde === Kuvat::$kohde_ratkaisu) { $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO_RATKAISU; } else { $aktiivisuuslaji = Aktiivisuus::$TUNTEMATON_KUVA_AKTIIVISUUS; } } } $viimeksi_aktiivi = time(); paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); if ($todellinen_poisto) { $ilmoitus = Tekstit::$ilm_kuva_poisto_ok; } else { $ilmoitus = Tekstit::$virheilm_kuvan_poisto_tiedosto_ei_tuhottu . " SRC: '" . $src . "'"; } } else { $ilmoitus = Tekstit::$virheilm_kuvan_poisto; } $palauteolio = toteuta_nayta_oliot($parametriolio); $palauteolio->set_ilmoitus($ilmoitus); return $palauteolio; }
/** * Uuden lajiluokan tallennus! * @return Palaute */ public function toteuta_tallenna_uusi() { $pal = $this->palauteolio; $uusi = new Lajiluokka($this->tietokantaolio, Lajiluokka::$PARAMETRI_EI_KAYTOSSA); // Lajiluokka: $ylaluokka_id = $this->parametriolio->ylaluokka_id_lj; $nimi_latina = $this->parametriolio->nimi_latina_lj; // Kuvaus: // Nykyään kieli on tuossa aina suomi. Voi muuttaa tarvittaessa. $kieli_kuv = Kielet::$SUOMI; $kuv_kuv = $this->parametriolio->kuv_kuv; $nimi_kuv = $this->parametriolio->nimi_kuv; // Asetetaan arvot kohdalleen: $uusi->set_ylaluokka_id($ylaluokka_id); $uusi->set_nimi_latina($nimi_latina); // Kokeillaan tallentaa: $tallennus = $uusi->tallenna_uusi(); // Jos kaikki hyvin, tallennetaan myös kuvaus lajiluokalle: if ($tallennus === Lajiluokka::$OPERAATIO_ONNISTUI) { // tallennetaan aktiivisuus: paivita_aktiivisuus($this->parametriolio->omaid, $this->tietokantaolio, time(), Aktiivisuus::$LAJILUOKKA_UUDEN_TALLENNUS); $uusi_kuv = new Kuvaus($this->tietokantaolio, Kuvaus::$PARAMETRI_EI_KAYTOSSA); // Asetetaan arvot: $uusi_kuv->set_kieli($kieli_kuv); $uusi_kuv->set_kuvaus($kuv_kuv); $uusi_kuv->set_lajiluokka($uusi->get_id()); $uusi_kuv->set_nimi($nimi_kuv); // Kokeillaan tallentaa: $tallennus_kuv = $uusi_kuv->tallenna_uusi(); // Jos kaikki hyvin: if ($tallennus_kuv === Kuvaus::$OPERAATIO_ONNISTUI) { // tallennetaan aktiivisuus: paivita_aktiivisuus($this->parametriolio->omaid, $this->tietokantaolio, time(), Aktiivisuus::$LAJILUOKKAKUVAUS_UUDEN_TALLENNUS); $pal->set_operaatio_onnistui(true); $pal->set_ilmoitus(Bongaustekstit::$lajiluokka_ja_kuvaus_tallennus_ok); // Asetetaan kuitenkin palautusolioon luodun lajiluokan id: $pal->set_muokatun_id($uusi->get_id()); $pal->set_sisalto($this->nayta_havainnot()); } else { $pal->set_operaatio_onnistui(false); $pal->set_ilmoitus(Bongaustekstit::$kuvaus_virheilm_tallennus_eiok . Html::luo_br() . $uusi_kuv->tulosta_virheilmoitukset()); $pal->set_sisalto($this->toteuta_nayta_lajiluokkalomake()->get_sisalto()); } } else { $pal->set_operaatio_onnistui(false); $pal->set_ilmoitus(Bongaustekstit::$lajiluokka_virheilm_tallennus_eiok . Html::luo_br() . $uusi->tulosta_virheilmoitukset()); $pal->set_sisalto($this->toteuta_nayta_lajiluokkalomake()->get_sisalto()); } return $pal; }
/** * Kirjaa käyttäjän ulos eli lopettaa session ja poistaa tiedot muisteista. * @param <type> $omaid * @param <type> $tietokantaolio */ function kirjaudu_ulos($omaid, $tietokantaolio) { if (isset($_SESSION['tiedot'])) { $kayttaja = $_SESSION['tiedot']->etunimi . " " . $_SESSION['tiedot']->sukunimi; aseta_online(false, $_SESSION['tiedot']->id, $tietokantaolio); // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$ULOSKIRJAUTUMINEN; paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); // Nämä ovat tärkeitä. Tiedot tahtovat jäädä muuten jonnekin muistin // perukoille kummittelemaan. unset($_SESSION['tiedot']); // Vapauttaa muuttujan unset($_SESSION['tunnistus']); // Vapauttaa muuttujan //Ohjaa turvallisesti ja nopeasti kirjautumissivulle. header("Location: index.php?id=" . time() . "&ilmoitus_kokon=" . $kayttaja . " " . Tekstit::$ilm_kirjautui_ulos); $tietokantaolio->sulje_tietokanta(); exit; } else { return Tekstit::$virheilm_uloskirjaustoisto; } }
/** * Toteuttaa uuden tehtävän tallentamisen. Palauttaa Palaute-luokan olion, * joka sisältää tarpeelliset tiedot toiminnon onnistumisesta yms. * * * @param Palaute $palauteolio */ function toteuta_tallenna_muokkaus(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_teht = $parametriolio->id_teht; $omaid = $parametriolio->get_omaid(); $otsikko_teht = $parametriolio->otsikko_teht; $tehtavananto_teht = $parametriolio->tehtavananto_teht; $vaikeustaso_teht = $parametriolio->vaikeustaso_teht; $nakyvyys = $parametriolio->nakyvyys_teht; $tietokantaolio = $parametriolio->get_tietokantaolio(); $onnistuminen = Palaute::$VIRHEKOODI_TALLENNUS; // TArkistetaan, onko käyttäjä kirjautunut. Ellei ole, keskeytetään: if (Henkilo::on_kirjautunut($omaid, $tietokantaolio)) { // Tarkistetaan tiedot: $tallennettava = new Tehtava($id_teht, $tietokantaolio); if ($tallennettava->olio_loytyi_tietokannasta) { // Asetetaan arvot paikalleen: $tallennettava->set_arvo(time(), Tehtava::$sarakenimi_ed_muutos_sek); $tallennettava->setOtsikko($otsikko_teht); $tallennettava->setTehtavananto($tehtavananto_teht); $tallennettava->setVaikeustaso($vaikeustaso_teht); $tallennettava->setNakyvyys($nakyvyys); $palaute = $tallennettava->tallenna_muutokset(); if ($palaute === Tehtava::$OPERAATIO_ONNISTUI) { //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$TEHTAVAN_MUUTOSTEN_TALLENNUS); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } // Otetaan selville, tuleekö käyttäjä koosteesta vai // kokonaisuuksista ja näytetään vastaava juttu: $elem_id = $parametriolio->elementti_id; if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $elem = new Elementti($elem_id, $tietokantaolio); if ($elem->olio_loytyi_tietokannasta) { $parametriolio->kooste_id = $elem->get_arvo(Elementti::$sarakenimi_kooste_id); } $koostekontr = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio); $koostekontr->toteuta_nayta($palauteolio); // JOtta palataan varmasti samaan elementtiin: $palauteolio->set_muokatun_id($parametriolio->elementti_id); } else { $this->toteuta_nayta_tehtavat($palauteolio); // JOtta palataan varmasti samaan kokonaisuuteen: $palauteolio->set_muokatun_id($tallennettava->getId()); } $palauteolio->set_ilmoitus(Tekstit::$tehtava_ilm_tallennus_muok_ok . $this->tulosta_virheilmoitukset()); } else { $parametriolio->uusi = true; // Varmuuden vuoksi. $this->toteuta_tehtavalomakkeen_naytto($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$tehtava_virheilm_tallennus_muok_eiok . $tallennettava->tulosta_virheilmoitukset()); } } else { $this->lisaa_virheilmoitus(Tekstit::$tehtava_virheilm_muokattavaa_ei_loytynyt); $this->toteuta_nayta_tehtavat($palauteolio); $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset()); } } else { // Täällä sessio on vanhentunut: $this->lisaa_virheilmoitus(Kayttajatekstit::$ilmoitus_sessio_vanhentunut); $this->toteuta_nayta_tehtavat($palauteolio); $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset()); } $palauteolio->set_virhekoodi($onnistuminen); $palauteolio->set_valikkonaytto(false); }
/** * Toteuttaa monen uuden havainnon tallennuksen. * @return \Palaute */ public function toteuta_tallenna_monta_uutta() { $tietokantaolio = $this->get_tietokantaolio(); $palauteolio = $this->get_palauteolio(); // Sisältää valittujen lajiluokkien id:t. $valinnat = $this->get_parametriolio()->lajivalinnat_hav; $laskuri = 0; $tallennusten_lkm = 0; $virheiden_lkm = 0; $tallennetut_lajit = ""; // Nimet kerätään tähän. foreach ($valinnat as $id_lj) { $uusi = new Havainto($this->tietokantaolio(), Havainto::$PARAMETRI_EI_KAYTOSSA); $uusi->set_henkilo_id($this->get_parametriolio()->omaid); $uusi->set_lajiluokka_id($id_lj); $uusi->set_paiva($this->get_parametriolio()->paiva_hav); $uusi->set_kk($this->get_parametriolio()->kk_hav); $uusi->set_vuosi($this->get_parametriolio()->vuosi_hav); $uusi->set_paikka($this->get_parametriolio()->paikka_hav); $uusi->set_kommentti($this->get_parametriolio()->kommentti_hav); $uusi->set_maa($this->get_parametriolio()->maa_hav); $uusi->set_varmuus($this->get_parametriolio()->varmuus_hav); if ($uusi->tallenna_uusi() === Havainto::$OPERAATIO_ONNISTUI) { $tallennusten_lkm++; // Haetaan nimi tallennetulle: $nimi = Bongaustekstit::$nimi_tuntematon; $lajiluokka = new Lajiluokka($tietokantaolio, $id_lj); if ($lajiluokka->olio_loytyi_tietokannasta) { $kuvaus = $lajiluokka->hae_kuvaus($this->get_parametriolio()->kieli_id); if ($kuvaus instanceof Kuvaus) { if ($laskuri == 0) { $nimi = $kuvaus->get_nimi(); } else { $nimi = ", " . $kuvaus->get_nimi(); } } } $tallennetut_lajit .= $nimi; } else { $virheiden_lkm++; } $laskuri++; } // Aktiivisuusmerkintä (vain kerran): $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$HAVAINTO_UUDEN_TALLENNUS; paivita_aktiivisuus($this->get_parametriolio()->omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); // Palautteet: if ($tallennusten_lkm == sizeof($valinnat)) { $kommentti = $tallennusten_lkm . " " . Bongaustekstit::$ilm_havaintojen_lisays_ok . " (" . $tallennetut_lajit . ")"; } else { $kommentti = $virheiden_lkm . " " . Bongaustekstit::$ilm_havaintojen_lisays_eiok; } $palauteolio->set_ilmoitus($kommentti); // Avataan havainnot. $palauteolio->set_sisalto($this->toteuta_nayta()->get_sisalto()); return $palauteolio; }
/** * Toteuttaa alusta loppuun uuden lajiluokan tallennuksen. * @param Parametrit $parametriolio * @return Palaute $palauteolio */ function toteuta_uuden_lajiluokan_tallennus($parametriolio) { $omaid = $parametriolio->omaid; $ylaluokka_id_lj = $parametriolio->ylaluokka_id_lj; $nimi_latina_lj = $parametriolio->nimi_latina_lj; $nimi_kuv = $parametriolio->nimi_kuv; $kuv_kuv = $parametriolio->kuv_kuv; $kieli_kuv = $parametriolio->kieli_kuv; $tietokantaolio = $parametriolio->tietokantaolio; $paiva_hav = $parametriolio->paiva_hav; $kk_hav = $parametriolio->kk_hav; $vuosi_hav = $parametriolio->vuosi_hav; // Määritellään kaksialkioinen taulukko, jonka metodi palauttaa: $palautetaulukko = array(); $palautetaulukko[0] = "Ilmoitus"; $palautetaulukko[1] = "Sisalto"; $palauteolio = new Palaute(); // Tarkistetaan tiedot: $uusi = true; $tarkistustulos = tarkista_lajiluokkatiedot($tietokantaolio, $ylaluokka_id_lj, $nimi_latina_lj, $nimi_kuv, $kuv_kuv, $uusi); // Ellei tiedot ole kunnossa, palautetaan virheilmoitus ja näytetään // lomake: if ($tarkistustulos != Bongausasetuksia::$lomaketiedot_kunnossa) { $palautetaulukko[0] = $tarkistustulos; $id_jl = "tuntematon"; // Tätä ei vielä tiedetä! $palautetaulukko[1] = nayta_lajiluokkalomake($ylaluokka_id_lj, $nimi_latina_lj, $nimi_kuv, $kuv_kuv, $kieli_kuv, $uusi, $tietokantaolio); } else { $kyselylause = "INSERT INTO blajiluokat (ylaluokka_id, nimi_latina)\n VALUES ('{$ylaluokka_id_lj}', '{$nimi_latina_lj}')"; mysql_query($kyselylause) or die(Bongaustekstit::$lajiluokka_virheilm_tallennus_eiok); $lajiluokan_id = mysql_insert_id(); // Hakee viimeksi lisätyn rivin id:n. // Jos rivi tallentui, tallennetaan sitä vastaava uusi kuvaustaulun rivi: if (mysql_affected_rows() == 1) { // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$LAJILUOKKA_UUDEN_TALLENNUS; paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); $taulu = "bkuvaukset"; $sarakenimitaulukko = array("lajiluokka_id", "nimi", "kuvaus", "kieli"); $arvotaulukko = array($lajiluokan_id, $nimi_kuv, $kuv_kuv, $kieli_kuv); $kuvaustallennuspalaute = $tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimitaulukko, $arvotaulukko, Bongaustekstit::$kuvaus_virheilm_tallennus_eiok); if ($kuvaustallennuspalaute != Bongausasetuksia::$tietokantahaku_onnistui) { $palautetaulukko[0] = $kuvaustallennuspalaute; $palautetaulukko[1] = nayta_lajiluokkalomake($id_lj, $ylaluokka_id_lj, $nimi_latina_lj, $nimi_kuv, $kuv_kuv, $kieli_kuv, $uusi, $tietokantaolio); } else { // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$LAJILUOKKAKUVAUS_UUDEN_TALLENNUS; paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); $palautetaulukko[0] = Bongaustekstit::$lajiluokka_ja_kuvaus_tallennus_ok; /*$palautetaulukko[1] = ""; //hae_havainnot($tietokantaolio, $ylaluokka_id_lj);*/ $lajiluokka_id_hav = $lajiluokan_id; //Lisätty lajiluokka $kuvalinkki_id_hav = -1; // Kun lisätty ei ole luokka, näytetään suoraan havaintolomake: $parametriolio->id_hav = false; // Tätä ei vielä tiedetä. if ($ylaluokka_id_lj != -1) { $parametriolio->set_uusi_hav(true); $palautetaulukko[1] = nayta_havaintolomake($parametriolio); } else { $palautetaulukko[1] = hae_havainnot($parametriolio); } } } } $palauteolio->set_sisalto($palautetaulukko[1]); $palauteolio->set_ilmoitus($palautetaulukko[0]); $palauteolio->set_oikean_palkin_naytto(true); return $palauteolio; }
/** * Poistaa yhden kuvan (kuvatiedoston ja tietokannan kuvatiedot). Linkit * poistuvat automaattisesti, kun kuvalinkkitaulussa on * FOREIGN KEY (kuva_id) REFERENCES kuvat (id) ON DELETE CASCADE -määrittely. * * @param <type> $id_kuva * @param <type> $tietokantaolio */ function poista_kuva($oma_id, $id_kuva, $tietokantaolio) { // Haetaan kuvan src poistoa varten: $hakulause = "SELECT src\n FROM kuvat\n WHERE id = {$id_kuva}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $osumataulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos); if (sizeof($osumataulukko) == 0) { $src = ""; } else { $src = $osumataulukko[0]->src; } // POistetaan kuvatiedot tietokannasta: $taulu = "kuvat"; $taulun_sarake = "id"; $hakuarvo = $id_kuva; $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); // Jos kuvantietojen poisto tietokannasta onnistui, poistetaan // myös orvoksi jäänyt kuvatiedosto: if ($ilmoitus == "onnistui") { // Tämä tuhoaa tiedoston lopullisesti: $todellinen_poisto = unlink($src); // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO; paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); if ($todellinen_poisto) { $ilmoitus = "Kuvan poisto onnistui! Kuva tuhottu lopullisesti. "; } else { $ilmoitus = "Virhe kuvan poistossa! Kuvan tiedot poistettu\n tietokannasta, mutta kuvatiedoston poisto ei onnistunut. "; } } else { $ilmoitus = "Virhe kuvan poistossa! Yritä uudelleen!"; } return $ilmoitus; }
/** * Toteuttaa kokonaisuuden poistotoiminnon ellei kokonaisuudella ole lapsia. * Jos on, käsketään poistamaan ensin lapset. Jos kokonaisuus poistetaan, * tarkistetaan sen mahdollisen yläkokonaisuuden lapsekkuus. * * HUOM! On_lapsia kenttä tietokannassa aiheutti tästä aika monimutkaisen. * Ajattelin sen kuitenkin kannattavan, koska se vähentää suuresti * tietokantahakuja usein toistuvissa hauissa. * * Yllä mainitusta syystä on olennaisen tärkeää käyttää tätä metodia * kokonaisuuden poistamiseen. * * @return Palaute $palauteolio */ function toteuta_poista(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $onnistuminen = Palaute::$VIRHEKOODI_YLEINEN; $id_kokon = $parametriolio->get_id_kokon(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $palauteolio = new Palaute(); $palaute = ""; // Tämä tulee palauteolion sisällöksi. $poistettava = new Kokonaisuusolio($id_kokon, $tietokantaolio); //================== Edellisen kokonaisuuden id_n haku ================= // Kun kokonaisuus poistetaan, pitää sitä edeltävän kokonaisuuden id // hakea, jotta se näätetään ensi kerralla. Ellei edellistä ole, // näytetään seuraava. $ed_id = Kokonaisuusolio::$kokon_ei_maaritelty; $oppiaineindeksi = $parametriolio->oppiaine_kokon; $taso = $parametriolio->taso_kokon; $kieli_id = $parametriolio->kieli_id; $omaid = $parametriolio->get_omaid(); $ylakokonaisuuden_id = -1; // 1. tason kokonaisuudet - ei yläkokonaisuutta. $otsikkomerkinta_alussa = ""; $otsikkotaso_alussa = Kokonaisuusolio::$otsikkotaso_oletus; $kokonaisuustaulukko = array(); // Seuraava on aina taulukko (array), joka voi olla tyhjä: $kokonaisuusoliot = $this->hae_kokonaisuusoliopuu($kokonaisuustaulukko, $otsikkomerkinta_alussa, $otsikkotaso_alussa, $kieli_id, $oppiaineindeksi, $taso, $ylakokonaisuuden_id, $tietokantaolio, $omaid); // ASetetaan edellisten ja seuraavien kokonaisuuksien id:t: $this->aseta_ed_ja_seur_idt_kokonaisuuksiin($kokonaisuusoliot); if (!empty($kokonaisuusoliot)) { foreach ($kokonaisuusoliot as $kokonolio) { if ($kokonolio instanceof Kokonaisuusolio && $kokonolio->get_id() == $id_kokon) { $ed_id = $kokonolio->getEdellisenId_kaikista(); if ($ed_id == Kokonaisuusolio::$kokon_edellista_ei_ole) { $ed_id = $kokonolio->getSeuraavanId_kaikista(); } } } } //========================================================================= if ($poistettava->olio_loytyi_tietokannasta) { // Poistometodi tarkastaa, onko lapsia ja huolehtii on_lapsia-arvoista. $palaute = $poistettava->poista(); if ($palaute === Malliluokkapohja::$OPERAATIO_ONNISTUI) { // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit: if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$KOKONAISUUS, $id_kokon) === Malliluokkapohja::$OPERAATIO_ONNISTUI) { $palaute = Tekstit::$ilm_kokon_poisto_ok; //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$KOKONAISUUDEN_POISTO); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } } else { $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok; } } else { $palaute = Tekstit::$virheilm_kokonaisuuden_poisto; } } else { $palaute = Tekstit::$ilm_kokon_poisto_eiok_kokonaisuutta_ei_loytynyt; } $parametriolio->set_id_kokon($ed_id); // Jotta osaa näyttää edellisen. $this->toteuta_nayta($palauteolio); $palauteolio->set_ilmoitus($palaute); $palauteolio->set_virhekoodi($onnistuminen); $palauteolio->set_valikkonaytto(true); $palauteolio->nayta_kiintolinkit(); return $palauteolio; }
} else { $_SESSION['tunnistus'] = 'kunnossa'; // Otetaan kirjautumisaika muistiin. $_SESSION['kirjautumisaika'] = time(); $_SESSION['tiedot'] = $tiedot; aseta_online(true, $_SESSION['tiedot']->id, $tietokantaolio); $omaid = $_SESSION['tiedot']->id; $tervehdysnimi = $_SESSION['tiedot']->lempinimi; if (!isset($tervehdysnimi) || $tervehdysnimi == "") { $tervehdysnimi = $_SESSION['tiedot']->etunimi; } $teksti = "<h2>" . Tekstit::$tunnistussivu_Tervetuloa . ", " . $tervehdysnimi . "!</h2><a href=" . $url . ">" . Tekstit::$tunnistussivu_Jatka . "</a>"; // Kirjoitetaan tervehdys ja siirrytään varsinaiselle sivulle. $viesti = $teksti . "<script type='text/javascript'>" . "siirra_hitaasti('" . $url . "', 500);</script>"; //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$SISAANKIRJAUTUMINEN); if (!$aktiivisuuspalaute) { $viesti .= "<br/>" . Tekstit::$virheilm_aktiivisuuden_tallennus_eiok; } } } } } else { if ($ktunnus == "" && $toiminta == Painikkeet::$tunnistus_kirjaudu_value) { $viesti = Tekstit::$tunnistussivu_kayttajatunnus_ei_saa_olla_tyhja; $sisalto = nayta_kirjautuminen($ktunnus, $hamynimi, $url, $target); } else { } } } $tietokantaolio->sulje_tietokanta($dbnimi);
/** Metodi, joka tallentaa MUOKATUN viestin tiedot MySQL:aan. Siis vanhaa * viestiä muutetaan, ei luoda uutta. Metodi palauttaa * merkkijonon "onnistui", jos * tallennus onnistuu.*/ function tallenna_viestin_muutos($oma_id, $tietokantaolio, $viesti_id, $teema_id, $aihe, $viesti) { $onnistu = false; // Kyselyparametrit: $taulu = "viestit"; $muutossarakkeet = array("teema_id", "aihe", "viesti"); $muutosarvot = array($teema_id, $aihe, $viesti); $ehtosarake = "id"; $ehtoarvo = $viesti_id; $max_muutosrivilkm = 1; // Muutetaan max yhtä riviä. $muokattujen_lkm = $tietokantaolio->tee_UPDATEhaku($taulu, $muutossarakkeet, $muutosarvot, $ehtosarake, $ehtoarvo, $max_muutosrivilkm); if (mysql_affected_rows() == 1) { $onnistu = "onnistui"; // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$VIESTIN_MUUTOSTEN_TALLENNUS; paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); } else { $onnistu = "Tiedoissa ei havaittu muutoksia!"; } return $onnistu; }
/** * Poistaa yhden kuvan ja siihen liittyvät kuva_albumi_linkit. * @param <type> $id_kuva * @param <type> $tietokantaolio */ function poista_kuva($oma_id, $id_kuva, $tietokantaolio) { // Haetaan kuvan src poistoa varten: $hakulause = "SELECT src\n FROM kuvat\n WHERE id = {$id_kuva}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $osumataulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos); if (sizeof($osumataulukko) == 0) { $src = ""; } else { $src = $osumataulukko[0]->src; } // POistetaan kuvatiedot tietokannasta: $taulu = "kuvat"; $taulun_sarake = "id"; $hakuarvo = $id_kuva; $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); // Jos kuvan poisto onnistui, poistetaan myös orvoiksi jääneet linkit: if ($ilmoitus == "onnistui") { // Tämä tuhoaa tiedoston lopullisesti: $todellinen_poisto = unlink($src); // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO; paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); if ($todellinen_poisto) { $ilmoitus = "Kuvan poisto onnistui! Kuva tuhottu lopullisesti. "; } else { $ilmoitus = "Virhe kuvan poistossa! Kuvan tiedot poistettu\n tietokannasta, mutta kuvatiedoston poisto ei onnistunut. "; } // 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ä. $hakulause = "SELECT id\n FROM kuva_albumi_linkit\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 = "kuva_albumi_linkit"; $taulun_sarake = "id"; $hakuarvo = $linkki->id; $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); if ($ilm == "onnistui") { $poistetut_linkit_lkm++; } } $ilmoitus .= "Linkit (" . $poistetut_linkit_lkm . " kpl) poistettu."; } else { $ilmoitus = "Virhe kuvan poistossa! Yritä uudelleen!"; } return $ilmoitus; }
/** * Poistaa albumin tietokannasta kuvineen ja kuvalinkkeineen. * Muuten albumin sisältämät kuvat ja kuva_albumi_linkit jäävät orvoiksi. * jäävät orvoiksi. Siispä kuvat poistetaan samalla! Aika vaarallinen komento, * joten varoitus pitää olla! * @param <type> $albumi_id * @param <type> $tietokantaolio * @return <type> Palauttaa merkkijonon, joka kertoo poiston onnistumisen. */ function poista_albumi($oma_id, $albumi_id, $tietokantaolio) { // Haetaan ensin poistettavan albumin nimi: $hakulause = "SELECT nimi\n FROM albumit\n WHERE id = {$albumi_id}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $nimitaulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos); if (sizeof($nimitaulukko) == 0) { $nimi = "tuntematon"; } else { $nimi = $nimitaulukko[0]->nimi; } // Haetaan poistettavan albumin sisältämät kuvat (pitää hakea ennen // albumin poistoa!): $hakulause = "SELECT kuvat.id, kuvat.src\n FROM albumit\n JOIN kuva_albumi_linkit AS linkit\n ON linkit.albumi_id = albumit.id\n JOIN kuvat\n ON kuvat.id = linkit.kuva_id\n WHERE albumit.id = {$albumi_id}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $kuvat = $tietokantaolio->hae_osumarivit_olioina($hakutulos); // Poistetaan albumi: $taulu = "albumit"; $taulun_sarake = "id"; $hakuarvo = $albumi_id; $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); // Jos albumin poisto onnistui, poistetaan myös orvoiksi jääneet linkit ja kuvat: if ($ilmoitus == "onnistui") { // 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ä. $hakulause = "SELECT id\n FROM kuva_albumi_linkit\n WHERE albumi_id = {$albumi_id}"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); $linkit = $tietokantaolio->hae_osumarivit_olioina($hakutulos); $poistetut_linkit_lkm = 0; foreach ($linkit as $linkki) { $taulu = "kuva_albumi_linkit"; $taulun_sarake = "id"; $hakuarvo = $linkki->id; $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); if ($ilm == "onnistui") { $poistetut_linkit_lkm++; } } // Poistetaan kuvat: $kuvalaskuri = 0; $tosituholaskuri = 0; //Todella tuhotut kuvatiedostot: foreach ($kuvat as $kuva) { $src = $kuva->src; $taulu = "kuvat"; $taulun_sarake = "id"; $hakuarvo = $kuva->id; $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); if ($ilm == "onnistui") { $kuvalaskuri++; } // Tämä tuhoaa tiedoston lopullisesti: $todellinen_poisto = unlink($src); if ($todellinen_poisto) { $tosituholaskuri++; } } // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$ALBUMIN_POISTO; paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); if (sizeof($kuvat) == $kuvalaskuri && $kuvalaskuri == $tosituholaskuri) { $ilmoitus = "Albumi '" . $nimi . "' poistettu onnistuneesti.\n Samalla poistettu {$kuvalaskuri} kuvaa ja\n {$poistetut_linkit_lkm} linkkiä!"; } else { $ilmoitus = "Albumi '" . $nimi . "' poistettu, mutta kuvien poistossa\n tuli virhe. " . sizeof($kuvat) . " kuvasta poistettu \n tietokannasta {$kuvalaskuri} kuvaa, tiedostosta\n {$tosituholaskuri} kuvaa ja {$poistetut_linkit_lkm}\n linkkiä!"; } } else { $ilmoitus = "Albumin poisto epäonnistui!\n Mitään ei ole poistettu. Yritä uudelleen!"; } return $ilmoitus; }
/** * Toteuttaa ratkaisun poiston. Linkit kuviin poistetaan automaattisesti * tietokantatasolla. * @param Palaute $palauteolio */ function toteuta_poista(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $id_ratk = $parametriolio->id_ratk; $omaid = $parametriolio->get_omaid(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $onnistuminen = Palaute::$VIRHEKOODI_POISTO; $palaute = ""; /* Ilmoitus. */ $palautesisalto = ""; $palauteolio = new Palaute(); $poistettava = new Ratkaisu($id_ratk, $tietokantaolio); if ($poistettava->olio_loytyi_tietokannasta) { $palaute = $poistettava->poista(); if ($palaute === Ratkaisu::$OPERAATIO_ONNISTUI) { // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit: if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$RATKAISU, $id_ratk) === Malliluokkapohja::$OPERAATIO_ONNISTUI) { // Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$RATKAISUN_POISTO); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { // Onnistuminen: $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } $palaute = Tekstit::$ratkaisu_ilm_poisto_ok; } else { $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok; } } else { $palaute = Tekstit::$ratkaisu_virheilm_poisto_eiok; } } else { $palaute = Tekstit::$ratkaisu_virheilm_poistettavaa_ei_loytynyt; } $this->toteuta_nayta($palauteolio); $palauteolio->set_ilmoitus($palaute); $palauteolio->set_virhekoodi($onnistuminen); $palauteolio->set_valikkonaytto(false); }
/** * Kirjaa käyttäjän ulos hänen niin halutessaan tai pakolla kun * aikaa on kulunut laiskasti tietyn ajan verran. Ei aseta headeria ts. * ohjaa kirjautumissivulle. * * * @param <type> $online */ function kirjaa_ulos($tietokantaolio) { $omaid = $_SESSION['tiedot']->id; kirjaa_vierailutiedot($omaid, $_SESSION['kirjautumisaika'], $tietokantaolio); aseta_online(false, $omaid, $tietokantaolio); // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$ULOSKIRJAUTUMINEN; paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); unset($_SESSION['tiedot']); // Vapauttaa muuttujan unset($_SESSION['tunnistus']); // Vapauttaa muuttujan unset($_SESSION['kuvat_katsottu_viimeksi']); unset($_SESSION['ylaluokka_id_lj']); //$tietokantaolio->sulje_tietokanta(); Ei tarpeen ja aiheuttaa varoituksia lokiin. }