function testaa_kokon_poisto()
 {
     /************ KOKONAISUUDEN POISTO (tietokantaolio->poista_rivi)************/
     //Poistetaan testikokonaisuuksista (kokon2):
     if ($this->kokon2 instanceof Kokonaisuusolio) {
         $taulu = "kokonaisuudet";
         $taulun_sarake = "id";
         $hakuarvo = $this->kokon2->get_id();
         $palaute = $this->tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
         $kokon_id = $this->kokon2->get_id();
         $this->lisaa_lihava_kommentti("Testijuttujen siivous");
         if ($palaute == Tietokantaolio::$HAKU_ONNISTUI) {
             $this->lisaa_kommentti("Kokonaisuuden poisto onnistui!<br/>");
         } else {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe kokonaisuuden poistossa!\n                            (Kokonaisuuden id: " . $kokon_id . ")</div>");
         }
         // Kokonaisuuden poisto poistaa myös siihen liittyneet tehtävät ja ratkaisut:
         // Tarkistetaan, onko näin:
         $hakulause = "SELECT * FROM tehtavat \n                            WHERE kokon_id = " . $kokon_id;
         $osumat = $this->tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
         if (empty($osumat)) {
             $this->lisaa_kommentti("Poistettuun kokonaisuuteen liittyvia\n                                tehtavia ei loytynyt (OIKEIN!)!<br/>");
         } else {
             $this->lisaa_virheilmoitus("<div class='virhe'>Virhe kokonaisuuden poistossa!\n                            Tehtavia loytyi " . sizeof($osumat) . " kpl, vaikka\n                            kokonaisuuteen liittyvien tehtavien olisi pitanyt havita!</div>");
         }
         if ($this->teht1 instanceof Tehtava) {
             $hakulause = "SELECT * FROM ratkaisut\n                            WHERE tehtava_id = " . $this->teht1->getId();
             $osumat = $this->tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
             if (empty($osumat)) {
                 $this->lisaa_kommentti("Poistettuun kokonaisuuteen liittyvia\n                                    ratkaisuja ei loytynyt (OIKEIN!)!<br/>");
             } else {
                 $this->lisaa_virheilmoitus("Virhe kokonaisuuden poistossa!\n                                Kokonaisuuteen liittyvia ratkaisuja loytyi " . sizeof($osumat) . " kpl, vaikka\n                                niiden olisi pitanyt havita!");
             }
         } else {
             $this->lisaa_virheilmoitus("Virhe kokonaisuuden poistossa! Teht1 ei ole Tehtava!");
         }
         // Yritetään poistaa sama kokonaisuus uudelleen.
         $taulu = "kokonaisuudet";
         $taulun_sarake = "id";
         $hakuarvo = $kokon_id;
         $palaute = $this->tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
         if ($palaute == Tietokantaolio::$HAKU_ONNISTUI) {
             $this->lisaa_kommentti("Kokonaisuuden poisto onnistui!<br/>");
         } else {
             if ($palaute == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
                 $this->lisaa_kommentti("Poistettavaa ei loytynyt! (OIKEIN!)<br/>");
             } else {
                 $this->lisaa_virheilmoitus("<div class='virhe'>Virhe kokonaisuuden poistossa!\n                            (Kokonaisuuden id: " . $kokon_id . ")</div>");
             }
         }
         /****************************************/
     } else {
         $this->lisaa_virheilmoitus("Virhe metodissa " . "testaa_kokonaisuuden_poisto: kokon2 ei ole oikea olio!");
     }
 }
 /**
  * Palauttaa koosteessa näytettävän kokonaisuuden tulostusta varten optimoidun
  * html-koodin.
  *
  * @param Elementti $elementti Olio, joka viittaa kokonaisuuteen, jonka
  * näkymää parhaillaan puuhaillaan.
  * @param Kokonaisuusolio $kokonaisuus
  * @param Parametrit $parametriolio
  * @param int $kohdeoikeudet Käyttäjän oikeudet tähän olioon.
  * @param <type> $selitys_auki jos true, niin selitys näytetään, muuten ei.
  * @return <type>
  */
 function luo_koostenakyma_tulostus($elementti, $kokonaisuus, $parametriolio, $selitys_auki, $kohdeoikeudet)
 {
     $omaid = $parametriolio->get_omaid();
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $kayttajan_valtuudet = $parametriolio->get_valtuudet();
     $palaute = "";
     $selitys = "";
     $nayta_selitys_nappi = "";
     /* Näyttää selityksen. */
     $siirra_ylemmaksi_nappi = "";
     $siirra_alemmaksi_nappi = "";
     // Alla jostakin syystä !empty($kokonaisuus->getSelitys()) ei toiminut!
     if ($kokonaisuus->getSelitys() != "") {
         $onsubmit_parametrit = array($kokonaisuus->get_id());
         /* Tämän avulla löytyvät */
         $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id());
         if ($selitys_auki) {
             $title = Painikkeet::$SULJE_SELITYS_title;
             $onsubmit_funktionimi = "sulje_selitys";
             $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$SULJE_SELITYS_value, 'title' => $title);
         } else {
             $title = Painikkeet::$NAYTA_SELITYS_title;
             $onsubmit_funktionimi = "nayta_selitys";
             $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$NAYTA_SELITYS_value, 'title' => $title);
         }
         $nayta_selitys_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
     }
     if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) {
         // Järjestyksen muutosnapit (jos mielekästä):
         /*$siirra_ylemmaksi_nappi = "";
                     if($kokonaisuus->getEdellisenId_taso() != Kokonaisuusolio::$kokon_edellista_ei_ole){
                         $onsubmit_funktionimi = ""; // Tulevaa varten.
                         $onsubmit_parametrit = "";  // Ei ole vielä.
                         $form_maaritteet =
                             array("class" => "rinnakkain",
                                 "method"=>"post",
                                "action"=>"{$_SERVER['PHP_SELF']}?id_kokon=".$kokonaisuus->get_id().
                                             "&oppiaine_kokon=".$kokonaisuus->getOppiaine().
                                             "&kieli_id=".$kokonaisuus->getKieli().
                                             "&ed_id_kokon=".$kokonaisuus->getEdellisenId_taso().
                                             "&siirto_ylos=true");
                         $input_maaritteet =
                             array("value" => Painikkeet::$SIIRRA_YLEMMAKSI_KOKON_value,
                                 "title" => Painikkeet::$SIIRRA_YLEMMAKSI_KOKON_title,
                                 "name"=>Toimintonimet::$kokonaisuustoiminto);
         
                         try{
                             $siirra_ylemmaksi_nappi =
                             Html::luo_submit_painike_onsubmit_toiminnolla(
                                                         $onsubmit_funktionimi,
                                                         $onsubmit_parametrit,
                                                         $form_maaritteet,
                                                         $input_maaritteet);
                         }
                         catch (Exception $poikkeus){
                             $siirra_ylemmaksi_nappi = $poikkeus->getMessage();
                         }
                     }
         
         
                     // Alaspäin siirto:
                     $siirra_alemmaksi_nappi = "";
                     if($kokonaisuus->getSeuraavanId_taso() != Kokonaisuusolio::$kokon_seuraavaa_ei_ole){
                         $onsubmit_funktionimi = ""; // Tulevaa varten.
                         $onsubmit_parametrit = "";  // Ei ole vielä.
                         $form_maaritteet =
                             array("class" => "rinnakkain",
                                 "method"=>"post",
                                "action"=>"{$_SERVER['PHP_SELF']}?id_kokon=".$kokonaisuus->get_id().
                                             "&oppiaine_kokon=".$kokonaisuus->getOppiaine().
                                             "&kieli_id=".$kokonaisuus->getKieli().
                                             "&seur_id_kokon=".$kokonaisuus->getSeuraavanId_taso().
                                             "&siirto_ylos=0");
                         $input_maaritteet =
                             array("value" => Painikkeet::$SIIRRA_ALEMMAKSI_KOKON_value,
                                 "title" => Painikkeet::$SIIRRA_ALEMMAKSI_KOKON_title,
                                 "name"=>Toimintonimet::$kokonaisuustoiminto,);
         
                         try{
                             $siirra_alemmaksi_nappi =
                             Html::luo_submit_painike_onsubmit_toiminnolla(
                                                         $onsubmit_funktionimi,
                                                         $onsubmit_parametrit,
                                                         $form_maaritteet,
                                                         $input_maaritteet);
                         }
                         catch (Exception $poikkeus){
                             $siirra_alemmaksi_nappi = $poikkeus->getMessage();
                         }
                     }*/
     }
     // Tehtävien lisääminen sopivasti oikeutetuille:
     if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
         /* Uuden tehtävän luontipainike *
                     $onsubmit_funktionimi= "nayta_tehtavalomake";
                     $onsubmit_parametrit = array($kokonaisuus->get_id());    /* Tarpeen?*
         
                     $form_maaritteet = array('method'=>'post',
                                             'class'=>'rinnakkain',
                                               'action'=>"{$_SERVER['PHP_SELF']}?".
                                               "id_kokon=".$kokonaisuus->get_id().
                                               "&uusi=true");
         
                     $input_maaritteet = array('name'=>Toimintonimet::$tehtavatoiminto,
                                         'value'=>Painikkeet::$tehtava_uusi_value);
         
                     try{
                         $uusi_teht_nappi =
                             Html::luo_submit_painike_onsubmit_toiminnolla(
                                                             $onsubmit_funktionimi,
                                                             $onsubmit_parametrit,
                                                             $form_maaritteet,
                                                             $input_maaritteet);
                     }
                     catch (Exception $poikkeus){
                         $palaute .= "Virhe tehtavanapin luomisessa: ".
                                         $poikkeus->getMessage();
                     }*/
     }
     // TEhtävien lisäyspainikekoodi loppuu.
     /* haetaan mahdolliset kuvat */
     $kuvahtml_tiivis = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_tiivistelma, $omaid, $tietokantaolio, false);
     /* Kaikki kokonaisuudet ovat samanlaisia tasosta riippumatta */
     $class_arvo = "elementti_kokon";
     $otsikko = "<div class = " . $class_arvo . " id='elem" . $elementti->get_id() . "'>" . "<h3>" . $kokonaisuus->getOtsikkomerkinta() . $kokonaisuus->getOtsikko() . " " . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . "</h3>";
     /* Haetaan vielä tarvittaessa selitys: */
     if ($selitys_auki && $kokonaisuus->getSelitys() != "") {
         /* haetaan mahdolliset kuvat */
         $kuvahtml_selitys = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_selitys, $omaid, $tietokantaolio, false);
         $selitysotsikko = "<div class='selitysotsikko'>" . Tekstit::$otsikko_selitys . "</div>";
         /* Muotoillaan selitys: */
         $selitys_muokattu = muotoile_merkit($kokonaisuus->getSelitys());
         // Pikkukaavat ensin, jotta kursiivin poisto onnistuu ennen
         // sulkujen käsittelyä.
         $selitys_muokattu = Kaavaeditori::muotoile_pikkukaavat($selitys_muokattu);
         // Sitten normaalikaavat:
         $selitys_muokattu = Kaavaeditori::muotoile_kaavat($selitys_muokattu);
         $selitys = $selitysotsikko . $kuvahtml_selitys . $selitys_muokattu;
     }
     /* Muotoillaan tiivistelmän merkit ja kaavat: */
     $tiivistelma = muotoile_merkit($kokonaisuus->getTiivis());
     $tiivistelma = Kaavaeditori::muotoile_pikkukaavat($tiivistelma);
     $tiivistelma = Kaavaeditori::muotoile_kaavat($tiivistelma);
     $tiivistelma = $kuvahtml_tiivis . $tiivistelma . "<br />";
     /* Ja sitten vain palaset pakettiin: HUOM! Täällä katsotaan, ettei
      * piilotetun sisältö näy. 
      */
     $piilotushuomautus = "<div class='piilotushuomautus'>" . Tekstit::$ilm_kokon_piilotettu_paitsi_ots . "</div>";
     $yksityisilmoitus = "<div class='yksityisilmoitus'>" . Tekstit::$ilm_kokon_yksityinen . "</div>";
     $vainkoosteilmoitus = "<div class='koosteilmoitus'>" . Tekstit::$ilm_kokon_vain_kooste . "</div>";
     /**
      * Tänne mennään, kun kokonaisuus näytetään,
      * oli se sitten piilossa tahi ei.
      */
     if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA || $kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) {
         $normaali_kokonaisuus = $otsikko;
         // Jos kokonaisuus on muilta piilossa, lisätään viesti:
         if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) {
             $normaali_kokonaisuus .= $piilotushuomautus . $tiivistelma;
         } else {
             if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) {
                 $normaali_kokonaisuus .= $tiivistelma;
             } else {
                 if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) {
                     $normaali_kokonaisuus .= $tiivistelma;
                 } else {
                     $normaali_kokonaisuus .= $tiivistelma;
                 }
             }
         }
         /* $normaali_kokonaisuus .=
            " ".$nayta_selitys_nappi;*/
         /* Lisätään vielä div selitystä varten: */
         if ($selitys_auki && $kokonaisuus->getSelitys() != "") {
             $normaali_kokonaisuus .= "<div class='selitys' id='selitys" . $kokonaisuus->get_id() . "'>" . $selitys . "</div>";
         }
         $normaali_kokonaisuus .= "</div>";
         /* Kokonaisuus loppuu. */
         $palaute = $normaali_kokonaisuus;
     } else {
         if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) {
             $class_arvo = "elementti_kokon";
             $otsikko = "<div class = " . $class_arvo . " id='elem" . $elementti->get_id() . "'>" . "<h3>" . $kokonaisuus->getOtsikko() . " " . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . "</h3>";
             $palaute = $otsikko;
             $palaute .= $piilotushuomautus;
             $palaute .= "</div>";
             /* Kokonaisuus loppuu. */
         } else {
             // Kun jonkun toisen yksityinen / vain koosteessa, eikä hallintavaltuuksia:
             $palaute = "";
         }
     }
     return $palaute;
 }
 /**
  * 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;
 }
 /**
  * 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;
 }
Exemple #5
0
 static function hae_tehtavat_koostelomake($id_kokon, $tietokantaolio, $omaid)
 {
     $kokon = new Kokonaisuusolio($id_kokon, $tietokantaolio);
     $teht = array();
     $on_kirjautunut = false;
     if (Henkilo::on_kirjautunut($omaid, $tietokantaolio)) {
         $on_kirjautunut = true;
     }
     if (!$on_kirjautunut) {
         $teht = Tehtava::hae_kokonaisuuden_julkiset_tehtavat($id_kokon, $tietokantaolio);
     } else {
         $ehdokkaat = Tehtava::hae_kokonaisuuden_tehtavat($id_kokon, $tietokantaolio);
         foreach ($ehdokkaat as $tehtava) {
             if ($tehtava instanceof Tehtava) {
                 if ($tehtava->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) {
                     array_push($teht, $tehtava);
                 } else {
                     if ($tehtava->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA || $tehtava->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) {
                         // Jos näkyvyys ei ole julkinen, tarkistetaan olion
                         // kohdeoikeudet.
                         /*======================== käyttäjän oikeudet ====*/
                         $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokon->getHenkiloId(), $omaid, Oliotyyppi::$TEHTAVA, $kokon->get_id(), $tietokantaolio);
                         /*===============================================*/
                         // Jos on vähintään muokkausoikeudet, näytetään
                         // linkki sopivasti muotoiltuna:
                         if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) {
                             array_push($teht, $tehtava);
                         }
                     } else {
                         // Vain otsikkollisia ei näytetä, koska ei järkeä.
                     }
                 }
             }
         }
     }
     return $teht;
 }