Esempio n. 1
0
 /**
  * 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));
 }
Esempio n. 2
0
 /**
  * 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;
 }
Esempio n. 4
0
 /**
  * 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;
 }
Esempio n. 7
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;
 }