/** * Hakee koostelomakkeeseen valittavat elementit ja palauttaa tiedot xml-muodossa. */ function hae_elementit($parametriolio, $koostekontrolleri, $tietokantaolio, $koodaus) { $xml = ""; $kooste_kieli = $parametriolio->koostelomake_valittavat_kieli; $kooste_taso = $parametriolio->koostelomake_valittavat_taso; $kooste_oppiaine = $parametriolio->koostelomake_valittavat_oppiaine; $kokonaisuudet = $koostekontrolleri->hae_koostelomakkeen_kokonaisuudet($kooste_kieli, $kooste_taso, $kooste_oppiaine); // Jos kysymys on muokkauksesta, pitää koosteeseen kuuluvat kokonaisuudet // merkitä valituiksi ja sitä varten tarvitaan elementit: $kooste = new Kooste($parametriolio->kooste_id, $tietokantaolio); if ($kooste->olio_loytyi_tietokannasta) { $valitut_elementit = $kooste->hae_elementit(); $koostekontrolleri->merkitse_valitut($kokonaisuudet, $valitut_elementit); } $elem_html = $koostekontrolleri->hae_elementtilista($kokonaisuudet, false); $xml = '<?xml version="1.0" encoding="' . $koodaus . '"?>' . '<linkit>' . '<isannan_id>' . Koostekontrolleri::$koostelom_elemtaulukkoid . '</isannan_id>' . '<html>' . htmlspecialchars($elem_html) . '</html>' . '</linkit>'; return $xml; }
/** * Hakee elem_id:n koosteen ja viittausolion perusteella, eli siis jos * on olemassa elementti tällainen. Palauttaa id tai arvon * Elementti::MUUTTUJA_EI_MAARITELTY, ellei elementtiä ole. * @param Kooste $kooste * @param type $viittausolio */ public function hae_elem_id($kooste, $viittausolio) { $elem_id = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elementit = $kooste->hae_elementit(); foreach ($elementit as $elem) { if ($elem instanceof Elementti && $viittausolio instanceof Kokonaisuusolio) { if ($elem->get_arvo(Elementti::$sarakenimi_olio_id) + 0 === $viittausolio->get_id() && $elem->get_arvo(Elementti::$sarakenimi_oliotyyppi) + 0 === Oliotyyppi::$KOKONAISUUS) { $elem_id = $elem->get_id(); } } else { if ($elem instanceof Elementti && $viittausolio instanceof Tehtava) { if ($elem->get_arvo(Elementti::$sarakenimi_olio_id) + 0 === $viittausolio->get_id() && $elem->get_arvo(Elementti::$sarakenimi_oliotyyppi) + 0 === Oliotyyppi::$TEHTAVA) { $elem_id = $elem->get_id(); } } else { if ($elem instanceof Elementti && $viittausolio instanceof Ratkaisu) { if ($elem->get_arvo(Elementti::$sarakenimi_olio_id) + 0 === $viittausolio->get_id() && $elem->get_arvo(Elementti::$sarakenimi_oliotyyppi) + 0 === Oliotyyppi::$RATKAISU) { $elem_id = $elem->get_id(); } } } } } return $elem_id; }
/** * Palauttaa koosteen elementtiryhmälomakkeen koodin. Jos $elementtiryhma- * parametri löytyy tietokannasta, on kysymys vanhan muokkaamisesta, muuten * uuden koosteen luomisesta. * @param Kooste $kooste Kooste-luokan olio, jonka elementeistä tehdään ryhmää. * @param Elementtiryhma $elementtiryhma Elementtiryhma-luokan olio. * @param Parametrit $parametrit Parametrit-luokan olio. * @param array $elementit Koosteen sellaiset elementit, joihin käyttäjällä * on vähintään katseluoikeus. */ public function nayta_elemryhmalomake($kooste, $elementtiryhma, $parametrit, $elementit) { $sisalto = ""; $elemryhma_kooste_id = ""; $elemryhma_tunnus = ""; $elemryhma_nimi = ""; $elemryhma_selitys = ""; $elemryhma_id = ""; // Sisältää linkit ryhmän vanhoihin elementteihin (ennen nykyisiä muutoksia). $vanhat_elementtilinkit = array(); $tekstikentan_lev = 55; $tekstiruudun_lev = 57; $uuden_luominen = true; $empty_array = array(); // Asetetaan mahdolliset vanhat arvot kohdilleen: if ($elementtiryhma instanceof Elementtiryhma && $elementtiryhma->olio_loytyi_tietokannasta) { $uuden_luominen = false; // Perustiedot: $elemryhma_kooste_id = $elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_kooste_id); $elemryhma_tunnus = $elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_tunnus); // Alla ovat sen takia, ettei ala kehittämään mitään ylim. muokatessa. $elemryhma_nimi = htmlspecialchars(stripslashes($elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_nimi)), ENT_QUOTES, "UTF-8", true); $elemryhma_selitys = htmlspecialchars(stripslashes($elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_selitys)), ENT_QUOTES, "UTF-8", true); $lomakeotsikko = Html::luo_otsikko(Tekstit::$elemryhma_lomakeotsikko_muokkaus, $empty_array, 1); $elemryhma_id = $elementtiryhma->get_id(); $vanhat_elementtilinkit = $elementtiryhma->hae_linkit(); } else { // Uusi elementtiryhmä $elemryhma_nimi = $parametrit->elemryhma_nimi; $elemryhma_tunnus = $parametrit->elemryhma_tunnus; $elemryhma_kooste_id = $parametrit->elemryhma_kooste_id; $elemryhma_selitys = $parametrit->elemryhma_selitys; $lomakeotsikko = Html::luo_otsikko(Tekstit::$elemryhma_lomakeotsikko_uusi, $empty_array, 1); $elemryhma_id = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; // Arvo ei_maaritelty (-2) ei näytä kivalta, joten muutetaan se // tyhjäksi. Huomaa &, ilman sitä ei toimi.. $syotteet = array(&$elemryhma_nimi, &$elemryhma_selitys); 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::$elemryhmalomake_nimikenttaid, Tekstit::$elemryhmalomake_nimi . " *: ", $empty_array), $empty_array) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$elemryhma_name_nimi), Attr::size($tekstikentan_lev), Attr::max_length(100), Attr::id(Koostenakymat::$elemryhmalomake_nimikenttaid), Attr::value($elemryhma_nimi))), array(Attr::colspan(2))), array(Attr::title(Tekstit::$elemryhmalomake_nimi_title))); // rivi // Tyyppirivi (uusi hieno metodi Asetuspohjan avulla: $tunnukset = new Elemryhmatunnukset(); $select_maaritteet = array(Attr::name(Koostekontrolleri::$elemryhma_name_tunnus)); $option_maaritteet = $empty_array; $oletusvalinta_arvo = $elemryhma_tunnus; $otsikko = ""; // Asetetaan erikseen. $tunnusvalikko = $tunnukset->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko); $tunnusrivi = Html::luo_tablerivi(Html::luo_tablesolu(Tekstit::$elemryhmalomake_tunnus . ": ", $empty_array) . Html::luo_tablesolu($tunnusvalikko, array(Attr::colspan(2))), $empty_array); // Selitysrivi: $selitysrivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$elemryhmalomake_selityskenttaid, Tekstit::$elemryhmalomake_selitys . ": ", $empty_array), $empty_array) . Html::luo_tablesolu(Html::luo_textarea($elemryhma_selitys, array(Attr::name(Koostekontrolleri::$elemryhma_name_selitys), Attr::cols($tekstiruudun_lev), Attr::rows(9), Attr::id(Koostenakymat::$elemryhmalomake_selityskenttaid))), array(Attr::colspan(2))), array(Attr::title(Tekstit::$elemryhmalomake_selitys_title))); // rivi // // Elementit, joista voi valita sopivat. Ensin otsikko, sitten loput: $elementtirivit = Html::luo_tablerivi(Html::luo_tablesolu("", $empty_array) . Html::luo_tablesolu(Html::luo_b(Tekstit::$elemryhma_elemvalintaotsikko . ": ", $empty_array), array(Attr::colspan(2))), $empty_array); // Täällä muokkauksen yhteydessä käydään läpi aina vanhat linkit, // jotta osataan entiset valinnat asettaa kohdalleen. foreach ($elementit as $elementti) { if ($elementti instanceof Elementti) { $on_valittu = false; // Onko ennestään ryhmässä vai ei. if (!$uuden_luominen) { foreach ($vanhat_elementtilinkit as $linkki) { if ($linkki->get_arvo(Elementtiryhmalinkki::$sarakenimi_elementti_id) + 0 === $elementti->get_id() + 0) { $on_valittu = true; break; } } } // CheckBox attributes: $maaritteet = array(Attr::id("elem" . $elementti->get_id()), Attr::name(Koostekontrolleri::$elemryhma_name_elementtivalinnat . "[]"), Attr::value($elementti->get_id())); if ($on_valittu) { array_push($maaritteet, Attr::checked()); } // Luodaan rivi jokaista elementtiä kohti: $elementtirivit .= Html::luo_tablerivi(Html::luo_tablesolu("", $empty_array) . Html::luo_tablesolu(Html::luo_label_for("elem" . $elementti->get_id(), $elementti->hae_otsikko() . " ", $empty_array), $empty_array) . Html::luo_tablesolu(Html::luo_checkbox($maaritteet), $empty_array), $empty_array); } } //====================================================================== //====================================================================== // Luodaan vielä tallennuspainike: if ($uuden_luominen) { $painike_value = Painikkeet::$kooste_tallenna_uusi_ryhmittely_value; $painike_title = Painikkeet::$kooste_tallenna_uusi_ryhmittely_title; $form_action = "index.php?" . Koostekontrolleri::$kooste_name_id . "=" . $kooste->get_id(); // Paluupainike: $paluupainike = $this->luo_paluu_koosteeseen_nayttopainike($kooste); } else { $painike_value = Painikkeet::$kooste_tallenna_ryhmittelymuokkaus_value; $painike_title = Painikkeet::$kooste_tallenna_ryhmittelymuokkaus_title; $form_action = "index.php?" . Koostekontrolleri::$kooste_name_id . "=" . $kooste->get_id() . "&" . Koostekontrolleri::$elemryhma_name_id . "=" . $elementtiryhma->get_id(); // Paluupainike: $paluupainike = $this->nayta_painike_paluu_elementtiryhmaan($kooste->get_id(), $elemryhma_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))); $tallennuspainikerivi = Html::luo_tablerivi(Html::luo_tablesolu($tallennuspainike, array(Attr::colspan(3))), $empty_array); // rivi //====================================================================== $taulukko = Html::luo_table($nimirivi . $tunnusrivi . $selitysrivi . $elementtirivit . $tallennuspainikerivi, $empty_array); $sisalto .= $lomakeotsikko . $taulukko; $koodi = Html::luo_form($sisalto, array(Attr::classs("elemryhmalomake"), Attr::action($form_action), Attr::method("post"), Attr::onsubmit("tarkista_arvot_elemryhma", array(Koostenakymat::$elemryhmalomake_nimikenttaid, Tekstit::$elemryhma_virheilm_syotevika)))); return $koodi . $paluupainike; }
/** * Etsii tietokannasta ja palauttaa olion näkyvyysarvon. Oletuspalautusarvo * on Nakyvyys::$YKSITYINEN. Muita arvoja tutkitaan vain, jos kyseinen * olio löytyy tietokannasta. * @param type $kohdeolio_id * @param type $kohdeoliotyyppi * @param type $tietokantaolio */ public static function hae_nakyvyys($kohdeolio_id, $kohdeoliotyyppi, $tietokantaolio) { $nakyvyys = Nakyvyys::$YKSITYINEN; if ($kohdeoliotyyppi + 0 === Oliotyyppi::$KOKONAISUUS) { $kohde = new Kokonaisuusolio($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$TEHTAVA) { $kohde = new Tehtava($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$RATKAISU) { $kohde = new Ratkaisu($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$KOOSTE) { $kohde = new Kooste($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->get_arvo(Kooste::$sarakenimi_nakyvyys); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$ELEMENTTI) { $kohde = new Elementti($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->get_arvo(Elementti::$sarakenimi_nakyvyys); } } else { } } } } } return $nakyvyys; }