예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * @param string $id_raaka Id value of the element (like teht_43)
  * @param Parametrit $parametriolio
  * @param Tehtavanakymat $tehtavanakymat
  * @param Kokonaisuusnakymat $kokonnakymat
  */
 function show_element_preview($id_raaka, $parametriolio, $tehtavanakymat, $kokonnakymat)
 {
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $omaid = $parametriolio->get_omaid();
     // Let's find out the type of element:
     $type = Elementti::irrota_elem_olion_tyyppi($id_raaka);
     // Let's find out the id of the original object:
     $id = Elementti::irrota_elem_olion_id($id_raaka);
     if ($type === Oliotyyppi::$TEHTAVA) {
         // Luodaan uusi Tehtäväolio tietojen perusteella:
         $teht = new Tehtava($id, $tietokantaolio);
         $html = $tehtavanakymat->tulosta_esikatselu($omaid, $teht);
     } else {
         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;
 }
예제 #3
0
 /**
  * Hakee kaikki yhteen tehtävään liittyvät ratkaisut ja palauttaa ne
  * kauniisti html-koodina palauteoliossa.
  *
  * @param Palaute $palauteolio
  */
 function toteuta_nayta(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $id_kokon = $parametriolio->id_kokon;
     $id_teht = $parametriolio->id_teht;
     $omaid = $parametriolio->get_omaid();
     $kayttajan_valtuudet = $parametriolio->get_valtuudet();
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $kuvakansion_os = Kuvat::$latauskansion_osoite;
     $paluunappi = "";
     /* Palauttaa käyttäjän tehtävänäkymään. */
     $ratkaisu_html = "";
     $uusi_ratkaisu_nappi = "";
     /*  */
     $tehtavanakymat = new Tehtavanakymat();
     /***************************************************************************/
     // Haetaan ensin tehtävä, jotta sen voi nähdä samalla: ********************/
     $tehtava_html = "";
     $teht = new Tehtava($id_teht, $tietokantaolio);
     if (!$teht->olio_loytyi_tietokannasta) {
         $tehtava_html = Tekstit::$tehtava_ilm_ei_loytynyt;
     } else {
         $tehtava_html .= $tehtavanakymat->tulosta_tehtava_ilman_painikkeita($omaid, $teht);
     }
     /**************************************************************************/
     // Asetetaan kieli, taso ja oppiaine kokonaisuuden perusteella, kun urlista
     // tullaan. Ratkaisun avulla löydetään tehtävä ja sen avulla kokonaisuus:
     if ($palauteolio->naytto_urlin_mukaan()) {
         $parametriolio->set_naytto_urlin_mukaan(true);
         // Isäntäkokonaisuus haetaan tietokannasta, jos ratk_id kunnollinen:
         $ratk = $this->get_olio();
         if ($ratk instanceof Ratkaisu && $ratk->olio_loytyi_tietokannasta) {
             $teht_id = $ratk->getTeht_id();
             $teht = new Tehtava($teht_id, $tietokantaolio);
             if ($teht->olio_loytyi_tietokannasta) {
                 $kokon_id = $teht->getKokon_id();
             }
             // Lopulta päästään käsiksi kokonaisuuteen:
             $kokon = new Kokonaisuusolio($kokon_id, $tietokantaolio);
             // Jos löytyi, asetetaan kieli, taso ja oppiaine, jottei tarvita
             // urlissa:
             if ($kokon instanceof Kokonaisuusolio && $kokon->olio_loytyi_tietokannasta) {
                 // Asetetaan nämä, voipi olla tarvetta:
                 $parametriolio->id_kokon = $kokon_id;
                 $parametriolio->id_teht = $teht_id;
                 aseta_kieli_taso_ja_oppiaine($kokon->getKieli(), $kokon->getOppiaine(), $kokon->getTaso(), $parametriolio);
                 // Tekstien käännös.
                 Kielet::kaanna($parametriolio->get_kieli_id());
             }
         }
     }
     //=====================================================================
     try {
         $paluunappi = $this->tehtavanakymat->button_gobackto_all_exercises($id_teht);
     } catch (Exception $poikkeus) {
         $tehtava_html .= "Palaa-painike: " . $poikkeus->getMessage();
     }
     // Uusia ratkaisuja saavat tehdä ne, jotka lisätä tehtäviäkin:
     if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
         // Uusi_ratkaisu_painike:
         $onsubmit_funktionimi = "nayta_ratkaisulomake";
         $onsubmit_parametrit = array($id_teht);
         /* Tehtävän id */
         $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_teht=" . $id_teht . "&id_kokon=" . $id_kokon . "&uusi=1");
         $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$ratkaisu_uusi_value);
         $uusi_ratkaisu_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
     }
     $ratkaisu_html .= $paluunappi . $tehtava_html;
     $ratkaisu_html .= "<h3>" . Tekstit::$ratkaisu_ratkaisut_valiotsikko . "</h3>";
     $ratkaisu_html .= $uusi_ratkaisu_nappi;
     $ratkaisut = $this->hae_ratkaisut($id_teht);
     if (empty($ratkaisut)) {
         $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_ilm_ei_loytynyt);
     } else {
         foreach ($ratkaisut as $ratkaisu) {
             if ($ratkaisu instanceof Ratkaisu) {
                 // Jos on kirjautunut käyttäjä, näytetään väripallolla, onko
                 // yksityinen vai julkinen:
                 if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
                     if ($ratkaisu->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) {
                         $ratkaisu->setNakyvyysmerkkiPrivate();
                     } else {
                         $ratkaisu->setNakyvyysmerkkiPublic();
                     }
                 }
                 $painikkeet = $this->luo_ratkaisupainikkeet($ratkaisu->getId());
                 $ratkaisu_html .= $this->ratkaisunakymat->tulosta_ratkaisu($id_kokon, $ratkaisu, $omaid, $painikkeet);
             } else {
                 $this->lisaa_virheilmoitus(Tekstit::$ratkaisu_ilm_ei_loytynyt);
             }
         }
     }
     /* Tämä ottaa palauteolion samalla käyttöön */
     $palauteolio->set_sisalto($ratkaisu_html);
     $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU);
     // Kieli- yms valikot pois näkyvistä:
     $palauteolio->set_valikkonaytto(false);
     return $palauteolio;
 }