/**
  * Toteuttaa ratkaisun muokkauksen tallentamisen. Parametrina annettavan 
  * Palaute-luokan olion kautta välitetään myös tulokset (&-merkki!),
  * tarpeelliset tiedot toiminnon onnistumisesta yms.
  *
  * @param Palaute $palauteolio
  */
 function toteuta_tallenna_muokkaus(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $id_kokon = $parametriolio->id_kokon;
     $id_teht = $parametriolio->id_teht;
     $id_ratk = $parametriolio->id_ratk;
     $omaid = $parametriolio->get_omaid();
     $vastaus_ratk = $parametriolio->vastaus_ratk;
     $ratkaisu_ratk = $parametriolio->ratkaisu_ratk;
     $nakyvyys = $parametriolio->nakyvyys_ratk;
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $kayttajan_valtuudet = $parametriolio->get_valtuudet();
     if (Henkilo::on_kirjautunut($omaid, $tietokantaolio)) {
         $muokattava = new Ratkaisu($id_ratk, $tietokantaolio);
         if ($muokattava->olio_loytyi_tietokannasta) {
             $muokattava->set_arvo(time(), Ratkaisu::$sarakenimi_ed_muutos_sek);
             $muokattava->setRatkaisu($ratkaisu_ratk);
             $muokattava->setVastaus($vastaus_ratk);
             $muokattava->setNakyvyys($nakyvyys);
             $palaute = $muokattava->tallenna_muutokset();
             if ($palaute === Ratkaisu::$OPERAATIO_ONNISTUI) {
                 // Aktiivisuusmerkintä:
                 $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$RATKAISUN_MUUTOSTEN_TALLENNUS);
                 if (!$aktiivisuuspalaute) {
                     $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok);
                 } else {
                     $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
                 }
                 // Otetaan selville, tuleekö käyttäjä koosteesta vai
                 // kokonaisuuksista ja näytetään vastaava juttu:
                 $elem_id = $parametriolio->elementti_id;
                 if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
                     $elem = new Elementti($elem_id, $tietokantaolio);
                     if ($elem->olio_loytyi_tietokannasta) {
                         $parametriolio->kooste_id = $elem->get_arvo(Elementti::$sarakenimi_kooste_id);
                     }
                     $koostekontr = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio);
                     $koostekontr->toteuta_nayta($palauteolio);
                     // JOtta palataan varmasti samaan elementtiin:
                     $palauteolio->set_muokatun_id($parametriolio->elementti_id);
                 } else {
                     $this->toteuta_nayta($palauteolio);
                     $palauteolio->set_muokatun_id($id_ratk);
                 }
                 $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_ilm_tallennus_uusi_ok . "<br/>" . $this->tulosta_virheilmoitukset());
             } else {
                 $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_virheilm_tallennus_uusi_eiok . "<br/>" . $this->tulosta_virheilmoitukset() . "<br/>" . $muokattava->tulosta_virheilmoitukset());
                 $lomake = $this->ratkaisunakymat->nayta_ratkaisulomake($parametriolio);
                 $palauteolio->set_sisalto($lomake);
             }
         } else {
             // Ellei muokattavaa löytynyt:
             $this->toteuta_nayta($palauteolio);
             $this->lisaa_virheilmoitus(Tekstit::$ratkaisu_virheilm_muokattavaa_ei_loytynyt);
             $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_TALLENNUS);
             $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset());
         }
     } else {
         // Täällä sessio on vanhentunut:
         $this->lisaa_virheilmoitus(Kayttajatekstit::$ilmoitus_sessio_vanhentunut);
         $this->toteuta_nayta($palauteolio);
         $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset());
     }
     $palauteolio->set_valikkonaytto(false);
     return $palauteolio;
 }