Exemple #1
0
         if ($type === Oliotyyppi::$KOKONAISUUS) {
             $kokon = new Kokonaisuusolio($id, $tietokantaolio);
             $html = $kokonnakymat->tulosta_esikatselu($kokon, $parametriolio);
         } else {
             $html = "Unknown type=" . $type . " and id=" . $id;
         }
     }
     //echo $output = str_replace(array("\r\n", "\r", "\n"), "", $html);
     return $html;
 }
 //==========================================================================
 //==========================================================================
 if ($kysymys == "nayta_kokonesikatselu") {
     // Luodaan uusi Kokonaisuusolio tietojen perusteella:
     $kokon = new Kokonaisuusolio(Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY, $tietokantaolio);
     $kokon->setOtsikkotaso(2);
     $kokon->set_id($parametriolio->id_kokon);
     $html = $kokonaisuusnakymat->tulosta_esikatselu($kokon, $parametriolio);
     echo $html;
 } else {
     if ($kysymys == "nayta_tehtavan_esikatselu") {
         $otsikko = $parametriolio->otsikko_teht;
         $tehtavananto = $parametriolio->tehtavananto_teht;
         $vaikeustaso = $parametriolio->vaikeustaso_teht;
         // Luodaan uusi Tehtäväolio tietojen perusteella:
         $kuvakansion_os = Kuvat::$latauskansion_osoite;
         $tk_tehtava = "";
         $teht = new Tehtava(Tehtava::$MUUTTUJAA_EI_MAARITELTY, $tietokantaolio);
         // HUOM! Normaali set_arvo-metodi aiheuttaa sitkeät \n -merkit esikatseluun!
         $teht->set_arvo_kevyt($otsikko, Tehtava::$sarakenimi_otsikko);
         $teht->set_arvo_kevyt($tehtavananto, Tehtava::$sarakenimi_tehtavananto);
 /**
  * Hakee ne kokonaisuudet oikeassa järjestyksessä
  * jotka ovat $kokon_id-kokonaisuuden alakokonaisuuksia (alipuu).
  * Kokonaisuuspuun juurta vastaa $kokon_id (sitä ei erikseen liitetä
  * palautustaulukkoon).
  *
  * Palauttaa kokonaisuusoliot (MySQL-kutsun tulos käärittynä Kokonaisuusolio-
  * luokan olion sisään) taulukossa. Voi palauttaa tyhjän taulukon, mutta aina siis taulukon.
  *
  * Mukaan otetaan kaikki julkiset sekä muista ne, joihin on riittävät 
  * oikeudet. 
  * 
  * Huom! &-merkit ovat välttämättömiä, jotta tiedot välittyvät sisäkkäisistä
  * funktiokutsuista.
  *
  * @param array $kokonaisuudet Taulukko, johon kerätään järjestetyt kokonaisuudet.
  * @param string $otsikkonro juuriotsikon otsikkonumero merkinta, esim. '1.2.1'.
  * Se on eka kierroksella tyhjä, koska silloin ei ole tunnettua juuriotsikkoa.
  * @param int $otsikkotaso samoin kuin html:ssä.
  * @param <type> $kieli
  * @param <type> $aine
  * @param <type> $taso
  * @param <type> $kokon_id
  * @param Tietokantaolio $tietokantaolio
  * @return array Palauttaa kokonaisuustaulukon (Kokonaisuus-olioita)
  */
 function hae_kokonaisuusoliopuu(&$kokonaisuudet, &$otsikkonro, &$otsikkotaso, $kieli, $aine, $taso, $kokon_id, $tietokantaolio, $omaid)
 {
     // Tätä tarvitaan jatkossa:
     $on_kirjautunut = Henkilo::on_kirjautunut($omaid, $tietokantaolio);
     // Koostelomakkeessa voi olla poikkeava näyttötapa:
     $kohde_koostelomake = false;
     if ($this->get_parametriolio()->naytettava === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTELOMAKE) {
         $kohde_koostelomake = true;
     }
     $laskuri = 1;
     $otsikkomerkinta = "";
     /* Jokainen kutsu nostaa otsikkotasoa yhdellä:*/
     $otsikkotaso++;
     // Ellei käyttäjä kirjautunut, haetaan vain julkiset kokonaisuudet sekä
     // puoliksi piilotetut, joista siis otsikko näytetään,
     // jolloin säästetään monta työvaihetta:
     if (!$on_kirjautunut) {
         $yksityisrajaus = " AND (nakyvyys=" . Nakyvyys::$JULKINEN . " OR nakyvyys=" . Nakyvyys::$VAIN_OTSIKKO . ") ";
     } else {
         // Muuten haetaan kaikki, joista myöhemmin karsitaan sellaiset pois,
         // joihin ei ole riittäviä oikeuksia.
         $yksityisrajaus = "";
     }
     /* Haetaan kokonaisuusoliot yhdeltä otsikkotasolta (eri kuin vaikeustaso!) 
      * eli joilla sama $ylakokonaisuuden_id.
      */
     $hakulause = "SELECT *\n                        FROM kokonaisuudet\n                        WHERE ylakokonaisuuden_id = {$kokon_id}\n                        AND kieli = {$kieli}\n                        AND taso = {$taso}\n                        AND oppiaine = {$aine}\n                        {$yksityisrajaus}\n                        ORDER BY jarjestysnro";
     // Huomaa taulukkomuoto, joka käy parametriksi nouki_arvot_...-metodiin.
     $osumat = $tietokantaolio->tee_omahaku_taulukkopalautteella($hakulause);
     //======================= karsinta tässä tasossa kirjautuneelle ========
     // Muille karsintaa ei tarvita, koska näytetään vain julkiset.
     if ($on_kirjautunut) {
         $karsitut = array();
         // Käydään läpi kaikki osumat ja otetaan mukaan julkiset ja ne,
         // joihin oikeudet:
         for ($i = 0; $i < sizeof($osumat); $i++) {
             // Yhden kokonaisuuden tiedot eli sitä vastaava tietokantarivi:
             $kokonaisuustiedot = $osumat[$i];
             if ($kokonaisuustiedot[Kokonaisuusolio::$sarakenimi_nakyvyys] + 0 === Nakyvyys::$JULKINEN) {
                 array_push($karsitut, $kokonaisuustiedot);
             } else {
                 if ($kokonaisuustiedot[Kokonaisuusolio::$sarakenimi_nakyvyys] + 0 === Nakyvyys::$VAIN_OTSIKKO) {
                     // Koostelomakkeeseen ei oteta keskeneräisiä:
                     //if(!$kohde_koostelomake){
                     array_push($karsitut, $kokonaisuustiedot);
                     //}
                 } else {
                     /*======================== käyttäjän oikeudet ================*/
                     $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokonaisuustiedot[Kokonaisuusolio::$sarakenimi_henkilo_id], $omaid, Oliotyyppi::$KOKONAISUUS, $kokonaisuustiedot[Kokonaisuusolio::$SARAKENIMI_ID], $tietokantaolio);
                     /*============================================================*/
                     // Näkemisoikeudella pääsee näkemään! Muuten poistetaan!
                     if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) {
                         array_push($karsitut, $kokonaisuustiedot);
                     }
                 }
             }
         }
         // Asetetaan osumiksi vain karsitut:
         $osumat = $karsitut;
     }
     //======================= karsinta tästä tasosta loppu =================
     $kokon_lkm = sizeof($osumat);
     // Käydään läpi jokaisen osuman alipuu erikseen ja liitetään mukaan:
     for ($i = 0; $i < $kokon_lkm; $i++) {
         // Yhden kokonaisuuden tiedot eli sitä vastaava tietokantarivi:
         $kokonaisuus = $osumat[$i];
         // Nämä liittyvät saman tason kokonaisuuksiin järjestyksen
         // vaihtoa ajatellen:
         $ed_id = Kokonaisuusolio::$kokon_edellista_ei_ole;
         $seur_id = Kokonaisuusolio::$kokon_seuraavaa_ei_ole;
         //Haetaan tämän tason edellisen ja seuraavan kokonaisuudet id:t järjestyksen
         //vaihtoa varten. Eka ja vika käsitellään ensin erikseen.
         if ($i == 0) {
             // Edellistä ei ole tässä tasossa
             if ($kokon_lkm > 1) {
                 $seur_id = $osumat[1]["id"];
                 // Toimii, testattu on.
             }
         } else {
             if ($i == $kokon_lkm - 1) {
                 // Tason viimeinen kokonaisuus
                 $ed_id = $osumat[$i - 1]["id"];
                 // Toimii, testattu on.
             } else {
                 $ed_id = $osumat[$i - 1]["id"];
                 $seur_id = $osumat[$i + 1]["id"];
             }
         }
         // Muotoillaan otsikkonumerointi:
         if ($kokonaisuus["ylakokonaisuuden_id"] == -1) {
             $otsikkomerkinta = $laskuri;
         } else {
             $otsikkomerkinta = $otsikkonro . "." . $laskuri;
         }
         // Luodaan tyhjä kokonaisuusolio:
         $kokonolio = new Kokonaisuusolio(Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY, $this->get_tietokantaolio());
         // Haetaan arvot oliolle jo haetusta taulukosta:
         $kokonolio->nouki_arvot_tk_osumataulukosta($kokonaisuus);
         // Lisätään tiedot, joita ei tietokannassa tms:
         $kokonolio->setOtsikkomerkinta($otsikkomerkinta);
         $kokonolio->setOtsikkotaso($otsikkotaso);
         $kokonolio->setEdellisenId_taso($ed_id);
         $kokonolio->setSeuraavanId_taso($seur_id);
         array_push($kokonaisuudet, $kokonolio);
         // Sitten tutkitaan mukaan otetun kokonaisuuden perilliset. Jos
         // näytettäviä perillisiä eli sellaisia alikokonaisuuksia, joihin
         // on riittävät oikeudet, on olemassa, suoritetaan rekursiivinen
         // kutsu seuraavalle tasolle.
         if ($kokonolio->on_naytettavia_lapsia($omaid)) {
             $kokon_id_uusi = $kokonaisuus["id"];
             if ($otsikkonro == "") {
                 $otsikkonro_uusi = $laskuri . "";
             } else {
                 $otsikkonro_uusi = $otsikkonro . "." . $laskuri;
             }
             // Rekursiivinen kutsu!
             $this->hae_kokonaisuusoliopuu($kokonaisuudet, $otsikkonro_uusi, $otsikkotaso, $kieli, $aine, $taso, $kokon_id_uusi, $tietokantaolio, $omaid);
         }
         /* Jos kysymyksessä on otsikkotason viimeinen kokonaisuus,
          * vähennetään otsikkotasosta 1 (vaikea ymmärtää, mutta näyttää
          * toimivan :): */
         if ($kokonaisuus["id"] == $osumat[sizeof($osumat) - 1]["id"]) {
             $otsikkotaso--;
         }
         /* Kasvatetaan laskuria. */
         $laskuri++;
     }
     return $kokonaisuudet;
 }
 /**
  * Hakee testikokonaisuudet tietokannasta ja palauttaa niiden muotoillun
  * html:n. Ylimmän tason testin id on $testiylakokon_id ja se otetaan mukaan
  * näytettäviin kokonaisuuksiin.
  * @param <type> $testiylakokon_id
  * @param Parametrit $parametriolio
  * @param  $parametriolio
  * @param Parametrit $parametriolio
  * @return string palauttaa kokonaisuus-html:n.
  */
 function nayta_testikokonaisuudet($testiylakokon_id)
 {
     $parametriolio = $this->parametriolio;
     $tietokantaolio = $this->tietokantaolio;
     // Haetaan ylin kokonaisuus (joka ei tule automaattisesti:
     $hakulause = "SELECT * FROM kokonaisuudet\n                        WHERE (id=" . $testiylakokon_id . ")";
     $osumat = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
     $omaid = $parametriolio->get_omaid();
     $kokonaisuustaulukko = array();
     $ekakokonaisuus = "";
     if (!empty($osumat)) {
         // Haetaan tiedot tietokannasta ja luodaan Kokonaisuusluokan olio
         $kokon = new Kokonaisuusolio($osumat[0]->id, $tietokantaolio);
         $otsikkomerkinta = "Testi";
         $otsikkotaso = 1;
         $ed_id = -1;
         $seur_id = -1;
         if (!$kokon->olio_loytyi_tietokannasta) {
             $this->lisaa_virheilmoitus("Metodi nayta_testikokonaisuudet: " . " Kokonaisuuden haku tietokannasta " . " ja Kokonaisuusolion luominen ei onnistunut");
         } else {
             // Asetetaan tarvittavat tiedot:
             $kokon->setOtsikkomerkinta($otsikkomerkinta);
             $kokon->setOtsikkotaso($otsikkotaso);
             $kokon->setEdellisenId_taso($ed_id);
             $kokon->setSeuraavanId_taso($seur_id);
             $this->lisaa_kommentti("Kokonaisuuden haku tietokannasta " . " ja Kokonaisuusolion luominen OK.");
             // Lisätään juurikokonaisuus eli ylin taulukon alkuun:
             array_push($kokonaisuustaulukko, $ekakokonaisuus);
         }
     }
     $sisalto = "";
     $otsikkomerkinta_alussa = "1";
     $otsikkotaso_alussa = 1;
     // Seuraava on aina taulukko (array), joka voi olla tyhjä:
     $this->kokonaisuuskontrolleri->hae_kokonaisuusoliopuu($kokonaisuustaulukko, $otsikkomerkinta_alussa, $otsikkotaso_alussa, $parametriolio->kieli_id, $parametriolio->oppiaine_kokon, $parametriolio->taso_kokon, $parametriolio->ylakokonaisuuden_id_kokon, $parametriolio->get_tietokantaolio(), $omaid);
     if (empty($kokonaisuustaulukko)) {
         $sisalto .= "Testikokonaisuuksia ei loytynyt!<br/>";
     }
     foreach ($kokonaisuustaulukko as $kok) {
         $selitys_auki_id = $parametriolio->get_selitys_auki_id();
         if ($kok instanceof Kokonaisuusolio) {
             /* Tarkistetaan mahdollinen näytettävä selitys: */
             if (is_numeric($selitys_auki_id) && $selitys_auki_id != Kokonaisuusolio::$SELITYS_KIINNI_ID) {
                 if ($selitys_auki_id == $kok->get_id()) {
                     $selitys_auki = true;
                 } else {
                     $selitys_auki = false;
                 }
             } else {
                 $selitys_auki = false;
             }
             $sisalto .= $this->kokonaisuusnakymat->tulosta_kokonaisuus($kok, $parametriolio, $parametriolio->selitys_auki_id);
         } else {
             $sisalto .= "Virhe oliotyypissa (metodi: nayta_testikokonaisuudet)! <br/>";
         }
     }
     return $sisalto;
 }