/** * 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)); }
/** * Toteuttaa uuden tehtävän tallentamisen. Palauttaa Palaute-luokan olion, * joka sisältää tarpeelliset tiedot toiminnon onnistumisesta yms. * * * @param Palaute $palauteolio */ function toteuta_tallenna_muokkaus(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_teht = $parametriolio->id_teht; $omaid = $parametriolio->get_omaid(); $otsikko_teht = $parametriolio->otsikko_teht; $tehtavananto_teht = $parametriolio->tehtavananto_teht; $vaikeustaso_teht = $parametriolio->vaikeustaso_teht; $nakyvyys = $parametriolio->nakyvyys_teht; $tietokantaolio = $parametriolio->get_tietokantaolio(); $onnistuminen = Palaute::$VIRHEKOODI_TALLENNUS; // TArkistetaan, onko käyttäjä kirjautunut. Ellei ole, keskeytetään: if (Henkilo::on_kirjautunut($omaid, $tietokantaolio)) { // Tarkistetaan tiedot: $tallennettava = new Tehtava($id_teht, $tietokantaolio); if ($tallennettava->olio_loytyi_tietokannasta) { // Asetetaan arvot paikalleen: $tallennettava->set_arvo(time(), Tehtava::$sarakenimi_ed_muutos_sek); $tallennettava->setOtsikko($otsikko_teht); $tallennettava->setTehtavananto($tehtavananto_teht); $tallennettava->setVaikeustaso($vaikeustaso_teht); $tallennettava->setNakyvyys($nakyvyys); $palaute = $tallennettava->tallenna_muutokset(); if ($palaute === Tehtava::$OPERAATIO_ONNISTUI) { //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$TEHTAVAN_MUUTOSTEN_TALLENNUS); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } // Otetaan selville, tuleekö käyttäjä koosteesta vai // kokonaisuuksista ja näytetään vastaava juttu: $elem_id = $parametriolio->elementti_id; if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $elem = new Elementti($elem_id, $tietokantaolio); if ($elem->olio_loytyi_tietokannasta) { $parametriolio->kooste_id = $elem->get_arvo(Elementti::$sarakenimi_kooste_id); } $koostekontr = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio); $koostekontr->toteuta_nayta($palauteolio); // JOtta palataan varmasti samaan elementtiin: $palauteolio->set_muokatun_id($parametriolio->elementti_id); } else { $this->toteuta_nayta_tehtavat($palauteolio); // JOtta palataan varmasti samaan kokonaisuuteen: $palauteolio->set_muokatun_id($tallennettava->getId()); } $palauteolio->set_ilmoitus(Tekstit::$tehtava_ilm_tallennus_muok_ok . $this->tulosta_virheilmoitukset()); } else { $parametriolio->uusi = true; // Varmuuden vuoksi. $this->toteuta_tehtavalomakkeen_naytto($palauteolio); $palauteolio->set_ilmoitus(Tekstit::$tehtava_virheilm_tallennus_muok_eiok . $tallennettava->tulosta_virheilmoitukset()); } } else { $this->lisaa_virheilmoitus(Tekstit::$tehtava_virheilm_muokattavaa_ei_loytynyt); $this->toteuta_nayta_tehtavat($palauteolio); $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset()); } } else { // Täällä sessio on vanhentunut: $this->lisaa_virheilmoitus(Kayttajatekstit::$ilmoitus_sessio_vanhentunut); $this->toteuta_nayta_tehtavat($palauteolio); $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset()); } $palauteolio->set_virhekoodi($onnistuminen); $palauteolio->set_valikkonaytto(false); }
/** * Näyttää linkit liittyen kokonaisuuksiin. Jos kokonaisuusvektori on tyhjä * tai ei ole määritelty, palautetaan tyhjä merkkijono. * * Kuhunkin linkkiin liittyy session-muuttuja, joka määrittelee, näytetäänkö * linkin jälkeläiset. Muuttujan nimi on kokonaisuuden id ja arvona "auki" tai * "kiinni". Huomaa, että arvo liittyy nimenomaan jälkeläisten näyttämiseen, * ei kyseisen kokonaisuuden näyttämiseen! * * * @param Parametrit $parametriolio * @param bool $nayta_kiintolinkit * @return <type> */ function hae_kokonaisuuslinkit($parametriolio, $nayta_kiintolinkit) { $kokonaisuudet = $parametriolio->kokonaisuusoliot; $id_kokon = $parametriolio->id_kokon; // Klikattu / aukaistava kokonaisuus $linkki_html = ""; $tietokantaolio = $parametriolio->get_tietokantaolio(); $on_kirjautunut = Henkilo::on_kirjautunut($parametriolio->get_omaid(), $tietokantaolio); if ($nayta_kiintolinkit) { //$linkki_html .= // Html::luo_a_linkto('../index.php', // Tekstit::$linkki_kokon_etusivu, // array()); } // Jos tullaan sivun ulkopuolisesta linkistä (siis urlin kautta), pitää // aukaista kaikki kokonaisuudet, jotka ovat näytettävän kokonaisuuden // yläpuolella, jotta koko linkkipuu on näkyvissä näytettävään kokonai- // suuteen asti. if ($parametriolio->naytto_urlin_mukaan()) { $id_avattava = $id_kokon; $kokon_avattava = new Kokonaisuusolio($id_avattava, $tietokantaolio); $ylakokon_id_avattava = $kokon_avattava->getYlakokonaisuuden_id(); do { if ($kokon_avattava instanceof Kokonaisuusolio) { $muuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($kokon_avattava->get_id()); $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_AUKI; // Haetaan yläkokonaisuus: $kokon_avattava = new Kokonaisuusolio($ylakokon_id_avattava, $tietokantaolio); // Ja uusi yläkokon_id $ylakokon_id_avattava = $kokon_avattava->getYlakokonaisuuden_id(); } } while ($kokon_avattava->olio_loytyi_tietokannasta); } if (isset($kokonaisuudet) && is_array($kokonaisuudet)) { if (!empty($kokonaisuudet)) { $linkki_html .= "<table>"; $rajataso = 0; $piilotus_kaynnissa = false; // Näytetäänkö linkit vai ei. foreach ($kokonaisuudet as $kokon) { if ($kokon instanceof Kokonaisuusolio) { $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='linkkielementti'" . "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 = ""; } } $risuaita_id = ""; if ($parametriolio->get_kokonaisuuksien_nayttotapa() == Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayta_kaikki_arvo) { $risuaita_id = "#" . $kokon->get_id(); } // Jos näytetään pelkästään tämä kokonaisuus, merkitään // se linkeissä eri ulkonäöllä, ellei ole kyseessä // kokonaisuusryhmän vaihto: if ($parametriolio->get_kokonaisuuksien_nayttotapa() == Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayta_yksi_kerrallaan_arvo && !$parametriolio->kokonaisuusryhman_vaihto && $kokon->get_id() == $id_kokon) { $valitun_id = "id='valittu_kokon'"; } else { $valitun_id = ""; } $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() . ",\"kokonaisuudet\")'>{$plus}</td>"; /* Otsikon klikkaaminen avaa aliotsikot (jos on). */ if (!empty($plus)) { $onclick = " onclick='aukaise_aliotsikot(" . $kokon->get_id() . ")'"; } else { $onclick = ""; } $linkin_alku = "<td class='linkkisolu'><a class='taso" . $taso . "' " . $valitun_id . $onclick . " href=index.php" . "?id_kokon=" . $kokon->get_id() . $risuaita_id . ">"; $linkin_loppu = "</a></td>"; $rivin_loppu = "</tr>"; // Linkkielementin lopputagi // Otsikkonumeroita ei näytetä tietyn tason jälkeen: if ($taso > Kokonaisuusolio::$max_otsikkonron_nayttotaso) { $otsikkonro = ""; } else { $otsikkonro = $kokon->getOtsikkomerkinta() . " "; } // Julkiset näytetään ilman mukinoita: if ($kokon->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $linkki_html .= $rivin_alku; $linkki_html .= $etumerkin_html . $linkin_alku; $linkki_html .= $otsikkonro; $linkki_html .= $kokon->getOtsikko(); $linkki_html .= $linkin_loppu; $linkki_html .= $rivin_loppu; } else { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) { $linkki_html .= $rivin_alku; $linkki_html .= $etumerkin_html . $linkin_alku; $linkki_html .= "<span class='piilotettu'>"; $linkki_html .= $otsikkonro; $linkki_html .= $kokon->getOtsikko(); $linkki_html .= "</span>"; $linkki_html .= $linkin_loppu; $linkki_html .= $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 { $class_arvo = "tuntematon"; } } $linkki_html .= $rivin_alku; $linkki_html .= $etumerkin_html . $linkin_alku; $linkki_html .= "<span class='" . $class_arvo . "'>"; $linkki_html .= $otsikkonro; $linkki_html .= $kokon->getOtsikko(); $linkki_html .= "</span>"; $linkki_html .= $linkin_loppu; $linkki_html .= $rivin_loppu; } } else { // Ei näytetä linkkiä! } } } } } $linkki_html .= "</table>"; } } return $linkki_html; }
/** * Näyttää kaikkien nykyiseen kieleen (kaikki tasot ja oppiaineet) liittyvien * kokonaisuuksien otsikoiden, joista klikkaamalla pääsee tarkastelemaan * kokonaisuutta. * * Näytetään julkiset ja omat yksityiset kokonaisuudet. Tulevaisuudessa * voi lisätä tarvittaessa mahdollisuuden antaa oikeuksia muille. * * IDEA: toisen koosteen kloonaaminen voisi olla sallittavaa. Tällöin voi * kloonista tehdä omanlaisen, mutta toisen tekemä jää ennalleen. * * @param Palaute $palauteolio */ public function toteuta_nayta_koosteet(&$palauteolio) { $koosteet = array(); $omaid = $this->get_kayttaja()->get_id(); $kieli = $this->get_parametriolio()->kieli_id; $oppiaine = $this->get_parametriolio()->oppiaine_kokon; $taso = $this->get_parametriolio()->taso_kokon; // Järjestäminen ei oikein onnistu täällä erikoisen nimenrakennuksen // takia (kielien, tasojen ja oppiaineiden nimet mukana, joita ei ole // tietokannassa). $hakulause = "SELECT kt.id from " . Kooste::$taulunimi . " AS kt" . " JOIN " . Henkilo::$taulunimi . " AS hlot" . " ON kt." . Kooste::$sarakenimi_henkilo_id . "=hlot.id" . " WHERE kt." . Kooste::$sarakenimi_nakyvyys . "=" . Nakyvyys::$JULKINEN . " OR kt." . Kooste::$sarakenimi_henkilo_id . "=" . $omaid . " ORDER BY hlot." . Henkilo::$sarakenimi_sukunimi . "," . " kt." . Kooste::$sarakenimi_organisaatio; $osumat = $this->get_tietokantaolio()->tee_omahaku_oliotaulukkopalautteella($hakulause); foreach ($osumat as $kooste_tk_olio) { $kooste = new Kooste($kooste_tk_olio->id, $this->get_tietokantaolio()); // Jos löytyi tietokannasta, lisätään koosteisiin: if ($kooste->olio_loytyi_tietokannasta) { array_push($koosteet, $kooste); } } //============ luodaan koosterivit (yksi rivi - yksi kooste): ========== $rivit = array(); foreach ($koosteet as $kooste) { if ($kooste instanceof Kooste) { $nayttopainike = ""; $muokkauspainike = ""; $poistopainike = ""; $tekija_id = $kooste->get_arvo(Kooste::$sarakenimi_henkilo_id); $tekija = new Henkilo($tekija_id, $this->get_tietokantaolio()); $org = $kooste->get_arvo(Kooste::$sarakenimi_organisaatio); if (!empty($org)) { $org .= "_"; } $nimike = $tekija->get_arvo(Henkilo::$sarakenimi_sukunimi) . "_" . $org . Kielet::hae_kielen_nimi_lyhennos($kooste->get_arvo(Kooste::$sarakenimi_kieli)) . "_" . strtoupper(Oppiaineet::hae_oppiaineen_nimi2($kooste->get_arvo(Kooste::$sarakenimi_oppiaine))) . "_" . Koulutasot::hae_koulutason_nimi($kooste->get_arvo(Kooste::$sarakenimi_taso), false) . "_" . $kooste->get_arvo(Kooste::$sarakenimi_nimi) . " "; //========= Näyttöpainike ==================================== $nayttopainike = $this->koostenakymat->luo_koosteen_nayttopainike($kooste); //========= Muokkauspainike ja Poistopainike vain tietyille ==== // Täällä tarkistetaan oikeudet eka: $user = $this->get_kayttaja(); if ($user->olio_loytyi_tietokannasta) { if ($tekija_id + 0 === $user->get_id() + 0 || $user->get_arvo(Henkilo::$sarakenimi_valtuudet) + 0 === Valtuudet::$HALLINTA) { $muokkauspainike = $this->koostenakymat->luo_koosteen_muokkauspainike($kooste); $poistopainike = $this->koostenakymat->luo_koosteen_poistopainike($kooste); } } if ($kooste->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $on_julkinen = true; } else { $on_julkinen = false; } $rivi = $this->koostenakymat->luo_koosterivi($nimike, $nayttopainike, $muokkauspainike, $poistopainike, $on_julkinen); array_push($rivit, $rivi); //============================================================== } } $tuloste = $this->koostenakymat->nayta_koosteet($rivit); //====================================================================== // Luodaan paluu-painike: $paluupainike = $this->koostenakymat->create_button_gobacktoarticles(); // Luodaan Uusi kooste -painike, jos käyttäjä kirjautunut ja hänellä // koostevaltuudet: $uusikoostepainike = ""; if (Henkilo::on_kirjautunut($omaid, $this->get_tietokantaolio())) { if ($this->get_kayttaja()->get_arvo(Henkilo::$sarakenimi_valtuudet) >= Valtuudet::$KOOSTE_LISAYS) { $uusikoostepainike = $this->koostenakymat->create_button_new_summary(); } } $palauteolio->set_sisalto($tuloste); $palauteolio->set_linkkihtml($paluupainike . $uusikoostepainike); $palauteolio->set_nayttotapa(Html_koodi::$sidenav_fixed); $palauteolio->set_valikkonaytto(false); }
/** * Näyttää perusnäkymän sekä kirjautuneelle että kirjautumattomalle käyttäjälle. * Opettajalle näkymä on erilainen sisältäen enemmän toimintoja. * @param Palaute $palauteolio Vakio palauteolio näkymätietojen säilyttämiseen. */ public function toteuta_nayta(&$palauteolio) { $sisalto = ""; $param = $this->get_parametriolio(); $lang_id = $param->kieli_id; if (Henkilo::on_kirjautunut($param->get_omaid(), $this->get_tietokantaolio())) { $teacher = new Henkilo($param->get_omaid(), $this->get_tietokantaolio()); $myCourseInfos = $this->get_all_her_courses($teacher->get_id()); $sisalto = $this->palautusnakymat->show_teacher_view($teacher, $myCourseInfos, $lang_id); } else { $sisalto = $this->palautusnakymat->show_submit_form($lang_id, $this->public_courses_found()); } $palauteolio->set_sisalto($sisalto); }
/** * Toteuttaa ratkaisun muokkauksen tallentamisen. Parametrina annettavan * Palaute-luokan olion kautta välitetään myös tulokset (&-merkki!), * tarpeelliset tiedot toiminnon onnistumisesta yms. * * @param Palaute $palauteolio */ function toteuta_tallenna_muokkaus(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $id_ratk = $parametriolio->id_ratk; $omaid = $parametriolio->get_omaid(); $vastaus_ratk = $parametriolio->vastaus_ratk; $ratkaisu_ratk = $parametriolio->ratkaisu_ratk; $nakyvyys = $parametriolio->nakyvyys_ratk; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); if (Henkilo::on_kirjautunut($omaid, $tietokantaolio)) { $muokattava = new Ratkaisu($id_ratk, $tietokantaolio); if ($muokattava->olio_loytyi_tietokannasta) { $muokattava->set_arvo(time(), Ratkaisu::$sarakenimi_ed_muutos_sek); $muokattava->setRatkaisu($ratkaisu_ratk); $muokattava->setVastaus($vastaus_ratk); $muokattava->setNakyvyys($nakyvyys); $palaute = $muokattava->tallenna_muutokset(); if ($palaute === Ratkaisu::$OPERAATIO_ONNISTUI) { // Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$RATKAISUN_MUUTOSTEN_TALLENNUS); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); } // Otetaan selville, tuleekö käyttäjä koosteesta vai // kokonaisuuksista ja näytetään vastaava juttu: $elem_id = $parametriolio->elementti_id; if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $elem = new Elementti($elem_id, $tietokantaolio); if ($elem->olio_loytyi_tietokannasta) { $parametriolio->kooste_id = $elem->get_arvo(Elementti::$sarakenimi_kooste_id); } $koostekontr = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio); $koostekontr->toteuta_nayta($palauteolio); // JOtta palataan varmasti samaan elementtiin: $palauteolio->set_muokatun_id($parametriolio->elementti_id); } else { $this->toteuta_nayta($palauteolio); $palauteolio->set_muokatun_id($id_ratk); } $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_ilm_tallennus_uusi_ok . "<br/>" . $this->tulosta_virheilmoitukset()); } else { $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_virheilm_tallennus_uusi_eiok . "<br/>" . $this->tulosta_virheilmoitukset() . "<br/>" . $muokattava->tulosta_virheilmoitukset()); $lomake = $this->ratkaisunakymat->nayta_ratkaisulomake($parametriolio); $palauteolio->set_sisalto($lomake); } } else { // Ellei muokattavaa löytynyt: $this->toteuta_nayta($palauteolio); $this->lisaa_virheilmoitus(Tekstit::$ratkaisu_virheilm_muokattavaa_ei_loytynyt); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_TALLENNUS); $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset()); } } else { // Täällä sessio on vanhentunut: $this->lisaa_virheilmoitus(Kayttajatekstit::$ilmoitus_sessio_vanhentunut); $this->toteuta_nayta($palauteolio); $palauteolio->set_ilmoitus($this->tulosta_virheilmoitukset()); } $palauteolio->set_valikkonaytto(false); return $palauteolio; }
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; }