/** * Hakee kaikki yhteen kokonaisuuteen liittyvät tehtävät ja palauttaa ne * kauniisti html-koodina palauteoliossa. * * @param Palaute $palauteolio */ function toteuta_nayta_tehtavat(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_kokon = $parametriolio->id_kokon; $omaid = $parametriolio->get_omaid(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $tehtava_html = ""; $sisalto = ""; $palaa_nappi = ""; /* Paluu kokonaisuuksiin. */ $uusi_teht_nappi = ""; // Asetetaan kieli, taso ja oppiaine tehtävän perusteella, kun urlista // tullaan: if ($palauteolio->naytto_urlin_mukaan()) { $parametriolio->set_naytto_urlin_mukaan(true); // Isäntäkokonaisuus haetaan tietokannasta, jos teht_id kunnollinen: $teht = $this->get_olio(); if ($teht instanceof Tehtava && $teht->olio_loytyi_tietokannasta) { $kokon_id = $teht->getKokon_id(); $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; aseta_kieli_taso_ja_oppiaine($kokon->getKieli(), $kokon->getOppiaine(), $kokon->getTaso(), $parametriolio); // Tekstien käännös. Kielet::kaanna($parametriolio->get_kieli_id()); } } } /* Uusia tehtäviä voivat lisätä (valtuuksiltaan) vähintään muokkaajat. * Kannattaa kyllä olla varovainen, jos muuttaa valtuuksia.. */ if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { try { $onsubmit_funktionimi = "nayta_tehtavalomake"; $onsubmit_parametrit = array($id_kokon); /* */ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $id_kokon . "&" . "uusi=1"); $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_uusi_value); $uusi_teht_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $sisalto .= "Uusi tehtävä -painike: " . $poikkeus->getMessage(); } } try { $onsubmit_funktionimi = "nayta_kokonaisuudet"; $onsubmit_parametrit = ""; /* Ei parametreja */ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon={$id_kokon}"); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$palaa_kokonaisuuksiin); $palaa_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $sisalto .= "Palaa-painike: " . $poikkeus->getMessage(); } $sisalto .= $uusi_teht_nappi; // Haetaan tehtävät: $tehtavat = $this->hae_tehtavat(); if (empty($tehtavat)) { $palauteolio->set_ilmoitus(Tekstit::$tehtava_ilm_ei_loytynyt); $palauteolio->set_linkkihtml($palaa_nappi); } else { $laskuri = 0; // Tehtävän nro foreach ($tehtavat as $tehtava) { if ($tehtava instanceof Tehtava) { $laskuri++; $tehtava->setNro($laskuri); $painikkeet = $this->luo_tehtavapainikkeet($tehtava->getId()); // Jos on kirjautunut käyttäjä, näytetään väripallolla, onko // yksityinen vai julkinen: if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { if ($tehtava->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) { $tehtava->setNakyvyysmerkkiPrivate(); } else { $tehtava->setNakyvyysmerkkiPublic(); } } $sisalto .= $this->tehtavanakymat->tulosta_tehtava($tehtava, $omaid, $painikkeet); } } // Haetaan tehtävälinkit, jos tehtäviä löytynyt. Lisätään // myös paluupainike linkkien eteen. $linkkihtml = $this->hae_tehtavalinkit($parametriolio); if ($linkkihtml === Tekstit::$tehtava_ilm_ei_loytynyt) { $palauteolio->set_linkkihtml($palaa_nappi); } else { $palauteolio->set_linkkihtml($palaa_nappi . $linkkihtml); } } /* Tämä ottaa palauteolion samalla käyttöön */ $palauteolio->set_sisalto($sisalto); // Haetaan kokonaisuuden tiedot: $kokon = new Kokonaisuusolio($id_kokon, $tietokantaolio); if ($kokon->olio_loytyi_tietokannasta) { $kokon_otsikko = $kokon->getOtsikko(); } else { $kokon_otsikko = "?"; } /* Lisätään otsikkotieto: */ $palauteolio->set_otsikkotarkennus($kokon_otsikko); $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA); // Kieli- yms valikot pois näkyvistä: $palauteolio->set_valikkonaytto(false); // Fixed linkit -näkymä: $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_fixed); return $palauteolio; }
/** * 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; }