/** * Luo ratkaisun painikkeet tarkastaen käyttäjän oikeudet. * * Huom: Käyttäjän id saadaan osoitteesta $this->get_parametriolio()->get_omaid(). * Tämä on tärkeä tietää, koska sen perusteella annetaan toimenpidevaltuudet! * * Palauttaa painikkeiden html-koodin taulukossa, joka voi olla tyhjä. * * Painikkeet liittyvät ratkaisun muokkaukseen, poistoon, oikeuksien * jakamiseen ja uuden kuvan lisäämiseen, joihin kaikkiin tarvitaan * peruskäyttäjää enemmän valtuuksia. Oikeuksien tarkistus vaatii * sen verran logiikkaa, ettei sitä oikein tunnu sopivalta tehdä * näkymissä. * * @param int $id_ratk Sen ratkaisun tunniste, jonka painikkeita haetaan. */ function luo_ratkaisupainikkeet($id_ratk) { $tietokantaolio = $this->get_tietokantaolio(); $omaid = $this->get_parametriolio()->get_omaid(); $id_kokon = $this->get_parametriolio()->id_kokon; $painikkeet = array(); $poistonappi = "piip"; $muokkausnappi = ""; $uusi_kuva_painike = ""; $jaa_oikeuksia_nappi = ""; $nayta_koodi_nappi = ""; // Haetaan ensin ratkaisu: $ratkaisu = new Ratkaisu($id_ratk, $tietokantaolio); if ($ratkaisu->olio_loytyi_tietokannasta) { //================================================================== $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($ratkaisu->getHenkiloId(), $omaid, Oliotyyppi::$RATKAISU, $ratkaisu->getId(), $tietokantaolio); $this->lisaa_lihava_kommentti("kohdeoikeudet=" . $kohdeoikeudet . ", henkilo_id=" . $ratkaisu->getHenkiloId() . " ja omaid=" . $omaid); // Muokkaus ja poisto tietysti sopivan korkeille henkilöille. // HUOMAA: jatkossa myös sopivasti muokkaajille! if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) { // POistopainike: $class = "rinnakkain"; $id = ""; $action = "{$_SERVER['PHP_SELF']}" . "?id_ratk=" . $ratkaisu->getId() . "&id_teht=" . $ratkaisu->getTeht_id() . "&id_kokon=" . $id_kokon; $name = Toimintonimet::$tehtavatoiminto; $value = Painikkeet::$ratkaisu_poista_value; $poistonappi = Html::luo_painikelomake($class, $id, $action, $name, $value); array_push($painikkeet, $poistonappi); // Oikeuksia saa jakaa vain omistaja ja kunkku. if ($kohdeoikeudet === Lisavaltuudet::$KAIKKI_OIKEUDET) { // Oikeuksien eli lisävaltuuksien jakopainike:====================== $action_os = "oletus"; $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", "id_teht", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id); $action_kyselyarvot = array($id_kokon, $this->get_parametriolio()->oppiaine_kokon, $this->get_parametriolio()->kieli_id, $ratkaisu->getTeht_id(), $ratkaisu->getId(), Oliotyyppi::$RATKAISU, $ratkaisu->getHenkiloId()); $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot); array_push($painikkeet, $jaa_oikeuksia_nappi); //================================================================== } } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { // TArkistetaan urliin menevät tiedot: //$vastaus_turvallinen = urlencode($this->vastaus); //$ratkaisu_turvallinen = urlencode($this->ratkaisu); // Muokkauspainike: $class = "rinnakkain"; $id = ""; $action = "{$_SERVER['PHP_SELF']}" . "?id_ratk=" . $ratkaisu->getId() . "&id_teht=" . $ratkaisu->getTeht_id() . "&id_kokon=" . $id_kokon; //"&vastaus_ratk=".$vastaus_turvallinen. // "&ratkaisu_ratk=".$ratkaisu_turvallinen; $name = Toimintonimet::$tehtavatoiminto; $value = Painikkeet::$ratkaisu_muokkaa_value; $muokkausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value); array_push($painikkeet, $muokkausnappi); /* Uuden kuvan lisäyspainike ratkaisuun*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($ratkaisu->getId()); /* Ratkaisun id*/ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $id_kokon . "&id_teht=" . $ratkaisu->getTeht_id() . "&id_ratk=" . $ratkaisu->getId() . "&kohde_kuva=" . Kuvat::$kohde_ratkaisu); $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$ratkaisu_lisaa_kuva_value, 'title' => Painikkeet::$ratkaisu_lisaa_kuva_title); try { $uusi_kuva_painike = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); array_push($painikkeet, $uusi_kuva_painike); } catch (Exception $poikkeus) { $this->lisaa_virheilmoitus(Tekstit::$ratkaisu_virheilm_kuvanapin_luonti_eiok . $poikkeus->getMessage()); } } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $ratkaisu->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { // Koodia voivat kaikki vilkaista, jos vain näkyvissä: $nayta_koodi_nappi = Html::luo_button(Painikkeet::$NAYTA_KOODI_value, array(Attr::title(Painikkeet::$NAYTA_KOODI_title), Attr::onclick("hae_koodi", array($ratkaisu->get_id(), Oliotyyppi::$RATKAISU)))); array_push($painikkeet, $nayta_koodi_nappi); } } else { $this->lisaa_virheilmoitus(Tekstit::$ratkaisu_ilm_ei_loytynyt); } return $painikkeet; }
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!"); } } }