/**
  * Toteuttaa lomakkeen näytön sekä muokkausta että uuden luomista varten.
  * @return Palaute $palauteolio
  */
 function toteuta_nayta_kokonaisuuslomake(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $palauteolio = new Palaute();
     $lomakkeen_naytto_ok = false;
     // Näytetäänkö lomaketta vai ei.
     $ilmoitus = "";
     $sisalto = "";
     // Tulossa koosteesta? Tarkistetaan:
     $elem_id = $parametriolio->elementti_id;
     $elem = Elementti::$MUUTTUJAA_EI_MAARITELTY;
     $elem_kandi = new Elementti($elem_id, $this->get_tietokantaolio());
     if ($elem_kandi->olio_loytyi_tietokannasta) {
         $elem = $elem_kandi;
     }
     $elemryhma_id = $parametriolio->elemryhma_id;
     $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY;
     $elemryhma_kandi = new Elementtiryhma($elemryhma_id, $this->get_tietokantaolio());
     if ($elemryhma_kandi->olio_loytyi_tietokannasta) {
         $elemryhma = $elemryhma_kandi;
     }
     // Tätä tarvitaan, ellei muokkauslomakkeeseen syystä tai toisesta mennä:
     $perunappi = Html::luo_forminput_painike(array(), array(Attr::name(Toimintonimet::$kokonaisuustoiminto), Attr::value(Painikkeet::$PERU_KOKON_MUUTOSTEN_TALLENNUS_VALUE)));
     /* Näytetään lomake, jonka avulla voi luoda uuden kokonaisuuden: */
     $omaid = $parametriolio->get_omaid();
     if ($parametriolio->get_uusi()) {
         $ilmoitus = "";
         $palauteolio->set_valikkonaytto(false);
         $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
         $lomakkeen_naytto_ok = true;
     } else {
         // Vanhan muokkaus: tällöin lukitus on tärkeä!
         $id_muokattava = $parametriolio->id_kokon;
         $muokattava = new Kokonaisuusolio($id_muokattava, $this->get_tietokantaolio());
         if ($muokattava->olio_loytyi_tietokannasta) {
             $lukitusarvo = $muokattava->getLukitus();
             //===================== LUKITUS ================================
             // Jos lukitus päällä, ei päästetä muokkaamaan!
             if (is_numeric($lukitusarvo) && $lukitusarvo != Kokonaisuusolio::$LUKITUS_OFF && $lukitusarvo != $omaid) {
                 $ilmoitus = Tekstit::$virheilm_kokonaisuus_lukittu_muokkaus_eiok;
                 $sisalto = Tekstit::$virheilm_kokonaisuus_lukittu_muokkaus_eiok;
                 $sisalto .= $perunappi;
             } else {
                 // Kun ei lukittu vieraalle:
                 // Lukitaan kokonaisuus, ettei kukaan muu pääse samaan aikaan
                 // muokkaamaan samaa kokonaisuutta:
                 $lukon_tila = Kokonaisuusolio::$LUKITUS_ON;
                 $lukitus = $muokattava->aseta_kokonaisuuden_lukitus($omaid, $lukon_tila);
                 /* Ilmoitus, ellei lukitus jostakin syystä onnistunut: */
                 if ($lukitus != Kokonaisuusolio::$OPERAATIO_ONNISTUI) {
                     $ilmoitus = " " . Tekstit::$virheilm_kokonaisuuden_lukitus_eiok;
                     $sisalto = " " . Tekstit::$virheilm_kokonaisuuden_lukitus_eiok . "<br/>" . $muokattava->tulosta_virheilmoitukset() . "<br/> omaid=" . $omaid . ", nyk lukon tila=" . $lukitusarvo . " ja haluttu_lukon_tila=" . $lukon_tila;
                     $sisalto .= "<br/>" . $perunappi;
                 } else {
                     $lomakkeen_naytto_ok = true;
                 }
             }
             $sisalto = $sisalto . "<br/> " . $muokattava->tulosta_kaikki_ilmoitukset() . "<br/>";
         } else {
             // Oliota ei löytynyt tietokannasta:
             $sisalto = Tekstit::$ilm_kokon_ei_loytynyt . $perunappi;
         }
     }
     //======================================================================
     if ($lomakkeen_naytto_ok) {
         $sisalto = $this->kokonaisuusnakymat->nayta_kokonaisuuslomake($parametriolio->id_kokon, $omaid, $parametriolio->uusi, $parametriolio->ilmoitus_kokon, $parametriolio->get_tietokantaolio(), $parametriolio->oppiaine_kokon, $parametriolio->otsikko_kokon, $parametriolio->tiivis_kokon, $parametriolio->selitys_kokon, $parametriolio->taso_kokon, $parametriolio->jarjestysnro_kokon, $parametriolio->laajennetun_id_kokon, $parametriolio->ylakokonaisuuden_id_kokon, $parametriolio->kieli_id, $parametriolio->nakyvyys_kokon, Toimintonimet::$kokonaisuustoiminto, $this, $parametriolio->kaavakieli, $elem, $elemryhma);
     }
     $palauteolio->set_sisalto($sisalto);
     $palauteolio->set_valikkonaytto(false);
     $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
     $palauteolio->set_ilmoitus($ilmoitus);
     $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_levea);
     return $palauteolio;
 }