/** * Toteuttaa kokonaisuuden muokkauksen tallentamisen. Erityisesti käyttäjän * tekemät muutokset kokonaisuuteen kulkevat aina tämän metodin kautta, * lukuunottamatta näkyvyyttä ja lukitusta. * * Huomaa, ettei lukitusta tai käyttöoikeuksia tarkisteta täällä. Ne * tarkistetaan Kayttajakontrolleri-luokan metodeilla kokonaisuuden * tulostuksen (ruudulle) yhteydessä, jolloin vain asianmukaisille * käyttäjille annetaan painikkeet muokkausta tai poistoa varten. * * Joitakin ominaisuuksia ei voi muuttaa täällä: * luomishetki_sek - ei muuteta * ed_muutos_sek - automaattinen * näkyvyys - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa) * on_lapsia - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa) * lukitus - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa) * jarjestysluku - arvoja ei aseteta täällä (oma metodi Kokonaisuuskontrollerissa) * kieli_id - arvoa ei aseteta täällä. * taso - ei muuteta * oppiaine - ei muuteta. * * Lukitus poistetaan oliolta onnistuneen operaation päätteeksi. * * @param Palaute $palauteolio */ function toteuta_tallenna_muokkaus(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $ilmoitus = ""; // Tarkistuksessa putsataan vain riskimerkit. $parametriolio->set_uusi(false); $omaid = $parametriolio->get_omaid(); $otsikko_kokon = $parametriolio->get_otsikko_kokon(); $tiivis_kokon = $parametriolio->get_tiivis_kokon(); $selitys_kokon = $parametriolio->get_selitys_kokon(); $laajennetun_id_kokon = $parametriolio->get_laajennetun_id_kokon(); $ylakokonaisuuden_id_kokon = $parametriolio->get_ylakokonaisuuden_id_kokon(); $nakyvyys_kokon = $parametriolio->nakyvyys_kokon; $muutettavan_kokon_id = $parametriolio->id_kokon; $virhekoodi = Palaute::$VIRHEKOODI_KAIKKI_OK; // Haetaan kokonaisuuden omistaja, jotta voidaan tarkistaa: $vanha_kokon = $this->get_olio(); if ($vanha_kokon instanceof Kokonaisuusolio && $vanha_kokon->olio_loytyi_tietokannasta) { $muutettavan_kokon_luojan_id = $vanha_kokon->getHenkiloId(); } else { $muutettavan_kokon_luojan_id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY; } //============== Tarkistetaan, onko käyttäjä vielä oikeasti online // ja valtuudet kunnossa: ====== $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($muutettavan_kokon_luojan_id, $omaid, Oliotyyppi::$KOKONAISUUS, $muutettavan_kokon_id, $this->get_tietokantaolio()); /*====================================================================*/ //====================================================================== // Muokattava aolio: $muokattava = new Kokonaisuusolio($muutettavan_kokon_id, $this->get_tietokantaolio()); if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { if ($muokattava->olio_loytyi_tietokannasta) { $palauteolio->set_virhekoodi($virhekoodi); // Lisätään kokonaisuudelle saadut mahdollisesti muutettavat parametrit // (vain ne, joita ylipäätään voidaan muuttaa): $muokattava->set_arvo($otsikko_kokon, Kokonaisuusolio::$sarakenimi_otsikko); $muokattava->set_arvo($tiivis_kokon, Kokonaisuusolio::$sarakenimi_tiivis); $muokattava->set_arvo($selitys_kokon, Kokonaisuusolio::$sarakenimi_selitys); $muokattava->set_arvo($laajennetun_id_kokon, Kokonaisuusolio::$sarakenimi_laajennetun_id); $muokattava->set_arvo($ylakokonaisuuden_id_kokon, Kokonaisuusolio::$sarakenimi_ylakokonaisuuden_id); $muokattava->set_arvo($nakyvyys_kokon, Kokonaisuusolio::$sarakenimi_nakyvyys); // Tallennus tietokantaan: $palaute = $muokattava->tallenna_muutokset(); // Jos tiedoissa on vikaa, esim. tyhjä otsikko: if ($palaute != Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $this->get_parametriolio()->set_ilmoitus_kokon($muokattava->tulosta_virheilmoitukset()); $this->lisaa_virheilmoitus($muokattava->tulosta_virheilmoitukset()); $this->toteuta_nayta_kokonaisuuslomake($palauteolio); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_YLEINEN); $ilmoitus .= Tekstit::$ilm_kokon_muokkaustallennus_eiok; } else { // Kaikki kunnossa. $ilmoitus = " "; /* Poistetaan kokonaisuuden lukitus: */ $lukon_tila = Kokonaisuusolio::$LUKITUS_OFF; $lukituksen_avaus = $muokattava->aseta_kokonaisuuden_lukitus($parametriolio->get_omaid(), $lukon_tila); /* Ilmoitus, ellei lukitus jostakin syystä onnistunut: */ if ($lukituksen_avaus != Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $ilmoitus .= " " . Tekstit::$virheilm_kokonaisuuden_lukituksen_avaus_eiok . $muokattava->tulosta_virheilmoitukset(); $virhekoodi = Palaute::$VIRHEKOODI_LUKITUS_KOKONAISUUDET; } else { $ilmoitus = Tekstit::$ilm_kokon_muokkaustallennus_ok; //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $this->get_tietokantaolio(), time(), Aktiivisuus::$KOKONAISUUDEN_MUUTOSTEN_TALLENNUS); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } } // Huom: täällä hämäävästi käyttöön tulee uusi palauteolio, jolloin // esim aiemmat virhekoodin asetukset eivät voimassa. if ($parametriolio->tallennuskesken) { $parametriolio->uusi = false; $this->toteuta_nayta_kokonaisuuslomake($palauteolio); } else { // Otetaan selville, tuleekö käyttäjä koosteesta vai // kokonaisuuksista ja näytetään vastaava juttu: $parametriolio = $this->get_parametriolio(); $elem_id = $parametriolio->elementti_id; $elemryhma_id = $parametriolio->elemryhma_id; // Tarkistetaan, mistä ollaan tulossa ja minne menossa: $koostekontrolleri = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio); if ($elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio); $palauteolio->set_muokatun_id($elem_id); } else { if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $koostekontrolleri->toteuta_nayta($palauteolio); $palauteolio->set_muokatun_id($elem_id); } else { $this->toteuta_nayta($palauteolio); $palauteolio->set_muokatun_id($muutettavan_kokon_id); } } } // Tämän pitää olla vasta täällä (ks. ylempi kommentti). $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); // Lisätään mahdollinen lukitusvirhekoodi if ($virhekoodi != Palaute::$VIRHEKOODI_KAIKKI_OK) { $palauteolio->set_virhekoodi($virhekoodi); $ilmoitus .= Tekstit::$ilm_kokon_muokkaustallennus_eiok . ": " . $virhekoodi; } } } else { $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt); } } else { // Kun sessio loppunut tai muuten väärä muokkaaja: $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muok_ei_valtuuksia); $this->toteuta_nayta($palauteolio); } $palauteolio->set_ilmoitus($ilmoitus . "<br/>" . $this->tulosta_virheilmoitukset()); 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 ========"); }