public function toteuta_nayta_lisavaltuuslomake(&$palaute)
 {
     $tietokantaolio = $this->get_tietokantaolio();
     $parametriolio = $this->get_parametriolio();
     $omistaja = new Henkilo($parametriolio->lv_omistaja_id, $tietokantaolio);
     $omistajan_nimi = $omistaja->get_arvo(Henkilo::$sarakenimi_etunimi) . " " . $omistaja->get_arvo(Henkilo::$sarakenimi_sukunimi);
     // Luodaan ensin valikot:
     // Henkilövalikko: =====================================================
     $name_arvo = Kayttajakontrolleri::$lv_name_kohdehenkilo_id;
     $minimivaltuus = Valtuudet::$TEHTAVA_LISAYS;
     $taulunimi = Henkilo::$taulunimi;
     $henkilot = Henkilo::hae_valtuutetut_henkilot($minimivaltuus, $taulunimi, $tietokantaolio);
     $arvot = array();
     // Henkilön id-arvot.
     $nimet = array();
     // Henkilöiden nimet
     // haetaan arvot ja nimet henkilöiltä, muttei omistajalta:
     foreach ($henkilot as $henkilo) {
         if ($henkilo instanceof Henkilo && $henkilo->get_id() != $omistaja->get_id()) {
             $nimi = $henkilo->get_arvo(Henkilo::$sarakenimi_etunimi) . " " . $henkilo->get_arvo(Henkilo::$sarakenimi_sukunimi);
             array_push($nimet, $nimi);
             array_push($arvot, $henkilo->get_arvo(Henkilo::$SARAKENIMI_ID));
         }
     }
     $select_maaritteet = array(Attr::name($name_arvo));
     $option_maaritteet = array();
     $oletusvalinta_arvo = "";
     $otsikko = "";
     $henkilovalikko = Html::luo_pudotusvalikko_uusi($arvot, $nimet, $select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko);
     //======================================================================
     // Kohdevalikko:
     $name_arvo = Kayttajakontrolleri::$lv_name_vaikutusalue;
     $arvot = Lisavaltuudet::hae_vaikutusaluearvot();
     $nimet = Lisavaltuudet::hae_vaikutusaluekuvaukset();
     $select_maaritteet = array(Attr::name($name_arvo));
     $option_maaritteet = array();
     $oletusvalinta_arvo = Lisavaltuudet::$vain_nykyinen_olio;
     $otsikko = "";
     $kohdevalikko = Html::luo_pudotusvalikko_uusi($arvot, $nimet, $select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko);
     //======================================================================
     // Oikeusvalikko:
     $name_arvo = Kayttajakontrolleri::$lv_name_oikeudet;
     $arvot = Lisavaltuudet::hae_lisavaltuusarvot();
     $nimet = Lisavaltuudet::hae_lisavaltuuskuvaukset();
     $select_maaritteet = array(Attr::name($name_arvo));
     $option_maaritteet = array();
     $oletusvalinta_arvo = Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA;
     $otsikko = "";
     $oikeusvalikko = Html::luo_pudotusvalikko_uusi($arvot, $nimet, $select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko);
     //===================== painikkeet ====================================
     $submit_painike = Html::luo_input(array(Attr::type("submit"), Attr::name(Toimintonimet::$lv_toiminto), Attr::value(Kayttajatekstit::$lisavaltuudet_lomaketeksti_painike_tallenna)));
     $paluupainike = Html::luo_input(array(Attr::type("submit"), Attr::name(Toimintonimet::$lv_toiminto), Attr::value(Kayttajatekstit::$lisavaltuudet_lomaketeksti_painike_takaisin)));
     //===================== painikkeet ====================================
     // Actionkyselymuuttujien arvot. Näin saadaan tiedot kulkemaan
     // lomakkeeseen ja siitä eteenpäin.
     $actionkyselyarvot = array($parametriolio->id_kokon, $parametriolio->oppiaine_kokon, $parametriolio->kieli_id, $parametriolio->lv_kohde_id, $parametriolio->lv_kohdetyyppi, $parametriolio->lv_omistaja_id);
     $palaute->set_sisalto($this->kayttajanakymat->nayta_lisavaltuuslomake($omistajan_nimi, $henkilovalikko, $kohdevalikko, $oikeusvalikko, $submit_painike, $paluupainike, $actionkyselyarvot));
     return $palaute;
 }
