/** * Hakee kaikki yhteen kokonaisuuteen liittyvät tehtävät ja palauttaa ne * kauniisti html-koodina palauteoliossa. * * @param Palaute $palauteolio */ function toteuta_nayta_tehtavat(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_kokon = $parametriolio->id_kokon; $omaid = $parametriolio->get_omaid(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $tehtava_html = ""; $sisalto = ""; $palaa_nappi = ""; /* Paluu kokonaisuuksiin. */ $uusi_teht_nappi = ""; // Asetetaan kieli, taso ja oppiaine tehtävän perusteella, kun urlista // tullaan: if ($palauteolio->naytto_urlin_mukaan()) { $parametriolio->set_naytto_urlin_mukaan(true); // Isäntäkokonaisuus haetaan tietokannasta, jos teht_id kunnollinen: $teht = $this->get_olio(); if ($teht instanceof Tehtava && $teht->olio_loytyi_tietokannasta) { $kokon_id = $teht->getKokon_id(); $kokon = new Kokonaisuusolio($kokon_id, $tietokantaolio); // Jos löytyi, asetetaan kieli, taso ja oppiaine, jottei tarvita // urlissa: if ($kokon instanceof Kokonaisuusolio && $kokon->olio_loytyi_tietokannasta) { // Asetetaan nämä, voipi olla tarvetta: $parametriolio->id_kokon = $kokon_id; aseta_kieli_taso_ja_oppiaine($kokon->getKieli(), $kokon->getOppiaine(), $kokon->getTaso(), $parametriolio); // Tekstien käännös. Kielet::kaanna($parametriolio->get_kieli_id()); } } } /* Uusia tehtäviä voivat lisätä (valtuuksiltaan) vähintään muokkaajat. * Kannattaa kyllä olla varovainen, jos muuttaa valtuuksia.. */ if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { try { $onsubmit_funktionimi = "nayta_tehtavalomake"; $onsubmit_parametrit = array($id_kokon); /* */ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $id_kokon . "&" . "uusi=1"); $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_uusi_value); $uusi_teht_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $sisalto .= "Uusi tehtävä -painike: " . $poikkeus->getMessage(); } } try { $onsubmit_funktionimi = "nayta_kokonaisuudet"; $onsubmit_parametrit = ""; /* Ei parametreja */ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon={$id_kokon}"); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$palaa_kokonaisuuksiin); $palaa_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $sisalto .= "Palaa-painike: " . $poikkeus->getMessage(); } $sisalto .= $uusi_teht_nappi; // Haetaan tehtävät: $tehtavat = $this->hae_tehtavat(); if (empty($tehtavat)) { $palauteolio->set_ilmoitus(Tekstit::$tehtava_ilm_ei_loytynyt); $palauteolio->set_linkkihtml($palaa_nappi); } else { $laskuri = 0; // Tehtävän nro foreach ($tehtavat as $tehtava) { if ($tehtava instanceof Tehtava) { $laskuri++; $tehtava->setNro($laskuri); $painikkeet = $this->luo_tehtavapainikkeet($tehtava->getId()); // Jos on kirjautunut käyttäjä, näytetään väripallolla, onko // yksityinen vai julkinen: if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { if ($tehtava->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) { $tehtava->setNakyvyysmerkkiPrivate(); } else { $tehtava->setNakyvyysmerkkiPublic(); } } $sisalto .= $this->tehtavanakymat->tulosta_tehtava($tehtava, $omaid, $painikkeet); } } // Haetaan tehtävälinkit, jos tehtäviä löytynyt. Lisätään // myös paluupainike linkkien eteen. $linkkihtml = $this->hae_tehtavalinkit($parametriolio); if ($linkkihtml === Tekstit::$tehtava_ilm_ei_loytynyt) { $palauteolio->set_linkkihtml($palaa_nappi); } else { $palauteolio->set_linkkihtml($palaa_nappi . $linkkihtml); } } /* Tämä ottaa palauteolion samalla käyttöön */ $palauteolio->set_sisalto($sisalto); // Haetaan kokonaisuuden tiedot: $kokon = new Kokonaisuusolio($id_kokon, $tietokantaolio); if ($kokon->olio_loytyi_tietokannasta) { $kokon_otsikko = $kokon->getOtsikko(); } else { $kokon_otsikko = "?"; } /* Lisätään otsikkotieto: */ $palauteolio->set_otsikkotarkennus($kokon_otsikko); $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA); // Kieli- yms valikot pois näkyvistä: $palauteolio->set_valikkonaytto(false); // Fixed linkit -näkymä: $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_fixed); return $palauteolio; }
/** * Näyttää kaikkien nykyiseen kieleen (kaikki tasot ja oppiaineet) liittyvien * kokonaisuuksien otsikoiden, joista klikkaamalla pääsee tarkastelemaan * kokonaisuutta. * * Näytetään julkiset ja omat yksityiset kokonaisuudet. Tulevaisuudessa * voi lisätä tarvittaessa mahdollisuuden antaa oikeuksia muille. * * IDEA: toisen koosteen kloonaaminen voisi olla sallittavaa. Tällöin voi * kloonista tehdä omanlaisen, mutta toisen tekemä jää ennalleen. * * @param Palaute $palauteolio */ public function toteuta_nayta_koosteet(&$palauteolio) { $koosteet = array(); $omaid = $this->get_kayttaja()->get_id(); $kieli = $this->get_parametriolio()->kieli_id; $oppiaine = $this->get_parametriolio()->oppiaine_kokon; $taso = $this->get_parametriolio()->taso_kokon; // Järjestäminen ei oikein onnistu täällä erikoisen nimenrakennuksen // takia (kielien, tasojen ja oppiaineiden nimet mukana, joita ei ole // tietokannassa). $hakulause = "SELECT kt.id from " . Kooste::$taulunimi . " AS kt" . " JOIN " . Henkilo::$taulunimi . " AS hlot" . " ON kt." . Kooste::$sarakenimi_henkilo_id . "=hlot.id" . " WHERE kt." . Kooste::$sarakenimi_nakyvyys . "=" . Nakyvyys::$JULKINEN . " OR kt." . Kooste::$sarakenimi_henkilo_id . "=" . $omaid . " ORDER BY hlot." . Henkilo::$sarakenimi_sukunimi . "," . " kt." . Kooste::$sarakenimi_organisaatio; $osumat = $this->get_tietokantaolio()->tee_omahaku_oliotaulukkopalautteella($hakulause); foreach ($osumat as $kooste_tk_olio) { $kooste = new Kooste($kooste_tk_olio->id, $this->get_tietokantaolio()); // Jos löytyi tietokannasta, lisätään koosteisiin: if ($kooste->olio_loytyi_tietokannasta) { array_push($koosteet, $kooste); } } //============ luodaan koosterivit (yksi rivi - yksi kooste): ========== $rivit = array(); foreach ($koosteet as $kooste) { if ($kooste instanceof Kooste) { $nayttopainike = ""; $muokkauspainike = ""; $poistopainike = ""; $tekija_id = $kooste->get_arvo(Kooste::$sarakenimi_henkilo_id); $tekija = new Henkilo($tekija_id, $this->get_tietokantaolio()); $org = $kooste->get_arvo(Kooste::$sarakenimi_organisaatio); if (!empty($org)) { $org .= "_"; } $nimike = $tekija->get_arvo(Henkilo::$sarakenimi_sukunimi) . "_" . $org . Kielet::hae_kielen_nimi_lyhennos($kooste->get_arvo(Kooste::$sarakenimi_kieli)) . "_" . strtoupper(Oppiaineet::hae_oppiaineen_nimi2($kooste->get_arvo(Kooste::$sarakenimi_oppiaine))) . "_" . Koulutasot::hae_koulutason_nimi($kooste->get_arvo(Kooste::$sarakenimi_taso), false) . "_" . $kooste->get_arvo(Kooste::$sarakenimi_nimi) . " "; //========= Näyttöpainike ==================================== $nayttopainike = $this->koostenakymat->luo_koosteen_nayttopainike($kooste); //========= Muokkauspainike ja Poistopainike vain tietyille ==== // Täällä tarkistetaan oikeudet eka: $user = $this->get_kayttaja(); if ($user->olio_loytyi_tietokannasta) { if ($tekija_id + 0 === $user->get_id() + 0 || $user->get_arvo(Henkilo::$sarakenimi_valtuudet) + 0 === Valtuudet::$HALLINTA) { $muokkauspainike = $this->koostenakymat->luo_koosteen_muokkauspainike($kooste); $poistopainike = $this->koostenakymat->luo_koosteen_poistopainike($kooste); } } if ($kooste->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $on_julkinen = true; } else { $on_julkinen = false; } $rivi = $this->koostenakymat->luo_koosterivi($nimike, $nayttopainike, $muokkauspainike, $poistopainike, $on_julkinen); array_push($rivit, $rivi); //============================================================== } } $tuloste = $this->koostenakymat->nayta_koosteet($rivit); //====================================================================== // Luodaan paluu-painike: $paluupainike = $this->koostenakymat->create_button_gobacktoarticles(); // Luodaan Uusi kooste -painike, jos käyttäjä kirjautunut ja hänellä // koostevaltuudet: $uusikoostepainike = ""; if (Henkilo::on_kirjautunut($omaid, $this->get_tietokantaolio())) { if ($this->get_kayttaja()->get_arvo(Henkilo::$sarakenimi_valtuudet) >= Valtuudet::$KOOSTE_LISAYS) { $uusikoostepainike = $this->koostenakymat->create_button_new_summary(); } } $palauteolio->set_sisalto($tuloste); $palauteolio->set_linkkihtml($paluupainike . $uusikoostepainike); $palauteolio->set_nayttotapa(Html_koodi::$sidenav_fixed); $palauteolio->set_valikkonaytto(false); }
/** * Toteuttaa lomakkeen näytön sekä muokkausta että uuden luomista varten. * @return Palaute $palauteolio */ function toteuta_nayta_kokonaisuuslomake(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $palauteolio = new Palaute(); $lomakkeen_naytto_ok = false; // Näytetäänkö lomaketta vai ei. $ilmoitus = ""; $sisalto = ""; // Tulossa koosteesta? Tarkistetaan: $elem_id = $parametriolio->elementti_id; $elem = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elem_kandi = new Elementti($elem_id, $this->get_tietokantaolio()); if ($elem_kandi->olio_loytyi_tietokannasta) { $elem = $elem_kandi; } $elemryhma_id = $parametriolio->elemryhma_id; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $elemryhma_kandi = new Elementtiryhma($elemryhma_id, $this->get_tietokantaolio()); if ($elemryhma_kandi->olio_loytyi_tietokannasta) { $elemryhma = $elemryhma_kandi; } // Tätä tarvitaan, ellei muokkauslomakkeeseen syystä tai toisesta mennä: $perunappi = Html::luo_forminput_painike(array(), array(Attr::name(Toimintonimet::$kokonaisuustoiminto), Attr::value(Painikkeet::$PERU_KOKON_MUUTOSTEN_TALLENNUS_VALUE))); /* Näytetään lomake, jonka avulla voi luoda uuden kokonaisuuden: */ $omaid = $parametriolio->get_omaid(); if ($parametriolio->get_uusi()) { $ilmoitus = ""; $palauteolio->set_valikkonaytto(false); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); $lomakkeen_naytto_ok = true; } else { // Vanhan muokkaus: tällöin lukitus on tärkeä! $id_muokattava = $parametriolio->id_kokon; $muokattava = new Kokonaisuusolio($id_muokattava, $this->get_tietokantaolio()); if ($muokattava->olio_loytyi_tietokannasta) { $lukitusarvo = $muokattava->getLukitus(); //===================== LUKITUS ================================ // Jos lukitus päällä, ei päästetä muokkaamaan! if (is_numeric($lukitusarvo) && $lukitusarvo != Kokonaisuusolio::$LUKITUS_OFF && $lukitusarvo != $omaid) { $ilmoitus = Tekstit::$virheilm_kokonaisuus_lukittu_muokkaus_eiok; $sisalto = Tekstit::$virheilm_kokonaisuus_lukittu_muokkaus_eiok; $sisalto .= $perunappi; } else { // Kun ei lukittu vieraalle: // Lukitaan kokonaisuus, ettei kukaan muu pääse samaan aikaan // muokkaamaan samaa kokonaisuutta: $lukon_tila = Kokonaisuusolio::$LUKITUS_ON; $lukitus = $muokattava->aseta_kokonaisuuden_lukitus($omaid, $lukon_tila); /* Ilmoitus, ellei lukitus jostakin syystä onnistunut: */ if ($lukitus != Kokonaisuusolio::$OPERAATIO_ONNISTUI) { $ilmoitus = " " . Tekstit::$virheilm_kokonaisuuden_lukitus_eiok; $sisalto = " " . Tekstit::$virheilm_kokonaisuuden_lukitus_eiok . "<br/>" . $muokattava->tulosta_virheilmoitukset() . "<br/> omaid=" . $omaid . ", nyk lukon tila=" . $lukitusarvo . " ja haluttu_lukon_tila=" . $lukon_tila; $sisalto .= "<br/>" . $perunappi; } else { $lomakkeen_naytto_ok = true; } } $sisalto = $sisalto . "<br/> " . $muokattava->tulosta_kaikki_ilmoitukset() . "<br/>"; } else { // Oliota ei löytynyt tietokannasta: $sisalto = Tekstit::$ilm_kokon_ei_loytynyt . $perunappi; } } //====================================================================== if ($lomakkeen_naytto_ok) { $sisalto = $this->kokonaisuusnakymat->nayta_kokonaisuuslomake($parametriolio->id_kokon, $omaid, $parametriolio->uusi, $parametriolio->ilmoitus_kokon, $parametriolio->get_tietokantaolio(), $parametriolio->oppiaine_kokon, $parametriolio->otsikko_kokon, $parametriolio->tiivis_kokon, $parametriolio->selitys_kokon, $parametriolio->taso_kokon, $parametriolio->jarjestysnro_kokon, $parametriolio->laajennetun_id_kokon, $parametriolio->ylakokonaisuuden_id_kokon, $parametriolio->kieli_id, $parametriolio->nakyvyys_kokon, Toimintonimet::$kokonaisuustoiminto, $this, $parametriolio->kaavakieli, $elem, $elemryhma); } $palauteolio->set_sisalto($sisalto); $palauteolio->set_valikkonaytto(false); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); $palauteolio->set_ilmoitus($ilmoitus); $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_levea); return $palauteolio; }
/** * Toteuttaa ratkaisulomakkeen näytön ja palauttaa palauteolion. * * @param Palaute $palauteolio */ function toteuta_ratkaisulomakkeen_naytto(&$palauteolio) { $sis = $this->ratkaisunakymat->nayta_ratkaisulomake($this->get_parametriolio()); $palauteolio->set_sisalto($sis); $palauteolio->set_nayttotapa(Html_koodi::$sisaltoelem_levea); }