예제 #1
0
 /**
  * Tarkistetaan varsinaisen lisävaltuuden olemassaolo
  * henkilo_id:n, oliotyypin ja olio_id:n perusteella (staattinen metodi).
  * <p>
  * Huomaa, että tallennettaessa uutta lisävaltuutta käytetään
  * ei-staattista metodia <p>tarkista_lisavaltuuden_olemassaolo()</p>! Metodit ovat
  * hiukan erilaisia! 
  * </p> 
  * 
  * <p>
  * Palauttaa lisävaltuuden löytyessä Lisävaltuus-luokan olion. Muussa 
  * tapauksessa palauttaa arvon Lisavaltuudet::$EI_LISAVALTUUKSIA (kun
  * arvot ovat kunnolla määriteltyjä). Jos vähintään yksi arvoista
  * henkilo_id, oliotyyppi ja olio_id on $MUUTTUJAA_EI_MAARITELTY,
  * palautetaan arvo Lisavaltuudet::$VIRHE.
  * </p> 
  * 
  * <p>
  * Tietokannasta saa löytyä korkeintaan kaksi lisävaltuutta: yleinen ja 
  * kohdetta koskeva. Tässä tapauksessa <i>korkeampi valtuustaso</i> palautetaan.
  * </p> 
  * 
  * @param type $olio_id
  * @param type $oliotyyppi
  * @param type $henkilo_id Jolle lisävaltuus myönnetään.
  * @param type $omistaja_id Olion omistaja
  * @param Tietokantaolio $tietokantaolio
  * 
  * @return Palauttaa joko olemassaolevan Lisavaltuus-luokan olion tai
  * joko arvon $EI_LISAVALTUUKSIA tai $VIRHE. Viimeksi mainittu ei kerro
  * mitään siitä, onko lisävaltuutta jo olemassa!
  */
 public static function tarkista_lisavaltuudet_tietokannasta($olio_id, $oliotyyppi, $henkilo_id, $omistaja_id, $tietokantaolio)
 {
     $palaute = Lisavaltuudet::$VIRHE;
     $valtuusolio_yl = "";
     $valtuusolio_erit = "";
     $valtuus_yl = Lisavaltuudet::$EI_LISAVALTUUKSIA;
     $valtuus_erit = Lisavaltuudet::$EI_LISAVALTUUKSIA;
     // HUOM! Valtuuksia ei saa olla kuin yksi yhtä
     // käyttäjä-olio -paria kohti! Sitä ei estetä tietokantatasolla!
     if ($olio_id != Lisavaltuudet::$MUUTTUJAA_EI_MAARITELTY && $henkilo_id != Lisavaltuudet::$MUUTTUJAA_EI_MAARITELTY && $oliotyyppi != Lisavaltuudet::$MUUTTUJAA_EI_MAARITELTY) {
         // Tarkistetaan ensin globaalin (omistajan kaikki oliot) lisäoikeuden
         // olemassaolo. Täällä tarvitaan linkki omistajaan, jottei lisä-
         // oikeuksia ihan kaikkiin olioihin myönnetä.
         $hakulause = "SELECT id FROM " . Lisavaltuudet::$taulunimi . " WHERE " . Lisavaltuudet::$sarakenimi_oliotyyppi . "=" . Lisavaltuudet::$kaikki_omistajan_oliot . " AND " . Lisavaltuudet::$sarakenimi_olio_id . "=" . Lisavaltuudet::$kaikki_omistajan_oliot . " AND " . Lisavaltuudet::$sarakenimi_omistaja_id . "=" . $omistaja_id . " AND " . Lisavaltuudet::$sarakenimi_henkilo_id . "=" . $henkilo_id;
         $osumaoliot = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
         // Jos lisävaltuus löytyi:
         if (sizeof($osumaoliot) > 0) {
             $valtuusolio_yl = new Lisavaltuudet($osumaoliot[0]->id, $tietokantaolio);
             $valtuus_yl = $valtuusolio_yl->get_valtuusarvo();
         }
         // Sitten etsitään tarkasti olioon viittaavaa lisäoikeutta:
         $hakulause = "SELECT id FROM " . Lisavaltuudet::$taulunimi . " WHERE " . Lisavaltuudet::$sarakenimi_oliotyyppi . "=" . $oliotyyppi . " AND " . Lisavaltuudet::$sarakenimi_olio_id . "=" . $olio_id . " AND " . Lisavaltuudet::$sarakenimi_henkilo_id . "=" . $henkilo_id;
         $osumaoliot = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
         // Jos lisävaltuus löytyi:
         if (sizeof($osumaoliot) > 0) {
             $valtuusolio_erit = new Lisavaltuudet($osumaoliot[0]->id, $tietokantaolio);
             $valtuus_erit = $valtuusolio_erit->get_valtuusarvo();
         }
         // Palaute tarkasti:
         if ($valtuus_erit > $valtuus_yl) {
             $palaute = $valtuusolio_erit;
         } else {
             if ($valtuusolio_yl instanceof Lisavaltuudet) {
                 $palaute = $valtuusolio_yl;
             } else {
                 $palaute = Lisavaltuudet::$EI_LISAVALTUUKSIA;
             }
         }
     }
     return $palaute;
 }
예제 #2
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!");
         }
     }
 }