/**
  * Palauttaa koosteen divin (class="kooste_elementti") Html-koodin kaikkine
  * sisältöineen (kokonaisuudet, tehtävät ja ratkaisut). Jos $divi_mukaan-
  * parametrin arvo on true, on sisältö kääritty yllä mainittuun
  * "kooste_elementti"-diviin. Muuten palautetaan vain sisältö ilman
  * käärediviä (esim. kun ajax-kutsulla haetaan elementit).
  * 
  * Mukaan otetaan vain sisällöt, joihin käyttäjällä on vähintään
  * katseluoikeus, eli käyttöoikeudet tarkistetaan elementeiltä ja 
  * erityisesti niiden viittausolioilta.
  * 
  * @param Kooste $kooste
  * @param int $omaid
  * @param array $elementit
  * @param bool $divi_mukaan
  * @param bool $all_elements jos true, niin näytetään kaikki koosteen
  * elementit, jolloin järjestysmuutokset sallitaan. Muuten kysymys on
  * elementtiryhmän näyttämisestä, jolloin ei järjestystä anneta muuttaa
  * sekaannusvaaran vuoksi.
  * @param array $viittausoliot_ok Aluksi tyhjä taulukko, johon lisätään
  * ne sopivasti muokatut oliot, joihin käyttäjällä ainakin näkemisoikeus.
  * Viittausolioita samoin kuin elementit_ok-elementtejä kun tarvitaan
  * linkkien teossa..
  * @param  $elementit_ok Aluksi tyhjä taulukko, johon lisätään
  * ne sopivasti muokatut oliot, joihin käyttäjällä ainakin näkemisoikeus.
  * @return type
  */
 public function luo_koosteen_elementtiosa($kooste, $omaid, $elementit, $divi_mukaan, $all_elements, &$viittausoliot_ok, &$elementit_ok)
 {
     // Ratkaisukontrollerissa on valmiina ratkaisujen näyttöoikeusseulonta.
     $ratkaisukontrolleri = new Ratkaisukontrolleri($this->get_tietokantaolio(), $this->get_parametriolio());
     // Tarkistetaan koosteen käyttöoikeudet:
     /*======================== käyttäjän oikeudet ========*/
     $kohdeoikeudet_kooste = $kooste->hae_kayttajan_oikeudet($omaid);
     // Laskurit otsikkonumerointia varten:
     $laskuri_kokon = 0;
     $laskuri_teht = 0;
     $laskuri_ratk = 0;
     foreach ($elementit as $elementti) {
         if ($elementti instanceof Elementti) {
             // Pieni hankaluus: miten jos elementin näkyvyys on
             // julkinen ja viittausolion yksityinen? Nyt ei näytetä,
             // mutta pitäisikö elementin näkyvyys mennä viittausolion
             // yli? Yksi ratkaisu on, että elementin nakyvyys-
             // arvo voi estää näyttämisen, muttei pakottaa näyttämään.
             // HUOM! Tällä hetkellä elementin näkyvyys ei vaikuta
             // mitenkään (ei sitä voi muuttaakaan missäään)!
             $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) {
                 $viittausolio = $elementti->hae_viittausolio();
                 // Poikkeuksellisesti Kokonaisuus-luokan olion kohdalla
                 // käyttöoikeudet tarkistetaan myös Kokonaisuusnakymat-
                 // luokan metodissa. Mutta ei sillä väliä täällä niin.
                 if ($viittausolio instanceof Kokonaisuusolio) {
                     $laskuri_kokon++;
                     $viittausolio->setOtsikkomerkinta($laskuri_kokon . ". ");
                     // Otetaan talteen linkkejä varten:
                     array_push($viittausoliot_ok, $viittausolio);
                     array_push($elementit_ok, $elementti);
                 } else {
                     if ($viittausolio instanceof Tehtava) {
                         $laskuri_teht++;
                         $viittausolio->setOtsikkomerkinta(Tekstit::$Tehtava_short . $laskuri_teht);
                         // Otetaan talteen linkkejä varten:
                         array_push($viittausoliot_ok, $viittausolio);
                         array_push($elementit_ok, $elementti);
                         // Ratkaisut haetaan eri tavalla nykyään.
                     } else {
                         // Viittausoliossa jotakin kummaa.
                     }
                 }
             }
         }
     }
     // Lisätään jokaiseen elementtiin edellisen ja seuraavan id:t:
     $this->lisaa_ed_seur_idt_elementteihin($elementit_ok);
     // Järjestysmuutos sallitaan vain, jos haetaan koosteen kaikki
     // elementit. Jos vain osaa katsellaan (elementtiryhmä), ei järjestystä
     // voi muuttaa sekaannusten välttämiseksi.
     if ($all_elements) {
         $this->lisaa_elemjarjestysmuutospainikkeet_otsikoihin($elementit_ok, $viittausoliot_ok, $kooste, $kohdeoikeudet_kooste);
     }
     $elem_sisallot = $this->hae_elementtien_sisalto($elementit_ok, $viittausoliot_ok, $this->get_parametriolio(), $kohdeoikeudet_kooste, $ratkaisukontrolleri);
     if ($divi_mukaan) {
         $divi = Html::luo_div($elem_sisallot, array(Attr::id(Koostenakymat::$kooste_elementti_id)));
         return $divi;
     } else {
         return $elem_sisallot;
     }
 }