Example #2
0
 /**
  * TÄRKEÄ! HUOLEHTII PÄÄASIALLISESTI KÄYTÄNNÖN OIKEUKSISTA KOHTEILLE!
  * Tätä metodia kutsutaan esim. eri olioiden tulostusmetodeissa, kun halutaan
  * selvittää, mitä oikeuksia käyttäjällä on kaiken kaikkiaan suhteessa 
  * <i>tiettyyn olioon</i>. Tässä otetaan huomioon myös lisävaltuudet! 
  * 
  * HUOM! Täällä ei kuitenkaan oteta huomioon olion näkyvyysasetuksen
  * vaikutusta, koska ne ovat oliokohtaisia. Ne siis täytyy määritellä
  * olion sisällä.
  * 
  * <p>Palautearvo on jokin Lisavaltuudet-luokan
  * <b>lisävaltuusarvoista<b> (Valtuudet-luokan arvot viittaavat aina kaikkiin
  * olioihin, joten lisävaltuusarvot ovat tarkempia tässä)</p>
  * 
  * <p>
  * Palautearvo Lisavaltuudet::$EI_LISAVALTUUKSIA kannattaa tulkita niin, 
  * ettei henkilöllä ole lisävaltuuksien lisäksi muitakaan 
  * muokkausoikeuksia kohteeseen, eli samat
  * oikeudet kuin <i>kirjautumattomalla käyttäjällä</i>. 
  * </p>
  * 
  * @param int $omistaja_id Tunniste henkilölle, joka on luonut olion.
  * @param int $omaid Sovelluksen tämänhetkisen käyttäjän tunniste.
  * @param int $kohdeoliotyyppi Olion tyyppi.
  * @param int $kohdeolio_id Olion id.
  * @param Tietokantaolio $tietokantaolio
  */
 public static function hae_kayttajan_kohdeoikeudet($omistaja_id, $omaid, $kohdeoliotyyppi, $kohdeolio_id, $tietokantaolio)
 {
     $oikeudet = Lisavaltuudet::$EI_LISAVALTUUKSIA;
     $yleiset_valtuudet = Lisavaltuudet::$EI_LISAVALTUUKSIA;
     $kayttaja = new Henkilo($omaid, $tietokantaolio);
     if ($kayttaja->olio_loytyi_tietokannasta) {
         $kayttajan_valtuudet = $kayttaja->get_arvo(Henkilo::$sarakenimi_valtuudet);
         // Yleinen valtuustaso pitää olla vähintään tehtävän lisäys!
         if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
             // Käyttäjä on admin tai omistaja. Nollan lisäys tekee stringistä
             // luvun.
             if ($kayttajan_valtuudet + 0 === Valtuudet::$HALLINTA + 0 || $omaid + 0 === $omistaja_id + 0) {
                 $oikeudet = Lisavaltuudet::$KAIKKI_OIKEUDET;
             } else {
                 // Tällöin kaikkia saa muokata ja poistaa. Muut saa muokata
                 // vain omia olioitaan, mikä tulee yläpuolella hoidetuksi.
                 if ($kayttajan_valtuudet + 0 === Valtuudet::$MUOKKAUS_YLEINEN + 0) {
                     $yleiset_valtuudet = Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA;
                 }
                 // Tarkistetaan sitten oliokohtaiset mahdolliset
                 // lisävaltuudet:
                 $lisavaltuudet = Lisavaltuudet::hae_lisavaltuus_static($kohdeolio_id, $kohdeoliotyyppi, $omaid, $omistaja_id, $tietokantaolio);
                 if ($lisavaltuudet != Lisavaltuudet::$VIRHE) {
                     $oikeudet = max(array($lisavaltuudet, $yleiset_valtuudet));
                 } else {
                     $oikeudet = $yleiset_valtuudet;
                 }
             }
         }
     }
     return $oikeudet;
 }
