/** * Etsii tietokannasta ja palauttaa olion näkyvyysarvon. Oletuspalautusarvo * on Nakyvyys::$YKSITYINEN. Muita arvoja tutkitaan vain, jos kyseinen * olio löytyy tietokannasta. * @param type $kohdeolio_id * @param type $kohdeoliotyyppi * @param type $tietokantaolio */ public static function hae_nakyvyys($kohdeolio_id, $kohdeoliotyyppi, $tietokantaolio) { $nakyvyys = Nakyvyys::$YKSITYINEN; if ($kohdeoliotyyppi + 0 === Oliotyyppi::$KOKONAISUUS) { $kohde = new Kokonaisuusolio($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$TEHTAVA) { $kohde = new Tehtava($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$RATKAISU) { $kohde = new Ratkaisu($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$KOOSTE) { $kohde = new Kooste($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->get_arvo(Kooste::$sarakenimi_nakyvyys); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$ELEMENTTI) { $kohde = new Elementti($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->get_arvo(Elementti::$sarakenimi_nakyvyys); } } else { } } } } } return $nakyvyys; }
/** * Luo tehtävän painikkeet tarkastaen käyttäjän oikeudet. 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_teht Sen tehtävän tunniste, jonka painikkeita haetaan. */ function luo_tehtavapainikkeet($id_teht) { $tietokantaolio = $this->get_tietokantaolio(); $omaid = $this->get_kayttaja()->get_id(); $id_kokon = $this->get_parametriolio()->id_kokon; $parametriolio = $this->get_parametriolio(); $painikkeet = array(); $poistonappi = ""; $muokkausnappi = ""; $ratkaisunappi = ""; /* Ratkaisujen näyttö */ $uusi_ratkaisu_nappi = ""; /* Uuden ratkaisun lisääminen */ $uusi_kuva_painike = ""; $jaa_oikeuksia_nappi = ""; $nayta_koodi_nappi = ""; // Haetaan ensin tehtävä: $tehtava = new Tehtava($id_teht, $tietokantaolio); if ($tehtava->olio_loytyi_tietokannasta) { // Lasketaan ratkaisut ja näytetään ratkaisupainike vain, jos // ratkaisuja on olemassa: $ratkaisut = $this->ratkaisukontrolleri->hae_ratkaisut($id_teht); $ratk_lkm = sizeof($ratkaisut); if ($ratk_lkm > 0) { // Ratkaisut näkyvät kaikille: $onsubmit_funktionimi = "hae_ratkaisut"; $onsubmit_parametrit = array($tehtava->getId(), $id_kokon, $omaid); $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&kohde_kuva=" . Kuvat::$kohde_ratkaisu . "&" . Oliotyyppi::$naytettava_name . "=" . Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU); $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$ratkaisu_nayta_ratkaisut_value, 'title' => Painikkeet::$ratkaisu_nayta_ratkaisut_title . " (" . $ratk_lkm . ")"); $ratkaisunappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } //================================================================== $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($tehtava->getHenkiloId(), $omaid, Oliotyyppi::$TEHTAVA, $tehtava->getId(), $tietokantaolio); // 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_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&kohde_kuva=" . Kuvat::$kohde_tehtava; $name = Toimintonimet::$tehtavatoiminto; $value = Painikkeet::$tehtava_poista_value; $poistonappi = Html::luo_painikelomake($class, $id, $action, $name, $value); // Oikeuksia saa jakaa vain omistaja ja kunkku. if ($kohdeoikeudet + 0 === Lisavaltuudet::$KAIKKI_OIKEUDET + 0) { // Oikeuksien eli lisävaltuuksien jakopainike:====================== $action_os = "oletus"; $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id); $action_kyselyarvot = array($id_kokon, $parametriolio->oppiaine_kokon, $parametriolio->kieli_id, $tehtava->getId(), Oliotyyppi::$TEHTAVA, $tehtava->getHenkiloId()); $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot); //================================================================== } } // Muokkaus: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { // Muokkauspainike: $class = "muokkauspainike"; $id = ""; /* HUOM! ÄLÄ JÄTÄ TYHJIÄ VÄLEJÄ =-MERKIN YMPÄRILLE! * AIHEUTTIVAT SEN, ETTÄ TEHTÄVÄNANTO EI NÄKYNYT! */ $action = "{$_SERVER['PHP_SELF']}" . "?id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&kohde_kuva=" . Kuvat::$kohde_tehtava; $name = Toimintonimet::$tehtavatoiminto; $value = Painikkeet::$tehtava_muokkaa_value; $muokkausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value); /* Uuden kuvan lisäyspainike tehtävään*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($tehtava->getId()); $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $id_kokon . "&id_teht=" . $tehtava->getId() . "&uusi_kuva=true" . "&kohde_kuva=" . Kuvat::$kohde_tehtava); $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_lisaa_kuva_value, 'title' => Painikkeet::$tehtava_lisaa_kuva_title); try { $uusi_kuva_painike = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } } // Koodipainike, ellei ole piilotettu: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $tehtava->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($tehtava->get_id(), Oliotyyppi::$TEHTAVA)))); } //============== Ratkaisun lisäyspainike =========================== // Uuden ratkaisun lisäysoikeudet (kohdeoikeudet ei oikein istu tähän): if ($this->get_kayttaja()->get_arvo(Henkilo::$sarakenimi_valtuudet) >= Valtuudet::$TEHTAVA_LISAYS) { // Uusi_ratkaisu_painike: try { $onsubmit_funktionimi = "nayta_ratkaisulomake"; $onsubmit_parametrit = array($tehtava->getId()); /* Tehtävän id */ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&uusi=1" . "&kohde_kuva=" . Kuvat::$kohde_ratkaisu); $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$ratkaisu_uusi_value); $uusi_ratkaisu_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $sisalto .= "Uusi ratkaisu -painike: " . $poikkeus->getMessage(); } } } $ehdokkaat = array($ratkaisunappi, $uusi_ratkaisu_nappi, $muokkausnappi, $nayta_koodi_nappi, $uusi_kuva_painike, $jaa_oikeuksia_nappi, $poistonappi); // Otetaan mukaan ne painikkeet, jotka eivät ole tyhjiä: foreach ($ehdokkaat as $nappi) { if (!empty($nappi)) { array_push($painikkeet, $nappi); } } return $painikkeet; }
/** * Palauttaa tehtävälomakkeen html:n. * * @param Parametrit $parametriolio * @return <type> Palauttaa lomakkeen html:n */ function nayta_tehtavalomake($parametriolio) { $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $omaid = $parametriolio->get_omaid(); $uusi = $parametriolio->uusi; $ilmoitus_teht = $parametriolio->ilmoitus_teht; $otsikko_teht = $parametriolio->otsikko_teht; $tehtavananto_teht = $parametriolio->tehtavananto_teht; $vaikeustaso_teht = $parametriolio->vaikeustaso_teht; $tietokantaolio = $parametriolio->get_tietokantaolio(); $nakyvyys = $parametriolio->nakyvyys_teht; $kaavakieli = $parametriolio->kaavakieli; $elem_id = $parametriolio->elementti_id; $mj = ""; // Lomakkeen html-koodi. $esikatselunappi = "<button type='button' " . "onclick='nayta_tehtavan_esikatselu(" . $id_kokon . "," . $id_teht . ")'" . "title='" . Painikkeet::$ESIKATSELU_TITLE . "'/>" . Painikkeet::$ESIKATSELU_VALUE . "</button>"; // TArkistetaan, onko käyttäjä tulossa koosteesta / elementtiryhmästä // ja mahdollistetaan paluu: $elem_id = $parametriolio->elementti_id; $elemryhma_id = $parametriolio->elemryhma_id; $koostetieto = ""; if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $koostetieto = "&" . Koostekontrolleri::$elementti_name_id . "=" . $elem_id; } if ($elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) { $koostetieto .= "&" . Koostekontrolleri::$elemryhma_name_id . "=" . $elemryhma_id; } // Haetaan ajantasalla olevat tiedot tietokannasta. Aiemmin // tiedot tuotiin kiinteästi painikelomakkeeseen, mutta tällöin // kokorajoitus urlissa aiheutti ongelmia. Muutenkin se on huonompi // ja turvattomampi tapa. // HUOM! Tämä ei auta uuden tehtävän tekemisessä, jos esimerkiksi // tarkistus ei mene läpi! // // Huom2: tämä hakee myös uuden tehtävän tapauksessa edellisen aktiivisen // tehtävän tiedot lomakkeeseen. Aika usein tehtävät ovat samantyyppisiä, // jolloin tämä helpottaa tekemistä enemmän kuin haittaa.. if ($id_teht != -1) { $taulunimi = "tehtavat"; $sarakenimi = "id"; $hakuarvo = $id_teht; $tehtava = new Tehtava($id_teht, $tietokantaolio); if ($tehtava->olio_loytyi_tietokannasta) { if (empty($tehtavananto_teht) && empty($otsikko_teht)) { $otsikko_teht = $tehtava->getOtsikko(); $tehtavananto_teht = $tehtava->getTehtavananto(); } $vaikeustaso_teht = $tehtava->getVaikeustaso(); $nakyvyys = $tehtava->getNakyvyys(); } // Tämä koodaa myös esim. heittomerkit, jolloin // ne eivät häiritse html:n seassa. $otsikko_teht = htmlspecialchars($otsikko_teht, ENT_QUOTES, "UTF-8", true); //htmlentities $tehtavananto_teht = htmlspecialchars($tehtavananto_teht, ENT_QUOTES, "UTF-8", true); } $toiminnan_name_arvo = Toimintonimet::$tehtavatoiminto; $otsikon_maxpituus = 1000; $tehtavananto_maxpituus = 10000; // Ilmoitus otetaan mukaan, jos ei tyhjä: if ($ilmoitus_teht != "") { $ilmoitus_teht = "<div class='lomakeilmoitus'>" . $ilmoitus_teht . "</div>"; } if ($uusi) { $submitnappi = "<input type='submit' " . "name='{$toiminnan_name_arvo}' " . "value='" . Painikkeet::$tehtava_tallenna_uusi_value . "'/>"; $perunappi = "<input type='submit' " . "name='{$toiminnan_name_arvo}' " . "value='" . Painikkeet::$tehtava_peru_uuden_tallennus_value . "'" . "title='" . Painikkeet::$tehtava_peru_uuden_tallennus_title . "'/>"; } else { $submitnappi = "<input type='submit'\n name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$tehtava_tallenna_muokkaus_value . "'/>"; $perunappi = "<input type='submit'\n name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$tehtava_peruminen_value . "'/>"; } // Vaikeustasovalikko: $vaikeustaso_html = ""; try { $arvot = Vaikeustasot::hae_vaikeustasoarvot(); $nimet = Vaikeustasot::hae_vaikeustasokuvaukset(); $name_arvo = "vaikeustaso_teht"; $oletusvalinta_arvo = $vaikeustaso_teht; $otsikko = ""; $vaikeustaso_html = Html::luo_pudotusvalikko($arvot, $nimet, $name_arvo, $oletusvalinta_arvo, $otsikko); } catch (Exception $poikkeus) { $vaikeustaso_html = "Virhe vaikeustasonimissä! (" . $poikkeus->getMessage() . ")"; } $muokattavan_elementin_id = "tehtavateksti"; $alasvetovalikon_id = "merkit1"; $tekstityokaluolio = new Tekstityokalupalkki($muokattavan_elementin_id, $alasvetovalikon_id); $tekstimuokkauspainikkeet = $tekstityokaluolio->luo_painikkeet(Tekstityokalupalkki::$PERUSPAINIKKEET_JA_MATEMAATTISET, $parametriolio->kaavakieli); // Kaavakielivalikko:================================================== $kaavakielet = new Kaavakieli(); $select_maaritteet = array(Attr::onchange("muuta_kaavakieli", array("this.value", Yleiset_arvot::$kaavakieli_name, $muokattavan_elementin_id, $alasvetovalikon_id))); $option_maaritteet = array(); $kaavakielivalikko = $kaavakielet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $kaavakieli, Tekstit::$kaavakieli_otsikko); //===================================================================== // Näkyvyysvalikko: $nakyvyydet = new Nakyvyys(); $select_maaritteet = array(Attr::name(Tehtavakontrolleri::$tehtava_name_nakyvyys)); $option_maaritteet = array(); $otsikko = Tekstit::$nakyvyys_valikko_otsikko; $nakyvyysvalikko = $nakyvyydet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $nakyvyys, $otsikko); // Sitten palat yhteen: $mj = "<form align='left' method='post' id='tehtavalomake' class='lomake'" . "action='index.php" . "?id_teht=" . $id_teht . "&kieli_id=" . $parametriolio->kieli_id . "&taso_kokon=" . $parametriolio->taso_kokon . "&oppiaine_kokon=" . $parametriolio->oppiaine_kokon . "&" . Oliotyyppi::$naytettava_name . "=" . Oliotyyppi::$TEHTAVA . "&id_kokon=" . $id_kokon . "&uusi=" . $uusi . $koostetieto . "#tehtava" . $id_teht . "'/>" . $ilmoitus_teht . "<table summary='uudet_tiedot'>" . "<tr><td colspan=2><b>" . Tekstit::$tehtavalomake_ohje . "</b></td>" . "</tr>" . "<tr><td> " . Tekstit::$tehtavalomake_otsikko . ": </td><td><input type='text'\n size='80' maxlength='{$otsikon_maxpituus}'" . "name='otsikko_teht' id='otsikkoteksti' value='{$otsikko_teht}'\n title='" . Tekstit::$tehtavalomake_otsikkotitle . "'/></td>" . "</tr>" . "<tr><td>" . Tekstit::$tehtavalomake_vaikeustaso . ": </td>" . "<td>" . $vaikeustaso_html . $nakyvyysvalikko . $esikatselunappi . "</td>" . "</tr>" . "<tr><td></td>" . "<td>" . $kaavakielivalikko . "</td>" . "</tr>" . "<tr><td></td><td>" . $tekstimuokkauspainikkeet . "</td></tr>" . "<tr><td>" . Tekstit::$tehtavalomake_tehtavananto . ":</td>" . "<td colspan='2'><textarea id='tehtavateksti' cols='85' rows='20'\n maxlength =" . $tehtavananto_maxpituus . " name='tehtavananto_teht'>" . $tehtavananto_teht . "</textarea></td></tr>" . "<tr><td></td><td align='left'>" . $submitnappi . $perunappi . "</td></tr>" . "</table>" . "</form>"; return $mj; }