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; }
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; }