/** * Metodi, joka tallentaa muokatun kokonaisuuden tiedot tietokantaan. * Palauttaa arvon Malliluokkapohja::$VIRHE, jos tallennus epäonnistuu, * muuten arvon Malliluokkapohja::$OPERAATIO_ONNISTUI. * * Ajaa Malliluokkapohjan vastaavan metodin yli. * * Seuraavat arvot asetetaan täällä automaattisesti, joten niistä ei * tarvitse muualla huolehtia: * * ed_muutos_sek * * luomishetki_sek-arvoa ei ole syytä muuttaa, vaikka sitä ei estetä täällä. * * Huolehtii myös isikokonaisuuksien on_lapsia-arvojen päivittämisestä silloin, kun * isikokonaisuutta vaihdetaan. Tällöin sekä uuden että vanhan isi- * kokonaisuuden on_lapsia-arvot tarkistetaan ja päivitetään. * * @return int Palauttaa normaalin Malliluokkapohja::$VIRHE tai * Malliluokkapohja::$OPERAATIO_ONNISTUI -arvon. * */ function tallenna_muutokset() { $this->set_arvo(time(), Kokonaisuusolio::$sarakenimi_ed_muutos_sek); // Haetaan tietokannassa olevan olion ylakokonaisuuden_id, koska tämän // olion arvoja on jo saatettu muuttaa: $vanha = new Kokonaisuusolio($this->get_id(), $this->tietokantaolio); $ylakokonaisuuden_id_vanha = $vanha->getYlakokonaisuuden_id(); $tallennus = parent::tallenna_muutokset(); if ($tallennus === Malliluokkapohja::$OPERAATIO_ONNISTUI) { // Päivitetään on_lapsia, jos kokonaisuus on linkitetty johonkin muuhun: $ylakokonaisuuden_id = $this->getYlakokonaisuuden_id(); if ($ylakokonaisuuden_id != $ylakokonaisuuden_id_vanha) { // Jos uusi yläkokonaisuus on olemassaolevan kokonaisuus, // varmistetaan, että sillä on lapsia. if ($ylakokonaisuuden_id > 0) { $ylakok = new Kokonaisuusolio($ylakokonaisuuden_id, $this->tietokantaolio); if ($ylakok->olio_loytyi_tietokannasta) { $on_lapsia = 1; $onnistuminen = $ylakok->tallenna_on_lapsia_muutos_kokon($on_lapsia); if ($onnistuminen === Kokonaisuusolio::$VIRHE) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muutostallennus_lapsimuutos_eiok); } } else { $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt); } } // Mahdollinen entinen yläkokonaisuus pitää myös tarkistaa, onko // sillä vielä lapsia vai ei. Mutta vain jos id > 0, koska // muuten kokonaisuudella ei ennen ollut yläkokonaisuuksia. if ($ylakokonaisuuden_id_vanha > 0) { $ylakok_vanha = new Kokonaisuusolio($ylakokonaisuuden_id_vanha, $this->tietokantaolio); if ($ylakok_vanha->olio_loytyi_tietokannasta) { if ($ylakok_vanha->on_lapsia_kokon()) { $on_lapsia = 1; } else { $on_lapsia = 0; } $onnistuminen = $ylakok_vanha->tallenna_on_lapsia_muutos_kokon($on_lapsia); if ($onnistuminen === Kokonaisuusolio::$VIRHE) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muutostallennus_lapsimuutos_eiok); } } else { $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt); } } } } return $tallennus; }
/** * Lisää tarkistuksia esimerkiksi liittyen tunnuksiin. Palauttaa samat * arvot kuin Malliluokkapohjan metodikin. Virheen sattuessa ilmoitukset * virheilmoituksissa. * * Huomaa, että salasana koodaus tehdään vasta tarkistuksen jälkeen, jotta * tarkistus on mahdollinen. Tämä tosin aiheutti melkein aika ilkeän * virheen, jonka onneksi testiohjelma huomasi... */ public function tallenna_muutokset() { // Tarkistetaan ennen tallennuksen yrittämistä. $uusi_olio = false; if ($this->on_tallennuskelpoinen($uusi_olio)) { // Jos kaikki kunnossa, koodataan tarvittaessa salasana ja tallennetaan: if ($this->tunnusten_muokkaus === Tunnukset::$kumpikin || $this->tunnusten_muokkaus === Tunnukset::$vain_salis) { $koodattu = md5($this->get_arvo(Henkilo::$sarakenimi_salasana)); $this->set_arvo($koodattu, Henkilo::$sarakenimi_salasana); } $tallennuspalaute = parent::tallenna_muutokset(); } else { $tallennuspalaute = Henkilo::$VIRHE; // Tämä oli ilkeä: virheellinen arvo aiheutti sen, että // salasana jäi koodaamattomaan muotoon, ja jos heti perään // muokattiin olion jotakin muuta kuin tunnusta, livahti // tietokantaan salasana selväkielisenä! Kannatti testata... // Pitää siis koodata täällä myös! if ($this->tunnusten_muokkaus === Tunnukset::$kumpikin || $this->tunnusten_muokkaus === Tunnukset::$vain_salis) { $koodattu = md5($this->get_arvo(Henkilo::$sarakenimi_salasana)); $this->set_arvo($koodattu, Henkilo::$sarakenimi_salasana); } } return $tallennuspalaute; }