/** * 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; }
/** * Toteuttaa kokonaisuudessaan uuden kokonaisuuden tallennuksen tietokantaan. * Palauttaa Palauteolio-luokan olion. * * Järjestysluvuksi kokonaisuus saa id:n. Järjestyslukua voi myöhemmin * muuttaa vaihtamalla jonkin toisen kokonaisuuden kanssa, jolloin ei pitäisi * tulla päällekkäisyyksiä. * * @return <type> */ function toteuta_tallenna_uusi(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $tallennuskesken = $parametriolio->tallennuskesken; $omaid = $parametriolio->get_omaid(); $oppiaine_kokon = $parametriolio->get_oppiaine_kokon(); $otsikko_kokon = $parametriolio->get_otsikko_kokon(); $tiivis_kokon = $parametriolio->get_tiivis_kokon(); $selitys_kokon = $parametriolio->get_selitys_kokon(); $taso_kokon = $parametriolio->get_taso_kokon(); $laajennetun_id_kokon = $parametriolio->get_laajennetun_id_kokon(); $kieli_id = $parametriolio->get_kieli_id(); $ylakokonaisuuden_id_kokon = $parametriolio->get_ylakokonaisuuden_id_kokon(); $jarjestysnro_kokon = $parametriolio->get_jarjestysnro_kokon(); $nakyvyys_kokon = $parametriolio->nakyvyys_kokon; $tietokantaolio = $parametriolio->get_tietokantaolio(); $palauteolio = new Palaute(); $linkit = ""; // Kokonaisuuslinkit $sisalto = ""; $ilmoitus = ""; $tallennetun_id = ""; $valikot_nayta = true; $kokonaisuusoliot = array(); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_YLEINEN); // Tallennettava kokonaisuus: $kokonaisuus = new Kokonaisuusolio(Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY, $this->get_tietokantaolio()); // Lisätään kokonaisuudelle saadut parametrit: $kokonaisuus->set_arvo($omaid, Kokonaisuusolio::$sarakenimi_henkilo_id); $kokonaisuus->set_arvo($otsikko_kokon, Kokonaisuusolio::$sarakenimi_otsikko); $kokonaisuus->set_arvo($tiivis_kokon, Kokonaisuusolio::$sarakenimi_tiivis); $kokonaisuus->set_arvo($selitys_kokon, Kokonaisuusolio::$sarakenimi_selitys); $kokonaisuus->set_arvo($taso_kokon, Kokonaisuusolio::$sarakenimi_taso); $kokonaisuus->set_arvo($oppiaine_kokon, Kokonaisuusolio::$sarakenimi_oppiaine); $kokonaisuus->set_arvo($laajennetun_id_kokon, Kokonaisuusolio::$sarakenimi_laajennetun_id); $kokonaisuus->set_arvo($kieli_id, Kokonaisuusolio::$sarakenimi_kieli); $kokonaisuus->set_arvo($ylakokonaisuuden_id_kokon, Kokonaisuusolio::$sarakenimi_ylakokonaisuuden_id); $kokonaisuus->set_arvo($nakyvyys_kokon, Kokonaisuusolio::$sarakenimi_nakyvyys); // Tallennus tietokantaan: $palaute = $kokonaisuus->tallenna_uusi(); // Jos tiedoissa on vikaa, esim. tyhjä otsikko: if ($palaute != Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $valikot_nayta = false; $ilmoitus_kokon = $kokonaisuus->tulosta_virheilmoitukset(); $uusi = true; $id_kokon = -1; $sisalto = $this->kokonaisuusnakymat->nayta_kokonaisuuslomake($id_kokon, $omaid, $uusi, $ilmoitus_kokon, $tietokantaolio, $oppiaine_kokon, $otsikko_kokon, $tiivis_kokon, $selitys_kokon, $taso_kokon, $jarjestysnro_kokon, $laajennetun_id_kokon, $ylakokonaisuuden_id_kokon, $kieli_id, $nakyvyys_kokon, Toimintonimet::$kokonaisuustoiminto, $this, $parametriolio->kaavakieli, Elementti::$MUUTTUJAA_EI_MAARITELTY, Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY); $ilmoitus = $ilmoitus_kokon; } else { $tallennetun_id = $kokonaisuus->get_id_tietokanta(); /* Asetetaan järjestysluku samaksi kuin kokonaisuuden id. Näin * varmistetaan se, ettei tule samoja. */ $id = $kokonaisuus->get_id(); $kokonaisuus->set_arvo($id, Kokonaisuusolio::$sarakenimi_jarjestysnro); $onnistuiko = $kokonaisuus->tallenna_muutokset(); if ($onnistuiko == Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $ilmoitus = Tekstit::$ilm_kokon_lisays_ok; //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$UUDEN_KOKONAISUUDEN_TALLENNUS); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); } } else { $ilmoitus = Tekstit::$virheilm_kokon_tallennus_ok_jarjnro_eiok . " " . $kokonaisuus->tulosta_virheilmoitukset(); } //================================================================= // Asetetaan sessiomuuttujat oikein, jotta näkyy myös // luettelossa. Yläkokonaisuus auki (sillä on ainakin yksi lapsi, // tämä) ja tämä kiinni (tällä ei voi olla lapsia, koska juuri luotu). $muuttujanimi_ylakok = Parametrit::linkkisessiomuuttujan_nimi($ylakokonaisuuden_id_kokon); $_SESSION[$muuttujanimi_ylakok] = Kokonaisuusolio::$LINKKI_AUKI; $muuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($tallennetun_id); $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_KIINNI; //================================================================= $parametriolio->id_kokon = $id; $palauteolio2 = new Palaute(); if ($tallennuskesken) { $parametriolio->uusi = false; $this->toteuta_nayta_kokonaisuuslomake($palauteolio2); } else { $palauteolio2 = $this->toteuta_nayta($palauteolio2); } $sisalto = $palauteolio2->get_sisalto(); $linkit = $palauteolio2->get_linkkihtml(); } $palauteolio->set_ilmoitus($ilmoitus); $palauteolio->set_sisalto($sisalto); $palauteolio->set_muokatun_id($tallennetun_id); $palauteolio->set_valikkonaytto($valikot_nayta); $palauteolio->set_kokonaisuudet($kokonaisuusoliot); $palauteolio->nayta_kiintolinkit(); $palauteolio->set_linkkihtml($linkit); $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS); return $palauteolio; }
/** * * @param Palaute $palauteolio * @param Parametrit $parametriolio * @param Koostekontrolleri $koostekontrolleri * @param Tehtavakontrolleri $tehtavakontrolleri * @param Ratkaisukontrolleri $ratkaisukontrolleri * @param Kokonaisuuskontrolleri $kokonaisuuskontrolleri */ function nayta_urlin_mukaan(&$palauteolio, &$parametriolio, &$koostekontrolleri, &$tehtavakontrolleri, &$ratkaisukontrolleri, &$kokonaisuuskontrolleri) { $palauteolio->set_oma(Yleiset_arvot::$toimintaa_ei_maaritelty); $palauteolio->set_naytto_urlin_mukaan(true); // Mietittävää: kielen, oppiaineen ja tason määritykset voisi laittaa // toteuta-metodeiden sisälle, jottei niitä tarvita roskaamaan urlia. // Lähinnä koosteiden kohdalla pitää // miettiä, koska tällä hetkellä kaikki näkyy kaikille, eli siis // niiden näkyvyyttä ei ole rajoitettu kielen, oppiaineen tai tason // perusteella. Mahdollisesti kielen perusteella näin voisi tehdäkin, // vaikka muut jättäisi ennalleen. // Huomaa myös, että urlissa voi olla pelkästään kielen, aineen ja // tason arvot, jolloin pitäisi osata näyttää ensimmäinen vastaava // kokonaisuus. // Otetaan kuitenkin parametrinolion arvo mukaan [, jos se on jokin muu // oletus "kokonaisuus"] (esim kun urlin perusteella tullaan): //if($parametriolio->naytettava != Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS){ $palauteolio->set_naytettava_oliotyyppi(Oliotyyppi::muunna_palauteolion_arvoksi($parametriolio->naytettava)); //} // Alla pitäisi riittää palauteolion arvo. Se ohjaa nykyisin // näytettävää oliota. Muu-arvo (vähän kuin ei-määr) viittaa siihen, // ettei url määritä näytettävää oliota, joten pitää "arvata" se muuten. if ($palauteolio->get_naytettava_oliotyyppi() != Palaute::$NAYTETTAVA_OLIOTYYPPI_MUU) { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA) { $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio); } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU) { $ratkaisukontrolleri->toteuta_nayta($palauteolio); } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE) { // Haetaan kooste kieltä, tasoa ja oppiainetta varten: $kooste = $koostekontrolleri->get_olio(); if ($kooste->olio_loytyi_tietokannasta) { $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli); $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine); $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso); // Kokonaisuusarvot ohjaavat eniten sovellusta: aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio); Kielet::kaanna($kieli); $koostekontrolleri->toteuta_nayta($palauteolio); } else { $koostekontrolleri->toteuta_nayta_koosteet($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa); } } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_TULOSTUS) { $koostekontrolleri->toteuta_nayta_tulostus($palauteolio); } else { if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_ELEMRYHMA) { // Haetaan kooste kieltä, tasoa ja oppiainetta varten: $kooste = $koostekontrolleri->get_olio(); if ($kooste->olio_loytyi_tietokannasta) { $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli); $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine); $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso); // Kokonaisuusarvot ohjaavat eniten sovellusta: aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio); Kielet::kaanna($kieli); $koostekontrolleri->toteuta_nayta($palauteolio); } else { $koostekontrolleri->toteuta_nayta_koosteet($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa); } } else { // default: $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); } } } } } //====================================================================== //====================================================================== // Kun näytettävää oliota ei urlissa, tarkistetaan mahdolliset // id-arvot. Jos jokin määritelty, mennään sinne sitten! } else { // Tarkistetaan, onko kooste-id:tä: if ($parametriolio->kooste_id != Kooste::$MUUTTUJAA_EI_MAARITELTY || $parametriolio->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $nayta_kooste = true; if ($parametriolio->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $nayta_kooste = false; } // Haetaan kooste kieltä, tasoa ja oppiainetta varten: // Huomaa, että ei välttämättä Kooste-olio! $kooste = $koostekontrolleri->get_olio(); if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) { $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli); $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine); $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso); // Kokonaisuusarvot ohjaavat eniten sovellusta: aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio); Kielet::kaanna($kieli); // NÄytetään joko kooste tai elementtiryhmä: if ($nayta_kooste) { $koostekontrolleri->toteuta_nayta($palauteolio); } else { $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio); } } else { $koostekontrolleri->toteuta_nayta_koosteet($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa); } // Huomaa järjestys: ensin tarkistetaan ratkaisu, sitten teht ja // vasta lopuksi kokonaisuus (jonka id tahtoo kummitella muistissa). } else { if ($parametriolio->id_teht != Tehtava::$MUUTTUJAA_EI_MAARITELTY) { // Näytetään yksi tehtävä: $tehtavakontrolleri->toteuta_nayta($palauteolio); } else { if ($parametriolio->id_ratk != Ratkaisu::$MUUTTUJAA_EI_MAARITELTY) { $ratkaisukontrolleri->toteuta_nayta($palauteolio); } else { if ($parametriolio->id_kokon != Kokonaisuusolio::$kokon_ei_maaritelty) { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); // Ellei näytettävää oliota, viedään oppiaineen mukaisesti: } else { if ($parametriolio->oppiaine_kokon != Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY) { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); } else { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); } } } } } } }
/** * Toteuttaa yhden koosteen tai elementtiryhmän näyttämisen tulostusmuodossa. * @param Palaute $palauteolio */ public function toteuta_nayta_tulostus(&$palauteolio) { $html = ""; $nayta_elementtiryhma = false; $elementtiryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $param = $this->get_parametriolio(); $tietokantaolio = $this->get_tietokantaolio(); // Tämä toimii jos joko id_kooste tai id_elemryhma on määritelty // parametreissa. $kooste = $this->get_olio(); // Haetaan mahdollinen elementtiryhmä: if ($param->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $elemryhma_id = $param->elemryhma_id; $elementtiryhma_cand = new Elementtiryhma($elemryhma_id, $tietokantaolio); if ($elementtiryhma_cand->olio_loytyi_tietokannasta) { $nayta_elementtiryhma = true; $elementtiryhma = $elementtiryhma_cand; } } $omaid = $this->get_parametriolio()->get_omaid() + 0; // Ratkaisukontrollerissa on valmiina ratkaisujen näyttöoikeusseulonta. $ratkaisukontrolleri = new Ratkaisukontrolleri($this->get_tietokantaolio(), $this->get_parametriolio()); $tehtavalaskuri = 0; $elemryhmapainikkeet = ""; if ($kooste instanceof Kooste) { // Tarkistetaan, onko käyttäjällä edes oikeuksia nähdä koostetta: /*======================== käyttäjän oikeudet ========*/ $kohdeoikeudet_kooste = $kooste->hae_kayttajan_oikeudet($omaid); /*====================================================*/ // Jos riittävät oikeudet, näytetään ja muuten ei. if ($kohdeoikeudet_kooste >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) { if ($nayta_elementtiryhma) { $elementit = $elementtiryhma->hae_elementit(); } else { $elementit = $kooste->hae_elementit(); } // Laskurit otsikkonumerointia varten: $laskuri_kokon = 0; $laskuri_teht = 0; $laskuri_ratk = 0; foreach ($elementit as $elementti) { if ($elementti instanceof Elementti) { // Kerätään tähän yhden elementin koodi: $elem_html = ""; $viittausolio = $elementti->hae_viittausolio(); $kohdeoikeudet = $elementti->hae_kayttajan_oikeudet_viittausolioon($omaid) + 0; $minimioikeus = Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA; // Jos vähintään näkeminen sallittu: if ($kohdeoikeudet >= $minimioikeus) { if ($viittausolio instanceof Kokonaisuusolio) { $laskuri_kokon++; $viittausolio->setOtsikkomerkinta($laskuri_kokon . ": "); // Selitys_auki pitää asettaa elementin // tallennettavaksi ominaisuudeksi tms, jotta // sitä voi säätää. Nyt vain ei näytetä. //$selitys_auki = true; $selitys_auki = false; $elem_html .= $this->get_kokonaisuusnakymat()->luo_koostenakyma_tulostus($elementti, $viittausolio, $this->get_parametriolio(), $selitys_auki, $kohdeoikeudet); } else { if ($viittausolio instanceof Tehtava) { $laskuri_teht++; $id_teht = $viittausolio->getId(); $viittausolio->setOtsikkomerkinta(Tekstit::$Tehtava . " " . $laskuri_teht); $painikkeet = ""; $elem_html .= $this->get_tehtavanakymat()->luo_koostenakyma_tulostus($elementti, $viittausolio, $painikkeet); // Haetaan tehtävän ratkaisut ja liitetään // tehtävään mukaan: $ratkaisut = $ratkaisukontrolleri->hae_ratkaisut($id_teht); $this->merkitse_ratkaisujen_otsikkonumerot($ratkaisut, $viittausolio); $elem_html .= $this->luo_tehtavan_ratkaisut_koodi($ratkaisut, true, $omaid, $elementti); } else { // Viittausoliossa jotakin kummaa. } } $html .= Html::luo_div($elem_html, array(Attr::classs("kooste_elementti_tulostus"))); } } } $koostekoodi = $this->koostenakymat->nayta_tulostusnakyma(Html::luo_div($html, array(Attr::id(Koostenakymat::$kooste_elementti_id))), $kooste, $elementtiryhma); } else { // Ellei oikeuksia koosteen katselemiseen. $koostekoodi = Html::luo_otsikko(Tekstit::$kooste_ilm_nayttoon_ei_oikeuksia, array(), 4); } } $kooste_id = $kooste->get_id(); // Nykyinen kooste. $painikkeet = $this->get_koostenakymat()->luo_paluu_tulostusnaytosta_painike($kooste, $elementtiryhma) . $this->get_koostenakymat()->luo_koosteen_ratkaisunayttopainikkeet("elemtehtavan_ratkaisut_tulostus") . $elemryhmapainikkeet; $palauteolio->set_sisalto($koostekoodi); $palauteolio->set_linkkihtml($painikkeet); $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_TULOSTUS); $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_tulostus); }
/** * 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; }