/** * Testaa sitä, pysyykö kokonaisuuden on_lapsia-arvo mukana, kun * lapsikokonaisuus luodaan, poistetaan tai sen isäntää muutetaan. Lisäksi * testaa, antaako metodi on_lapsia_kokon()-metodi oikeat arvot. * */ function testaa_kokon_on_lapsia_muutokset() { $this->lisaa_lihava_kommentti("============ Testataan on_lapsia-arvon muutokset =================="); // Tarkistetaan on_lapsia-arvot kokonaisuuksilta kokon2 ja kokon3, // joilla siis ei pitäisi olla lapsia. Tarkistetaan samalla, että // funktion on_lapsia_kokon() antaa oikean vastauksen. // Huom! Näissä === ei toiminut! if ($this->kokon2 instanceof Kokonaisuusolio) { if ($this->kokon2->getOn_lapsia() == 0 && $this->kokon3->getOn_lapsia() == 0 && !$this->kokon3->on_lapsia_kokon()) { $this->lisaa_kommentti("Oikein! Kokon2 ja kokon3 ovat lapsettomia!" . " Lisäksi on_lapsia_kokon()-metodi antaa oikean vastauksen!"); } else { $this->lisaa_virheilmoitus("Virhe kokon2:n tai kokon3:n " . "on_lapsia-arvossa tai on_lapsia_kokon()-metodin arvossa!" . " Kokon2_on_lapsia=" . $this->kokon2->getOn_lapsia() . " ja kokon3_on_lapsia=" . $this->kokon3->getOn_lapsia()); } } else { $this->lisaa_virheilmoitus("Virhe kokon2 ei ole Kokonaisuusolio!"); } // Lisätään uusi kokonaisuus, jonka isäntä on kokon3: $ylakokon_id = $this->kokon3->get_id(); $palauteolio = $this->luo_testikokonaisuus("Huu", "Haa", $ylakokon_id); $testilapsikokon = new Kokonaisuusolio($palauteolio->get_muokatun_id(), $this->tietokantaolio); if ($testilapsikokon->olio_loytyi_tietokannasta) { $this->lisaa_kommentti("Testilapsikokonaisuuden tallennus ok!"); // Tarkistetaan, että on_lapsia-arvo on muuttunut kokon3:lla ja // on_lapsia_kokon näyttää positiivista: // Päivitetään ensin arvot tietokannasta: $this->kokon3->paivita_olion_tiedot_tietokannasta(); if ($this->kokon3->getOn_lapsia() == 1 && $this->kokon3->on_lapsia_kokon()) { $this->lisaa_kommentti("Oikein! kokon3:n lapsiarvo=1 ja " . "on_lapsia_kokon()-metodi palaute true!"); } else { $this->lisaa_virheilmoitus("Virhe kokon3:n on_lapsia-arvossa! (=" . $this->kokon3->getOn_lapsia() . ") tai " . "on_lapsia_kokon()-metodin palautteessa"); } // Muutetaan isäntä kokon2:seen: $this->lisaa_kommentti("Vaihdetaan isäntä kokon2:seen."); $uusi_isanta_id = $this->kokon2->get_id(); $testilapsikokon->setYlakokonaisuuden_id($uusi_isanta_id); $testilapsikokon->tallenna_muutokset(); // Tarkistetaan, että on_lapsia-arvot kohdillaan entisessä // ja uudessa isännässä: $this->lisaa_kommentti("Tarkistetaan, onko on-lapsia arvot " . " kohdallaan kokon2:ssa ja kokon3:ssa."); $this->kokon2->paivita_olion_tiedot_tietokannasta(); $this->kokon3->paivita_olion_tiedot_tietokannasta(); if ($this->kokon2->getOn_lapsia() == 1 && $this->kokon3->getOn_lapsia() == 0) { $this->lisaa_kommentti("Oikein! Kokon3 on lapseton ja kokon2 ei!"); } else { $this->lisaa_virheilmoitus("Virhe kokon2:n tai kokon3:n " . "on_lapsia-arvossa! Kokon2_on_lapsia=" . $this->kokon2->getOn_lapsia() . " ja kokon3_on_lapsia=" . $this->kokon3->getOn_lapsia()); } // Tehdään vielä poisto ja tarkistetaan isännän lapsettomuus: $this->lisaa_kommentti("Poistetaan testilapsi, jolloin kokon2:n" . " pitäisi taas olla lapseton:"); $testilapsikokon->poista(); $this->kokon2->paivita_olion_tiedot_tietokannasta(); if ($this->kokon2->getOn_lapsia() == 0) { $this->lisaa_kommentti("Oikein! Kokon2 on taas lapseton!"); } else { $this->lisaa_virheilmoitus("Virhe kokon2:n " . "on_lapsia-arvossa! Kokon2_on_lapsia=" . $this->kokon2->getOn_lapsia()); } } else { $this->lisaa_virheilmoitus("Virhe testilapsikokonaisuuden tallennuksessa!"); } $this->lisaa_lihava_kommentti("============ Loppuu on_lapsia-arvon muutosten testaus ========"); }
/** * 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; }