Пример #1
0
 /**
  * Palauttaa koostelomakkeen koodin. Jos $kooste-parametri on 
  * Kooste-luokan alkio, on kysymys vanhan muokkaamisesta, muuten 
  * uuden koosteen luomisesta.
  * @param type $kooste
  * @param Parametrit $parametrit
  * @param string $elementit Mahdolliset elementit tai niiden otsikot
  * @param string $valitut Valittujen olioiden tiedot html-koodina.
  */
 public function nayta_lomake($kooste, $parametrit, $elementit, $valitut)
 {
     $sisalto = "";
     $nimi = "";
     $selitys = "";
     $osaset = "";
     $tekstikentan_lev = 55;
     $tekstiruudun_lev = 57;
     $uuden_luominen = true;
     // Asetetaan mahdolliset vanhat arvot kohdilleen:
     if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) {
         $uuden_luominen = false;
         // Perustiedot:
         $kooste_taso = $kooste->get_arvo(Kooste::$sarakenimi_taso);
         $kooste_oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine);
         $kooste_kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli);
         // Valittavien oletusvalinnat:
         $valittavat_taso = $kooste_taso;
         $valittavat_oppiaine = $kooste_oppiaine;
         $valittavat_kieli = $kooste_kieli;
         $koostetyyppi = $kooste->get_arvo(Kooste::$sarakenimi_tyyppi);
         $nakyvyys = $kooste->get_arvo(Kooste::$sarakenimi_nakyvyys);
         $lomakeotsikko = Html::luo_otsikko(Tekstit::$kooste_lomakeotsikko_muokkaus, array(), 1);
         // Alla ovat tärkeitä, jotta esim. JS-koodi toimii, eikä
         // ala kehittämään mitään ylimääräistä muokatessa.
         $nimi = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_nimi)), ENT_QUOTES, "UTF-8", true);
         $kooste_id = $kooste->get_id();
         // Aattelin, että jos on tyhjä ... pitäisi tarkistaa, meneekö näin.
         if ($selitys === Kooste::$MUUTTUJAA_EI_MAARITELTY) {
             $selitys = "";
         } else {
             $selitys = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_selitys)), ENT_QUOTES, "UTF-8", true);
         }
         $koosteotsikko = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_otsikko)), ENT_QUOTES, "UTF-8", true);
         $organisaatiotunnus = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_organisaatio)), ENT_QUOTES, "UTF-8", true);
     } else {
         // Uusi kooste
         $kooste_taso = $parametrit->taso_kokon;
         $kooste_oppiaine = $parametrit->oppiaine_kokon;
         $kooste_kieli = $parametrit->kieli_id;
         $valittavat_taso = $parametrit->taso_kokon;
         $valittavat_oppiaine = $parametrit->oppiaine_kokon;
         $valittavat_kieli = $parametrit->kieli_id;
         $koostetyyppi = $parametrit->kooste_tyyppi;
         $nakyvyys = $parametrit->kooste_nakyvyys;
         // Uusi kooste:
         if ($nakyvyys === Kooste::$MUUTTUJAA_EI_MAARITELTY) {
             $nakyvyys = Nakyvyys::$YKSITYINEN;
         }
         $lomakeotsikko = Html::luo_otsikko(Tekstit::$kooste_lomakeotsikko_uusi, array(), 1);
         $nimi = $parametrit->kooste_nimi;
         $selitys = $parametrit->kooste_selitys;
         $koosteotsikko = $parametrit->kooste_otsikko;
         $organisaatiotunnus = $parametrit->kooste_org;
         $kooste_id = Kooste::$MUUTTUJAA_EI_MAARITELTY;
         // Arvo ei_maaritelty (-2) ei näytä kivalta, joten muutetaan se
         // tyhjäksi. Huomaa &, ilman sitä ei toimi..
         $syotteet = array(&$nimi, &$selitys, &$koosteotsikko, &$organisaatiotunnus);
         for ($i = 0; $i < sizeof($syotteet); $i++) {
             if ($syotteet[$i] == Kooste::$MUUTTUJAA_EI_MAARITELTY) {
                 $syotteet[$i] = "";
             }
         }
     }
     // Luodaan lomakkeen osat rivi kerrallaan (taulukkoasettelu):
     $nimirivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_nimikenttaid, Tekstit::$kooste_lomake_nimi . " *: ", array()), array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$kooste_name_nimi), Attr::size($tekstikentan_lev), Attr::max_length(100), Attr::id(Koostenakymat::$koostelomake_nimikenttaid), Attr::value($nimi))), array()), array(Attr::title(Tekstit::$kooste_lomake_nimi_title)));
     // rivi
     // Tyyppirivi (uusi hieno metodi Asetuspohjan avulla:
     $koostetyypit = new Koostetyypit();
     $select_maaritteet = array(Attr::name(Koostekontrolleri::$kooste_name_tyyppi));
     $option_maaritteet = array();
     $oletusvalinta_arvo = $koostetyyppi;
     $otsikko = "";
     // Asetetaan erikseen.
     $koostevalikko = $koostetyypit->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko);
     // Luodaan näkyvyysvalikko mukaan samalle riville:
     $nakyvyydet = new Perusnakyvyys();
     $select_maaritteet_nak = array(Attr::name(Koostekontrolleri::$kooste_name_nakyvyys));
     $option_maaritteet_nak = array();
     $otsikko_nak = Tekstit::$nakyvyys_valikko_otsikko;
     $nakyvyysvalikko = $nakyvyydet->luo_pudotusvalikko($select_maaritteet_nak, $option_maaritteet_nak, $nakyvyys, $otsikko_nak);
     $tyyppirivi = Html::luo_tablerivi(Html::luo_tablesolu(Tekstit::$kooste_lomake_tyyppi . ": ", array()) . Html::luo_tablesolu($koostevalikko . " " . $nakyvyysvalikko, array()), array());
     // Perustietorivi eli oppiaine, taso ja kieli:
     $valikko = $this->kokonaisuusnakymat->nayta_tasovalikko($kooste_taso) . " ";
     $valikko .= $this->kokonaisuusnakymat->nayta_oppiainevalikko($kooste_oppiaine) . " ";
     //$valikko .= $this->kokonaisuusnakymat->nayta_kielivalikko(
     //                $parametrit->kieli_id);
     $valikko .= ucfirst(Tekstit::$language) . ": " . Html::luo_b(Kielet::hae_kielen_nimi($kooste_kieli), array());
     $perustietorivi = Html::luo_tablerivi(Html::luo_tablesolu(Tekstit::$kooste_lomake_perustiedot . ": ", array()) . Html::luo_tablesolu($valikko, array()), array());
     // Organisaatiotunnusrivi:
     $organisaatiorivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_organkenttaid, Tekstit::$kooste_lomake_organisaatio . ": ", array(Attr::title(Tekstit::$kooste_lomake_organisaatio_title))), array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$kooste_name_organ_code), Attr::size($tekstikentan_lev), Attr::max_length(20), Attr::id(Koostenakymat::$koostelomake_organkenttaid), Attr::value($organisaatiotunnus))), array()), array());
     // rivi
     // Tulostettava otsikko -rivi:
     $otsikkorivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_tulost_ots_kenttaid, Tekstit::$kooste_lomake_otsikko . ": ", array()), array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$kooste_name_otsikko), Attr::size($tekstikentan_lev), Attr::max_length(200), Attr::id(Koostenakymat::$koostelomake_tulost_ots_kenttaid), Attr::value($koosteotsikko))), array()), array(Attr::title(Tekstit::$kooste_lomake_otsikko_title)));
     // rivi
     // Selitysrivi:
     $selitysrivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_selityskenttaid, Tekstit::$kooste_lomake_selitys . ": ", array()), array()) . Html::luo_tablesolu(Html::luo_textarea($selitys, array(Attr::name(Koostekontrolleri::$kooste_name_selitys), Attr::cols($tekstiruudun_lev), Attr::rows(9), Attr::id(Koostenakymat::$koostelomake_selityskenttaid))), array()), array(Attr::title(Tekstit::$kooste_lomake_selitys_title)));
     // rivi
     //
     // Ohje elementtien hakuun (väliteksti):
     $valiotsikko = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_b(Tekstit::$kooste_lomake_valiots_elementit, array()), array(Attr::colspan(2))), array());
     // rivi
     // Perusvalikot taso, oppiaine ja kieli elementtien etsintään:
     $tasotiedot = new Koulutasot();
     $oppiainetiedot = new Oppiaineet();
     $kielitiedot = new Kielet();
     // Lähetetään nämä, niin ei tartte js:ssä arvailla:
     $koostelomakevalinnat_oppiaine_name = Koostekontrolleri::$koostelom_elemval_oppiaine_name;
     $koostelomakevalinnat_kieli_name = Koostekontrolleri::$koostelom_elemval_kieli_name;
     $koostelomakevalinnat_taso_name = Koostekontrolleri::$koostelom_elemval_taso_name;
     // Osa arvoista on valikoille yhteiset, osa ei:
     $select_maaritteet_taso = array(Attr::onchange("hae_elementit", array(Koostenakymat::$koostelomake_tasovalikkoid, Koostenakymat::$koostelomake_oppiainevalikkoid, Koostenakymat::$koostelomake_kielivalikkoid, Koostekontrolleri::$kooste_name_id, $koostelomakevalinnat_kieli_name, $koostelomakevalinnat_oppiaine_name, $koostelomakevalinnat_taso_name, $kooste_id)), Attr::id(Koostenakymat::$koostelomake_tasovalikkoid));
     $select_maaritteet_oppiaine = array(Attr::onchange("hae_elementit", array(Koostenakymat::$koostelomake_tasovalikkoid, Koostenakymat::$koostelomake_oppiainevalikkoid, Koostenakymat::$koostelomake_kielivalikkoid, Koostekontrolleri::$kooste_name_id, $koostelomakevalinnat_kieli_name, $koostelomakevalinnat_oppiaine_name, $koostelomakevalinnat_taso_name, $kooste_id)), Attr::id(Koostenakymat::$koostelomake_oppiainevalikkoid));
     $select_maaritteet_kieli = array(Attr::onchange("hae_elementit", array(Koostenakymat::$koostelomake_tasovalikkoid, Koostenakymat::$koostelomake_oppiainevalikkoid, Koostenakymat::$koostelomake_kielivalikkoid, Koostekontrolleri::$kooste_name_id, $koostelomakevalinnat_kieli_name, $koostelomakevalinnat_oppiaine_name, $koostelomakevalinnat_taso_name, $kooste_id)), Attr::id(Koostenakymat::$koostelomake_kielivalikkoid));
     $option_maaritteet = array();
     $otsikko_tasot = Tekstit::$kokonlomake_koulutaso;
     $otsikko_aineet = Tekstit::$kokonlomake_oppiaine;
     $otsikko_kielet = Tekstit::$kielivalikko_otsikko;
     $tasovalikko = $tasotiedot->luo_pudotusvalikko($select_maaritteet_taso, $option_maaritteet, $valittavat_taso, $otsikko_tasot);
     $ainevalikko = $oppiainetiedot->luo_pudotusvalikko($select_maaritteet_oppiaine, $option_maaritteet, $valittavat_oppiaine, $otsikko_aineet);
     $kielivalikko = $kielitiedot->luo_pudotusvalikko($select_maaritteet_kieli, $option_maaritteet, $valittavat_kieli, $otsikko_kielet);
     $valikko = $tasovalikko . " " . $ainevalikko . " " . $kielivalikko;
     $valikkorivi = Html::luo_tablerivi(Html::luo_tablesolu($valikko, array(Attr::colspan(3))), array());
     // Huom: asetetaan valittavien taso, kieli ja oppiaine sessiotietoihin,
     // jotta ne muistetaan, ovat määriteltujä ja niihin päästään käsiksi
     // myöhemminkin:
     $sessiomuuttujanimi_taso = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_taso();
     $sessiomuuttujanimi_kieli = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_kieli();
     $sessiomuuttujanimi_oppiaine = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_oppiaine();
     $_SESSION[$sessiomuuttujanimi_taso] = $valittavat_taso;
     $_SESSION[$sessiomuuttujanimi_kieli] = $valittavat_kieli;
     $_SESSION[$sessiomuuttujanimi_oppiaine] = $valittavat_oppiaine;
     //======================================================================
     // Näytetään elementtilista ja mahdollisesti valitut elementit:
     $tyhja_taul = array();
     /*$elem = 
       Html::luo_tablerivi(
           Html::luo_tablesolu(    // solu 1
               Html::luo_table(    // Taulu solun 1 sisään
                   Html::luo_tablerivi(
                       Html::luo_tablesolu_otsikko(
                           Tekstit::$kooste_lomake_valittavat_elementit, 
                           $tyhja_taul
                       ).
                       Html::luo_tablesolu_otsikko(
                           Tekstit::$kooste_lomake_valitut_elementit, 
                           $tyhja_taul
                       ),
                       $tyhja_taul
                   ).
                   Html::luo_tablerivi(
                       Html::luo_tablesolu($elementit, $tyhja_taul).
                       Html::luo_tablesolu(
                           $valitut_koodi, 
                           array(
                               Maarite::id(
                                   Koostenakymat::$koostelomake_valitut_elem_id)
                           )),
                       $tyhja_taul // rivi
                   ),
                   $tyhja_taul // table inner
               ),   
               array(Maarite::colspan(3))  // solu 1
           ), 
           array()     // rivi
       );   */
     $elem = Html::luo_tablerivi(Html::luo_tablesolu_otsikko(Tekstit::$kooste_lomake_valittavat_elementit, array(Attr::colspan(2))), $tyhja_taul) . Html::luo_tablerivi(Html::luo_tablesolu($elementit, array(Attr::colspan(2))), array());
     //======================================================================
     // Luodaan vielä tallennuspainike:
     if ($uuden_luominen) {
         $painike_value = Painikkeet::$kooste_uuden_tallennus_value;
         $painike_title = Painikkeet::$kooste_uuden_tallennus_title;
         $form_action = "index.php";
     } else {
         $painike_value = Painikkeet::$kooste_muokkaustallennus_value;
         $painike_title = Painikkeet::$kooste_muokkaustallennus_title;
         $form_action = "index.php?" . Koostekontrolleri::$kooste_name_id . "=" . $kooste->get_id();
     }
     $tallennuspainike = Html::luo_input(array(Attr::type("submit"), Attr::value($painike_value), Attr::name(Toimintonimet::$koostetoiminto), Attr::title($painike_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary)));
     if ($uuden_luominen) {
         $paluupainike = "";
     } else {
         $paluupainike = $this->nayta_painike_paluu_koosteeseen($kooste->get_id(), Elementti::$MUUTTUJAA_EI_MAARITELTY);
     }
     $tallennuspainikerivi = Html::luo_tablerivi(Html::luo_tablesolu($tallennuspainike . " " . $paluupainike, array(Attr::colspan(3))), array());
     // rivi
     //======================================================================
     $taulukko = Html::luo_table($nimirivi . $tyyppirivi . $perustietorivi . $organisaatiorivi . $otsikkorivi . $selitysrivi . $tallennuspainikerivi . $valikkorivi . $elem, array());
     // Tehdään vielä vähän isommaksi, jotta valitut saadaan näkymään
     // oikealla kuten oikeassa palkissa (oikea palkki on hankala, koska
     // lomakkeen jakaminen sinne ei oikein onnistunut).
     $maar_array = array();
     $isotaulukko = Html::luo_table(Html::luo_tablerivi(Html::luo_tablesolu($taulukko, array()) . Html::luo_tablesolu($valitut, array(Attr::style("vertical-align: text-top;"))), $maar_array), array());
     $sisalto .= $lomakeotsikko . $isotaulukko;
     $koodi = Html::luo_form($sisalto, array(Attr::classs("koostelomake"), Attr::action($form_action), Attr::method("post"), Attr::onsubmit("tarkista_arvot_kooste", array(Koostenakymat::$koostelomake_nimikenttaid, Tekstit::$kooste_virheilm_syotevika))));
     return $koodi;
 }
