/** * 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; }