/** * Tyhjentää tietokannasta testihenkilöt ja lisävaltuudet (jotka * poistuvat cascade-ominaisuuden vuoksi testihenkilön mukana tietokannasta). */ public function tee_loppusiivous() { $this->lisaa_kommentti("======================== SIIVOUS ALKAA ======================="); $poisto_lkm = $this->tietokantaolio->poista_kaikki_rivit("henkilot", Henkilo::$sarakenimi_syntymavuosi, Kayttajatestaus::$testi_svuosi); // Poistetaan testikokonaisuus, jonka poisto poistaa siihen liittyvät // tehtävät ja ratkaisut: if ($this->testikokonaisuus instanceof Kokonaisuusolio) { $poisto_kokon = $this->testikokonaisuus->poista(); if ($poisto_kokon == Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $poisto_kokon_lkm = 1; } else { $poisto_kokon_lkm = 0; } } else { $poisto_kokon_lkm = 0; } // Poistetaan testiratkaisut: $poisto_lkm_ratkaisut = $this->tietokantaolio->poista_kaikki_rivit("Ratkaisut", "ratkaisu", Kayttajatestaus::$testi_ratkaisu); if ($poisto_lkm_ratkaisut == 0) { $poisto_kommentti_ratkaisut = ""; // Kaikki kunnossa: } else { $poisto_kommentti_ratkaisut = "Virhe: ratkaisuja poistettu" . $poisto_lkm_ratkaisut . " kpl, vaikka piti poistua itse!"; } // Yritetään vielä poistaa testilisävaltuudet, joita ei pitäisi löytyä: $poisto_lkm_valtuudet = $this->tietokantaolio->poista_kaikki_rivit("Lisavaltuudet", Lisavaltuudet::$sarakenimi_henkilo_id, $this->testihenkilo->get_id()); if ($poisto_lkm_valtuudet == 0) { $this->lisaa_kommentti("Siivous suoritettu onnistuneesti. \n Poistettu " . $poisto_lkm . " henkilöä" . " ja " . $poisto_kokon_lkm . " kokonaisuutta. " . " Lisävaltuudet poistettu automaattisesti. " . $poisto_kommentti_ratkaisut); } else { $this->lisaa_virheilmoitus("Virhe siivouksessa! \n Poistettu " . $poisto_lkm . " henkilöä" . " ja " . $poisto_lkm_ratkaisut . " ratkaisua, mutta " . "myös " . $poisto_lkm_ratkaisut . " lisävaltuutta," . " vaikka niiden pitäisi itsestään poistua!"); } $this->lisaa_kommentti("======================== SIIVOUS TEHTY ========================"); }
/** * 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; }
/** * 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 ========"); }