Пример #2
0
 public function __construct($tietokantaolio)
 {
     $this->tietokantaolio = $tietokantaolio;
     $this->toiminta = $this->retrieve(Parametrit::$POST, Toimintonimet::$kokonaisuustoiminto, Parametrit::$UNDEFINED, "");
     // Ylläpito:
     $this->erikoistoiminta = $this->retrieve(Parametrit::$POST, Toimintonimet::$yllapitotoiminto, Parametrit::$UNDEFINED, "");
     $this->henkilotietotoiminto = $this->retrieve(Parametrit::$POST, Toimintonimet::$henkilotietotoiminto, Parametrit::$UNDEFINED, "");
     $this->kuvatoiminta = $this->retrieve(Parametrit::$REQ, Toimintonimet::$kuvatoiminto, Parametrit::$UNDEFINED, "");
     $this->tehtavatoiminto = $this->retrieve(Parametrit::$REQ, Toimintonimet::$tehtavatoiminto, Parametrit::$UNDEFINED, "");
     $this->lv_toiminto = $this->retrieve(Parametrit::$REQ, Toimintonimet::$lv_toiminto, Parametrit::$UNDEFINED, "");
     $this->koostetoiminto = $this->retrieve(Parametrit::$REQ, Toimintonimet::$koostetoiminto, Parametrit::$UNDEFINED, "");
     $this->palautustoiminto = $this->retrieve(Parametrit::$REQ, Toimintonimet::$palautustoiminto, Parametrit::$UNDEFINED, "");
     $this->naytto_urlin_mukaan = false;
     // Oletus näin, koska useimmin näin.
     // Yleisiä muuttujia:
     $this->valtuudet = Valtuudet::$KATSELU;
     // Oletus!
     $this->omaid = -1;
     // Oletus (tunnistautumaton käyttäjä)
     $this->nayta_kirjautunut = false;
     if (isset($_SESSION['tunnistus'])) {
         if ($_SESSION['tunnistus'] == 'kunnossa') {
             $this->nayta_kirjautunut = true;
             $this->valtuudet = $_SESSION['tiedot']->valtuudet;
             $this->omaid = $_SESSION['tiedot']->id;
         }
     }
     // Tämä voi olla kuka tahansa henkilö, ei välttämättä käyttäjä:
     // Alla ei-määritelty on sellainen id, ettei se osu yksiin esimerkiksi
     // ei-määritellyn omaid:n kanssa. Aikaisemmin sama ei-määritelty -arvo
     // saattoi avata reiän toimenpidekieltoon.
     $this->henkilo_id = $this->retrieve(Parametrit::$REQ, "henkilo_id", Parametrit::$UNDEFINED, Yleiset_arvot::$henkilo_id_ei_maaritelty);
     // Valintavalikot kielelle, koulutasolle ja aineelle. Kaikissa toiminnoissa
     // niitä ei ole järkevää näyttää.
     $this->nayta_valintavalikot = true;
     $this->valikot = "";
     $this->kokonaisuusryhman_vaihto = false;
     // Oletus
     // TARKISTETTAVA!
     // Selvitetään, onko kyseessä kokonaisuusryhmän vaihto. Sillä saattaa
     // olla merkitystä jossakin (tämän merkitys voisi olla hyvä tarkistaa).
     if (isset($_REQUEST['kieli_id'])) {
         if (isset($_SESSION['kieli_id']) && $_SESSION['kieli_id'] != $_REQUEST['kieli_id']) {
             // Tässä tapauksessa vanhat sessiotiedot vain hämäävät:
             $this->kokonaisuusryhman_vaihto = true;
         }
     } else {
         if (isset($_REQUEST['taso_kokon'])) {
             if (isset($_SESSION['taso_kokon']) && $_SESSION['taso_kokon'] != $_REQUEST['taso_kokon']) {
                 $this->kokonaisuusryhman_vaihto = true;
             }
         } else {
             if (isset($_REQUEST['oppiaine_kokon'])) {
                 if (isset($_SESSION['oppiaine_kokon']) && $_SESSION['oppiaine_kokon'] != $_REQUEST['oppiaine_kokon']) {
                     $this->kokonaisuusryhman_vaihto = true;
                 }
             }
         }
     }
     // Kieli saadaan $_REQUEST['kieli_id']-muuttujasta. Ellei se ole
     // määritelty, katsotaan session muistama ja ellei siellä mitään-> suomi:
     $this->kieli_id = $this->retrieve(Parametrit::$REQ_SES, "kieli_id", "kieli_id", Kielet::$SUOMI);
     // Kaavakieli saadaan $_REQUEST[Yleiset_arvot::$kaavakieli_name]-muuttujasta.
     // Ellei se ole määritelty, katsotaan session muistama ja ellei siellä
     // mitään-> oletus.
     // Tämä siis määrää, millä kielellä matemaattiset kaavat syötetään.
     $this->kaavakieli = $this->retrieve(Parametrit::$REQ_SES, Yleiset_arvot::$kaavakieli_name, Yleiset_arvot::$kaavakieli_name, Kaavakieli::$LaTeX);
     // Näytettävän olion tyyppi saadaan $_REQUEST[Oliotyyppi::$naytettava_name]-
     // muuttujasta.
     // Tämä siis määrää, millainen olio käyttäjälle näytetään (erityisesti
     // kun käyttäjä syöttää urlin vain ja näytettävä määritelty).
     // HUOM! Sessio pois käytöstä, ettei turhia muista!
     $this->naytettava = $this->retrieve(Parametrit::$REQ, Oliotyyppi::$naytettava_name, Oliotyyppi::$naytettava_name, Palaute::$NAYTETTAVA_OLIOTYYPPI_MUU);
     /*************** Kokonaisuuksiin liittyvät muuttujat: *********************/
     // Luodaan muuttuja, joka pitää sisällään tietokannasta haetut kokonaisuudet:
     $this->kokonaisuusoliot = array();
     // Tarvetta?
     // kokonaisuuksien_nayttotapa saadaan
     // $_REQUEST['kokonaisuuksien_nayttotapa']-muuttujasta. Ellei se ole
     // määritelty, katsotaan session muistama ja ellei siellä mitään,
     // näytetään oletuksena yksi kokonaisuus kerrallaan:
     $this->kokonaisuuksien_nayttotapa = $this->retrieve(Parametrit::$REQ_SES, Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayttotapa_name, Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayttotapa_name, Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayta_yksi_kerrallaan_arvo);
     $this->selitys_auki_id = Kokonaisuusolio::$SELITYS_KIINNI_ID;
     /* Tämä tiedottaa, käsitelläänkö (esim. kuvan lisäys) uutta vai vanhaa oliota.
      * Huom! Viimeisen muutoksen jälkeen kuvat lisätään kuitenkin aina vanhaan
      * olioon. Muuten menee hankalaksi perumisten kanssa. En muista, onko
      * tästä mistään iloa, mutta saahan tuo olla mahdollista tarvetta varten.
      */
     $this->uusi = $this->retrieve(Parametrit::$REQ, "uusi", Parametrit::$UNDEFINED, false);
     // Kokonaisuus_id on hyvä pitää muistissa vähän pysyvämmin. Tästä
     // on iloa, jos esimerkiksi käy tunnistautumassa välillä:
     $this->id_kokon = $this->retrieve(Parametrit::$REQ_SES, Kokonaisuuskontrolleri::$name_id_kokon, Kokonaisuuskontrolleri::$name_id_kokon, Kokonaisuusolio::$kokon_ei_maaritelty);
     $this->otsikko_kokon = $this->retrieve(Parametrit::$REQ, 'otsikko_kokon', Parametrit::$UNDEFINED, "");
     $this->tiivis_kokon = $this->retrieve(Parametrit::$REQ, 'tiivis_kokon', Parametrit::$UNDEFINED, "");
     $this->selitys_kokon = $this->retrieve(Parametrit::$REQ, 'selitys_kokon', Parametrit::$UNDEFINED, "");
     $this->jarjestysnro_kokon = $this->retrieve(Parametrit::$REQ, 'jarjestysnro_kokon', Parametrit::$UNDEFINED, -1);
     $this->laajennetun_id_kokon = $this->retrieve(Parametrit::$REQ, 'laajennetun_id_kokon', Parametrit::$UNDEFINED, -1);
     $this->ilmoitus_kokon = $this->retrieve(Parametrit::$REQ, 'ilmoitus_kokon', Parametrit::$UNDEFINED, "");
     $this->nakyvyys_kokon = $this->retrieve(Parametrit::$REQ, Kokonaisuuskontrolleri::$kokon_name_nakyvyys, Parametrit::$UNDEFINED, Nakyvyys::$YKSITYINEN);
     $this->ylakokonaisuuden_id_kokon = $this->retrieve(Parametrit::$REQ, 'ylakokonaisuuden_id_kokon', Parametrit::$UNDEFINED, -1);
     $this->ed_id_kokon = $this->retrieve(Parametrit::$REQ, 'ed_id_kokon', Parametrit::$UNDEFINED, Kokonaisuusolio::$kokon_edellista_ei_ole);
     $this->seur_id_kokon = $this->retrieve(Parametrit::$REQ, 'seur_id_kokon', Parametrit::$UNDEFINED, Kokonaisuusolio::$kokon_seuraavaa_ei_ole);
     // Tätä tarvitaan kokonaisuuden muutoksessa, jos yläkokonaisuutta
     // muutetaan. Tällöin pitää tarkistaa vanhan yläkokon lapsellisuus.
     $this->ylakokonaisuuden_id_vanha = $this->retrieve(Parametrit::$REQ, 'ylakokonaisuuden_id_vanha', Parametrit::$UNDEFINED, -1);
     // True (1), jos on kokonaisuuksia, jotka viittaavat tähän kokonaisuuteen
     //(ylakokonaisuuden_id).
     $this->on_lapsia_kokon = $this->retrieve(Parametrit::$REQ, 'on_lapsia_kokon', Parametrit::$UNDEFINED, "");
     // Taso saadaan $_REQUEST['taso_kokon']-muuttujasta. Ellei se ole
     // määritelty, katsotaan session muistama (pysyy mielessä silloin, kun
     // sitä ei muuteta!) ja ellei siellä mitään-> oletus:
     $this->taso_kokon = $this->retrieve(Parametrit::$REQ_SES, "taso_kokon", "taso_kokon", Koulutasot::$PERUSKOULU);
     // samoin oppiaine:
     $this->oppiaine_kokon = $this->retrieve(Parametrit::$REQ_SES, "oppiaine_kokon", "oppiaine_kokon", Oppiaineet::$MA);
     // True, jos siirto ylöspäin, false, jos alaspäin.
     $this->siirto_ylos = $this->retrieve(Parametrit::$REQ, 'siirto_ylos', Parametrit::$UNDEFINED, false);
     $this->tallennuskesken = false;
     // Oletus näin.
     /********************** kokonaisuustiedot loppu ***************************/
     /********************* koostetiedot alku ************************************/
     $this->kooste_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_id, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_henkilo_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_henkilo_id, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_kieli = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_kieli, Parametrit::$UNDEFINED, Kielet::$SUOMI);
     $this->kooste_nakyvyys = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_nakyvyys, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_nimi = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_nimi, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_oppiaine = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_oppiaine, Parametrit::$UNDEFINED, Oppiaineet::$MA);
     $this->kooste_tyyppi = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_tyyppi, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_otsikko = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_otsikko, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_selitys = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_selitys, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_taso = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_taso, Parametrit::$UNDEFINED, Koulutasot::$PERUSKOULU);
     $this->kooste_org = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_organ_code, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_ed_elem_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_ed_elem_id, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_seur_elem_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$kooste_name_seur_elem_id, Parametrit::$UNDEFINED, Kooste::$MUUTTUJAA_EI_MAARITELTY);
     $this->kooste_elementtivalinnat = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$koostelom_elemval_name, Parametrit::$UNDEFINED, array());
     // Valittavien taso, kieli ja oppiaine pannaan myös sessiomuuttujaan:
     $sessiomuuttujanimi_taso = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_taso();
     $sessiomuuttujanimi_kieli = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_kieli();
     $sessiomuuttujanimi_oppiaine = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_oppiaine();
     // Taso
     $this->koostelomake_valittavat_taso = $this->retrieve(Parametrit::$REQ_SES, Koostekontrolleri::$koostelom_elemval_taso_name, $sessiomuuttujanimi_taso, Koulutasot::$LUKIO);
     // Kieli:
     $this->koostelomake_valittavat_kieli = $this->retrieve(Parametrit::$REQ_SES, Koostekontrolleri::$koostelom_elemval_kieli_name, $sessiomuuttujanimi_kieli, Kielet::$SUOMI);
     // Oppiaine:
     $this->koostelomake_valittavat_oppiaine = $this->retrieve(Parametrit::$REQ_SES, Koostekontrolleri::$koostelom_elemval_oppiaine_name, $sessiomuuttujanimi_oppiaine, Oppiaineet::$MA);
     /********************* Koostetiedot loppu ************************************/
     /********************* Koosteen elementtiryhmätiedot alku *************/
     $this->elemryhma_elementtivalinnat = $this->retrieve(Parametrit::$POST, Koostekontrolleri::$elemryhma_name_elementtivalinnat, Parametrit::$UNDEFINED, array());
     $this->elemryhma_kooste_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elemryhma_name_kooste_id, Parametrit::$UNDEFINED, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY);
     $this->elemryhma_nimi = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elemryhma_name_nimi, Parametrit::$UNDEFINED, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY);
     $this->elemryhma_selitys = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elemryhma_name_selitys, Parametrit::$UNDEFINED, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY);
     $this->elemryhma_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elemryhma_name_id, Parametrit::$UNDEFINED, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY);
     $this->elemryhma_tunnus = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elemryhma_name_tunnus, Parametrit::$UNDEFINED, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY);
     /********************* Elementtitiedot alku ************************************/
     $this->elementti_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_id, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     $this->elementti_jarjestysluku = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_jarjestysluku, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     $this->elementti_kooste_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_kooste_id, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     $this->elementti_olio_id = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_olio_id, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     $this->elementti_oliotyyppi = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_oliotyyppi, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     $this->elementti_pisteet = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_pisteet, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     $this->elementti_nakyvyys = $this->retrieve(Parametrit::$REQ, Koostekontrolleri::$elementti_name_nakyvyys, Parametrit::$UNDEFINED, Elementti::$MUUTTUJAA_EI_MAARITELTY);
     /********************* Elementtitiedot loppu ************************************
        /********************* kuvatiedot alku ************************************/
     /* Kuvalatauskansion osoite: */
     $this->latauskansio_os = Kuvat::$latauskansion_osoite;
     $this->uusi_kuva = $this->retrieve(Parametrit::$REQ, 'uusi_kuva', Parametrit::$UNDEFINED, true);
     $this->ilmoitus_kuva = $this->retrieve(Parametrit::$REQ, 'ilmoitus_kuva', Parametrit::$UNDEFINED, "");
     $this->kuvaotsikko_kuva = $this->retrieve(Parametrit::$REQ, 'kuvaotsikko_kuva', Parametrit::$UNDEFINED, "");
     $this->kuvaselitys_kuva = $this->retrieve(Parametrit::$REQ, 'kuvaselitys_kuva', Parametrit::$UNDEFINED, "");
     $this->vuosi_kuva = $this->retrieve(Parametrit::$REQ, 'vuosi_kuva', Parametrit::$UNDEFINED, "");
     $this->kk_kuva = $this->retrieve(Parametrit::$REQ, 'kk_kuva', Parametrit::$UNDEFINED, "");
     $this->paiva_kuva = $this->retrieve(Parametrit::$REQ, 'paiva_kuva', Parametrit::$UNDEFINED, "");
     $this->id_kuva = $this->retrieve(Parametrit::$REQ, 'id_kuva', Parametrit::$UNDEFINED, -1);
     $this->kohde_kuva = $this->retrieve(Parametrit::$REQ, 'kohde_kuva', Parametrit::$UNDEFINED, Kuvat::$kohde_kokonaisuus_tiivistelma);
     /* Tämä on sen olion id, johon kuva kuuluu (kokonaisuus/tehtävä/ratkaisu) */
     $this->id_kohde_kuva = $this->retrieve(Parametrit::$REQ, 'id_kohde_kuva', Parametrit::$UNDEFINED, -1);
     $this->nayttokokoindeksi_kuva = $this->retrieve(Parametrit::$REQ, 'nayttokokoindeksi_kuva', Parametrit::$UNDEFINED, "");
     /********************* kuvatiedot loppu ************************************/
     /********************* tehtävätiedot alku ************************************/
     // Teht_id on myös hyvä pitää muistissa vähän pysyvämmin, koska sen
     // 'alapuolella' on ratkaisujen joukko, joita käydään välillä katsomassa,
     // jolloin takaisinkin pitää osata tulla.
     // Äh sitten ei urlin perusteella enää mene kokonaisuuksiin.. Ehkä ei
     // tarvitse kuitenkaan.
     /*$this->id_teht = $this->retrieve(
       Parametrit::$REQ_SES, 'id_teht', 'id_teht', 
       Tehtava::$MUUTTUJAA_EI_MAARITELTY); */
     $this->id_teht = $this->retrieve(Parametrit::$REQ, 'id_teht', Parametrit::$UNDEFINED, Tehtava::$MUUTTUJAA_EI_MAARITELTY);
     $this->ilmoitus_teht = $this->retrieve(Parametrit::$REQ, 'ilmoitus_teht', Parametrit::$UNDEFINED, "");
     $this->otsikko_teht = $this->retrieve(Parametrit::$REQ, 'otsikko_teht', Parametrit::$UNDEFINED, "");
     $this->tehtavananto_teht = $this->retrieve(Parametrit::$REQ, 'tehtavananto_teht', Parametrit::$UNDEFINED, "");
     $this->vaikeustaso_teht = $this->retrieve(Parametrit::$REQ, 'vaikeustaso_teht', Parametrit::$UNDEFINED, Vaikeustasot::$NORMAALI);
     $this->nakyvyys_teht = $this->retrieve(Parametrit::$REQ, Tehtavakontrolleri::$tehtava_name_nakyvyys, Parametrit::$UNDEFINED, Nakyvyys::$YKSITYINEN);
     /********************* tehtävätiedot loppu ********************************/
     /********************* Ratkeisutiedot alku ************************************/
     $this->id_ratk = $this->retrieve(Parametrit::$REQ, 'id_ratk', Parametrit::$UNDEFINED, Ratkaisu::$MUUTTUJAA_EI_MAARITELTY);
     $this->ilmoitus_ratk = $this->retrieve(Parametrit::$REQ, 'ilmoitus_ratk', Parametrit::$UNDEFINED, "");
     $this->vastaus_ratk = $this->retrieve(Parametrit::$REQ, 'vastaus_ratk', Parametrit::$UNDEFINED, "");
     $this->ratkaisu_ratk = $this->retrieve(Parametrit::$REQ, 'ratkaisu_ratk', Parametrit::$UNDEFINED, "");
     $this->nakyvyys_ratk = $this->retrieve(Parametrit::$REQ, Ratkaisukontrolleri::$ratkaisu_name_nakyvyys, Parametrit::$UNDEFINED, Nakyvyys::$YKSITYINEN);
     /********************* ratkaisutiedot loppu ********************************/
     /********************* henkilötiedot alku *********************************/
     // Lisätään ihmisen tiedot:
     $this->etun = $this->retrieve(Parametrit::$POST, 'etunimi', Parametrit::$UNDEFINED, "");
     $this->sukun = $this->retrieve(Parametrit::$POST, 'sukunimi', Parametrit::$UNDEFINED, "");
     $this->lempin = $this->retrieve(Parametrit::$POST, 'lempinimi', Parametrit::$UNDEFINED, "");
     $this->svuosi = $this->retrieve(Parametrit::$POST, 'svuosi', Parametrit::$UNDEFINED, "");
     $this->skk = $this->retrieve(Parametrit::$POST, 'skk', Parametrit::$UNDEFINED, "");
     $this->spaiva = $this->retrieve(Parametrit::$POST, 'spaiva', Parametrit::$UNDEFINED, "");
     $this->komm = $this->retrieve(Parametrit::$POST, 'kommentti', Parametrit::$UNDEFINED, "");
     $this->uusktunnus = $this->retrieve(Parametrit::$POST, 'uusikayttajatunnus', Parametrit::$UNDEFINED, "");
     $this->uussalasana = $this->retrieve(Parametrit::$POST, 'uusisalasana', Parametrit::$UNDEFINED, "");
     $this->salavahvistus = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$name_salasanavahvistus, Parametrit::$UNDEFINED, "");
     $this->eosoite = $this->retrieve(Parametrit::$POST, 'eosoite', Parametrit::$UNDEFINED, "");
     $this->uudet_valtuudet = $this->retrieve(Parametrit::$POST, 'valtuudet', Parametrit::$UNDEFINED, Valtuudet::$KATSELU);
     /********************* henkilötiedot loppu ****************************/
     /*================== Lisävaltuudet alku ==================================*/
     $this->lv_henkilo_id = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$lv_name_kohdehenkilo_id, Parametrit::$UNDEFINED, -1);
     $this->lv_kohde_id = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$lv_name_kohdeolio_id, Parametrit::$UNDEFINED, -1);
     $this->lv_kohdetyyppi = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Parametrit::$UNDEFINED, -1);
     $this->lv_vaikutusalue = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$lv_name_vaikutusalue, Parametrit::$UNDEFINED, -1);
     $this->lv_oikeudet = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$lv_name_oikeudet, Parametrit::$UNDEFINED, -1);
     $this->lv_omistaja_id = $this->retrieve(Parametrit::$POST, Kayttajakontrolleri::$lv_name_omistaja_id, Parametrit::$UNDEFINED, -1);
     /*============== Lisävaltuudet loppu =================================*/
     /*================== Kurssitiedot alku ==================================*/
     $this->kurssitieto_id = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_id, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     $this->kurssitieto_kuvaus = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_kuvaus, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     $this->kurssitieto_luomishetki_sek = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_luomishetki_sek, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     $this->kurssitieto_nakyvyys = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_nakyvyys, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     $this->kurssitieto_opettaja_id = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_opettaja_id, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     $this->kurssitieto_opettaja_nimi = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_opettaja_nimi, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     $this->kurssitieto_tunniste = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$kurssitieto_name_tunniste, Parametrit::$UNDEFINED, Kurssitieto::$MUUTTUJAA_EI_MAARITELTY);
     /*================== Kurssitiedot loppu ==================================*/
     /*================== Palautukset alku ==================================*/
     $this->palautus_id = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_id, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     $this->palautus_kurssitieto_id = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_kurssitieto_id, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     $this->palautus_kuvaus = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_kuvaus, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     $this->palautus_luomishetki_sek = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_luomishetki_sek, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     $this->palautus_opiskelija_etunimi = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_opiskelija_etunimi, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     $this->palautus_opiskelija_sukunimi = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_opiskelija_sukunimi, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     $this->palautus_teksti = $this->retrieve(Parametrit::$POST, Palautuskontrolleri::$palautus_name_teksti, Parametrit::$UNDEFINED, Palautus::$MUUTTUJAA_EI_MAARITELTY);
     /*================== Palautukset loppu ==================================*/
 }