Exemplo n.º 1
0
 /**
  * Luo ja tallentaa uuden tehtävän tietokantaan. Onnistuminen näkyy 
  * palauteolion Virhekoodi-muuttujan arvossa.
  * @param type $id_kokon
  * @param type $ots
  */
 function luo_testitehtava($id_kokon, $ots)
 {
     /************** UUDEN TEHTÄVÄN TALLENNUS **********************************/
     $palauteolio = new Palaute();
     $this->parametriolio->otsikko_teht = $ots;
     $this->parametriolio->tehtavananto_teht = KokonTehtRatkTestaus::$testiteht_tehtava;
     $this->parametriolio->vaikeustaso_teht = Vaikeustasot::$NORMAALI;
     $this->parametriolio->id_kokon = $id_kokon;
     $this->tehtavakontrolleri->toteuta_tallenna_uusi($palauteolio);
     return $palauteolio;
 }
Exemplo n.º 2
0
/**
 * Toteuttaa kuvan tietojen tallennuksen tietokantaan ja kuvan tallennuksen
 * tallennuskansioon. Kuvan tiedot tarkistetaan.
 *
 * Tallentaa kuvan ja palauttaa taulukon, jonka ensimmäinen alkio on
 * palautte tallennuksen onnistumisesta ('onnistui' tai virheilmoitus) ja toinen
 * tallennetun kuvan id:n, jotta uusi kuva osataan näyttää heti. Kolmas alkio
 * taulukossa on tallennetun kuvan tiedosto-osoite.
 *
 * @param Parametrit $parametriolio
 * @return Palaute $palauteolio
 */
