/** * 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; }
/** * Palauttaa valikon html:n. * HUOM! Listasta jätetään muokatessa pois kokonaisuudet, jotka on * kyseisen luokan aliluokkia (muuten tulee tosi jänniä sotkuja). * Lisäksi myös kokonaisuus itse pitää poistaa listasta. (Nämä koskevat * muokkausta. Uuden luomisessa näitä ongelmia ei ole. Kaikki käyvät uudelle * yläkokonaisuuksiksi) * * * @param <type> $id_kokon * @param Tietokantaolio $tietokantaolio * @param <type> $ylakokonaisuuden_id_kokon * @param <type> $oppiaine * @param <type> $kieli_id * @param <type> $taso * @param <type> $uusi * @param <type> $omaid tarvitaan oliopuun hakua varten (muutos 13.12.2011) * @param Kokonaisuuskontrolleri $kokonaisuuskontrolleri tarvitaan oliopuun * haussa myös. * @return <type> */ function nayta_ylakokonaisuusvalikko($id_kokon, $tietokantaolio, &$ylakokonaisuuden_id_kokon, $oppiaine, $kieli_id, $taso, $uusi, $omaid, $kokonaisuuskontrolleri) { // Haetaan otsikot ja id:t: $hakulause = "SELECT id,otsikko\n FROM kokonaisuudet\n WHERE oppiaine={$oppiaine}\n AND taso = {$taso}\n AND kieli = {$kieli_id}\n ORDER BY otsikko"; /* AND (nakyvyys = ".Nakyvyys::$JULKINEN. " OR henkilo_id = $omaid)";*/ $osumat = $tietokantaolio->tee_omahaku_oliotaulukkopalautteella($hakulause); $sallitut = array(); // Sallitut valintaarvot // Muokkaustilassa poistetaan osumista kokonaisuusalipuu, ettei // viittaukset mene sekaisin: if (!$uusi) { $ekan_otsikko = ""; $kokonaisuudet = array(); $otsikkotaso = Kokonaisuusolio::$otsikkotaso_oletus; /* Ei tarvita */ $alipuu = $kokonaisuuskontrolleri->hae_kokonaisuusoliopuu($kokonaisuudet, $ekan_otsikko, $otsikkotaso, $kieli_id, $oppiaine, $taso, $id_kokon, $tietokantaolio, $omaid); foreach ($osumat as $ehdokas) { $ehdokas_sallittu = true; foreach ($alipuu as $kielletty) { if ($ehdokas->id == $kielletty->get_id()) { $ehdokas_sallittu = false; } } /* Tarkistetaan vielä, ettei itse juurikokonaisuus ole mukana * (tehdyn muutoksen jälkeen juurikok. ei ole enää mukana * alipuussa): */ if ($ehdokas->id == $id_kokon) { $ehdokas_sallittu = false; } /* Ellei löytynyt kiellettyjen listalta, lisätään valikkoon: */ if ($ehdokas_sallittu) { array_push($sallitut, $ehdokas); } } } else { // Uudelle kokonaisuudelle yläkokonaisuuden valinta on vapaa! $sallitut = $osumat; } // Luodaan taulukot tyhjine vaihtoehtoineen (jolloin ei yläkokonaisuutta): $arvot = array(-1); $nimet = array(Tekstit::$kokonlomake_ei_ylatasoa); // Viedään otsikot ja vastaavat arvot taulukoihin: if (sizeof($sallitut) != 0) { foreach ($sallitut as $kokonaisuus) { array_push($arvot, $kokonaisuus->id); array_push($nimet, $kokonaisuus->otsikko); } } $valikkohtml = ""; try { $name_arvo = "ylakokonaisuuden_id_kokon"; if ($uusi) { // Oletuksena viimeksi aktiivisen kokonaisuuden alle: $oletusvalinta_arvo = $id_kokon; } else { $oletusvalinta_arvo = $ylakokonaisuuden_id_kokon; } $otsikko = Tekstit::$ylakokonaisuusvalikko_otsikko; $valikkohtml .= Html::luo_pudotusvalikko($arvot, $nimet, $name_arvo, $oletusvalinta_arvo, $otsikko); } catch (Exception $poikkeus) { $valikkohtml = Tekstit::$virheilm_ylakokonaisuusvalikko . " (" . $poikkeus->getMessage() . ")"; } return $valikkohtml; }
// Ei väliä // Tälläkään ei liene väliä, kunhan jokin on. $otsikkotaso_alussa = Kokonaisuusolio::$otsikkotaso_oletus; $kokonaisuustaulukko = array(); // Haetaan kieli, oppiaine ja taso oikeasta paikasta: $kieli_id = $parametriolio->kieli_id; $oppiaineindeksi = $parametriolio->oppiaine_kokon; $taso = $parametriolio->taso_kokon; if ($kohde === "koostelomake") { $kieli_id = $parametriolio->koostelomake_valittavat_kieli; $oppiaineindeksi = $parametriolio->koostelomake_valittavat_oppiaine; $taso = $parametriolio->koostelomake_valittavat_taso; } // Seuraava on aina taulukko (array), joka voi olla tyhjä. // Muuten sisältää klikatun lapsikokonaisuudet: $alikokonaisuudet = $kokonaisuuskontrolleri->hae_kokonaisuusoliopuu($kokonaisuustaulukko, $otsikkomerkinta_alussa, $otsikkotaso_alussa, $kieli_id, $oppiaineindeksi, $taso, $ylakokonaisuuden_id, $tietokantaolio, $omaid); $sessiomuuttujan_nimi = Parametrit::linkkisessiomuuttujan_nimi($id_kokon); // Avattaessa tehdään huolella aiempien valintojen mukaan. if ($aukaisu == 1) { // Avataan klikattu linkki, jos sillä lapsia: if (sizeof($alikokonaisuudet) > 0) { $sessiomuuttujan_nimi = Parametrit::linkkisessiomuuttujan_nimi($id_kokon); $_SESSION[$sessiomuuttujan_nimi] = Kokonaisuusolio::$LINKKI_AUKI; } // Otetaan ylös näytettävien linkkien id:t. $rajataso = 0; $piilotus_kaynnissa = false; // Näytetäänkö linkit vai ei. foreach ($alikokonaisuudet as $kokolio) { if ($kokolio instanceof Kokonaisuusolio) { $naytettavan_id = $kokolio->get_id();