/** * 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; } }