function toteuta_tallenna_kuva($parametriolio)
{
    $id_kokon = $parametriolio->id_kokon;
    $id_teht = $parametriolio->id_teht;
    $id_ratk = $parametriolio->id_ratk;
    $omaid = $parametriolio->get_omaid();
    $kuvaotsikko_kuva = $parametriolio->kuvaotsikko_kuva;
    $kuvaselitys_kuva = $parametriolio->kuvaselitys_kuva;
    $vuosi_kuva = $parametriolio->vuosi_kuva;
    $kk_kuva = $parametriolio->kk_kuva;
    $paiva_kuva = $parametriolio->paiva_kuva;
    $nayttokokoindeksi_kuva = $parametriolio->nayttokokoindeksi_kuva;
    $tietokantaolio = $parametriolio->get_tietokantaolio();
    $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio);
    $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio);
    $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio);
    //$latauskansio_os Antaa sen kansion suhteellisen tiedostopolun,
    // jonne ladattu tiedosto on tarkoitus siirtää pysyvää sijoitusta varten.
    $latauskansio_os = $parametriolio->latauskansio_os;
    //"selitys"/"tiivis"/"manuaali"/"tehtava"/"ratkaisu"
    $kohde_kuva = $parametriolio->kohde_kuva;
    $palauteolio = new Palaute();
    $palauteolio2 = new Palaute();
    /* tallenna_kuva-metodin palaute */
    $palauteolio_kokon = new Palaute();
    $pal_olio = new Palaute();
    $palauteolio_tehtavat = new Palaute();
    $sisalto = "";
    $id_kuva = "";
    /* Tallennetun kuvan tunniste. */
    $uusi = true;
    $linkit = "";
    // Liittyy tehtäviin esim.
    // Huom! alla olevaan ei tulekaan kuvan id, vaan isäntäolion id!
    $muokatun_id = Kokonaisuusolio::$kokon_ei_maaritelty;
    /* Tarkistetaan, onko latauksia tullut palvelimelle: */
    if (!array_key_exists(Kuvat::$kuvalatauksen_name, $_FILES)) {
        $ilmoitus_kuva = 'Ei latauksia havaittu!';
        $sisalto = nayta_kuvalomake_uusi($kohde_kuva, $omaid, $uusi, $ilmoitus_kuva, $tietokantaolio, $id_kuva, $id_kokon, $id_teht, $id_ratk, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva);
        $palauteolio->set_ilmoitus($ilmoitus_kuva);
        $palauteolio->set_sisalto($sisalto);
    } else {
        $ladattu_kuva = $_FILES[Kuvat::$kuvalatauksen_name];
        // Ilmeisesti koko on valmiiksi tavuina (täsmää kuvan omin. kans):
        //$info = getImageSize($ladattu_kuva['tmp_name']);
        $ilmoitus = "Tiedoston nimi: " . $ladattu_kuva['name'] . " (" . round($ladattu_kuva['size'] / 1024) . " kt)" . "<br/> Tyyppi: " . $ladattu_kuva['type'] . "<br />";
        //"<br/> Tmp-nimi: ".$ladattu_kuva['tmp_name'].
        //"<br/> Virheviesti: ".$ladattu_kuva['error'].
        //"<br/> Kuvan tyyppi: ".$info[2];
        $tarkistus = tarkista_kuvatiedot($ladattu_kuva, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $uusi);
        // Jos korjaamista, näytetään lomake uudelleen:
        if ($tarkistus != Palautteita::$lomaketiedot_ok) {
            $ilmoitus_kuva = $tarkistus;
            $sisalto = nayta_kuvalomake_uusi($kohde_kuva, $omaid, $uusi, $ilmoitus_kuva, $tietokantaolio, $id_kuva, $id_kokon, $id_teht, $id_ratk, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva);
        } else {
            // Tallenna_kuva palauttaa olion, joka sisältää kolme
            // tietoa; palautteen (ilmoitus), tallennetun kuvan id:n (2), joka
            // voi olla tyhjä virheen sattuessa ja kuvaosoitteen (3).
            $palauteolio2 = tallenna_kuva($kohde_kuva, $id_kokon, $id_teht, $id_ratk, $omaid, $ladattu_kuva, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva, $tietokantaolio, $latauskansio_os);
            if ($palauteolio2->get_ilmoitus() == Tietokantaolio::$HAKU_ONNISTUI) {
                $ilmoitus = Tekstit::$ilm_kuva_uusi_tallennus_ok;
                $id_kuva = $palauteolio2->get_muokatun_id();
                $linkit = "";
                // Lisälinkkejä, esim. tehtävissä.
                /* Palautetaan se näkymä, jonka parissa on tehty töitä: */
                if ($kohde_kuva === Kuvat::$kohde_kokonaisuus_tiivistelma || $kohde_kuva === Kuvat::$kohde_kokonaisuus_selitys) {
                    if ($kohde_kuva == Kuvat::$kohde_kokonaisuus_selitys) {
                        $selitys_auki_id = $id_kokon;
                    } else {
                        $selitys_auki_id = "";
                    }
                    $parametriolio->selitys_auki_id = $selitys_auki_id;
                    $kokonaisuuskontrolleri->toteuta_nayta($palauteolio_kokon);
                    $sisalto = $palauteolio_kokon->get_sisalto();
                    $linkit = $palauteolio_kokon->get_linkkihtml();
                    $muokatun_id = $id_kokon;
                } else {
                    if ($kohde_kuva === Kuvat::$kohde_kokonaisuus_tiivis_manuaali || $kohde_kuva === Kuvat::$kohde_kokonaisuus_selitys_manuaali) {
                        $kohteena_tiivis = $kohde_kuva === Kuvat::$kohde_kokonaisuus_tiivis_manuaali;
                        if ($kohteena_tiivis) {
                            $sarakenimi = "tiivis";
                        } else {
                            $sarakenimi = "selitys";
                        }
                        // Haetaan ajantasalla olevat tiedot tietokannasta.
                        /* Muutettavat tiedot alla, jotka siis pitää asettaa:
                           * $muutosarvot = array(time(),
                                  $oppiaine_kokon,
                                  $otsikko_kokon,
                                  $tiivis_kokon,
                                  $selitys_kokon,
                                  $taso_kokon,
                                  $jarjestysnro,
                                  $laajennetun_id_kokon,
                                  $kieli_id,
                                  $ylakokonaisuuden_id);
                           */
                        $taulunimi = "kokonaisuudet";
                        $sarakenimi = "id";
                        $hakuarvo = $id_kokon;
                        $kokonaisuus = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo);
                        if ($kokonaisuus != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
                            $parametriolio->oppiaine_kokon = $kokonaisuus->oppiaine;
                            $parametriolio->otsikko_kokon = $kokonaisuus->otsikko;
                            $parametriolio->tiivis_kokon = $kokonaisuus->tiivis;
                            $parametriolio->selitys_kokon = $kokonaisuus->selitys;
                            $parametriolio->taso_kokon = $kokonaisuus->taso;
                            $parametriolio->jarjestysnro_kokon = $kokonaisuus->jarjestysnro;
                            $parametriolio->laajennetun_id_kokon = $kokonaisuus->laajennetun_id;
                            $parametriolio->ylakokonaisuuden_id_kokon = $kokonaisuus->ylakokonaisuuden_id;
                        }
                        // Haetaan kokonaisuuden tiivistelmä/selitys:
                        if ($kohteena_tiivis) {
                            $vanha = $parametriolio->tiivis_kokon;
                        } else {
                            $vanha = $parametriolio->selitys_kokon;
                        }
                        // Haetaan tallennettu kuva tietokannasta:
                        if ($tietokantaolio instanceof Tietokantaolio) {
                            $taulunimi = "kuvat";
                            $sarakenimi = "id";
                            $hakuarvo = $id_kuva;
                            $tk_olio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo);
                            if ($tk_olio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
                                $kuva = new Kuva($tk_olio, $tietokantaolio);
                            }
                            $kuvahtml = $kuva->nayta_pelkka_kuva($latauskansio_os);
                            // Uusi on vanha + kuvahtml:
                            $uusi = $vanha . "\n" . $kuvahtml;
                            if ($kohteena_tiivis) {
                                $parametriolio->tiivis_kokon = $uusi;
                            } else {
                                $parametriolio->selitys_kokon = $uusi;
                            }
                            $kokonaisuuskontrolleri->toteuta_tallenna_muokkaus($palauteolio_kokon);
                        }
                        $sisalto = $palauteolio_kokon->get_sisalto();
                        $muokatun_id = $id_kokon;
                    } else {
                        if ($kohde_kuva === Kuvat::$kohde_tehtava) {
                            $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio_tehtavat);
                            $linkit = $palauteolio_tehtavat->get_linkkihtml();
                            $sisalto = $palauteolio_tehtavat->get_sisalto();
                            $muokatun_id = $id_teht;
                        } else {
                            if ($kohde_kuva === Kuvat::$kohde_ratkaisu) {
                                $ratkaisukontrolleri->toteuta_nayta($pal_olio);
                                $sisalto = $pal_olio->get_sisalto();
                                $muokatun_id = $id_ratk;
                            } else {
                                $sisalto = "kohde_kuva?? (toteuta_tallenna_kuva)";
                            }
                        }
                    }
                }
            } else {
                $ilmoitus .= $palauteolio2->get_ilmoitus() . " ja " . $palauteolio_kokon->get_ilmoitus();
                $ilmoitus_kuva = $palauteolio2->get_ilmoitus();
                $sisalto = nayta_kuvalomake_uusi($kohde_kuva, $omaid, $uusi, $ilmoitus_kuva, $tietokantaolio, $id_kuva, $id_kokon, $id_teht, $id_ratk, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva);
            }
        }
    }
    $palauteolio->set_ilmoitus($ilmoitus);
    $palauteolio->set_sisalto($sisalto);
    $palauteolio->set_muokatun_id($muokatun_id);
    /* Kuvan suhteellinen osoite (kutsuvasta ohjelmanosasta). */
    $palauteolio->set_oma($palauteolio2->get_oma());
    /* Linkit (esim. tehtävät) */
    $palauteolio->set_linkkihtml($linkit);
    return $palauteolio;
}
Exemplo n.º 3
0
 /**
  * Palauttaa kokonaisuuden html-koodin.
  * 
  * Huomaa, että täällä käsitellään aika paljon turvallisuusarkoja aiheita,
  * kuten esimerkiksi kokonaisuuden lukitus. Ois parempi ehkä sellaisen
  * olla aiemmin, mutta en vielä ole jaksanut muuttaa..
  *
  * @param Parametrit $parametriolio
  * @param Kokonaisuusolio $kokonaisuus
  * @param <type> $selitys_auki jos true, niin selitys näytetään, muuten ei.
  * @param type $id_prev Edellisen kokonaisuuden id.
  * @param type $id_next Seuraavan kokonaisuuden id.
  * @return string|\<type>
  */
 function tulosta_kokonaisuus($kokonaisuus, $parametriolio, $selitys_auki, $id_prev, $id_next)
 {
     $btn_type = Kokonaisuusnakymat::$btn_type_article;
     $btn_size = Kokonaisuusnakymat::$btn_size_article;
     $omaid = $parametriolio->get_omaid() + 0;
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $kayttajan_valtuudet = $parametriolio->get_valtuudet();
     // Luodaan tämä tehtävien lkm:n hakua varten. Vähän raskasta, mutta olkoon.
     $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio);
     $palaute = "";
     $selitys = "";
     $poistonappi = "";
     $muokkausnappi = "";
     $tehtavanappi = "";
     /* Tehtävien näyttö */
     $uusi_teht_nappi = "";
     /* Tästä luodaan uusi tehtävä. */
     $nayta_selitys_nappi = "";
     /* Näyttää selityksen. */
     $siirra_ylemmaksi_nappi = "";
     $siirra_alemmaksi_nappi = "";
     $jaa_oikeuksia_nappi = "";
     $nayta_jarj_luku = "";
     $korjausnappi = "";
     // Tämän avulla järjestysluvun voi korjata
     $nakyvyysmuutosnappi = "";
     $nayta_ed_nappi = $this->create_button_show_prev($id_prev);
     $nayta_seur_nappi = $this->create_button_show_next($id_next);
     /*======================== käyttäjän oikeudet ========================*/
     $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokonaisuus->getHenkiloId(), $omaid, Oliotyyppi::$KOKONAISUUS, $kokonaisuus->get_id(), $tietokantaolio);
     /*====================================================================*/
     // Koodia voivat kaikki vilkaista, ellei ole piilotettu:
     if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) {
         $nayta_koodi_nappi = Html::luo_button(Painikkeet::$NAYTA_KOODI_value, array(Attr::title(Painikkeet::$NAYTA_KOODI_title), Attr::onclick("hae_koodi", array($kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS)), Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size . " article")));
     } else {
         $nayta_koodi_nappi = "";
     }
     /* Kuvan lisäyspainikkeet: */
     $uusi_kuva_tiivis = "";
     $uusi_kuva_seli = "";
     // Alla jostakin syystä !empty($kokonaisuus->getSelitys()) ei toiminut!
     if ($kokonaisuus->getSelitys() != "") {
         $onsubmit_parametrit = array($kokonaisuus->get_id());
         /* Tämän avulla löytyvät */
         $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id());
         if ($selitys_auki) {
             $title = Painikkeet::$SULJE_SELITYS_title;
             $onsubmit_funktionimi = "sulje_selitys";
             $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$SULJE_SELITYS_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article");
         } else {
             $title = Painikkeet::$NAYTA_SELITYS_title;
             $onsubmit_funktionimi = "nayta_selitys";
             $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$NAYTA_SELITYS_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article");
         }
         $nayta_selitys_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
     }
     // Haetaan kokonaisuuden tehtävien lkm:
     $teht_lkm = sizeof($tehtavakontrolleri->hae_tehtavat());
     // Tehtävät näkyvät kaikille, jos niitä on:
     if ($teht_lkm > 0) {
         $onsubmit_funktionimi = "nayta_tehtavat";
         $onsubmit_parametrit = array($kokonaisuus->get_id());
         /* Tämän avulla löytyvät */
         $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . Oliotyyppi::$naytettava_name . "=" . Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA);
         $title = Painikkeet::$tehtava_nayta_tehtavat_title . " (" . $teht_lkm . ")";
         $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_nayta_tehtavat_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size);
         $tehtavanappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
     }
     /** 
      * Muokkaus ja poisto tietysti kunkulle ja kokonaisuuden tekijälle. 
      * Vain heille on myös luvallista jakaa lisäoikeuksia olioon.
      
      <p>Jos kokonaisuus lukittu toisen toimesta, ei sitä voida poistaa
      eikä muokata. Uusia tehtäviä voi kuitenkin lisätä,
      koska siinä mahdollinen samanaikaisuus ei haittaa.</p>
     
      <p>Uusia tehtäviä voi lisätä valtuusarvot >= "tehtävien_lisäys".</p>
     
      Kokonaisuuksien poisto sallitaan turvallisuussyistä vain
      lapsettomille kokonaisuuksille.
     */
     if ($kohdeoikeudet == Lisavaltuudet::$KAIKKI_OIKEUDET) {
         // Oikeuksien eli lisävaltuuksien jakopainike:======================
         $action_os = "oLetUs";
         // Testaan samalla kirjainkoon vaikutusta.
         $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id);
         $action_kyselyarvot = array($kokonaisuus->get_id(), $kokonaisuus->getOppiaine(), $kokonaisuus->getKieli(), $kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS, $kokonaisuus->getHenkiloId());
         $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot);
         //==================================================================
     }
     if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) {
         //====================== LUKITUKSEN HUOMIOINTI =====================
         // Muokkaus- ja poistonapit lukitsemattomalle tai omalle.
         if (!$this->lukitus_estaa_muokkauksen($kokonaisuus, $omaid)) {
             // Muokkauspainike:
             $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY;
             $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY;
             $muokkausnappi = $this->luo_muokkauspainike($kokonaisuus, $elementti, $elemryhma);
             //=============================================================
             if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) {
                 // Poisto vain lapsettomille ja tehtävättömille:
                 if ($kokonaisuus->getOn_lapsia() == 0) {
                     $tehtavat = Tehtava::hae_kokonaisuuden_tehtavat($kokonaisuus->get_id(), $parametriolio->get_tietokantaolio());
                     // Ellei tehtäviä löydy, voidaan poistaa:
                     if (empty($tehtavat)) {
                         // POistopainike:
                         $poistonappi = Html::luo_forminput_painike(array(Attr::classs("article"), Attr::action("{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id())), array(Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size), Attr::name("toiminta"), Attr::value(Painikkeet::$POISTA_KOKON_VALUE)));
                         if ($kokonaisuus->getLukitus() == $omaid) {
                             $poistonappi .= "<span style='color: green; font-weight:bold'>" . Tekstit::$ilm_kokon_omalukitus_paalla . "<br/></span>";
                         }
                     }
                 }
             }
             //=============================================================
             // Julkista/piilota-painike:
             if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) {
                 $value = Painikkeet::$PIILOTA_KOKON_value;
                 $title = Painikkeet::$PIILOTA_KOKON_title;
             } else {
                 $value = Painikkeet::$JULKISTA_KOKON_value;
                 $title = Painikkeet::$JULKISTA_KOKON_title;
             }
             $onsubmit_funktionimi = "";
             // Tulevaa varten.
             $onsubmit_parametrit = "";
             // Ei ole vielä.
             $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli());
             $input_maaritteet = array("class" => "btn btn-" . $btn_type . " btn-" . $btn_size, "value" => $value, "title" => $title, "name" => Toimintonimet::$kokonaisuustoiminto);
             try {
                 $nakyvyysmuutosnappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
             } catch (Exception $poikkeus) {
                 $nakyvyysmuutosnappi = $poikkeus->getMessage();
             }
             //=============================================================
             // Järjestyksen muutosnapit (jos mielekästä):
             $siirra_ylemmaksi_nappi = "";
             if ($kokonaisuus->getEdellisenId_taso() != Kokonaisuusolio::$kokon_edellista_ei_ole) {
                 $onsubmit_funktionimi = "";
                 // Tulevaa varten.
                 $onsubmit_parametrit = "";
                 // Ei ole vielä.
                 $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli() . "&ed_id_kokon=" . $kokonaisuus->getEdellisenId_taso() . "&siirto_ylos=true");
                 $input_maaritteet = array("value" => Painikkeet::$SIIRRA_YLEMMAKSI_KOKON_value, "title" => Painikkeet::$SIIRRA_YLEMMAKSI_KOKON_title, "name" => Toimintonimet::$kokonaisuustoiminto, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size);
                 try {
                     $siirra_ylemmaksi_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
                 } catch (Exception $poikkeus) {
                     $siirra_ylemmaksi_nappi = $poikkeus->getMessage();
                 }
             }
             // Alaspäin siirto:
             $siirra_alemmaksi_nappi = "";
             if ($kokonaisuus->getSeuraavanId_taso() != Kokonaisuusolio::$kokon_seuraavaa_ei_ole) {
                 $onsubmit_funktionimi = "";
                 // Tulevaa varten.
                 $onsubmit_parametrit = "";
                 // Ei ole vielä.
                 $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli() . "&seur_id_kokon=" . $kokonaisuus->getSeuraavanId_taso() . "&siirto_ylos=0");
                 $input_maaritteet = array("value" => Painikkeet::$SIIRRA_ALEMMAKSI_KOKON_value, "title" => Painikkeet::$SIIRRA_ALEMMAKSI_KOKON_title, "name" => Toimintonimet::$kokonaisuustoiminto, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size);
                 try {
                     $siirra_alemmaksi_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
                 } catch (Exception $poikkeus) {
                     $siirra_alemmaksi_nappi = $poikkeus->getMessage();
                 }
             }
             // Tämä liittyy vanhan järjestysnumeron korjaukseen (kun monilla
             // kokonaisuuksilla oli sama järjestysnumero -1). Nykyään
             // tekniikka on muuttunut, eikä sitä yleensä tarvita.
             if ($kokonaisuus->getJarjestysnro() == -1) {
                 $nayta_jarj_luku = " jarjestysnro: " . $kokonaisuus->getJarjestysnro();
                 $class = "rinnakkain";
                 $id = "";
                 $action = "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli();
                 $name = Toimintonimet::$kokonaisuustoiminto;
                 $value = "Korjaa jarjestysnro";
                 $korjausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value);
             }
             /**************************************************************/
         } else {
             if ($kokonaisuus->lukitus != Kokonaisuusolio::$LUKITUS_OFF) {
                 $poistonappi = "<span style='color: red; font-weight:bold'>" . Tekstit::$ilm_kokon_lukitus_paalla . "<br/></span>";
             }
         }
         /* Uuden kuvan lisäyspainike tiivistelmään*/
         $onsubmit_funktionimi = "nayta_kuvalomake";
         $onsubmit_parametrit = array($kokonaisuus->get_id());
         /* Kokonaisuuden id*/
         $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_tiivistelma);
         $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size);
         try {
             $uusi_kuva_tiivis = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
         } catch (Exception $poikkeus) {
             $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage();
         }
         /* Uuden kuvan lisäyspainike selitykseen:*/
         $onsubmit_funktionimi = "nayta_kuvalomake";
         $onsubmit_parametrit = array($kokonaisuus->get_id());
         /* Kokonaisuuden id*/
         $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_selitys);
         $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size);
         try {
             $uusi_kuva_seli = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
         } catch (Exception $poikkeus) {
             $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage();
         }
     }
     // Hallinnan / muokkaaajan / luojan osuus päättyy
     // Tehtävien lisääminen sopivasti oikeutetuille:
     if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
         $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY;
         $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY;
         $uusi_teht_nappi = $this->luo_uusi_teht_painike($kokonaisuus, $elementti, $elemryhma);
     }
     // TEhtävien lisäyspainikekoodi loppuu.
     /* haetaan mahdolliset kuvat */
     $kuvahtml_tiivis = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_tiivistelma, $omaid, $tietokantaolio, false);
     /* kokolaisuuksien hierarkia: html-otsikkotasot. */
     $class_arvo = "kokonaisuus";
     $painikkeet_ylla = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $tehtavanappi . $uusi_teht_nappi . $muokkausnappi . $korjausnappi . $nakyvyysmuutosnappi . $jaa_oikeuksia_nappi . $nayta_seur_nappi;
     $painikkeet_alla = $nayta_koodi_nappi . $uusi_kuva_tiivis . $uusi_kuva_seli . $nayta_selitys_nappi . $poistonappi;
     $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">";
     /* Haetaan vielä tarvittaessa selitys: */
     if ($selitys_auki) {
         /* haetaan mahdolliset kuvat */
         $kuvahtml_selitys = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_selitys, $omaid, $tietokantaolio, false);
         $selitysotsikko = "<div class='selitysotsikko'>" . Tekstit::$otsikko_selitys . "</div>";
         /* Muotoillaan selitys: */
         $selitys_muokattu = muotoile_merkit($kokonaisuus->getSelitys());
         // Pikkukaavat ensin, jotta kursiivin poisto onnistuu ennen
         // sulkujen käsittelyä.
         $selitys_muokattu = Kaavaeditori::muotoile_pikkukaavat($selitys_muokattu);
         // Sitten normaalikaavat:
         $selitys_muokattu = Kaavaeditori::muotoile_kaavat($selitys_muokattu);
         $selitys = $selitysotsikko . $kuvahtml_selitys . $selitys_muokattu;
     }
     /* Muotoillaan tiivistelmän merkit ja kaavat: */
     $tiivistelma = muotoile_merkit($kokonaisuus->getTiivis());
     $tiivistelma = Kaavaeditori::muotoile_pikkukaavat($tiivistelma);
     $tiivistelma = Kaavaeditori::muotoile_kaavat($tiivistelma);
     $tiivistelma = $kuvahtml_tiivis . $tiivistelma . "<br />";
     /* Ja sitten vain palaset pakettiin: HUOM! Täällä katsotaan, ettei
      * piilotetun sisältö näy. 
      */
     $piilotushuomautus = "<div class='piilotushuomautus'>" . Tekstit::$ilm_kokon_piilotettu_paitsi_ots . "</div>";
     $yksityisilmoitus = "<div class='yksityisilmoitus'>" . Tekstit::$ilm_kokon_yksityinen . "</div>";
     $vainkoosteilmoitus = "<div class='koosteilmoitus'>" . Tekstit::$ilm_kokon_vain_kooste . "</div>";
     /**
      * Tänne mennään, kun kokonaisuus näytetään,
      * oli se sitten piilossa tahi ei.
      */
     if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN || $kokonaisuus->getHenkiloId() == $omaid || $kayttajan_valtuudet + 0 === Valtuudet::$HALLINTA) {
         $normaali_kokonaisuus = Html::div(array(Attr::classs("kokon_ylanapit")), $painikkeet_ylla) . $otsikko;
         // Jos kokonaisuus on muilta piilossa, lisätään viesti:
         if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) {
             $normaali_kokonaisuus .= $piilotushuomautus . $tiivistelma;
         } else {
             if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) {
                 $normaali_kokonaisuus .= $yksityisilmoitus . $tiivistelma;
             } else {
                 if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) {
                     $normaali_kokonaisuus .= $vainkoosteilmoitus . $tiivistelma;
                 } else {
                     $normaali_kokonaisuus .= $tiivistelma;
                 }
             }
         }
         $normaali_kokonaisuus .= Html::div(array(Attr::classs("kokon_alanapit")), $painikkeet_alla);
         /* Lisätään vielä div selitystä varten: */
         if ($selitys_auki) {
             $normaali_kokonaisuus .= "<div class='selitys' id='selitys" . $kokonaisuus->get_id() . "'>" . $selitys . "</div>";
         }
         $normaali_kokonaisuus .= "</div>";
         /* Kokonaisuus loppuu. */
         $palaute = $normaali_kokonaisuus;
     } else {
         if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) {
             $class_arvo = "kokonaisuus";
             $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">";
             $palaute = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $nayta_koodi_nappi . $nakyvyysmuutosnappi . $nayta_seur_nappi . $otsikko;
             $palaute .= $piilotushuomautus;
             $palaute .= "</div>";
             /* Kokonaisuus loppuu. */
         } else {
             // Kun jonkun toisen yksityinen / vain koosteessa, eikä hallintavaltuuksia:
             $palaute = "";
         }
     }
     return $palaute;
 }
