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; }
/** * 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; }
/** * Luo testiratkaisun ja palauttaa Ratkaisu-luokan olion, tai arvon * Pohja::$VIRHE. * * create table ratkaisut ( id mediumint auto_increment not null, tehtava_id mediumint not null, henkilo_id smallint not null, luomishetki_sek int not null, ed_muutos_sek int not null, vastaus varchar(1000), ratkaisu varchar(10000) not null, primary key (id), index(tehtava_id), FOREIGN KEY (tehtava_id) REFERENCES tehtavat (id) ON DELETE CASCADE ) ENGINE=INNODB; * * @param type $parametriolio */ private function luo_testiratkaisu() { $jatkolupa = false; $palaute = Pohja::$VIRHE; $ratkaisukontrolleri = new Ratkaisukontrolleri($this->tietokantaolio, $this->parametriolio); // Luodaan ensin testikokonaisuus: $this->parametriolio->set_omaid($this->testihenkilo->get_id()); $palauteolio_kokon = $this->kok_teht_ratk_testiolio->luo_testikokonaisuus("Otsikko", "Testikokonaisuus", -1); if (!$palauteolio_kokon->operaatio_onnistui()) { $this->lisaa_virheilmoitus("Testikokonaisuuden luominen epäonnistui!" . " <br/>" . $palauteolio_kokon->get_ilmoitus()); } else { $this->testikokonaisuus = new Kokonaisuusolio($palauteolio_kokon->get_muokatun_id(), $this->tietokantaolio); if ($this->testikokonaisuus->olio_loytyi_tietokannasta) { $this->lisaa_kommentti("Testikokonaisuuden luominen ok "); // Luodaan testitehtava: $palauteolio_teht = $this->kok_teht_ratk_testiolio->luo_testitehtava($palauteolio_kokon->get_muokatun_id(), "TEstitehtava on tama kiva!"); if (!$palauteolio_teht->operaatio_onnistui()) { $this->lisaa_virheilmoitus("Testitehtavan luominen epäonnistui!" . " Ilmoitukset: " . $palauteolio_teht->get_ilmoitus()); } else { $this->lisaa_kommentti("Testitehtavän luominen ok"); $jatkolupa = true; } } else { $this->lisaa_virheilmoitus("Kokon_oliota ei löytynyt tietokannasta!"); } } /************** UUDEN RATKAISUN TALLENNUS *********************************/ if ($jatkolupa) { $parametriolio = $this->parametriolio; $palaute = Pohja::$VIRHE; $id_kokon = -1; // haetaan tietokannasta tehtävä, johon ratkaisu voidaan liittää: $id_teht = $palauteolio_teht->get_muokatun_id(); $osuma = new Tehtava($id_teht, $this->tietokantaolio); if ($osuma->olio_loytyi_tietokannasta) { $this->lisaa_kommentti("Luodaan sitten testiratkaisu."); $parametriolio->id_teht = $id_teht; $parametriolio->vastaus_ratk = "Vastaus"; $parametriolio->ratkaisu_ratk = Kayttajatestaus::$testi_ratkaisu; // Laitetaan ratkaisun luojaksi testiomistaja $parametriolio->set_omaid($this->testiomistaja->get_id()); // Satunnainen id. $palauteolio = new Palaute(); $ratkaisukontrolleri->toteuta_tallenna_uusi($palauteolio); $tallennettu = new Ratkaisu($palauteolio->get_muokatun_id(), $this->tietokantaolio); if ($tallennettu->olio_loytyi_tietokannasta) { $this->lisaa_kommentti("Ratkaisun tallennus ok (omistaja testiomistaja)!! Ratkaisu = " . $tallennettu->getRatkaisu()); } else { $this->lisaa_virheilmoitus("Ratkaisun tallennus ei ok!!"); } // Tarkistetaan onnistuiko: if (!$palauteolio->operaatio_onnistui()) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe uuden ratkaisun" . " tallennuksessa (Kayttajatestaus-" . "toteuta_uuden_ratkaisun_tallennus) </div>" . $ratkaisukontrolleri->tulosta_virheilmoitukset() . $palauteolio->get_ilmoitus()); } else { // haetaan tietokannasta: $id = $palauteolio->get_muokatun_id(); $ratk = new Ratkaisu($id, $this->tietokantaolio); if ($ratk->olio_loytyi_tietokannasta) { $palaute = $ratk; } else { $this->lisaa_virheilmoitus("Testiratkaisua ei löytynyt tietokannasta!"); } } } else { $this->lisaa_virheilmoitus("Yhtään tehtävää ei löytynyt! Luo yksi ensin!"); } } return $palaute; }