Exemple #1
0
 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;
 }