Exemplo n.º 4
0
 // Muutama kysely liittyen vain ajaxiin (vois sijoittaa kyllä parametriolioon):
 $aukaisu = isset($_REQUEST['aukaisu']) ? $_REQUEST['aukaisu'] : 0;
 $id_raaka = isset($_REQUEST['id_raaka']) ? $_REQUEST['id_raaka'] : Malliluokkapohja::$MUUTTUJAA_EI_MAARITELTY;
 $id_nappi = isset($_REQUEST['id_nappi']) ? $_REQUEST['id_nappi'] : -1;
 // Kohde liittyy siihen, missä otsikot näytetään (kokonaisuusnäkymä vai
 // koostelomake lähinnä).
 $kohde = isset($_REQUEST['kohde']) ? $_REQUEST['kohde'] : 'kokonaisuudet';
 //--------------------
 // Yhdistetään tietokantaan:
 $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis);
 $tietokantaolio->yhdista_tietokantaan($dbnimi);
 // Tee parametriolio ja palauteolio!
 $parametriolio = new Parametrit($tietokantaolio);
 $palauteolio = new Palaute();
 $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio);
 $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio);
 $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio);
 $koostekontrolleri = new Koostekontrolleri($tietokantaolio, $parametriolio);
 $kokonaisuusnakymat = new Kokonaisuusnakymat();
 $tehtavanakymat = new Tehtavanakymat();
 $ratkaisunakymat = new Ratkaisunakymat();
 $koostenakymat = new Koostenakymat();
 $omaid = $parametriolio->get_omaid();
 $id_kokon = $parametriolio->id_kokon;
 /**
  * Hakee koostelomakkeeseen valittavat elementit ja palauttaa tiedot xml-muodossa.
  */
 function hae_elementit($parametriolio, $koostekontrolleri, $tietokantaolio, $koodaus)
 {
     $xml = "";
     $kooste_kieli = $parametriolio->koostelomake_valittavat_kieli;
Exemplo n.º 5
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);
                        }
                    }
                }
            }
        }
    }
}
Exemplo n.º 6
0
/**
 * Edellisen yleistetty ja hiukan muokattu versio.
 * Palauttaa Palaute-olion, jonka sisältönä on ne oliot (kokonaisuudet/
 * tehtävät/ratkaisut/tms), johon parametri 'naytettava' viittaa (Oliotyyppi-
 * luokan arvoja). 
 * 
 * @param Parametrit $parametriolio
 * @return Palaute $palauteolio
 */
