/** * Hakee käyttäjän kaikki mahdolliset oikeudet (myös lisäoikeudet tarkistetaan) * tähän olioon. Palauttaa Lisävaltuusarvon * (esim. Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA). * * Virheen tai muun poikkeavuuden sattuessa palauttaa arvon * Lisavaltuudet::$EI_LISAVALTUUKSIA, joka vastaa kirjautumattoman * käyttäjän oikeuksia silloin, kun olio ei ole julkinen. * * HUOM: samanniminen metodi on (ja pitää olla) kaikissa luokissa, * joiden sisältöä näytetään käyttäjälle. Kaikissa on myös sama parametri. * Tällöin voidaan metodia kutsua, vaikka ei tiedetä, mitä näistä luokista * olio edustaa. * */ public function hae_kayttajan_oikeudet($omaid) { $kohdeoikeudet = Lisavaltuudet::$EI_LISAVALTUUKSIA; // Kirjautumaton käyttäjä. // Tarkistetaan näkyvyys-asetys. Jos sen arvo on julkinen, annetaan // katseluoikeus jo heti kättelyssä. $nakyvyysoikeudet = Lisavaltuudet::$EI_LISAVALTUUKSIA; $nakyvyys = $this->getNakyvyys() + 0; if ($nakyvyys === Nakyvyys::$JULKINEN) { $nakyvyysoikeudet = Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA; } // Tarkistetaan ensin, onko käyttäjä kirjautunut: if (Henkilo::on_kirjautunut($omaid, $this->tietokantaolio)) { $tietokantaolio = $this->tietokantaolio; $oliotyyppi = Oliotyyppi::$KURSSITIETO; $olion_id = $this->get_id(); $omistaja_id = $this->get_arvo(Kurssitieto::$sarakenimi_henkilo_id); // Jos kaikki näyttää olevan kunnossa, haetaan oikeuksia. if ($olion_id != Kurssitieto::$MUUTTUJAA_EI_MAARITELTY) { $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($omistaja_id, $omaid, $oliotyyppi, $olion_id, $tietokantaolio); } } return max(array($kohdeoikeudet, $nakyvyysoikeudet)); }
/** * Palauttaa kokonaisuuden html-koodin. * * Huomaa, että täällä käsitellään aika paljon turvallisuusarkoja aiheita, * kuten esimerkiksi kokonaisuuden lukitus. Ois parempi ehkä sellaisen * olla aiemmin, mutta en vielä ole jaksanut muuttaa.. * * @param Parametrit $parametriolio * @param Kokonaisuusolio $kokonaisuus * @param <type> $selitys_auki jos true, niin selitys näytetään, muuten ei. * @param type $id_prev Edellisen kokonaisuuden id. * @param type $id_next Seuraavan kokonaisuuden id. * @return string|\<type> */ function tulosta_kokonaisuus($kokonaisuus, $parametriolio, $selitys_auki, $id_prev, $id_next) { $btn_type = Kokonaisuusnakymat::$btn_type_article; $btn_size = Kokonaisuusnakymat::$btn_size_article; $omaid = $parametriolio->get_omaid() + 0; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); // Luodaan tämä tehtävien lkm:n hakua varten. Vähän raskasta, mutta olkoon. $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $palaute = ""; $selitys = ""; $poistonappi = ""; $muokkausnappi = ""; $tehtavanappi = ""; /* Tehtävien näyttö */ $uusi_teht_nappi = ""; /* Tästä luodaan uusi tehtävä. */ $nayta_selitys_nappi = ""; /* Näyttää selityksen. */ $siirra_ylemmaksi_nappi = ""; $siirra_alemmaksi_nappi = ""; $jaa_oikeuksia_nappi = ""; $nayta_jarj_luku = ""; $korjausnappi = ""; // Tämän avulla järjestysluvun voi korjata $nakyvyysmuutosnappi = ""; $nayta_ed_nappi = $this->create_button_show_prev($id_prev); $nayta_seur_nappi = $this->create_button_show_next($id_next); /*======================== käyttäjän oikeudet ========================*/ $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokonaisuus->getHenkiloId(), $omaid, Oliotyyppi::$KOKONAISUUS, $kokonaisuus->get_id(), $tietokantaolio); /*====================================================================*/ // Koodia voivat kaikki vilkaista, ellei ole piilotettu: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $nayta_koodi_nappi = Html::luo_button(Painikkeet::$NAYTA_KOODI_value, array(Attr::title(Painikkeet::$NAYTA_KOODI_title), Attr::onclick("hae_koodi", array($kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS)), Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size . " article"))); } else { $nayta_koodi_nappi = ""; } /* Kuvan lisäyspainikkeet: */ $uusi_kuva_tiivis = ""; $uusi_kuva_seli = ""; // 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, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article"); } else { $title = Painikkeet::$NAYTA_SELITYS_title; $onsubmit_funktionimi = "nayta_selitys"; $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$NAYTA_SELITYS_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article"); } $nayta_selitys_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } // Haetaan kokonaisuuden tehtävien lkm: $teht_lkm = sizeof($tehtavakontrolleri->hae_tehtavat()); // Tehtävät näkyvät kaikille, jos niitä on: if ($teht_lkm > 0) { $onsubmit_funktionimi = "nayta_tehtavat"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Tämän avulla löytyvät */ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . Oliotyyppi::$naytettava_name . "=" . Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA); $title = Painikkeet::$tehtava_nayta_tehtavat_title . " (" . $teht_lkm . ")"; $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_nayta_tehtavat_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size); $tehtavanappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } /** * Muokkaus ja poisto tietysti kunkulle ja kokonaisuuden tekijälle. * Vain heille on myös luvallista jakaa lisäoikeuksia olioon. <p>Jos kokonaisuus lukittu toisen toimesta, ei sitä voida poistaa eikä muokata. Uusia tehtäviä voi kuitenkin lisätä, koska siinä mahdollinen samanaikaisuus ei haittaa.</p> <p>Uusia tehtäviä voi lisätä valtuusarvot >= "tehtävien_lisäys".</p> Kokonaisuuksien poisto sallitaan turvallisuussyistä vain lapsettomille kokonaisuuksille. */ if ($kohdeoikeudet == Lisavaltuudet::$KAIKKI_OIKEUDET) { // Oikeuksien eli lisävaltuuksien jakopainike:====================== $action_os = "oLetUs"; // Testaan samalla kirjainkoon vaikutusta. $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id); $action_kyselyarvot = array($kokonaisuus->get_id(), $kokonaisuus->getOppiaine(), $kokonaisuus->getKieli(), $kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS, $kokonaisuus->getHenkiloId()); $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot); //================================================================== } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { //====================== LUKITUKSEN HUOMIOINTI ===================== // Muokkaus- ja poistonapit lukitsemattomalle tai omalle. if (!$this->lukitus_estaa_muokkauksen($kokonaisuus, $omaid)) { // Muokkauspainike: $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $muokkausnappi = $this->luo_muokkauspainike($kokonaisuus, $elementti, $elemryhma); //============================================================= if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) { // Poisto vain lapsettomille ja tehtävättömille: if ($kokonaisuus->getOn_lapsia() == 0) { $tehtavat = Tehtava::hae_kokonaisuuden_tehtavat($kokonaisuus->get_id(), $parametriolio->get_tietokantaolio()); // Ellei tehtäviä löydy, voidaan poistaa: if (empty($tehtavat)) { // POistopainike: $poistonappi = Html::luo_forminput_painike(array(Attr::classs("article"), Attr::action("{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id())), array(Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size), Attr::name("toiminta"), Attr::value(Painikkeet::$POISTA_KOKON_VALUE))); if ($kokonaisuus->getLukitus() == $omaid) { $poistonappi .= "<span style='color: green; font-weight:bold'>" . Tekstit::$ilm_kokon_omalukitus_paalla . "<br/></span>"; } } } } //============================================================= // Julkista/piilota-painike: if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $value = Painikkeet::$PIILOTA_KOKON_value; $title = Painikkeet::$PIILOTA_KOKON_title; } else { $value = Painikkeet::$JULKISTA_KOKON_value; $title = Painikkeet::$JULKISTA_KOKON_title; } $onsubmit_funktionimi = ""; // Tulevaa varten. $onsubmit_parametrit = ""; // Ei ole vielä. $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli()); $input_maaritteet = array("class" => "btn btn-" . $btn_type . " btn-" . $btn_size, "value" => $value, "title" => $title, "name" => Toimintonimet::$kokonaisuustoiminto); try { $nakyvyysmuutosnappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $nakyvyysmuutosnappi = $poikkeus->getMessage(); } //============================================================= // 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" => "article", "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, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); 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" => "article", "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, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); 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(); } } // Tämä liittyy vanhan järjestysnumeron korjaukseen (kun monilla // kokonaisuuksilla oli sama järjestysnumero -1). Nykyään // tekniikka on muuttunut, eikä sitä yleensä tarvita. if ($kokonaisuus->getJarjestysnro() == -1) { $nayta_jarj_luku = " jarjestysnro: " . $kokonaisuus->getJarjestysnro(); $class = "rinnakkain"; $id = ""; $action = "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli(); $name = Toimintonimet::$kokonaisuustoiminto; $value = "Korjaa jarjestysnro"; $korjausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value); } /**************************************************************/ } else { if ($kokonaisuus->lukitus != Kokonaisuusolio::$LUKITUS_OFF) { $poistonappi = "<span style='color: red; font-weight:bold'>" . Tekstit::$ilm_kokon_lukitus_paalla . "<br/></span>"; } } /* Uuden kuvan lisäyspainike tiivistelmään*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Kokonaisuuden id*/ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_tiivistelma); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $uusi_kuva_tiivis = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } /* Uuden kuvan lisäyspainike selitykseen:*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Kokonaisuuden id*/ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_selitys); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $uusi_kuva_seli = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } } // Hallinnan / muokkaaajan / luojan osuus päättyy // Tehtävien lisääminen sopivasti oikeutetuille: if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $uusi_teht_nappi = $this->luo_uusi_teht_painike($kokonaisuus, $elementti, $elemryhma); } // TEhtävien lisäyspainikekoodi loppuu. /* haetaan mahdolliset kuvat */ $kuvahtml_tiivis = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_tiivistelma, $omaid, $tietokantaolio, false); /* kokolaisuuksien hierarkia: html-otsikkotasot. */ $class_arvo = "kokonaisuus"; $painikkeet_ylla = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $tehtavanappi . $uusi_teht_nappi . $muokkausnappi . $korjausnappi . $nakyvyysmuutosnappi . $jaa_oikeuksia_nappi . $nayta_seur_nappi; $painikkeet_alla = $nayta_koodi_nappi . $uusi_kuva_tiivis . $uusi_kuva_seli . $nayta_selitys_nappi . $poistonappi; $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">"; /* Haetaan vielä tarvittaessa selitys: */ if ($selitys_auki) { /* 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::$JULKINEN || $kokonaisuus->getHenkiloId() == $omaid || $kayttajan_valtuudet + 0 === Valtuudet::$HALLINTA) { $normaali_kokonaisuus = Html::div(array(Attr::classs("kokon_ylanapit")), $painikkeet_ylla) . $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 .= $yksityisilmoitus . $tiivistelma; } else { if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) { $normaali_kokonaisuus .= $vainkoosteilmoitus . $tiivistelma; } else { $normaali_kokonaisuus .= $tiivistelma; } } } $normaali_kokonaisuus .= Html::div(array(Attr::classs("kokon_alanapit")), $painikkeet_alla); /* Lisätään vielä div selitystä varten: */ if ($selitys_auki) { $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 = "kokonaisuus"; $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">"; $palaute = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $nayta_koodi_nappi . $nakyvyysmuutosnappi . $nayta_seur_nappi . $otsikko; $palaute .= $piilotushuomautus; $palaute .= "</div>"; /* Kokonaisuus loppuu. */ } else { // Kun jonkun toisen yksityinen / vain koosteessa, eikä hallintavaltuuksia: $palaute = ""; } } return $palaute; }
/** * Palauttaa ne tehtävät taulukossa, joihin käyttäjällä on vähintään * katseluoikeus. Kutsutaan metodissa "hae_tehtavat()". * @param array $tehtavat */ private function poimi_tehtavat($tehtavat) { $palaute = array(); // Käyttäjän tunniste: $omaid = $this->get_parametriolio()->get_omaid(); $on_kirjautunut = Henkilo::on_kirjautunut($omaid, $this->get_tietokantaolio()); foreach ($tehtavat as $tehtava) { if ($tehtava instanceof Tehtava) { // Julkiset otetaan mukaan ilman muuta: if ($tehtava->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { array_push($palaute, $tehtava); } else { if ($on_kirjautunut) { //Haetaan oikeudet tehtävään: $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($tehtava->getHenkiloId(), $omaid, Oliotyyppi::$TEHTAVA, $tehtava->getId(), $this->get_tietokantaolio()); if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) { array_push($palaute, $tehtava); } } } } } return $palaute; }
/** * Toteuttaa kokonaisuuden muokkauksen tallentamisen. Erityisesti käyttäjän * tekemät muutokset kokonaisuuteen kulkevat aina tämän metodin kautta, * lukuunottamatta näkyvyyttä ja lukitusta. * * Huomaa, ettei lukitusta tai käyttöoikeuksia tarkisteta täällä. Ne * tarkistetaan Kayttajakontrolleri-luokan metodeilla kokonaisuuden * tulostuksen (ruudulle) yhteydessä, jolloin vain asianmukaisille * käyttäjille annetaan painikkeet muokkausta tai poistoa varten. * * Joitakin ominaisuuksia ei voi muuttaa täällä: * luomishetki_sek - ei muuteta * ed_muutos_sek - automaattinen * näkyvyys - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa) * on_lapsia - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa) * lukitus - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa) * jarjestysluku - arvoja ei aseteta täällä (oma metodi Kokonaisuuskontrollerissa) * kieli_id - arvoa ei aseteta täällä. * taso - ei muuteta * oppiaine - ei muuteta. * * Lukitus poistetaan oliolta onnistuneen operaation päätteeksi. * * @param Palaute $palauteolio */ function toteuta_tallenna_muokkaus(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $ilmoitus = ""; // Tarkistuksessa putsataan vain riskimerkit. $parametriolio->set_uusi(false); $omaid = $parametriolio->get_omaid(); $otsikko_kokon = $parametriolio->get_otsikko_kokon(); $tiivis_kokon = $parametriolio->get_tiivis_kokon(); $selitys_kokon = $parametriolio->get_selitys_kokon(); $laajennetun_id_kokon = $parametriolio->get_laajennetun_id_kokon(); $ylakokonaisuuden_id_kokon = $parametriolio->get_ylakokonaisuuden_id_kokon(); $nakyvyys_kokon = $parametriolio->nakyvyys_kokon; $muutettavan_kokon_id = $parametriolio->id_kokon; $virhekoodi = Palaute::$VIRHEKOODI_KAIKKI_OK; // Haetaan kokonaisuuden omistaja, jotta voidaan tarkistaa: $vanha_kokon = $this->get_olio(); if ($vanha_kokon instanceof Kokonaisuusolio && $vanha_kokon->olio_loytyi_tietokannasta) { $muutettavan_kokon_luojan_id = $vanha_kokon->getHenkiloId(); } else { $muutettavan_kokon_luojan_id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY; } //============== Tarkistetaan, onko käyttäjä vielä oikeasti online // ja valtuudet kunnossa: ====== $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($muutettavan_kokon_luojan_id, $omaid, Oliotyyppi::$KOKONAISUUS, $muutettavan_kokon_id, $this->get_tietokantaolio()); /*====================================================================*/ //====================================================================== // Muokattava aolio: $muokattava = new Kokonaisuusolio($muutettavan_kokon_id, $this->get_tietokantaolio()); if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { if ($muokattava->olio_loytyi_tietokannasta) { $palauteolio->set_virhekoodi($virhekoodi); // Lisätään kokonaisuudelle saadut mahdollisesti muutettavat parametrit // (vain ne, joita ylipäätään voidaan muuttaa): $muokattava->set_arvo($otsikko_kokon, Kokonaisuusolio::$sarakenimi_otsikko); $muokattava->set_arvo($tiivis_kokon, Kokonaisuusolio::$sarakenimi_tiivis); $muokattava->set_arvo($selitys_kokon, Kokonaisuusolio::$sarakenimi_selitys); $muokattava->set_arvo($laajennetun_id_kokon, Kokonaisuusolio::$sarakenimi_laajennetun_id); $muokattava->set_arvo($ylakokonaisuuden_id_kokon, Kokonaisuusolio::$sarakenimi_ylakokonaisuuden_id); $muokattava->set_arvo($nakyvyys_kokon, Kokonaisuusolio::$sarakenimi_nakyvyys); // Tallennus tietokantaan: $palaute = $muokattava->tallenna_muutokset(); // Jos tiedoissa on vikaa, esim. tyhjä otsikko: if ($palaute != Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $this->get_parametriolio()->set_ilmoitus_kokon($muokattava->tulosta_virheilmoitukset()); $this->lisaa_virheilmoitus($muokattava->tulosta_virheilmoitukset()); $this->toteuta_nayta_kokonaisuuslomake($palauteolio); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_YLEINEN); $ilmoitus .= Tekstit::$ilm_kokon_muokkaustallennus_eiok; } else { // Kaikki kunnossa. $ilmoitus = " "; /* Poistetaan kokonaisuuden lukitus: */ $lukon_tila = Kokonaisuusolio::$LUKITUS_OFF; $lukituksen_avaus = $muokattava->aseta_kokonaisuuden_lukitus($parametriolio->get_omaid(), $lukon_tila); /* Ilmoitus, ellei lukitus jostakin syystä onnistunut: */ if ($lukituksen_avaus != Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $ilmoitus .= " " . Tekstit::$virheilm_kokonaisuuden_lukituksen_avaus_eiok . $muokattava->tulosta_virheilmoitukset(); $virhekoodi = Palaute::$VIRHEKOODI_LUKITUS_KOKONAISUUDET; } else { $ilmoitus = Tekstit::$ilm_kokon_muokkaustallennus_ok; //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $this->get_tietokantaolio(), time(), Aktiivisuus::$KOKONAISUUDEN_MUUTOSTEN_TALLENNUS); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } } // Huom: täällä hämäävästi käyttöön tulee uusi palauteolio, jolloin // esim aiemmat virhekoodin asetukset eivät voimassa. if ($parametriolio->tallennuskesken) { $parametriolio->uusi = false; $this->toteuta_nayta_kokonaisuuslomake($palauteolio); } else { // Otetaan selville, tuleekö käyttäjä koosteesta vai // kokonaisuuksista ja näytetään vastaava juttu: $parametriolio = $this->get_parametriolio(); $elem_id = $parametriolio->elementti_id; $elemryhma_id = $parametriolio->elemryhma_id; // Tarkistetaan, mistä ollaan tulossa ja minne menossa: $koostekontrolleri = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio); if ($elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio); $palauteolio->set_muokatun_id($elem_id); } else { if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $koostekontrolleri->toteuta_nayta($palauteolio); $palauteolio->set_muokatun_id($elem_id); } else { $this->toteuta_nayta($palauteolio); $palauteolio->set_muokatun_id($muutettavan_kokon_id); } } } // Tämän pitää olla vasta täällä (ks. ylempi kommentti). $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); // Lisätään mahdollinen lukitusvirhekoodi if ($virhekoodi != Palaute::$VIRHEKOODI_KAIKKI_OK) { $palauteolio->set_virhekoodi($virhekoodi); $ilmoitus .= Tekstit::$ilm_kokon_muokkaustallennus_eiok . ": " . $virhekoodi; } } } else { $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt); } } else { // Kun sessio loppunut tai muuten väärä muokkaaja: $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muok_ei_valtuuksia); $this->toteuta_nayta($palauteolio); } $palauteolio->set_ilmoitus($ilmoitus . "<br/>" . $this->tulosta_virheilmoitukset()); return $palauteolio; }
/** * Palauttaa tiettyihin (tietyn tehtävän) ratkaisujen html-koodin, joka * sisältää tarvittavat rakenteet ratkaisujen piilottamista ja näyttämistä * varten. * @param type $ratkaisut * @param boolean $tulostus True, jos halutaan tulostushtml. Muuten normi. * @param int $omaid Käyttäjän tunniste. * @param Elementti $tehtavaelem Elementti-luokan olio. Ratkaisuja ei * käsitellä kiinteinä elementteinä, vaan pikemminkin tehtävä-elementin * ominaisuutena, joka haetaan dynaamisesti tietokannasta tarvittaessa. */ public function luo_tehtavan_ratkaisut_koodi($ratkaisut, $tulostus, $omaid, $tehtavaelem) { $id_teht = "_tuntematon"; $class_arvo = ""; $lask = 0; $pal = ""; foreach ($ratkaisut as $ratk) { if ($ratk instanceof Ratkaisu) { $painikkeet = array(); // Ei painikkeita nyt. // Haetaan käyttäjän oikeudet: $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($ratk->getHenkiloId(), $omaid, Oliotyyppi::$RATKAISU, $ratk->getId(), $this->get_tietokantaolio()); // Lisätään muutospainike vain, jos oikeudet sallivat eikä tulostus: if (!$tulostus) { if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { if ($ratk->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $ratk->setNakyvyysmerkkiPublic(); } else { $ratk->setNakyvyysmerkkiPrivate(); } $muokkausnappi = $this->ratkaisunakymat->luo_muokkauspainike($ratk, $tehtavaelem); array_push($painikkeet, $muokkausnappi); } } if ($lask === 0) { $id_teht = $ratk->getTeht_id(); } if ($tulostus) { $pal .= $this->ratkaisunakymat->luo_koostenakyma_tulostus($ratk, $painikkeet); $class_arvo = "elemtehtavan_ratkaisut_tulostus"; } else { $pal .= $this->ratkaisunakymat->luo_koostenakyma($ratk, $painikkeet); $class_arvo = "elemtehtavan_ratkaisut"; } } } $palaute = Html::luo_div($pal, array(Attr::classs($class_arvo), Attr::style("display:none"), Attr::id("ratkaisut_teht" . $id_teht))); return $palaute; }
public function nayta_kuva($omaid, $id_kokon, $id_teht, $kohde, $kohde_id, $kuvakansion_os) { $kork = $this->korkeus; $lev = $this->leveys; $ind = $this->nayttokokoindeksi; $nayttolev = laske_kuvan_maksimileveys($ind); $nayttokork = laske_kuvan_maksimikorkeus($nayttolev, $lev, $kork); //====================================================================== $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($this->getHenkiloId(), $omaid, Oliotyyppi::$KUVA, $this->getId(), $this->tietokantaolio); //====================================================================== /* Poisto- ja muokkauspainike */ $poista_kuva_painike = ""; $muokkaa_kuva_painike = ""; /* Haetaan oikean (kohde, eli missä kuva on) olion id-name. Nämä * ovat yhteisiä molemmille painikkeille: */ $id_name = ""; if ($kohde == Kuvat::$kohde_kokonaisuus_tiivistelma || $kohde == Kuvat::$kohde_kokonaisuus_selitys) { $id_name = "id_kokon"; } else { if ($kohde == Kuvat::$kohde_tehtava) { $id_name = "id_teht"; } else { if ($kohde == Kuvat::$kohde_ratkaisu) { $id_name = "id_ratk"; } else { $id_name = "id_tuntematon"; } } } $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}" . "?id_kuva=" . $this->id . "&id_kokon=" . $id_kokon . "&id_teht=" . $id_teht . "&kohde_kuva=" . $kohde . "&" . $id_name . "=" . $kohde_id . "&id_kohde_kuva=" . $kohde_id); // Sallitaan paitse hallitsijalle, myös kuvan tallentajalle. if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) { /* Poistopainike */ $onsubmit_funktionimi = "nayta_kuvan_poistovahvistus"; $onsubmit_parametrit = array($this->id); /* Kuvan id*/ $input_maaritteet = array('name' => Toimintonimet::$kuvatoiminto, 'value' => Painikkeet::$POISTA_KUVA_VALUE); try { $poista_kuva_painike = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe poistopainikkeen luomisessa: " . $poikkeus->getMessage(); } } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { // MUOKKAUSPAINIKE: TArkistetaan urliin menevät tiedot: $kuvaotsikko_turv = urlencode($this->kuvaotsikko); $kuvaselitys_turv = urlencode($this->kuvaselitys); $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}" . "?id_kuva=" . $this->id . "&id_kokon=" . $id_kokon . "&id_teht=" . $id_teht . "&kuvaotsikko_kuva=" . $kuvaotsikko_turv . "&kuvaselitys_kuva=" . $kuvaselitys_turv . "&vuosi_kuva=" . $this->vuosi . "&kk_kuva=" . $this->kk . "&paiva_kuva=" . $this->paiva . "&nayttokokoindeksi_kuva=" . $this->nayttokokoindeksi . "&kohde_kuva=" . $kohde . "&" . $id_name . "=" . $kohde_id . "&id_kohde_kuva=" . $kohde_id . "&uusi_kuva=0"); // false ei toimi (true toimii)! /* Muokkauspainike: */ $onsubmit_funktionimi = "nayta_kuvan_muokkauslomake"; $onsubmit_parametrit = array($this->id); /* Kuvan id*/ $input_maaritteet = array('name' => Toimintonimet::$kuvatoiminto, 'value' => Painikkeet::$MUOKKAA_KUVA_VALUE); try { $muokkaa_kuva_painike = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe poistopainikkeen luomisessa: " . $poikkeus->getMessage(); } } /* Kuvan osoite */ $kuvaosoite = $kuvakansion_os . "/" . $this->tiedostonimi; $kuva_html = "<table class='kuvaraamit'>" . "<tr>" . "<th>" . $this->kuvaotsikko . $muokkaa_kuva_painike . $poista_kuva_painike . "</th>" . "</tr>" . "<tr>" . "<td>" . " <!-- KUVAKOODI ALKAA: ÄLÄ MUOKKAA!-->" . "<img id=kuva_" . $this->id . " title='" . $this->kuvaselitys . "' src='" . $kuvaosoite . "' width='" . $nayttolev . "'" . "height='" . $nayttokork . "' class='img-responsive'" . "'/>" . "<!-- KUVAKOODIN LOPPU-->" . "</td>" . "</tr>" . "</table>"; return $kuva_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; }