示例#1
0
 /**
  * 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);
 }
示例#2
0
/**
 * 
 * @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);
                        }
                    }
                }
            }
        }
    }
}