Example #3
0
 /**
  * Palauttaa käyttöoikeusarvoja vastaavat (samassa järjestyksessä)
  * kuvaukset taulukkona paitsi ei ei_lisavaltuuksia-kuvausta. 
  * Tarkastaa myös sen, onko
  * nimiä ja arvoja yhtä monta ja kielteisessä tapauksessa heittää
  * poikkeuksen vastaanottavalle ohjelmanosalle.
  * @return <type> Palauttaa taulukon, joka sisältää suojausasetusten kuvauksen.
  */
 public static function hae_lisavaltuuskuvaukset()
 {
     $kuvaukset = array(Kayttajatekstit::$lisavaltuudet_katseluoikeus, Kayttajatekstit::$lisavaltuudet_vain_muokkaus, Kayttajatekstit::$lisavaltuudet_muokkaus_ja_poisto, Kayttajatekstit::$lisavaltuudet_kaikki_oikeudet);
     // Tarkistetaan täällä, että arvoja ja nimiä on yhtä monta. Ellei ole,
     // heitetään poikkeus.
     if (sizeof(Lisavaltuudet::hae_lisavaltuusarvot()) != sizeof($kuvaukset)) {
         throw new Exception("Virhe luokassa 'lisavaltuudet': tarkista nimien\n                                ja arvojen lukum&auml;&auml;r&auml;t!");
     }
     return $kuvaukset;
 }
