/**
  * 
  * @param Palaute $palauteolio
  */
 public function toteuta_tallenna_muokkaus(&$palauteolio)
 {
     $jluku = 0;
     // ekan elementin järjestysluku.
     $param = $this->get_parametriolio();
     $tietokantaolio = $this->get_tietokantaolio();
     $id = $param->kooste_id;
     $muokattava = new Kooste($id, $this->get_tietokantaolio());
     // Sijoitetaan saadut arvot oliolle:
     $muokattava->set_arvo($param->get_omaid(), Kooste::$sarakenimi_henkilo_id);
     $muokattava->set_arvo($param->oppiaine_kokon, Kooste::$sarakenimi_oppiaine);
     $muokattava->set_arvo($param->taso_kokon, Kooste::$sarakenimi_taso);
     $muokattava->set_arvo($param->kooste_nakyvyys, Kooste::$sarakenimi_nakyvyys);
     $muokattava->set_arvo($param->kooste_nimi, Kooste::$sarakenimi_nimi);
     $muokattava->set_arvo($param->kooste_otsikko, Kooste::$sarakenimi_otsikko);
     $muokattava->set_arvo($param->kooste_selitys, Kooste::$sarakenimi_selitys);
     $muokattava->set_arvo($param->kooste_tyyppi, Kooste::$sarakenimi_tyyppi);
     // Organisaatiotunnus jätetään tyhjäksi, ellei määritelty (ei pakollinen):
     if ($param->kooste_org === Kooste::$MUUTTUJAA_EI_MAARITELTY) {
         $param->kooste_org = "";
     }
     $muokattava->set_arvo($param->kooste_org, Kooste::$sarakenimi_organisaatio);
     $tallennus = $muokattava->tallenna_muutokset();
     $this->set_olio($muokattava);
     // Jos tallennus ok tai sitten koosteen perustietoja ei muutettu, käydään
     // läpi mahdolliset muutokset elementeissä.
     if ($tallennus === Kooste::$OPERAATIO_ONNISTUI || $muokattava->tulosta_viimeisin_virheilmoitus() === Perustustekstit::$ilm_tiedoissa_ei_muutoksia) {
         // Tallennetaan sitten elementit, jotka valittu tähän koosteeseen ja
         // jotka eivät ennestään kuulu koosteeseen. Toisaalta pitää myös
         // poistaa ne elementit, joiden valinta on poistettu, ja jotka aiemmin
         // ovat kuuluneet koosteeseen.
         $entiset_elem = $muokattava->hae_elementit();
         $elem_valinnat = $param->kooste_elementtivalinnat;
         // Pitää muistaa, että tehtävillä valinta-arvo on "teht_X", missä
         // X viittaa id-arvoon. Kokonaisuuksilla pelkkä id. Ratkaisuilla
         // arvo on vastaavasti "ratk_X", vaikka ratkaisuja ei vielä tallennetakaan.
         $virheilm = "";
         $laskuri = 0;
         $muokkauslaskuri = 0;
         // Laskee vanhojen elem järjestyslukumuokkaukset.
         foreach ($elem_valinnat as $id) {
             $jluku++;
             $tallennus_elem = $muokattava->aseta_jluku_ja_tallenna_elementti_jos_uusi($id, true, $jluku);
             if ($tallennus_elem === Elementti::$OPERAATIO_ONNISTUI) {
                 $laskuri++;
             } else {
                 if ($tallennus_elem === Tekstit::$kooste_ilm_elem_jo_koosteessa) {
                     $muokkauslaskuri++;
                 } else {
                     if ($tallennus_elem != Tekstit::$kooste_ilm_elem_jo_koosteessa) {
                         $virheilm .= "<br/>" . $tallennus_elem;
                     }
                 }
             }
         }
         // Poistetaan elementit, joiden valinta poistettu:
         $poistettujen_lkm = $muokattava->poista_elementit_joiden_valinta_poistettu($elem_valinnat);
         // Tarkistus: vanhat - poistetut + tallennetut =? valinnat
         // ja toisaalta uudet+muokatut=?valitut
         if (sizeof($entiset_elem) + $laskuri - $poistettujen_lkm + 0 === sizeof($elem_valinnat) && $laskuri + $muokkauslaskuri === sizeof($elem_valinnat)) {
             $this->toteuta_nayta($palauteolio);
             $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
             $palauteolio->set_ilmoitus(Tekstit::$kooste_ilm_muokkaustallennus_ok . ": " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . " ja " . $poistettujen_lkm . " " . Tekstit::$kooste_ilm_elem_poistettu . "<br/> " . Tekstit::$kooste_ilm_Elementteja_yhteensa . sizeof($elem_valinnat));
         } else {
             $this->toteuta_nayta_koostelomake($palauteolio);
             $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_TALLENNUS);
             $virheilm .= " " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . " " . Tekstit::$ja . " " . $poistettujen_lkm . " " . Tekstit::$kooste_ilm_elem_poistettu . " " . "<br/> " . Tekstit::$kooste_ilm_Valintoja_yhteensa . sizeof($elem_valinnat) . "<br/> " . $muokkauslaskuri . " " . Tekstit::$kooste_ilm_elem_jlukua_muokattu . $muokattava->tulosta_virheilmoitukset();
             $palauteolio->set_ilmoitus(Tekstit::$kooste_virheilm_elementtien_tallennus . $virheilm);
         }
     } else {
         // Koosteen tallennus ei onnistunut
         $this->toteuta_nayta_koostelomake($palauteolio);
         $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_TALLENNUS);
         $palauteolio->set_ilmoitus(Tekstit::$kooste_virheilm_tallennus . $muokattava->tulosta_virheilmoitukset());
     }
 }