/** * Palauttaa ratkaisulomakkeen html-koodin. * @param Parametrit $parametriolio * @return string */ function nayta_ratkaisulomake($parametriolio) { $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $id_ratk = $parametriolio->id_ratk; $omaid = $parametriolio->get_omaid(); $uusi = $parametriolio->uusi; $ilmoitus_ratk = $parametriolio->ilmoitus_ratk; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kaavakieli = $parametriolio->kaavakieli; $nakyvyys_ratk = $parametriolio->nakyvyys_ratk; $mj = ""; // Lomakkeen html-koodi. $tehtavanakymat = new Tehtavanakymat(); // Tarpeen matkan varrella. // TArkistetaan, onko käyttäjä tulossa koosteesta / elementtiryhmästä // ja mahdollistetaan paluu: $elem_id = $parametriolio->elementti_id; $elemryhma_id = $parametriolio->elemryhma_id; $koostetieto = ""; if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $koostetieto = "&" . Koostekontrolleri::$elementti_name_id . "=" . $elem_id; } if ($elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $koostetieto .= "&" . Koostekontrolleri::$elemryhma_name_id . "=" . $elemryhma_id; } /***********************************************************************/ // Haetaan ensin tehtävä, jotta sen voi nähdä samalla: *****************/ $tehtava_html = ""; /* Haetaan tehtävä: */ $tehtava = new Tehtava($id_teht, $tietokantaolio); if (!$tehtava->olio_loytyi_tietokannasta) { $tehtava_html = Tekstit::$tehtava_ilm_ei_loytynyt; } else { $tehtava_html .= $tehtavanakymat->tulosta_tehtava_ilman_painikkeita($omaid, $tehtava); } /**************************************************************************/ $esikatselunappi = "<button type='button' " . "onclick='nayta_ratkaisun_esikatselu(" . $id_kokon . "," . $id_teht . "," . $id_ratk . ")'" . "title='" . Painikkeet::$ESIKATSELU_TITLE . "'/>" . Painikkeet::$ESIKATSELU_VALUE . "</button>"; // Haetaan ajantasalla olevat tiedot tietokannasta. Aiemmin // tiedot tuotiin kiinteästi painikelomakkeeseen, mutta tällöin // kokorajoitus urlissa aiheutti ongelmia. Muutenkin se on huonompi // ja turvattomampi tapa. $ratkaisu = new Ratkaisu($id_ratk, $tietokantaolio); // Pyritään tekemään niin, että vastauksen ollessa tyhjä ei // kirjoitettu vastaus kuitenkaan häviä.. if ($ratkaisu->olio_loytyi_tietokannasta) { if (empty($parametriolio->ratkaisu_ratk)) { $vastaus_ratk = $ratkaisu->getVastaus(); $ratkaisu_ratk = $ratkaisu->getRatkaisu(); } else { $vastaus_ratk = $parametriolio->vastaus_ratk; $ratkaisu_ratk = $parametriolio->ratkaisu_ratk; } $nakyvyys_ratk = $ratkaisu->getNakyvyys(); } else { if (empty($parametriolio->ratkaisu_ratk)) { $vastaus_ratk = ""; $ratkaisu_ratk = $tehtava->getTehtavananto(); } else { // Jos tietoja syötetty (esim. virhesyöte): $vastaus_ratk = $parametriolio->vastaus_ratk; $ratkaisu_ratk = $parametriolio->ratkaisu_ratk; } } // Siivotaan kenot ja varmistetaan tagien yms oikea näyttötapa: $vastaus_ratk = htmlspecialchars($vastaus_ratk, ENT_QUOTES, "UTF-8", true); $ratkaisu_ratk = htmlspecialchars($ratkaisu_ratk, ENT_QUOTES, "UTF-8", true); // Kaavakielivalikko:================================================== $kaavakielet = new Kaavakieli(); $select_maaritteet = array(Attr::onchange("muuta_kaavakieli", array("this.value", Yleiset_arvot::$kaavakieli_name))); $option_maaritteet = array(); $kaavakielivalikko = $kaavakielet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $kaavakieli, Tekstit::$kaavakieli_otsikko); //===================================================================== // Näkyvyysvalikko: =================================================== $nakyvyydet = new Nakyvyys(); $select_maaritteet = array(Attr::name(Ratkaisukontrolleri::$ratkaisu_name_nakyvyys)); $option_maaritteet = array(); $otsikko = ""; $nakyvyysvalikko = $nakyvyydet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $nakyvyys_ratk, $otsikko); //===================================================================== $vastaus_maxpituus = 1000; $ratkaisu_maxpituus = 10000; $toiminnan_name_arvo = Toimintonimet::$tehtavatoiminto; // Ilmoitus otetaan mukaan, jos ei tyhjä: if ($ilmoitus_ratk != "") { $ilmoitus_ratk = "<div class='lomakeilmoitus'>" . $ilmoitus_ratk . "</div>"; } if ($uusi) { $submitnappi = "<input type='submit'\n name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$ratkaisu_tallenna_uusi_value . "'/>"; $perunappi = "<input type='submit'\n name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$ratkaisu_peru_uuden_tallennus_value . "'" . "title='" . Painikkeet::$ratkaisu_peru_uuden_tallennus_title . "'/>"; } else { $submitnappi = "<input type='submit'\n name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$ratkaisu_tallenna_muokkaus_value . "'/>"; $perunappi = "<input type='submit'\n name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$ratkaisu_peruminen_value . "'/>"; } $muokattavan_elementin_id = "ratkaisuteksti"; $alasvetovalikon_id = "merkit1"; $tekstityokaluolio = new Tekstityokalupalkki($muokattavan_elementin_id, $alasvetovalikon_id); $tekstimuokkauspainikkeet = $tekstityokaluolio->luo_painikkeet(Tekstityokalupalkki::$PERUSPAINIKKEET_JA_MATEMAATTISET, $kaavakieli); // Kaavakielivalikko:================================================== $kaavakielet = new Kaavakieli(); $select_maaritteet = array(Attr::onchange("muuta_kaavakieli", array("this.value", Yleiset_arvot::$kaavakieli_name, $muokattavan_elementin_id, $alasvetovalikon_id))); $option_maaritteet = array(); $kaavakielivalikko = $kaavakielet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $kaavakieli, Tekstit::$kaavakieli_otsikko); //===================================================================== //====================================================================== // Sitten palat yhteen: $mj = $tehtava_html . "<form align='left' method='post' id='ratkaisulomake' class='lomake'" . "action='index.php?" . "id_ratk=" . $id_ratk . "&id_teht=" . $id_teht . "&id_kokon=" . $id_kokon . "&uusi=" . $uusi . $koostetieto . "'/>" . $ilmoitus_ratk . "<table summary='uudet_tiedot'>" . "<tr><td colspan=2><b>" . Tekstit::$ratkaisulomake_ohje . " " . $esikatselunappi . "</b></td>" . "</tr>" . "<tr><td>" . Tekstit::$ratkaisulomake_vastaus . ": </td><td><input type='text'\n size='80' maxlength='{$vastaus_maxpituus}' id='vastausteksti'" . "name='vastaus_ratk' value='{$vastaus_ratk}'\n title='" . Tekstit::$ratkaisulomake_vastaustitle . "'/></td>" . "</tr>" . "<tr><td>" . Tekstit::$nakyvyys_valikko_otsikko . "</td><td>" . $nakyvyysvalikko . "</td>" . "</tr>" . "<tr><td></td>" . "<td>" . $kaavakielivalikko . "</td>" . "</tr>" . "<tr><td></td><td>" . $tekstimuokkauspainikkeet . "</td></tr>" . "<tr><td>" . Tekstit::$ratkaisulomake_ratkaisu . ":</td>" . "<td colspan='2'><textarea id='ratkaisuteksti' cols='80' rows='20'\n maxlength = {$ratkaisu_maxpituus}\n name='ratkaisu_ratk'>{$ratkaisu_ratk}" . "</textarea></td></tr>" . "<tr><td></td><td align='left'>" . $submitnappi . $perunappi . "</td></tr>" . "</table>" . "</form>"; return $mj; }
/** * Palauttaa yhden koostelomakkeessa otsikon "valitut elementit" alla * olevan valinnan html-koodin. Valinnalle annetaan id arvoksi vastaavan * olion id, jonka eteen on lisatty teksti "elemval_kokon_", "elemval_teht_" * tai "elemval_ratk_", jotta oikea olio pystytään löytämään (id:t voivat * olla samoja eri olioilla). * * HUOM! Jos parametri $divi_tagit_mukaan on arvoltaan false, ei * div-tageja liitetä sisällön ympärille. Tätä tarvitaan, kun ajaxin kautta * tuodaan koodia sisään. * * * @param type $oliotyyppi * @param type $id_olio * @param type $divi_tagit_mukaan * @param Tietokantaolio $tietokantaolio * @return type */ public function luo_valitut_elem_divi($oliotyyppi, $id_olio, $divi_tagit_mukaan, $tietokantaolio) { // Every div containing a choice has this same class value: $class_name = "chosen_elements_div"; if ($oliotyyppi + 0 === Oliotyyppi::$KOKONAISUUS) { $olio = new Kokonaisuusolio($id_olio, $tietokantaolio); $otsikko = Tekstit::$Kokonaisuus_short . " " . $olio->getOtsikko(); } else { if ($oliotyyppi + 0 === Oliotyyppi::$TEHTAVA) { $olio = new Tehtava($id_olio, $tietokantaolio); $otsikko = Tekstit::$Tehtava_short . ": " . $olio->getOtsikko(); } else { if ($oliotyyppi + 0 === Oliotyyppi::$RATKAISU) { $olio = new Ratkaisu($id_olio, $tietokantaolio); $otsikko = Tekstit::$Ratkaisu_short . " :" . $olio->getVastaus(); } else { $otsikko = Tekstit::$tuntematon; $olio = null; } } } $valittuelem_id = $this->luo_valitun_elementin_id($olio); $valittuelem_valintaruutu = $this->luo_valittujen_elem_listan_valintaruutu($olio); if ($divi_tagit_mukaan) { $palaute = Html::luo_div($otsikko . $valittuelem_valintaruutu, array(Attr::id($valittuelem_id), Attr::classs($class_name), Attr::onclick("kooste_set_elem_place", array($valittuelem_id)))); } else { $palaute = $otsikko . $valittuelem_valintaruutu; } return $palaute; }
public function hae_ratkaisukoodi() { $sulkemisnappi = "<button onclick='sulje_esikatselu()' title='" . Painikkeet::$KOODIKATSELU_SULJE_TITLE . "'>" . Painikkeet::$KOODIKATSELU_SULJE_VALUE . "</button>"; $koodi = Html::luo_div($sulkemisnappi, array(Attr::style("text-align: center"))); $id = $this->get_parametriolio()->id_ratk; $ratk = new Ratkaisu($id, $this->get_tietokantaolio()); if ($ratk->olio_loytyi_tietokannasta) { $koodi .= nl2br(htmlspecialchars($ratk->getVastaus())) . "<br/>" . nl2br(htmlspecialchars($ratk->getRatkaisu())); } else { $koodi .= Tekstit::$ratkaisu_ilm_ei_loytynyt; } return $koodi; }