function toteuta_nayta_oliot2($parametriolio)
{
    $kohde = $parametriolio->naytettava;
    $id_kokon = $parametriolio->id_kokon;
    $oppiaine_kokon = $parametriolio->oppiaine_kokon;
    $taso_kokon = $parametriolio->taso_kokon;
    $id_teht = $parametriolio->id_teht;
    $tietokantaolio = $parametriolio->get_tietokantaolio();
    $kayttajan_valtuudet = $parametriolio->get_valtuudet();
    $kieli_id = $parametriolio->kieli_id;
    $omaid = $parametriolio->get_omaid();
    $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio);
    $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio);
    $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio);
    $palauteolio = new Palaute();
    $nayta_valikot = false;
    $selitys_auki = Kokonaisuusolio::$SELITYS_KIINNI_ID;
    /* Palautetaan kohteen mukainen näkymä: */
    if ($kohde == Oliotyyppi::$KOKONAISUUS) {
        // Selityksen näyttämisen voisi jotenkin mahdollistaa tarvittaessa.
        $kokonaisuuskontrolleri->toteuta_nayta($palauteolio);
        $nayta_valikot = true;
        $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS);
    } else {
        if ($kohde == Oliotyyppi::$TEHTAVA) {
            $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio);
            $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA);
        } else {
            if ($kohde == Oliotyyppi::$RATKAISU) {
                $ratkaisukontrolleri->toteuta_nayta($palauteolio);
                $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU);
            } else {
                $kokonaisuuskontrolleri->toteuta_nayta($palauteolio);
                $nayta_valikot = true;
                $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS);
                $palauteolio->set_ilmoitus("Tuntematon kohde (parametriolio->naytettava)!");
            }
        }
    }
    $palauteolio->set_valikkonaytto($nayta_valikot);
    return $palauteolio;
}