if (isset($_SESSION[$sessiomuuttujan_nimi])) { if ($_SESSION[$sessiomuuttujan_nimi] == Kokonaisuusolio::$TEHT_NAYTA) { $_SESSION[$sessiomuuttujan_nimi] = Kokonaisuusolio::$TEHT_PIILOSSA; $uusi_painiketeksti = Painikkeet::$kooste_lomake_nayta_teht_value; } else { $_SESSION[$sessiomuuttujan_nimi] = Kokonaisuusolio::$TEHT_NAYTA; $uusi_painiketeksti = Painikkeet::$kooste_lomake_piilota_teht_value; } } else { // Kun ei määritelty -> piilossa $_SESSION[$sessiomuuttujan_nimi] = Kokonaisuusolio::$TEHT_PIILOSSA; $uusi_painiketeksti = Painikkeet::$kooste_lomake_nayta_teht_value; } // Haetaan tehtävät, joihin käyttäjällä oikeudet, ja jotka eivät // ole "vain_otsikko"-näkyvyydellä varustettuja. $tehtavat = Tehtava::hae_tehtavat_koostelomake($id_kokon, $tietokantaolio, $omaid); // Tarkistetaan, ovatko tehtävät jo koosteessa ja lisätään vastaava // muuttujan arvo (jos kysymys muokkauksesta): $nyk_kooste = $koostekontrolleri->get_olio(); if ($nyk_kooste instanceof Kooste) { $elementit = $nyk_kooste->hae_elementit(); $koostekontrolleri->merkitse_valitut($tehtavat, $elementit); } $teht_xml = '<?xml version="1.0" encoding="' . $koodaus . '"?>'; $teht_xml .= '<root><tehtavat>'; foreach ($tehtavat as $teht) { $rivikoodi = $koostekontrolleri->luo_elemlistan_tehtavarivi($teht, false); $rivikoodi_turva = htmlspecialchars($rivikoodi, ENT_NOQUOTES); $teht_xml .= '<tehtava>'; $teht_xml .= '<id>teht_' . $teht->getId() . '</id>'; //$teht_xml .= '<rivikoodi><![CDATA['.$rivikoodi.']]></rivikoodi>';
/** * Palauttaa elementtilistan yhden kokonaisuuden + näytettävien tehtävien * muodostaman html-koodin. * * HUOM: hiukan hämäävästi kokonaisuus tekee yhden taulukkorivin ja * kukin tehtävä yhden lisää, eli tämä voi palauttaa useammankin * taulukkorivin html:n. * * @param Kokonaisuusolio $kokon * @param type $rajataso huomaa &! * @param type $piilotuskaynnissa huomaa &! * @param boolean $on_kirjautunut false - ei kirjautunut käyttäjä, true - * käyttäjä on kirjautunut ja hänellä voi olla enemmän oikeuksia. */ private function luo_elementtilistan_kokonrivi($kokon, &$rajataso, &$piilotus_kaynnissa, $on_kirjautunut) { $parametriolio = $this->get_parametriolio(); $tietokantaolio = $this->get_tietokantaolio(); $tyhja_taul = array(); $palautus_html = ""; if ($kokon instanceof Kokonaisuusolio) { $id_kokon = $kokon->get_id(); $teht_naytto_nimi = Parametrit::sessiomuut_nimi_kokontehtnaytto_koostelomake($id_kokon); $taso = $kokon->getOtsikkotaso(); if ($taso > 8) { $taso = 8; /* Enempää tasoja ei ole tyyleissä */ } // Tarkistetaan tässä, ollaanko tultu pois piilotettavien // alilinkkien joukosta if ($piilotus_kaynnissa && $kokon->getOtsikkotaso() <= $rajataso) { $piilotus_kaynnissa = false; } // Muotoillaan linkkielementin alkutagi===================== // Linkkielementin alkutagin alku: $linkki_id = "linkki" . $kokon->get_id(); $rivin_alku = "<tr class='kooste_elementti'" . "id='" . $linkki_id . "'"; // Session-muuttuja sanelee näyttämisen. // HUOM! Linkki_kiinni/linkki_auki vaikuttaa lapsilinkkeihin, ei // varsinaisen linkin näkymiseen! Tämän avulla muistetaan // puurakenne. // Idea: kokonaisuuslista käydään läpi. Jokaisen kohdalla // tarkistetaan onko auki. Jos kiinni, käydään läpi alilinkit // ja poistetaan näkyvistä. Samalla tarkistetaan sessio- // muuttuja ja asetetaan ei-määritellyt kiinni-oleviksi, // jolloin linkistö on avatessa mahdollisimman kiinni. $linkkielem_style = " "; $muuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($kokon->get_id()); // Eka kerralla ja ryhmän vaihdon yhteydessä suljetaan // kaikki linkit. Poikkeus: kun tullaan linkin kautta, // on järkevää avata kyseisen kokonaisuuden aliotsikot. // Kokonaisuusryhmän_vaihto on oletusarvoisesti false. if (!isset($_SESSION[$muuttujanimi]) || $parametriolio->kokonaisuusryhman_vaihto) { $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_KIINNI; // Käsitellään tässä tulo linkin kautta, jolloin // määritellään sessioarvo näytettävän alikoko- // suudelle: if ($parametriolio->naytto_urlin_mukaan() && $id_kokon == $kokon->getYlakokonaisuuden_id()) { // Linkki kiinni -> näkyy vain yksi taso alemma. // (tämä ei kyllä sitä rajoita, mutta asettaa // plussan oikein) $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_KIINNI; } else { // Eka taso näytetään aina, mutta muita ei. if ($taso > 1) { $linkkielem_style = " style='display:none;'"; } } } else { if ($piilotus_kaynnissa) { $linkkielem_style = " style='display:none;'"; } else { if (!$piilotus_kaynnissa && $kokon->on_naytettavia_lapsia($parametriolio->get_omaid()) && $_SESSION[$muuttujanimi] == Kokonaisuusolio::$LINKKI_KIINNI) { $piilotus_kaynnissa = true; // Rajataso muutetaan tämän tasoksi, jolloin // tiedetään, milloin tullaan ylemmäksi taas. $rajataso = $kokon->getOtsikkotaso(); } else { //Ellei lapsia tai linkki auki -> näytetään seuraava // Ei lisätä tyyliä } } } // Linkkielementin alkutagin loppuosa: $rivin_alku .= $linkkielem_style . ">"; //========================================================== // Plus lisätään, jos kokonaisuudella on jälkeläisiä ja // linkki on kiinni. if ($kokon->on_naytettavia_lapsia($parametriolio->get_omaid()) && $_SESSION[$muuttujanimi] == Kokonaisuusolio::$LINKKI_KIINNI) { $plus = "+ "; } else { if ($kokon->on_naytettavia_lapsia($parametriolio->get_omaid()) && $_SESSION[$muuttujanimi] == Kokonaisuusolio::$LINKKI_AUKI) { $plus = "− "; } else { $plus = ""; } } $etumerkin_html = "<td class='linkin_etumerkki'" . "id='etumerkki" . $kokon->get_id() . "'" . "onmouseover='hiiri_paalla(this)'" . "onmouseout='hiiri_pois_paalta(this)'" . "onclick='vaihda_etumerkki(this.id," . $kokon->get_id() . ",\"koostelomake\")'>{$plus}</td>"; $valruutusolu = $this->luo_elementtilistan_valintaruutusolu($kokon, true); // Preview button: $value = $this->luo_valittulistan_valintaruudun_value($kokon); $preview_button = $this->koostenakymat->create_button_show_preview($value); $preview_button_cell = Html::luo_tablesolu($preview_button, $tyhja_taul); //=============== Lisätään tehtävien näyttöpainike, jos // niitä kokonaisuudella on: =========================== // Ensin haetaan tehtävät, joita tarvitaan mahdollisesti // myöhemmin (vain tehtävät, joihin oikeudet): $tehtavat = Tehtava::hae_tehtavat_koostelomake($kokon->get_id(), $tietokantaolio, $this->get_parametriolio()->get_omaid()); // Tarkistetaan, ovatko tehtävät jo koosteessa ja lisätään vastaava // muuttujan arvo (jos kysymys muokkauksesta): $nyk_kooste = $this->get_olio(); if ($nyk_kooste instanceof Kooste) { $elementit = $nyk_kooste->hae_elementit(); $this->merkitse_valitut($tehtavat, $elementit); $kooste_id = $nyk_kooste->get_id(); } else { $kooste_id = Kooste::$MUUTTUJAA_EI_MAARITELTY; } $teht_lkm = sizeof($tehtavat); $nappi_id = "tehtavanappi_" . $kokon->get_id(); if ($teht_lkm > 0) { if (isset($_SESSION[$teht_naytto_nimi]) && $_SESSION[$teht_naytto_nimi] == Kokonaisuusolio::$TEHT_NAYTA) { // Tehtävät näkyvissä, joten mahdollistetaan piilotus: $show = false; } else { // Tehtävät piilossa, joten mahdollistetaan näyttö: $show = true; } $tehtnappi = $this->koostenakymat->create_button_showhide_problems_in_summaryform($show, $kooste_id, $kokon->get_id(), $nappi_id); } else { $tehtnappi = ""; } // Luodaan solu kuitenkin aina: $tehtnappisolu = Html::luo_tablesolu($tehtnappi, array()); //===================== Rivin lopputagi ================ $rivin_loppu = "</tr>"; // Otsikkonumeroita ei näytetä tietyn tason jälkeen: if ($taso > Kokonaisuusolio::$max_otsikkonron_nayttotaso) { $otsikkonro = ""; } else { $otsikkonro = $kokon->getOtsikkomerkinta() . " "; } $ruudun_id = $this->luo_elementtilistan_valintaruudun_id($kokon); /* Otsikon klikkaaminen paivittää valittujen listan. */ $elem_otsikko = $this->luo_elementtilistan_otsikkosolu($ruudun_id, $otsikkonro, "", $taso, $kokon->getOtsikko(), $kokon->get_id()); // Julkiset näytetään ilman mukinoita: if ($kokon->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $palautus_html .= $rivin_alku . $etumerkin_html . $elem_otsikko . $valruutusolu . $preview_button_cell . $tehtnappisolu . $rivin_loppu; } else { if ($on_kirjautunut) { // Jos näkyvyys ei ole julkinen, tarkistetaan olion // kohdeoikeudet. Tätä ei tehdä julkisille, jottei // hidasta menoa liikaa: /*======================== käyttäjän oikeudet ====*/ $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokon->getHenkiloId(), $this->get_parametriolio()->get_omaid(), Oliotyyppi::$KOKONAISUUS, $kokon->get_id(), $tietokantaolio); /*===============================================*/ // Jos on vähintään muokkausoikeudet, näytetään // linkki sopivasti muotoiltuna: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) { $class_arvo = "yksityinen"; } else { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) { $class_arvo = "vain_koosteessa"; } else { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) { $class_arvo = "piilotettu"; } else { $class_arvo = "outo"; } } } $elem_otsikko = $this->luo_elementtilistan_otsikkosolu($ruudun_id, $otsikkonro, $class_arvo, $taso, $kokon->getOtsikko(), $kokon->get_id()); $palautus_html .= $rivin_alku; $palautus_html .= $etumerkin_html; $palautus_html .= $elem_otsikko; $palautus_html .= $valruutusolu; $palautus_html .= $preview_button_cell; $palautus_html .= $tehtnappisolu; $palautus_html .= $rivin_loppu; } } else { // Ei näytetä linkkiä! } } // Täällä on aika tarkistaa, näytetäänkö kokonaisuuden // tehtävät täällä ja myönteisessä tapauksessa näytetään. if (isset($_SESSION[$teht_naytto_nimi]) && $_SESSION[$teht_naytto_nimi] == Kokonaisuusolio::$TEHT_NAYTA) { foreach ($tehtavat as $teht) { $palautus_html .= $this->luo_elemlistan_tehtavarivi($teht, true); } } else { // Varmistetaan arvo: $_SESSION[$teht_naytto_nimi] = Kokonaisuusolio::$TEHT_PIILOSSA; } } return $palautus_html; }