/** * 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; }
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!"); } } }