/**
  * Toteuttaa kokonaisuudessaan uuden kokonaisuuden tallennuksen tietokantaan.
  * Palauttaa Palauteolio-luokan olion.
  *
  * Järjestysluvuksi kokonaisuus saa id:n. Järjestyslukua voi myöhemmin
  * muuttaa vaihtamalla jonkin toisen kokonaisuuden kanssa, jolloin ei pitäisi
  * tulla päällekkäisyyksiä.
  *
  * @return <type>
  */
 function toteuta_tallenna_uusi(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $tallennuskesken = $parametriolio->tallennuskesken;
     $omaid = $parametriolio->get_omaid();
     $oppiaine_kokon = $parametriolio->get_oppiaine_kokon();
     $otsikko_kokon = $parametriolio->get_otsikko_kokon();
     $tiivis_kokon = $parametriolio->get_tiivis_kokon();
     $selitys_kokon = $parametriolio->get_selitys_kokon();
     $taso_kokon = $parametriolio->get_taso_kokon();
     $laajennetun_id_kokon = $parametriolio->get_laajennetun_id_kokon();
     $kieli_id = $parametriolio->get_kieli_id();
     $ylakokonaisuuden_id_kokon = $parametriolio->get_ylakokonaisuuden_id_kokon();
     $jarjestysnro_kokon = $parametriolio->get_jarjestysnro_kokon();
     $nakyvyys_kokon = $parametriolio->nakyvyys_kokon;
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $palauteolio = new Palaute();
     $linkit = "";
     // Kokonaisuuslinkit
     $sisalto = "";
     $ilmoitus = "";
     $tallennetun_id = "";
     $valikot_nayta = true;
     $kokonaisuusoliot = array();
     $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_YLEINEN);
     // Tallennettava kokonaisuus:
     $kokonaisuus = new Kokonaisuusolio(Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY, $this->get_tietokantaolio());
     // Lisätään kokonaisuudelle saadut parametrit:
     $kokonaisuus->set_arvo($omaid, Kokonaisuusolio::$sarakenimi_henkilo_id);
     $kokonaisuus->set_arvo($otsikko_kokon, Kokonaisuusolio::$sarakenimi_otsikko);
     $kokonaisuus->set_arvo($tiivis_kokon, Kokonaisuusolio::$sarakenimi_tiivis);
     $kokonaisuus->set_arvo($selitys_kokon, Kokonaisuusolio::$sarakenimi_selitys);
     $kokonaisuus->set_arvo($taso_kokon, Kokonaisuusolio::$sarakenimi_taso);
     $kokonaisuus->set_arvo($oppiaine_kokon, Kokonaisuusolio::$sarakenimi_oppiaine);
     $kokonaisuus->set_arvo($laajennetun_id_kokon, Kokonaisuusolio::$sarakenimi_laajennetun_id);
     $kokonaisuus->set_arvo($kieli_id, Kokonaisuusolio::$sarakenimi_kieli);
     $kokonaisuus->set_arvo($ylakokonaisuuden_id_kokon, Kokonaisuusolio::$sarakenimi_ylakokonaisuuden_id);
     $kokonaisuus->set_arvo($nakyvyys_kokon, Kokonaisuusolio::$sarakenimi_nakyvyys);
     // Tallennus tietokantaan:
     $palaute = $kokonaisuus->tallenna_uusi();
     // Jos tiedoissa on vikaa, esim. tyhjä otsikko:
     if ($palaute != Kokonaisuusolio::$OPERAATIO_ONNISTUI) {
         $valikot_nayta = false;
         $ilmoitus_kokon = $kokonaisuus->tulosta_virheilmoitukset();
         $uusi = true;
         $id_kokon = -1;
         $sisalto = $this->kokonaisuusnakymat->nayta_kokonaisuuslomake($id_kokon, $omaid, $uusi, $ilmoitus_kokon, $tietokantaolio, $oppiaine_kokon, $otsikko_kokon, $tiivis_kokon, $selitys_kokon, $taso_kokon, $jarjestysnro_kokon, $laajennetun_id_kokon, $ylakokonaisuuden_id_kokon, $kieli_id, $nakyvyys_kokon, Toimintonimet::$kokonaisuustoiminto, $this, $parametriolio->kaavakieli, Elementti::$MUUTTUJAA_EI_MAARITELTY, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY);
         $ilmoitus = $ilmoitus_kokon;
     } else {
         $tallennetun_id = $kokonaisuus->get_id_tietokanta();
         /* Asetetaan järjestysluku samaksi kuin kokonaisuuden id. Näin
          * varmistetaan se, ettei tule samoja. */
         $id = $kokonaisuus->get_id();
         $kokonaisuus->set_arvo($id, Kokonaisuusolio::$sarakenimi_jarjestysnro);
         $onnistuiko = $kokonaisuus->tallenna_muutokset();
         if ($onnistuiko == Kokonaisuusolio::$OPERAATIO_ONNISTUI) {
             $ilmoitus = Tekstit::$ilm_kokon_lisays_ok;
             //Aktiivisuusmerkintä:
             $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$UUDEN_KOKONAISUUDEN_TALLENNUS);
             if (!$aktiivisuuspalaute) {
                 $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok);
             } else {
                 $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
             }
         } else {
             $ilmoitus = Tekstit::$virheilm_kokon_tallennus_ok_jarjnro_eiok . " " . $kokonaisuus->tulosta_virheilmoitukset();
         }
         //=================================================================
         // Asetetaan sessiomuuttujat oikein, jotta näkyy myös
         // luettelossa. Yläkokonaisuus auki (sillä on ainakin yksi lapsi,
         // tämä) ja tämä kiinni (tällä ei voi olla lapsia, koska juuri luotu).
         $muuttujanimi_ylakok = Parametrit::linkkisessiomuuttujan_nimi($ylakokonaisuuden_id_kokon);
         $_SESSION[$muuttujanimi_ylakok] = Kokonaisuusolio::$LINKKI_AUKI;
         $muuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($tallennetun_id);
         $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_KIINNI;
         //=================================================================
         $parametriolio->id_kokon = $id;
         $palauteolio2 = new Palaute();
         if ($tallennuskesken) {
             $parametriolio->uusi = false;
             $this->toteuta_nayta_kokonaisuuslomake($palauteolio2);
         } else {
             $palauteolio2 = $this->toteuta_nayta($palauteolio2);
         }
         $sisalto = $palauteolio2->get_sisalto();
         $linkit = $palauteolio2->get_linkkihtml();
     }
     $palauteolio->set_ilmoitus($ilmoitus);
     $palauteolio->set_sisalto($sisalto);
     $palauteolio->set_muokatun_id($tallennetun_id);
     $palauteolio->set_valikkonaytto($valikot_nayta);
     $palauteolio->set_kokonaisuudet($kokonaisuusoliot);
     $palauteolio->nayta_kiintolinkit();
     $palauteolio->set_linkkihtml($linkit);
     $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS);
     return $palauteolio;
 }