/** * Tallentaa arvot tietokantaan eli muuttaa jo olemassaolevaa tietokantariviä. * Se, onko arvoja muutettu, tarkistetaan ensin, eikä tallennukseen mennä, * ellei vähintään yhtä arvoa ole muutettu (id:tä ei lasketa). Samalla * tarkistetaan myös, että olio ylipäätään on tietokannassa. * * Virhetilanteessa lähetetään ilmoituksiin kuvaus, joka on suoraan * näytettävissä käyttäjälle. * * Palauttaa onnistumisen * mukaan joko ::$OPERAATIO_ONNISTUI tai ::$VIRHE. Viimeksi * mainitussa tapauksessa kannattaa tarkistaa tarkemmat kommentit olion * virheilmoituksista. * * @return type */ public function tallenna_muutokset() { $palaute = Malliluokkapohja::$VIRHE; $max_muutosrivilkm = 1; // Luodaan uusi, koska id:llä voi periaatteessa olla muutettu arvo! $tietokantasoluehto = new Tietokantasolu(Malliluokkapohja::$SARAKENIMI_ID, Tietokantasolu::$mj_tyhja_EI_ok); // Otetaan varmasti oikea id mukaan: $tietokantasoluehto->set_arvo_kevyt($this->id_tietokanta); if ($tietokantasoluehto instanceof Tietokantasolu) { // Haetaan vertailuolio (Tietokantarivi) tietokannasta, johon // tämän olion tietokantarivin arvoja voidaan // verrata ja muutokset huomata. Huomaa, että seuraava toimii vain, // ellei alkuperäinen id ole muuttunut! Siksi erillinen muuttuja // "id_tietokanta", jota ei voi muuttaa! $on_muutoksia = false; $alkup_tietokantarivi = $this->hae_tietokantarivi_tietokannasta($this->id_tietokanta); $arvot_kunnossa = true; // Vain true päästää tallentamaan. // Ellei tietoja löydy tai niitä ei ole muokattu (id:tä ei lasketa), // tai jos muokattu on ei-määritelty, // ei yritetä tallentaa, vaan heitetään virheilmoitus. if ($alkup_tietokantarivi instanceof Tietokantarivi) { foreach ($alkup_tietokantarivi->get_tietokantasolut() as $solu) { if ($solu instanceof Tietokantasolu && $solu->get_sarakenimi() != Malliluokkapohja::$SARAKENIMI_ID) { // Haetaan tietokantasolu, jota on voitu muokata: $mahd_muokattu_solu = $this->get_tietokantasolu($solu->get_sarakenimi()); // Jos havaitaan kunnollinen muokkaus, palautetaan true. if ($mahd_muokattu_solu->tiedot_ok() && $solu->get_arvo() != $mahd_muokattu_solu->get_arvo()) { $on_muutoksia = true; $mahd_muokattu_solu->set_on_muokattu(true); } else { if (!$mahd_muokattu_solu->tiedot_ok()) { // Arvo saa olla määrittelemätön, muttei väärä! if ($mahd_muokattu_solu->get_arvo() == Pohja::$ARVO_VAARANTYYPPINEN) { $arvot_kunnossa = false; $this->lisaa_virheilmoitus($mahd_muokattu_solu->get_sarakenimi() . Perustustekstit::$muuttujan_arvo_vaarantyyppinen); // Tyhjä silloin kun ei sallittu: } else { if ($mahd_muokattu_solu->get_arvo() == Pohja::$ARVO_TYHJA) { $arvot_kunnossa = false; $this->lisaa_virheilmoitus($mahd_muokattu_solu->get_sarakenimi() . Perustustekstit::$muuttujan_arvo_tyhja); } } } else { // Arvoa ei muutettu, eli ei tarvitse sitä tallentaa. $mahd_muokattu_solu->set_on_muokattu(false); } } } } if ($on_muutoksia && $arvot_kunnossa) { $tallennuspalaute = $this->tietokantaolio->update_rivi($this->tietokantarivi, $tietokantasoluehto, $max_muutosrivilkm); // Jos onnistui: if ($tallennuspalaute === Tietokantaolio::$HAKU_ONNISTUI) { $palaute = Malliluokkapohja::$OPERAATIO_ONNISTUI; // Tämä on tärkeä, jotta olio vastaa todellisuutta: $this->paivita_olion_tiedot_tietokannasta(); //========= testausta ================================== $this->lisaa_kommentti($this->tietokantaolio->tulosta_kaikki_ilmoitukset()); //========= testausta ================================== } else { $this->lisaa_virheilmoitus(Perustustekstit::$malliluokkapohja_virheilm_muutostallennuksen_tietokantavirhe . " " . $this->tietokantarivi->toString()); //echo $this->tietokantaolio->tulosta_virheilmoitukset(); } } else { if (!$arvot_kunnossa) { $this->lisaa_virheilmoitus(Perustustekstit::$Tietoja_ei_tallennettu); } else { // Käyttäjälle asti tuleva ilmoitus -> käännösmahdollisuus: $this->lisaa_virheilmoitus(Perustustekstit::$ilm_tiedoissa_ei_muutoksia); } // Varmuuden vuoksi palautetaan id:n arvo oikeaksi, // jos joku törppö on yrittänyt muuttaa (muut arvot ovat // vanhoja): $this->set_id($this->get_id_tietokanta()); } } else { $this->lisaa_virheilmoitus(Perustustekstit::$ilm_tietoja_ei_tietokannassa); } } else { $this->lisaa_virheilmoitus("Virhe muokkaustallennuksessa: " . "id-tietokantasolua ei löytynyt!"); } return $palaute; }