/** * Toteuttaa koosteen elementtiryhmän näyttämisen sekä normaalisti että * tulostusnäkymässä. Näkymätyylin päättää parametrina annettavan * palauteolion naytettava_oliotyyppi-muuttujan arvo. * * Näytössä noudatetaan koosteen näkyvyyttä, eli jos oikeus on nähdä * kooste, voi samalla nähdä elementtiryhmänkin (tai ainakin ne elementit, * joihin katseluoikeus vähintään). * * HUOM: Elementin näkyvyysasetuksen vaikutusta ei ole otettu täällä huomioon. * Se pitää korjata esim. niin, että yksityinen elementti ei näy muille * kuin tekijälle. Lisävaltuuksiahan ei koosteelle tai elementille voi * antaa (mikä lienee tässä vaiheessa selkeämpää erityisesti elementin * kohdalla). Koosteissa lienee järkevämpi kloonata kuin antaa mahdollisuus * monen muokata. Voi miettiä toki. * * @param Palaute $palauteolio */ public function toteuta_nayta_elementtiryhma(&$palauteolio) { // Tarkistetaan ja asetetaan naytettävä oliotyyppi: if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_ELEMRYHMA_TULOSTUS) { $tulostusnaytto = true; } else { $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_ELEMRYHMA); $tulostusnaytto = false; } $html = ""; $nakymapainikkeet = ""; // tulostusnäkymä ja ratkaisujen näyttö $muokkauspainike = ""; $paluu_koosteeseen_painike = ""; $muokkauspainikedivi = ""; $elemryhmapainikkeet = ""; $linkit = ""; $painikkeet = ""; $koostekoodi = ""; $omaid = $this->get_parametriolio()->get_omaid() + 0; $param = $this->get_parametriolio(); $tietokantaolio = $this->get_tietokantaolio(); // Haetaan ensin elementtiryhmä ja sen avulla kooste: $elemryhma = new Elementtiryhma($param->elemryhma_id, $tietokantaolio); $kooste_id = $elemryhma->get_arvo(Elementtiryhma::$sarakenimi_kooste_id); $kooste = new Kooste($kooste_id, $tietokantaolio); if ($kooste->olio_loytyi_tietokannasta && $elemryhma->olio_loytyi_tietokannasta) { $viittausoliot_ok = array(); $elementit_ok = array(); // Tarkistetaan, onko käyttäjällä edes oikeuksia nähdä koostetta: /*======================== käyttäjän oikeudet ========*/ $kohdeoikeudet_kooste = $kooste->hae_kayttajan_oikeudet($omaid); /*====================================================*/ // Luodaan muokkauspainikkeet, jos käyttäjällä on muokkausoikeudet: if ($kohdeoikeudet_kooste >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { $muokkauspainike = $this->koostenakymat->luo_elemryhman_muokkauspainike($elemryhma); } // Jos riittävät oikeudet, näytetään ja muuten ei. if ($kohdeoikeudet_kooste >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) { $nakymapainikkeet = " " . $this->koostenakymat->luo_tulostusnayttopainike($kooste, $elemryhma) . " " . $this->koostenakymat->luo_koosteen_ratkaisunayttopainikkeet("elemtehtavan_ratkaisut"); $paluu_koosteeseen_painike = " " . $this->koostenakymat->luo_paluu_koosteeseen_nayttopainike($kooste); // Luodaan sitten mahdolliset elementtiryhmäpainikkeet // toiminnon mukaisin oikeustarkistuksin (koostenäkymissä..): // Harkitaan, tarvitaanko! /*$elemryhmat = $kooste->hae_elementtiryhmat(); $elemryhma_current = $elemryhma; $elemryhmapainikkeet = $this->koostenakymat-> luo_elemryhmapainiketaulukko($elemryhmat, $elemryhma_current, $kooste, $kohdeoikeudet_kooste);*/ //============================================================= // Kerätään ne elementit ja oliot, jotka näytetään käyttäjälle. // Sisältö saadaan metodista "luo_koosteen_elementtiosa". $elementit = $elemryhma->hae_elementit(); $divi_mukaan = true; $all_elements = false; $html = $this->luo_koosteen_elementtiosa($kooste, $omaid, $elementit, $divi_mukaan, $all_elements, $viittausoliot_ok, $elementit_ok); $muokkauspainikedivi = Html::luo_div($muokkauspainike . $paluu_koosteeseen_painike, array(Attr::classs("keskitys"), Attr::id("koostepainikerivi"))); } else { // Ellei oikeuksia koosteen (ei myöskään eryhmän) katselemiseen. $html = Html::luo_otsikko(Tekstit::$kooste_ilm_nayttoon_ei_oikeuksia, array(), 4); } $koostekoodi = $this->koostenakymat->nayta_elementtiryhma($muokkauspainikedivi . $elemryhmapainikkeet . $html, $elemryhma); $kooste_id = $kooste->get_id(); // Nykyinen kooste. // Linkit: $wrapped = true; $linkit = $this->luo_koostelinkit($kooste, $elementit_ok, $viittausoliot_ok, $wrapped); } else { $palauteolio->set_ilmoitus(Tekstit::$elementtiryhma_ei_loytynyt . " " . Tekstit::$or . " " . Tekstit::$kooste_koostetta_ei_loytynyt); } $painikkeet = $this->get_koostenakymat()->nayta_painike_paluu_kokonaisuuksiin() . $this->get_koostenakymat()->nayta_painike_paluu_koosteisiin($kooste_id) . $nakymapainikkeet; $palauteolio->set_sisalto($koostekoodi); $palauteolio->set_linkkihtml($painikkeet . "<br/><br/>" . $linkit); /*$palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_fixed);*/ $palauteolio->set_nayttotapa(Html_koodi::$sidenav_fixed); $palauteolio->set_valikkonaytto(false); }
/** * * @param Palaute $palauteolio * @param Parametrit $parametriolio * @param Koostekontrolleri $koostekontrolleri * @param Tehtavakontrolleri $tehtavakontrolleri * @param Ratkaisukontrolleri $ratkaisukontrolleri * @param Kokonaisuuskontrolleri $kokonaisuuskontrolleri */ function nayta_urlin_mukaan(&$palauteolio, &$parametriolio, &$koostekontrolleri, &$tehtavakontrolleri, &$ratkaisukontrolleri, &$kokonaisuuskontrolleri) { $palauteolio->set_oma(Yleiset_arvot::$toimintaa_ei_maaritelty); $palauteolio->set_naytto_urlin_mukaan(true); // Mietittävää: kielen, oppiaineen ja tason määritykset voisi laittaa // toteuta-metodeiden sisälle, jottei niitä tarvita roskaamaan urlia. // Lähinnä koosteiden kohdalla pitää // miettiä, koska tällä hetkellä kaikki näkyy kaikille, eli siis // niiden näkyvyyttä ei ole rajoitettu kielen, oppiaineen tai tason // perusteella. Mahdollisesti kielen perusteella näin voisi tehdäkin, // vaikka muut jättäisi ennalleen. // Huomaa myös, että urlissa voi olla pelkästään kielen, aineen ja // tason arvot, jolloin pitäisi osata näyttää ensimmäinen vastaava // kokonaisuus. // Otetaan kuitenkin parametrinolion arvo mukaan [, jos se on jokin muu // oletus "kokonaisuus"] (esim kun urlin perusteella tullaan): //if($parametriolio->naytettava != Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS){ $palauteolio->set_naytettava_oliotyyppi(Oliotyyppi::muunna_palauteolion_arvoksi($parametriolio->naytettava)); //} // Alla pitäisi riittää palauteolion arvo. Se ohjaa nykyisin // näytettävää oliota. Muu-arvo (vähän kuin ei-määr) viittaa siihen, // ettei url määritä näytettävää oliota, joten pitää "arvata" se muuten. if ($palauteolio->get_naytettava_oliotyyppi() != Palaute::$NAYTETTAVA_OLIOTYYPPI_MUU) { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA) { $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio); } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU) { $ratkaisukontrolleri->toteuta_nayta($palauteolio); } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE) { // Haetaan kooste kieltä, tasoa ja oppiainetta varten: $kooste = $koostekontrolleri->get_olio(); if ($kooste->olio_loytyi_tietokannasta) { $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli); $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine); $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso); // Kokonaisuusarvot ohjaavat eniten sovellusta: aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio); Kielet::kaanna($kieli); $koostekontrolleri->toteuta_nayta($palauteolio); } else { $koostekontrolleri->toteuta_nayta_koosteet($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa); } } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_TULOSTUS) { $koostekontrolleri->toteuta_nayta_tulostus($palauteolio); } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_ELEMRYHMA) { // Haetaan kooste kieltä, tasoa ja oppiainetta varten: $kooste = $koostekontrolleri->get_olio(); if ($kooste->olio_loytyi_tietokannasta) { $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli); $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine); $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso); // Kokonaisuusarvot ohjaavat eniten sovellusta: aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio); Kielet::kaanna($kieli); $koostekontrolleri->toteuta_nayta($palauteolio); } else { $koostekontrolleri->toteuta_nayta_koosteet($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa); } } else { // default: $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); } } } } } //====================================================================== //====================================================================== // Kun näytettävää oliota ei urlissa, tarkistetaan mahdolliset // id-arvot. Jos jokin määritelty, mennään sinne sitten! } else { // Tarkistetaan, onko kooste-id:tä: if ($parametriolio->kooste_id != Kooste::$MUUTTUJAA_EI_MAARITELTY || $parametriolio->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $nayta_kooste = true; if ($parametriolio->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $nayta_kooste = false; } // Haetaan kooste kieltä, tasoa ja oppiainetta varten: // Huomaa, että ei välttämättä Kooste-olio! $kooste = $koostekontrolleri->get_olio(); if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) { $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli); $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine); $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso); // Kokonaisuusarvot ohjaavat eniten sovellusta: aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio); Kielet::kaanna($kieli); // NÄytetään joko kooste tai elementtiryhmä: if ($nayta_kooste) { $koostekontrolleri->toteuta_nayta($palauteolio); } else { $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio); } } else { $koostekontrolleri->toteuta_nayta_koosteet($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa); } // Huomaa järjestys: ensin tarkistetaan ratkaisu, sitten teht ja // vasta lopuksi kokonaisuus (jonka id tahtoo kummitella muistissa). } else { if ($parametriolio->id_teht != Tehtava::$MUUTTUJAA_EI_MAARITELTY) { // Näytetään yksi tehtävä: $tehtavakontrolleri->toteuta_nayta($palauteolio); } else { if ($parametriolio->id_ratk != Ratkaisu::$MUUTTUJAA_EI_MAARITELTY) { $ratkaisukontrolleri->toteuta_nayta($palauteolio); } else { if ($parametriolio->id_kokon != Kokonaisuusolio::$kokon_ei_maaritelty) { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); // Ellei näytettävää oliota, viedään oppiaineen mukaisesti: } else { if ($parametriolio->oppiaine_kokon != Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY) { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); } else { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); } } } } } } }