/**
  * Toteuttaa yhden koosteen tai elementtiryhmän näyttämisen tulostusmuodossa.
  * @param Palaute $palauteolio
  */
 public function toteuta_nayta_tulostus(&$palauteolio)
 {
     $html = "";
     $nayta_elementtiryhma = false;
     $elementtiryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY;
     $param = $this->get_parametriolio();
     $tietokantaolio = $this->get_tietokantaolio();
     // Tämä toimii jos joko id_kooste tai id_elemryhma on määritelty
     // parametreissa.
     $kooste = $this->get_olio();
     // Haetaan mahdollinen elementtiryhmä:
     if ($param->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) {
         $elemryhma_id = $param->elemryhma_id;
         $elementtiryhma_cand = new Elementtiryhma($elemryhma_id, $tietokantaolio);
         if ($elementtiryhma_cand->olio_loytyi_tietokannasta) {
             $nayta_elementtiryhma = true;
             $elementtiryhma = $elementtiryhma_cand;
         }
     }
     $omaid = $this->get_parametriolio()->get_omaid() + 0;
     // Ratkaisukontrollerissa on valmiina ratkaisujen näyttöoikeusseulonta.
     $ratkaisukontrolleri = new Ratkaisukontrolleri($this->get_tietokantaolio(), $this->get_parametriolio());
     $tehtavalaskuri = 0;
     $elemryhmapainikkeet = "";
     if ($kooste instanceof Kooste) {
         // Tarkistetaan, onko käyttäjällä edes oikeuksia nähdä koostetta:
         /*======================== käyttäjän oikeudet ========*/
         $kohdeoikeudet_kooste = $kooste->hae_kayttajan_oikeudet($omaid);
         /*====================================================*/
         // Jos riittävät oikeudet, näytetään ja muuten ei.
         if ($kohdeoikeudet_kooste >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) {
             if ($nayta_elementtiryhma) {
                 $elementit = $elementtiryhma->hae_elementit();
             } else {
                 $elementit = $kooste->hae_elementit();
             }
             // Laskurit otsikkonumerointia varten:
             $laskuri_kokon = 0;
             $laskuri_teht = 0;
             $laskuri_ratk = 0;
             foreach ($elementit as $elementti) {
                 if ($elementti instanceof Elementti) {
                     // Kerätään tähän yhden elementin koodi:
                     $elem_html = "";
                     $viittausolio = $elementti->hae_viittausolio();
                     $kohdeoikeudet = $elementti->hae_kayttajan_oikeudet_viittausolioon($omaid) + 0;
                     $minimioikeus = Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA;
                     // Jos vähintään näkeminen sallittu:
                     if ($kohdeoikeudet >= $minimioikeus) {
                         if ($viittausolio instanceof Kokonaisuusolio) {
                             $laskuri_kokon++;
                             $viittausolio->setOtsikkomerkinta($laskuri_kokon . ": ");
                             // Selitys_auki pitää asettaa elementin
                             // tallennettavaksi ominaisuudeksi tms, jotta
                             // sitä voi säätää. Nyt vain ei  näytetä.
                             //$selitys_auki = true;
                             $selitys_auki = false;
                             $elem_html .= $this->get_kokonaisuusnakymat()->luo_koostenakyma_tulostus($elementti, $viittausolio, $this->get_parametriolio(), $selitys_auki, $kohdeoikeudet);
                         } else {
                             if ($viittausolio instanceof Tehtava) {
                                 $laskuri_teht++;
                                 $id_teht = $viittausolio->getId();
                                 $viittausolio->setOtsikkomerkinta(Tekstit::$Tehtava . " " . $laskuri_teht);
                                 $painikkeet = "";
                                 $elem_html .= $this->get_tehtavanakymat()->luo_koostenakyma_tulostus($elementti, $viittausolio, $painikkeet);
                                 // Haetaan tehtävän ratkaisut ja liitetään
                                 // tehtävään mukaan:
                                 $ratkaisut = $ratkaisukontrolleri->hae_ratkaisut($id_teht);
                                 $this->merkitse_ratkaisujen_otsikkonumerot($ratkaisut, $viittausolio);
                                 $elem_html .= $this->luo_tehtavan_ratkaisut_koodi($ratkaisut, true, $omaid, $elementti);
                             } else {
                                 // Viittausoliossa jotakin kummaa.
                             }
                         }
                         $html .= Html::luo_div($elem_html, array(Attr::classs("kooste_elementti_tulostus")));
                     }
                 }
             }
             $koostekoodi = $this->koostenakymat->nayta_tulostusnakyma(Html::luo_div($html, array(Attr::id(Koostenakymat::$kooste_elementti_id))), $kooste, $elementtiryhma);
         } else {
             // Ellei oikeuksia koosteen katselemiseen.
             $koostekoodi = Html::luo_otsikko(Tekstit::$kooste_ilm_nayttoon_ei_oikeuksia, array(), 4);
         }
     }
     $kooste_id = $kooste->get_id();
     // Nykyinen kooste.
     $painikkeet = $this->get_koostenakymat()->luo_paluu_tulostusnaytosta_painike($kooste, $elementtiryhma) . $this->get_koostenakymat()->luo_koosteen_ratkaisunayttopainikkeet("elemtehtavan_ratkaisut_tulostus") . $elemryhmapainikkeet;
     $palauteolio->set_sisalto($koostekoodi);
     $palauteolio->set_linkkihtml($painikkeet);
     $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_TULOSTUS);
     $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_tulostus);
 }