Example #4
0
 public function testaa_lisavaltuuden_vaikutus_ratkaisuun()
 {
     $this->lisaa_lihava_kommentti("Lisävaltuuden vaikutus ratkaisutoimintoihin");
     $ratkaisukontrolleri = new Ratkaisukontrolleri($this->tietokantaolio, $this->parametriolio);
     $ratkaisunakymat = new Ratkaisunakymat();
     if (!$this->testiratkaisu instanceof Ratkaisu) {
         $this->lisaa_virheilmoitus("Virhe metodissa 'testaa_lisavaltuuden" . "_vaikutus_ratkaisuun': ratkaisuolio ei ole oikea olio!");
     } else {
         // Näytetään ratkaisu eri valtuuksilla:
         $this->lisaa_kommentti("Testiratkaisun tulostus ilman " . "lisävaltuuksia tuntemattoman kannalta:");
         $id_kokon = -1;
         $id_teht = -1;
         $omaid = -1;
         // Tämä ei ole luoja, eikä tälle lisävaltuuksia!
         $id_ratk = $this->testiratkaisu->getId();
         $ratk = $this->testiratkaisu;
         $painikkeet = $ratkaisukontrolleri->luo_ratkaisupainikkeet($id_ratk);
         $this->lisaa_kommentti($ratkaisukontrolleri->tulosta_kaikki_ilmoitukset());
         $ratkaisukontrolleri->tyhjenna_kaikki_ilmoitukset();
         $this->lisaa_kommentti($ratkaisunakymat->tulosta_ratkaisu($id_kokon, $ratk, $omaid, $painikkeet));
         //======================================================================
         if ($this->testilisavaltuus_yleinen instanceof Lisavaltuudet) {
             $this->lisaa_kommentti("Lasketaan testilisavaltuus_yleinen-arvon" . " oikeutta muokkaus_ei_poisto-luokkaan.");
             $this->testilisavaltuus_yleinen->set_arvo(Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA, Lisavaltuudet::$sarakenimi_valtuus);
             $this->testilisavaltuus_yleinen->tallenna_muutokset();
             $this->lisaa_kommentti("Testiratkaisun tulostus testihenkilön kannalta " . "(ei olion luoja), " . "koska hänellä on lisävaltuuksia (" . $this->testilisavaltuus_yleinen->hae_lisavaltuuden_kuvaus($this->testilisavaltuus_yleinen->get_valtuusarvo()) . "):");
             // Tarkistetaan vielä tiedot ja hakumetodi:
             $lisavaltuusarvo = Lisavaltuudet::hae_lisavaltuus_static($this->testiratkaisu->getId(), Oliotyyppi::$RATKAISU, $this->testilisavaltuus->get_henkilo_id(), $this->testilisavaltuus->get_omistaja_id(), $this->tietokantaolio);
             // Alla ei saa olla "==="-juttua! (lukujen tyyppi muuttuu helposti)
             if ($lisavaltuusarvo == $this->testilisavaltuus_yleinen->get_valtuusarvo()) {
                 $this->lisaa_kommentti("Uuden lisävaltuuden haku tietokannasta ok! ");
             } else {
                 $this->lisaa_virheilmoitus("Virhe lisävaltuuden haussa!" . " Tarkista 'Lisavaltuudet::hae_lisavaltuus'-metodi!" . " Y.m. metodin palautusarvo=" . $lisavaltuusarvo);
             }
             $id_kokon = -1;
             $id_teht = -1;
             $omaid = $this->testihenkilo->get_id();
             // Ei luoja, mutta on lisävaltuuksia!
             // Pitää myös asettaa käyttäjä parametreihin, joista
             // ratkaisukontrolleri tarkistaa tiedon:
             $this->parametriolio->set_omaid($this->testihenkilo->get_id());
             $id_ratk = $this->testiratkaisu->getId();
             $ratk = $this->testiratkaisu;
             $painikkeet = $ratkaisukontrolleri->luo_ratkaisupainikkeet($id_ratk);
             $this->lisaa_kommentti($ratkaisukontrolleri->tulosta_kaikki_ilmoitukset());
             $ratkaisukontrolleri->tyhjenna_kaikki_ilmoitukset();
             $this->lisaa_kommentti($ratkaisunakymat->tulosta_ratkaisu($id_kokon, $ratk, $omaid, $painikkeet));
             //======================================================================
             $this->lisaa_kommentti("Testiratkaisun tulostus testihenkilön kannalta, " . "kun erityisen lisävaltuuden arvoa nostetaan arvoon\n                                        'saa_muokata_ja_poistaa' (muista yleinen lv = " . $this->testilisavaltuus_yleinen->hae_lisavaltuuden_kuvaus($this->testilisavaltuus_yleinen->get_valtuusarvo()) . "!):");
             $this->testilisavaltuus->set_arvo(Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA, Lisavaltuudet::$sarakenimi_valtuus);
             if ($this->testilisavaltuus->tallenna_muutokset() == Malliluokkapohja::$OPERAATIO_ONNISTUI) {
                 if ($this->testilisavaltuus->get_valtuusarvo() == Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) {
                     // Tarkistetaan vielä tiedot ja hakumetodi:
                     $lisavaltuusarvo = Lisavaltuudet::hae_lisavaltuus_static($this->testiratkaisu->getId(), Oliotyyppi::$RATKAISU, $this->testilisavaltuus->get_henkilo_id(), $this->testiratkaisu->getHenkiloId(), $this->tietokantaolio);
                     // Alla ei saa olla "==="-juttua! (lukujen tyyppi muuttuu helposti)
                     if ($lisavaltuusarvo == $this->testilisavaltuus->get_valtuusarvo()) {
                         $this->lisaa_kommentti("Uuden lisävaltuuden haku tietokannasta ok!" . " Arvo on " . $this->testilisavaltuus->hae_lisavaltuuden_kuvaus($lisavaltuusarvo));
                     } else {
                         $this->lisaa_virheilmoitus("Virhe lisävaltuuden haussa!" . " Tarkista 'Lisavaltuudet::hae_lisavaltuus'-metodi!" . " Y.m. metodin palautusarvo=" . $lisavaltuusarvo);
                     }
                     $this->lisaa_kommentti("Lisävaltuusmuutos onnistui! Testiratkaisun tulostus:");
                     $id_kokon = -1;
                     $id_teht = -1;
                     $omaid = $this->testilisavaltuus->get_henkilo_id();
                     // Ei luoja, mutta on lisävaltuuksia!
                     $id_ratk = $this->testiratkaisu->getId();
                     $ratk = $this->testiratkaisu;
                     $painikkeet = $ratkaisukontrolleri->luo_ratkaisupainikkeet($id_ratk);
                     $this->lisaa_kommentti($ratkaisukontrolleri->tulosta_kaikki_ilmoitukset());
                     $ratkaisukontrolleri->tyhjenna_kaikki_ilmoitukset();
                     $this->lisaa_kommentti($ratkaisunakymat->tulosta_ratkaisu($id_kokon, $ratk, $omaid, $painikkeet));
                 } else {
                     $this->lisaa_virheilmoitus("Virhe: lisävaltuuden muutosta\n                            ei havaittu tietokannassa!<br/>" . $this->testilisavaltuus->tulosta_virheilmoitukset());
                 }
             } else {
                 $this->lisaa_virheilmoitus("Virhe lisävaltuuden muutoksen \n                                        tallennuksessa! <br/>" . $this->testilisavaltuus->tulosta_virheilmoitukset());
             }
             //======================================================================
             $this->lisaa_kommentti("Testiratkaisun tulostus testihenkilön kannalta, " . "kun yleisen lisävaltuuden arvoa nostetaan arvoon\n                                        'Kaikki_oikeudet', \n                                        jolloin erityisellä lisävaltuudella on voimassa\n                                        " . $this->testilisavaltuus->hae_lisavaltuuden_kuvaus($this->testilisavaltuus->get_valtuusarvo()));
             $this->testilisavaltuus_yleinen->set_arvo(Lisavaltuudet::$KAIKKI_OIKEUDET, Lisavaltuudet::$sarakenimi_valtuus);
             if ($this->testilisavaltuus_yleinen->tallenna_muutokset() == Malliluokkapohja::$OPERAATIO_ONNISTUI) {
                 $this->lisaa_kommentti("Lisävaltuusmuutos onnistui! Testiratkaisun tulostus:");
                 $this->lisaa_kommentti("Tarkistetaan, että valtuusarvon hakumetodi" . " hakee nimenomaan suuremman kahdesta:");
                 // Tarkistetaan vielä tiedot ja hakumetodi:
                 $lisavaltuusarvo = Lisavaltuudet::hae_lisavaltuus_static($this->testiratkaisu->getId(), Oliotyyppi::$RATKAISU, $this->testilisavaltuus->get_henkilo_id(), $this->testilisavaltuus->get_omistaja_id(), $this->tietokantaolio);
                 // Alla ei saa olla "==="-juttua! (lukujen tyyppi muuttuu helposti)
                 if ($lisavaltuusarvo == Lisavaltuudet::$KAIKKI_OIKEUDET) {
                     $this->lisaa_kommentti("Uuden lisävaltuuden haku tietokannasta ok!" . " Arvo on " . $this->testilisavaltuus->hae_lisavaltuuden_kuvaus($lisavaltuusarvo));
                 } else {
                     $this->lisaa_virheilmoitus("Virhe lisävaltuuden haussa!" . " Tarkista 'Lisavaltuudet::hae_lisavaltuus'-metodi!" . " Y.m. metodin palautusarvo=" . $lisavaltuusarvo);
                 }
                 $id_kokon = -1;
                 $id_teht = -1;
                 $omaid = $this->testihenkilo->get_id();
                 // Ei luoja, mutta on lisävaltuuksia!
                 $id_ratk = $this->testiratkaisu->getId();
                 $ratk = $this->testiratkaisu;
                 $painikkeet = $ratkaisukontrolleri->luo_ratkaisupainikkeet($id_ratk);
                 $this->lisaa_kommentti($ratkaisukontrolleri->tulosta_kaikki_ilmoitukset());
                 $ratkaisukontrolleri->tyhjenna_kaikki_ilmoitukset();
                 $this->lisaa_kommentti($ratkaisunakymat->tulosta_ratkaisu($id_kokon, $ratk, $omaid, $painikkeet));
             } else {
                 $this->lisaa_virheilmoitus("Virhe lisävaltuuden muutoksen \n                                        tallennuksessa! <br/>" . $this->testilisavaltuus->tulosta_virheilmoitukset());
             }
         } else {
             $this->lisaa_virheilmoitus("this->testilisavaltuus_yleinen ei oikea olio!");
         }
     }
 }