Ejemplo n.º 1
0
 /**
  * Palauttaa ratkaisun muokkauspainikkeen html-koodin. Täällä ei
  * tarkistella käyttöoikeuksia, vaan se tehdään kutsuvassa osassa.
  * 
  * Elementti-luokan olio annetaan toisena parametrina, jos muokkaukseen mennään
  * koosteesta. Tällöin annetaan mahdollisuus palata koosteeseen takaisin
  * muokkauksen jälkeen.
  * 
  * Jos kyse on normaalista painikkeesta ratkaisussa, annetaan
  * toiseksi parametriksi arvo Elementti::$MUUTTUJAA_EI_MAARITELTY.
  * 
  * @param Ratkaisu $ratkaisu
  * @param Elementti $elementti Huomaa: kysymyksessa elementti, joka
  * sisältää sen tehtävän, jonka ratkaisu tämä on. Ratkaisuja ei käsitellä
  * erillisinä elementteinä ainakaan nyt (2/2016).
  * @return string
  */
 public function luo_muokkauspainike($ratkaisu, $elementti)
 {
     // Muokkaus koosteesta käsin:
     $koostetiedot = "";
     if ($elementti instanceof Elementti) {
         $koostetiedot = "&" . Koostekontrolleri::$kooste_name_id . "=" . $elementti->get_arvo(Elementti::$sarakenimi_kooste_id) . "&" . Koostekontrolleri::$elementti_name_id . "=" . $elementti->get_arvo(Elementti::$SARAKENIMI_ID);
     }
     $class = "rinnakkain";
     $id = "";
     $action = "index.php?id_teht=" . $ratkaisu->getTeht_id() . "&id_ratk=" . $ratkaisu->getId() . $koostetiedot;
     $name = Toimintonimet::$tehtavatoiminto;
     $value = Painikkeet::$ratkaisu_muokkaa_value;
     $muokkausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value);
     return $muokkausnappi;
 }
Ejemplo n.º 2
0
 /**
  * Palauttaa html-lomakkeen, jonka avulla voidaan tallentaa uuden
  * kokonaisuuden tiedot tietokantaan tai muokata vanhoja. Lomakkeen html-id on
  * 'kokonaisuuslomake'.
  *
  * @param <type> $id_kokon
  * @param <type> $omaid
  * @param <type> $uusi
  * @param <type> $ilmoitus_kokon
  * @param Tietokantaolio $tietokantaolio
  * @param <type> $oppiaine_kokon
  * @param <type> $otsikko_kokon
  * @param <type> $tiivis_kokon
  * @param <type> $selitys_kokon
  * @param <type> $taso_kokon
  * @param <type> $jarjestysnro_kokon
  * @param <type> $laajennetun_id_kokon
  * @param <type> $ylakokonaisuuden_id_kokon
  * @param <type> $kieli_id
  * @param <type> $toiminnan_name_arvo
  * @param Kokonaisuuskontrolleri $kokonaisuuskontrolleri Tämä vähän
  * suurellinen, mutten äkkiä parempaa keinoa keksinyt (15.1.2015)
  * @param int $kaavakieli viittaa käytettävään matematiikan kaavakieleen
  * (28.11.2015)
  * @param Elementti $elementti on Elementti-luokan olio, johon tämä
  * kokonaisuus kuuluu, tai sitten Elementti::$MUUTTUJAA_EI_MAARITELTY,
  * ellei tulla koosteesta.
  * (20.2.2016)
  * @return <type>
  */
 function nayta_kokonaisuuslomake($id_kokon, $omaid, $uusi, $ilmoitus_kokon, $tietokantaolio, &$oppiaine_kokon, &$otsikko_kokon, &$tiivis_kokon, &$selitys_kokon, &$taso_kokon, &$jarjestysnro_kokon, &$laajennetun_id_kokon, &$ylakokonaisuuden_id_kokon, &$kieli_id, &$nakyvyys_kokon, $toiminnan_name_arvo, $kokonaisuuskontrolleri, $kaavakieli, $elementti, $elemryhma)
 {
     $mj = "";
     // Lomakkeen html-koodi.
     $otsikon_maxpituus = 150;
     $submitnappi = "";
     $perunappi = "";
     $uusi_kuva_tiivis = "";
     $uusi_kuva_seli = "";
     $tulo_koosteesta = false;
     // True, if coming from Kooste (Package).
     $kokonaisuus = "";
     // Tämä haetaan tietokannasta.
     /*$uusi_kuva_tiivis = "";
       $uusi_kuva_seli = "";*/
     $submit_kesken_nappi = "<input type='submit'" . "name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$TALLENNA_KESKEN_KOKON_VALUE . "' " . "title='" . Painikkeet::$TALLENNA_KESKEN_KOKON_TITLE . "'/>";
     $esikatselunappi = "<button type='button' " . "onclick='nayta_kokonaisuuden_esikatselu(" . $id_kokon . ")'" . "title='" . Painikkeet::$ESIKATSELU_TITLE . "'/>" . Painikkeet::$ESIKATSELU_VALUE . "</button>";
     $elementtitiedot = "";
     // urliin lisättävät koosteen ja elementin idt
     if ($uusi) {
         $submitnappi = "<input type='submit'\n            name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$TALLENNA_UUSI_KOKON_VALUE . "'/>";
         $perunappi = "<input type='submit'\n                    name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$PERU_UUDEN_KOKON_TALLENNUS_VALUE . "'/>";
     } else {
         // Haetaan ajantasalla olevat tiedot tietokannasta. Aiemmin
         // tiedot tuotiin kiinteästi painikelomakkeeseen, mutta tällöin
         // tämän jälkeen olioon tehdyt muutokset eivät näkyneet, jos
         // alkoi tehdä muutoksia olioon.
         $kokonaisuus = new Kokonaisuusolio($id_kokon, $tietokantaolio);
         if ($kokonaisuus->olio_loytyi_tietokannasta) {
             $oppiaine_kokon = $kokonaisuus->getOppiaine();
             // Alla ovat tärkeitä, jotta esim. JS-koodi toimii, eikä
             // ala kehittämään mitään ylimääräistä muokatessa. Huom:
             // stripslash pilaa latex-koodin, eikä ilm tarpeellinen.
             $otsikko_kokon = htmlspecialchars($kokonaisuus->getOtsikko(), ENT_QUOTES, "UTF-8", true);
             $tiivis_kokon = htmlspecialchars($kokonaisuus->getTiivis(), ENT_QUOTES, "UTF-8", true);
             $selitys_kokon = htmlspecialchars($kokonaisuus->getSelitys(), ENT_QUOTES, "UTF-8", true);
             /*$otsikko_kokon = stripslashes($kokonaisuus->getOtsikko());
               $tiivis_kokon = stripslashes($kokonaisuus->getTiivis());
               $selitys_kokon = stripslashes($kokonaisuus->getSelitys());*/
             $taso_kokon = $kokonaisuus->getTaso();
             $jarjestysnro_kokon = $kokonaisuus->getJarjestysnro();
             $laajennetun_id_kokon = $kokonaisuus->getLaajennetun_id();
             $ylakokonaisuuden_id_kokon = $kokonaisuus->getYlakokonaisuuden_id();
             $nakyvyys_kokon = $kokonaisuus->getNakyvyys();
             $submitnappi = "<input type='submit'" . "name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$TALLENNA_MUOKKAUS_KOKON_VALUE . "'" . "title='" . Painikkeet::$TALLENNA_MUOKKAUS_KOKON_TITLE . "'/>";
             $perunappi = "<input type='submit'\n                    name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$PERU_KOKON_MUUTOSTEN_TALLENNUS_VALUE . "'/>";
             //==============================================================
             // Täällä katsotaan, onko käyttäjä tulossa koosteesta ja
             // mahdollistetaan kätevä paluu takaisin.=======================
             if ($elementti instanceof Elementti) {
                 $kooste_id = $elementti->get_arvo(Elementti::$sarakenimi_kooste_id);
                 $elem_id = $elementti->get_id();
                 //$koostenakymat = new Koostenakymat();
                 //$perunappi = $koostenakymat->
                 //        nayta_inputpainike_paluu_koosteeseen_no_form();
                 $elementtitiedot = "&" . Koostekontrolleri::$kooste_name_id . "=" . $kooste_id . "&" . Koostekontrolleri::$elementti_name_id . "=" . $elem_id;
                 $tulo_koosteesta = true;
             }
             if ($elemryhma instanceof Elementtiryhma) {
                 $elemryhma_id = $elemryhma->get_id();
                 $elementtitiedot .= "&" . Koostekontrolleri::$elemryhma_name_id . "=" . $elemryhma_id . "&";
                 $tulo_koosteesta = true;
             }
             //========= Kuvan lisäyspainikkeet: paluu vanhaan ideaan ===========
             /* Uuden kuvan lisäyspainike tiivistelmään*/
             $uusi_kuva_tiivis = "<input type='submit'" . "name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$LISAA_KUVA_MANUAALI_TIIVIS_KOKON_VALUE . "'" . "title='" . Painikkeet::$LISAA_KUVA_MANUAALI_TIIVIS_KOKON_TITLE . "'/>";
             /* Uuden kuvan lisäyspainike selitykseen:*/
             $uusi_kuva_seli = "<input type='submit'" . "name='{$toiminnan_name_arvo}'" . "value='" . Painikkeet::$LISAA_KUVA_MANUAALI_SELITYS_KOKON_VALUE . "'" . "title='" . Painikkeet::$LISAA_KUVA_MANUAALI_SELITYS_KOKON_TITLE . "'/>";
             //==================================================================
         } else {
             $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt);
             return $this->tulosta_virheilmoitukset() . $perunappi;
         }
     }
     // End of päivitetään vanhaa.
     // NÄkyvyysvalikko: ====================================================
     $oletusarvo = $nakyvyys_kokon;
     $nakyvyydet = new Nakyvyys();
     $select_maaritteet = array(Attr::name(Kokonaisuuskontrolleri::$kokon_name_nakyvyys), Attr::title(Tekstit::$nakyvyys_valikko_otsikko_title));
     $option_maaritteet = array();
     $nakyvyysvalikko = $nakyvyydet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $oletusarvo, Tekstit::$nakyvyys_valikko_otsikko);
     //======================================================================
     // Ilmoitus otetaan mukaan, jos ei tyhjä:
     if ($ilmoitus_kokon != "") {
         $ilmoitus_kokon = "<span class='kokonaisuuslomakeilmoitus'>" . $ilmoitus_kokon . "</span><br />";
     }
     $oppiainehtml = Tekstit::$oppiainevalikko_otsikko . ": <b>" . Oppiaineet::hae_oppiaineen_nimi($oppiaine_kokon) . "</b>";
     $koulutasohtml = Tekstit::$tasovalikko_otsikko . ": <b>" . Koulutasot::hae_koulutason_nimi($taso_kokon, false) . "</b>";
     // Kielivalintavalikko: VALINTA POISTETTU toimintavaikeuksien takia!
     //$kielivalintahtml = nayta_kielivalikko($kieli_id);
     $kielivalintahtml = Tekstit::$kielivalikko_otsikko . ": <b>" . Kielet::hae_kielen_nimi($kieli_id) . "</b>";
     // Ylempi kokonaisuustaso
     $ylakokonvalikko = $this->nayta_ylakokonaisuusvalikko($id_kokon, $tietokantaolio, $ylakokonaisuuden_id_kokon, $oppiaine_kokon, $kieli_id, $taso_kokon, $uusi, $omaid, $kokonaisuuskontrolleri);
     // Tekstinmuokkaus tiivistelmää varten:
     $muokattavan_elementin_id_tii = "tiivis_tekstiruutu";
     $alasvetovalikon_id = "merkit1_tiivis";
     $tekstityokaluolio = new Tekstityokalupalkki($muokattavan_elementin_id_tii, $alasvetovalikon_id);
     // Nykyään nämä toimii sekä tiivistelmälle että selitykselle.
     // Lomake osaa huomata, kunpaa ollaan muokkaamassa:
     $tekstimuokkauspainikkeet = $tekstityokaluolio->luo_painikkeet(Tekstityokalupalkki::$PERUSPAINIKKEET_JA_MATEMAATTISET, $kaavakieli);
     // Tekstinmuokkaus selitystä varten:
     $muokattavan_elementin_id_sel = "selitys_tekstiruutu";
     // Kaavakielivalikko:==================================================
     $kaavakielet = new Kaavakieli();
     $select_maaritteet = array(Attr::onchange("muuta_kaavakieli", array("this.value", Yleiset_arvot::$kaavakieli_name, $muokattavan_elementin_id_tii, $alasvetovalikon_id)));
     $option_maaritteet = array();
     $kaavakielivalikko = $kaavakielet->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $kaavakieli, Tekstit::$kaavakieli_otsikko);
     //=====================================================================
     if ($uusi) {
         // Ellei id-kokon-arvoa määritellä täällä, tulee sessiomuuttujasta vanha.
         $id_kokon = Kokonaisuusolio::$kokon_ei_maaritelty;
     }
     // Vanha ylakokon_id otetaan talteen, jotta lapsiasiat pysyvät
     // oikealla tolalla. Haetaan mahdollisimman tuoreet tiedot.
     $ylakokonaisuuden_id_vanha = $ylakokonaisuuden_id_kokon;
     if ($kokonaisuus instanceof Kokonaisuusolio) {
         $ylakokonaisuuden_id_vanha = $kokonaisuus->getYlakokonaisuuden_id();
     }
     /*lisaaTagit(elementin_id, elementin_tunnus, class_arvo, id_arvo*/
     // Sitten palat yhteen:
     $mj = "<form align='left' method='post' id='kokonaisuuslomake'" . "action='index.php?id_kokon=" . $id_kokon . "&ylakokonaisuuden_id_vanha=" . $ylakokonaisuuden_id_vanha . "&taso_kokon=" . $taso_kokon . "&kieli_id=" . $kieli_id . "&uusi=" . $uusi . $elementtitiedot . "'/>" . $ilmoitus_kokon . "<b>" . Tekstit::$kokonlomake_ohje . "</b>" . $esikatselunappi . "<table summary='uudet_tiedot'>" . "<tr><td>" . Tekstit::$kokonlomake_otsikko . ": </td><td><input type='text'\n            size='55' maxlength='{$otsikon_maxpituus}'" . "name='otsikko_kokon' value='{$otsikko_kokon}'" . "id='otsikkotekstikentta'" . "title='" . Tekstit::$kokonlomake_otsikkotitle . "'/>" . "</tr>" . "<tr><td></td>" . "<td>" . " " . $ylakokonvalikko . " " . $nakyvyysvalikko . "</td>" . "</tr>" . "<tr><td></td><td>" . $kaavakielivalikko . " " . $oppiainehtml . " " . $koulutasohtml . " " . $kielivalintahtml . "</td></tr>" . "<tr><td></td><td colspan='2'>" . $tekstimuokkauspainikkeet . "</td></tr>" . "<tr><td>" . Tekstit::$kokonlomake_tiivis . ":</td>" . "<td colspan='2'><textarea cols='80' rows='18' maxlength = '10000'\n            id='" . $muokattavan_elementin_id_tii . "' name='tiivis_kokon' \n            onfocus='kirjoituskentta_onfocus(\"tiivis_tekstiruutu\")'>" . $tiivis_kokon . "</textarea></td></tr>" . "<tr><td>" . Tekstit::$kokonlomake_selitys . ":</td>" . "<td colspan='2'><textarea cols='80' rows='9' maxlength = '10000'\n            id='" . $muokattavan_elementin_id_sel . "' name='selitys_kokon'\n            onfocus='kirjoituskentta_onfocus(\"selitys_tekstiruutu\")'>" . $selitys_kokon . "</textarea></td></tr>" . "<tr><td></td><td align='left'>" . $submitnappi . $submit_kesken_nappi . $uusi_kuva_tiivis . $uusi_kuva_seli . $perunappi . "</td></tr>" . "</table>" . "</form>";
     return $mj;
 }
Ejemplo n.º 3
0
 /**
  * Toteuttaa tehtävän poiston. HUOM! Tehtävään liittyvät ratkaisut poistetaan
  * automaattisesti tietokantatasolla samoin kuin kuvalinkit tehtävään ja
  * ratkaisuihin.
  * 
  * HUOM! Täällä ei oikeuksia enää tarkasteta. Voisi olla ihan hyvä ajatus
  * tarkistaa poisto-oikeus täälläkin vielä. En tiedä, mutta saattaa olla
  * mahdollista jossakin tilanteissa, että tähän metodiin pääsisi käsiksi väärä
  * henkilö(?).
  *
  * @param Palaute $palauteolio
  */
 function toteuta_poista(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $id_kokon = $parametriolio->id_kokon;
     $id_teht = $parametriolio->id_teht;
     $omaid = $parametriolio->get_omaid();
     $kayttajan_valtuudet = $parametriolio->get_valtuudet();
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $palaute = "";
     /* Ilmoitus. */
     $palautesisalto = "";
     $poistettava = new Tehtava($id_teht, $tietokantaolio);
     if ($poistettava->olio_loytyi_tietokannasta) {
         $palaute = $poistettava->poista();
         if ($palaute === Tehtava::$OPERAATIO_ONNISTUI) {
             // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit:
             if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$TEHTAVA, $id_teht) === Malliluokkapohja::$OPERAATIO_ONNISTUI) {
                 $palaute = Tekstit::$tehtava_ilm_poisto_ok;
             } else {
                 $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok;
                 $this->lisaa_virheilmoitus($palaute);
             }
         } else {
             $palaute = Tekstit::$tehtava_virheilm_poisto_eiok;
             $this->lisaa_virheilmoitus($palaute);
         }
     } else {
         $palaute = Tekstit::$tehtava_virheilm_poistettavaa_ei_loytynyt;
         $this->lisaa_virheilmoitus($palaute);
     }
     $this->toteuta_nayta_tehtavat($palauteolio);
     $palauteolio->set_ilmoitus($palaute);
     $palauteolio->set_valikkonaytto(false);
 }
Ejemplo n.º 4
0
 /**
  * Hakee sen olion tietokannasta, johon parametrina annettu arvo (raaka-id) 
  * viittaa ja palauttaa sen oikeantyyppisen luokan oliona 
  * (Kokonaisuus, Tehtava, Ratkaisu,...).
  * 
  * Palauttaa yllä mainitun tyyppisen olion, jonka tietojen löytymisen 
  * tietokannasta tarkistetaan muuttujan "olio_loytyi_tietokannasta"-muuttujan 
  * avulla. Ellei parametri ole hyvä, palautetaan arvo
  * $MUUTTUJAA_EI_MAARITELTY.
  * 
  * 
  * @param type $id_raaka
  * @param type
  * @param Tietokantaolio $tietokantaolio
  * @return \Ratkaisu
  */
 public static function hae_viittausolio_id_raaka($id_raaka, $tietokantaolio)
 {
     $olio_id = Elementti::irrota_elem_olion_id($id_raaka);
     $oliotyyppi = Elementti::irrota_elem_olion_tyyppi($id_raaka);
     if ($oliotyyppi === Oliotyyppi::$KOKONAISUUS) {
         $taulunimi = Kokonaisuusolio::$taulunimi;
         $sarakenimi = Kokonaisuusolio::$SARAKENIMI_ID;
         $hakuarvo = $olio_id;
         $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo);
         if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
             $id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY;
         } else {
             $id = $osuma->id;
         }
         $palautettava = new Kokonaisuusolio($id, $tietokantaolio);
     } else {
         if ($oliotyyppi === Oliotyyppi::$TEHTAVA) {
             $taulunimi = Tehtava::$taulunimi;
             $sarakenimi = Tehtava::$SARAKENIMI_ID;
             $hakuarvo = $olio_id;
             $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo);
             if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
                 $id = Tehtava::$MUUTTUJAA_EI_MAARITELTY;
             } else {
                 $id = $osuma->id;
             }
             $palautettava = new Tehtava($id, $tietokantaolio);
         } else {
             if ($oliotyyppi === Oliotyyppi::$RATKAISU) {
                 $taulunimi = Ratkaisu::$taulunimi;
                 $sarakenimi = Ratkaisu::$SARAKENIMI_ID;
                 $hakuarvo = $olio_id;
                 $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo);
                 if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
                     $id = Ratkaisu::$MUUTTUJAA_EI_MAARITELTY;
                 } else {
                     $id = $osuma->id;
                 }
                 $palautettava = new Ratkaisu($id, $tietokantaolio);
             } else {
                 $palautettava = Elementti::$MUUTTUJAA_EI_MAARITELTY;
             }
         }
     }
     return $palautettava;
 }
Ejemplo n.º 5
0
 /**
  * Toteuttaa kokonaisuuden poistotoiminnon ellei kokonaisuudella ole lapsia.
  * Jos on, käsketään poistamaan ensin lapset. Jos kokonaisuus poistetaan,
  * tarkistetaan sen mahdollisen yläkokonaisuuden lapsekkuus.
  *
  * HUOM! On_lapsia kenttä tietokannassa aiheutti tästä aika monimutkaisen.
  * Ajattelin sen kuitenkin kannattavan, koska se vähentää suuresti
  * tietokantahakuja usein toistuvissa hauissa. 
  * 
  * Yllä mainitusta syystä on olennaisen tärkeää käyttää tätä metodia
  * kokonaisuuden poistamiseen.
  *
  * @return Palaute $palauteolio
  */
 function toteuta_poista(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $onnistuminen = Palaute::$VIRHEKOODI_YLEINEN;
     $id_kokon = $parametriolio->get_id_kokon();
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $palauteolio = new Palaute();
     $palaute = "";
     // Tämä tulee palauteolion sisällöksi.
     $poistettava = new Kokonaisuusolio($id_kokon, $tietokantaolio);
     //================== Edellisen kokonaisuuden id_n haku =================
     // Kun kokonaisuus poistetaan, pitää sitä edeltävän kokonaisuuden id
     // hakea, jotta se näätetään ensi kerralla. Ellei edellistä ole,
     // näytetään seuraava.
     $ed_id = Kokonaisuusolio::$kokon_ei_maaritelty;
     $oppiaineindeksi = $parametriolio->oppiaine_kokon;
     $taso = $parametriolio->taso_kokon;
     $kieli_id = $parametriolio->kieli_id;
     $omaid = $parametriolio->get_omaid();
     $ylakokonaisuuden_id = -1;
     // 1. tason kokonaisuudet - ei yläkokonaisuutta.
     $otsikkomerkinta_alussa = "";
     $otsikkotaso_alussa = Kokonaisuusolio::$otsikkotaso_oletus;
     $kokonaisuustaulukko = array();
     // Seuraava on aina taulukko (array), joka voi olla tyhjä:
     $kokonaisuusoliot = $this->hae_kokonaisuusoliopuu($kokonaisuustaulukko, $otsikkomerkinta_alussa, $otsikkotaso_alussa, $kieli_id, $oppiaineindeksi, $taso, $ylakokonaisuuden_id, $tietokantaolio, $omaid);
     // ASetetaan edellisten ja seuraavien kokonaisuuksien id:t:
     $this->aseta_ed_ja_seur_idt_kokonaisuuksiin($kokonaisuusoliot);
     if (!empty($kokonaisuusoliot)) {
         foreach ($kokonaisuusoliot as $kokonolio) {
             if ($kokonolio instanceof Kokonaisuusolio && $kokonolio->get_id() == $id_kokon) {
                 $ed_id = $kokonolio->getEdellisenId_kaikista();
                 if ($ed_id == Kokonaisuusolio::$kokon_edellista_ei_ole) {
                     $ed_id = $kokonolio->getSeuraavanId_kaikista();
                 }
             }
         }
     }
     //=========================================================================
     if ($poistettava->olio_loytyi_tietokannasta) {
         // Poistometodi tarkastaa, onko lapsia ja huolehtii on_lapsia-arvoista.
         $palaute = $poistettava->poista();
         if ($palaute === Malliluokkapohja::$OPERAATIO_ONNISTUI) {
             // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit:
             if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$KOKONAISUUS, $id_kokon) === Malliluokkapohja::$OPERAATIO_ONNISTUI) {
                 $palaute = Tekstit::$ilm_kokon_poisto_ok;
                 //Aktiivisuusmerkintä:
                 $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$KOKONAISUUDEN_POISTO);
                 if (!$aktiivisuuspalaute) {
                     $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok);
                 } else {
                     $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK;
                 }
             } else {
                 $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok;
             }
         } else {
             $palaute = Tekstit::$virheilm_kokonaisuuden_poisto;
         }
     } else {
         $palaute = Tekstit::$ilm_kokon_poisto_eiok_kokonaisuutta_ei_loytynyt;
     }
     $parametriolio->set_id_kokon($ed_id);
     // Jotta osaa näyttää edellisen.
     $this->toteuta_nayta($palauteolio);
     $palauteolio->set_ilmoitus($palaute);
     $palauteolio->set_virhekoodi($onnistuminen);
     $palauteolio->set_valikkonaytto(true);
     $palauteolio->nayta_kiintolinkit();
     return $palauteolio;
 }
Ejemplo n.º 6
0
 /**
  * @param string $id_raaka Id value of the element (like teht_43)
  * @param Parametrit $parametriolio
  * @param Tehtavanakymat $tehtavanakymat
  * @param Kokonaisuusnakymat $kokonnakymat
  */
 function show_element_preview($id_raaka, $parametriolio, $tehtavanakymat, $kokonnakymat)
 {
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $omaid = $parametriolio->get_omaid();
     // Let's find out the type of element:
     $type = Elementti::irrota_elem_olion_tyyppi($id_raaka);
     // Let's find out the id of the original object:
     $id = Elementti::irrota_elem_olion_id($id_raaka);
     if ($type === Oliotyyppi::$TEHTAVA) {
         // Luodaan uusi Tehtäväolio tietojen perusteella:
         $teht = new Tehtava($id, $tietokantaolio);
         $html = $tehtavanakymat->tulosta_esikatselu($omaid, $teht);
     } else {
         if ($type === Oliotyyppi::$KOKONAISUUS) {
             $kokon = new Kokonaisuusolio($id, $tietokantaolio);
             $html = $kokonnakymat->tulosta_esikatselu($kokon, $parametriolio);
         } else {
             $html = "Unknown type=" . $type . " and id=" . $id;
         }
     }
     //echo $output = str_replace(array("\r\n", "\r", "\n"), "", $html);
     return $html;
 }
Ejemplo n.º 7
0
 /**
  * Luo kooste-elementiin painikkeet, joista elementtiä voi siirtää
  * ylös- tai alaspäin koosteessa. Elementtien määrästä ja paikasta riippuen
  * luodaan 0-2 painiketta. Palauttaa merkkijonon, joka sisältää mahdollisten
  * painikkeiden html-koodin.
  * @param Elementti $elementti
  * @param Kooste $kooste
  * @return type
  */
 function luo_elem_jarj_muutospainikkeet($elementti, $kooste)
 {
     $painike_alas = "";
     $painike_ylos = "";
     // Luodaan painikkeet järjestyksen vaihtoa varten vain,
     // jos järkevää eli vaihdettavat olemassa:
     if ($elementti->get_seur_id() != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
         $form_maaritteet = array(Attr::action(Attr::muotoile_action_arvo("index.php", array(Koostekontrolleri::$kooste_name_id, Koostekontrolleri::$elementti_name_id, Koostekontrolleri::$kooste_name_seur_elem_id, Oliotyyppi::$naytettava_name), array($kooste->get_id(), $elementti->get_id(), $elementti->get_seur_id(), Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE))), Attr::classs("summary"));
         $input_maaritteet_alas = array(Attr::name(Toimintonimet::$koostetoiminto), Attr::value(Painikkeet::$kooste_elem_siirra_alas_value), Attr::title(Painikkeet::$kooste_elem_siirra_alas_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary));
         $painike_alas = Html::luo_forminput_painike($form_maaritteet, $input_maaritteet_alas);
     }
     if ($elementti->get_ed_id() != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
         $form_maaritteet = array(Attr::action(Attr::muotoile_action_arvo("index.php", array(Koostekontrolleri::$kooste_name_id, Koostekontrolleri::$elementti_name_id, Koostekontrolleri::$kooste_name_ed_elem_id, Oliotyyppi::$naytettava_name), array($kooste->get_id(), $elementti->get_id(), $elementti->get_ed_id(), Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE))), Attr::classs("summary"));
         $input_maaritteet_ylos = array(Attr::name(Toimintonimet::$koostetoiminto), Attr::value(Painikkeet::$kooste_elem_siirra_ylos_value), Attr::title(Painikkeet::$kooste_elem_siirra_ylos_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary));
         $painike_ylos = Html::luo_forminput_painike($form_maaritteet, $input_maaritteet_ylos);
     }
     return $painike_alas . $painike_ylos;
 }
Ejemplo n.º 8
0
 /**
  * Asettaa elementin elem_id-parametrin osoittaman elementin jälkeen.
  * 
  * Palauttaa arvon Kooste::$OPERAATIO_ONNISTUI tai virheilmoituksen.
  * 
  * @param type $uusi_viittausolio Kokonaisuus tai Tehtävä
  * @param Elementti $rajaelem
  */
 public function lisaa_elem_jalkeen($uusi_viittausolio, $rajaelem)
 {
     $parametriolio = $this->get_parametriolio();
     $palaute = Kooste::$VIRHE;
     // Haetaan ensin kooste, johon uusi elementti sijoitetaan:
     $kooste = new Kooste($rajaelem->get_arvo(Elementti::$sarakenimi_kooste_id), $this->get_tietokantaolio());
     // Kun kysymys muokkaamisesta, haetaan koosteeseen kuuluvat elementit:
     $elementtitunnisteet = array();
     if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) {
         $vanhat_elementit = $kooste->hae_elementit();
         // Haetaan koosteen vanhojen elementtien tiedot myös, jotta
         // voidaan käyttää jo olemassaolevia toimintoja. Samalla
         // sujautetaan uusi mukaan oikeaan paikkaan eli rajaelementin taakse:
         foreach ($vanhat_elementit as $elementti) {
             if ($elementti instanceof Elementti) {
                 $viittausolio = $elementti->hae_viittausolio();
                 $tunniste = $this->luo_valittulistan_valintaruudun_value($viittausolio);
                 array_push($elementtitunnisteet, $tunniste);
                 // Jos elementti on rajaelem, lisätään uusi tänne:
                 if ($elementti->get_id() + 0 === $rajaelem->get_id() + 0) {
                     $tunniste = $this->luo_valittulistan_valintaruudun_value($uusi_viittausolio);
                     array_push($elementtitunnisteet, $tunniste);
                 }
             }
         }
         // Asetetaan parametriolioon uusi lista tunnisteista ja tallennetaan.
         $parametriolio->kooste_elementtivalinnat = $elementtitunnisteet;
         $parametriolio->kooste_id = $kooste->get_id();
         $entiset_elem = $vanhat_elementit;
         $elem_valinnat = $elementtitunnisteet;
         $virheilm = "";
         $jluku = 0;
         $laskuri = 0;
         $muokkauslaskuri = 0;
         // Laskee vanhojen elem järjestyslukumuokkaukset.
         foreach ($elem_valinnat as $id) {
             $jluku++;
             $tarkista = true;
             $tallennus_elem = $kooste->aseta_jluku_ja_tallenna_elementti_jos_uusi($id, $tarkista, $jluku);
             if ($tallennus_elem === Elementti::$OPERAATIO_ONNISTUI) {
                 $laskuri++;
             } else {
                 if ($tallennus_elem === Tekstit::$kooste_ilm_elem_jo_koosteessa) {
                     $muokkauslaskuri++;
                 } else {
                     if ($tallennus_elem != Tekstit::$kooste_ilm_elem_jo_koosteessa) {
                         $virheilm .= "<br/>" . $tallennus_elem;
                     }
                 }
             }
         }
         // Tarkistus: vanhat + tallennetut =? valinnat
         // ja toisaalta uudet+muokatut=?valitut
         if (sizeof($entiset_elem) + $laskuri === sizeof($elem_valinnat) && $laskuri + $muokkauslaskuri === sizeof($elem_valinnat)) {
             $this->lisaa_kommentti(Tekstit::$kooste_ilm_muokkaustallennus_ok . ": " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . "<br/> " . Tekstit::$kooste_ilm_Elementteja_yhteensa . sizeof($elem_valinnat));
             $palaute = Kooste::$OPERAATIO_ONNISTUI;
         } else {
             $this->lisaa_virheilmoitus($virheilm .= " " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . "<br/> " . Tekstit::$kooste_ilm_Valintoja_yhteensa . sizeof($elem_valinnat) . "<br/> " . $muokkauslaskuri . " " . Tekstit::$kooste_ilm_elem_jlukua_muokattu . $kooste->tulosta_virheilmoitukset());
             $palaute = $this->tulosta_virheilmoitukset();
         }
     }
     return $palaute;
 }
Ejemplo n.º 9
0
 /**
  * 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;
 }
Ejemplo n.º 10
0
 /**
  * Tallentaa parametrina annetun olio_id:n mukaisen elementin koosteelle, 
  * ellei tällä ole samaa elementtiä (sama olio_id ja olio_tyyppi). 
  * Jos elementti on jo olemassa,
  * ei tee muuta kuin palauttaa ilmoituksen (string).
  * 
  * Tarkistus elementin olemassaolosta tehdään vain, jos toinen parametri
  * on arvoltaan true. Jos kooste on uusi, ei tarkistusta luonnollisesti
  * kannata tehdä.
  * 
  * Asettaa onnistuessaan elementille kaikki olennaiset tiedot, kuten
  * kooste_id:n, järjestysluvun ja näkyvyyden ("koosteissa").
  * 
  * Järjestysluvut tallennetaan uusiksi jokaisella tallennuksella, jotta
  * väliin lisätyt pysyvät oikealla paikallaan.
  * 
  * @param type $olio_id_raaka
  * @param type $tarkista
  * @param type $jluku järjestysluku, joka asetetaan elementille.
  */
 function aseta_jluku_ja_tallenna_elementti_jos_uusi($olio_id_raaka, $tarkista, $jluku)
 {
     $palaute = "";
     $mahd_id = Kooste::$MUUTTUJAA_EI_MAARITELTY;
     $uusi_elem = new Elementti($mahd_id, $this->tietokantaolio);
     $uusi_elem->set_arvo($this->get_id(), Elementti::$sarakenimi_kooste_id);
     // Elementin näkyvyys asetetaan tässä "julkinen". Näkyvyyden merkitystä
     // ei vielä päätetty, eikä sillä vielä ole merkitystä. Viittausolioilla
     // on kuitenkin oma näkyvyytensä, joka ehkä riittää käytännön tarpeisiin.
     // Lähinnä, jos haluaisi piilottaa koosteesta elementin, joka kuitenkin
     // näkyy muualla..
     $uusi_elem->set_arvo(Perusnakyvyys::$JULKINEN, Elementti::$sarakenimi_nakyvyys);
     // Pisteiksi asetetaan nolla:
     $uusi_elem->set_arvo(0, Elementti::$sarakenimi_pisteet);
     // Id pitää parsia ensin esille, jos kyseessä tehtävä:
     // Testattu: php_yleinen/testaus_yleinen/sekalaisia_testeja.php
     if (is_numeric($olio_id_raaka)) {
         $uusi_elem->set_arvo($olio_id_raaka, Elementti::$sarakenimi_olio_id);
         $uusi_elem->set_arvo(Oliotyyppi::$KOKONAISUUS, Elementti::$sarakenimi_oliotyyppi);
     } else {
         if (is_numeric(str_replace("teht_", "", $olio_id_raaka))) {
             // Kysymys tehtävästä
             $lukuarvo = (int) str_replace("teht_", "", $olio_id_raaka);
             $uusi_elem->set_arvo($lukuarvo, Elementti::$sarakenimi_olio_id);
             $uusi_elem->set_arvo(Oliotyyppi::$TEHTAVA, Elementti::$sarakenimi_oliotyyppi);
         } else {
             // Kysymys ratkaisusta
             $lukuarvo = (int) str_replace("ratk_", "", $olio_id_raaka);
             $uusi_elem->set_arvo($lukuarvo, Elementti::$sarakenimi_olio_id);
             $uusi_elem->set_arvo(Oliotyyppi::$RATKAISU, Elementti::$sarakenimi_oliotyyppi);
         }
     }
     // Järjestysluvuissa riittää, että saman koosteen elementeillä ei ole
     // samoja. Samakin kokonaisuus puetaan muissa koosteissa uuteen
     // elementtiin, joten eri koosteiden elementit eivät häiritse toisiaan.
     $uusi_jarjluku = $jluku;
     $uusi_elem->set_arvo($uusi_jarjluku, Elementti::$sarakenimi_jarjestysluku);
     // Tarkistus tehdään vain muokattavaan koosteeseen. Uudessa tallennetaan
     // kaikki.
     if ($tarkista) {
         $hakulause = "SELECT id FROM " . Elementti::$taulunimi . " WHERE " . Elementti::$sarakenimi_kooste_id . "=" . $this->get_id() . " AND " . Elementti::$sarakenimi_olio_id . "=" . $uusi_elem->get_arvo(Elementti::$sarakenimi_olio_id) . " AND " . Elementti::$sarakenimi_oliotyyppi . "=" . $uusi_elem->get_arvo(Elementti::$sarakenimi_oliotyyppi);
         $osumat = $this->tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
         // Elementti ei vielä koosteessa:
         if (empty($osumat)) {
             $palaute = $uusi_elem->tallenna_uusi();
             if ($palaute != Kooste::$OPERAATIO_ONNISTUI) {
                 $palaute = Tekstit::$kooste_virheilm_elementtien_tallennus . " " . $uusi_elem->tulosta_virheilmoitukset();
             }
         } else {
             $elem_id = $osumat[0]->id;
             // Haetaan vanha elementti:
             $elem = new Elementti($elem_id, $this->tietokantaolio);
             $elem->set_arvo($jluku, Elementti::$sarakenimi_jarjestysluku);
             $pal = $elem->tallenna_muutokset();
             if ($pal === Elementti::$OPERAATIO_ONNISTUI) {
                 $palaute = Tekstit::$kooste_ilm_elem_jo_koosteessa;
             } else {
                 if ($elem->tulosta_viimeisin_virheilmoitus() === Perustustekstit::$ilm_tiedoissa_ei_muutoksia) {
                     // Kaikki ok, koska usein muutosta ei tarvita.
                     $palaute = Tekstit::$kooste_ilm_elem_jo_koosteessa;
                 } else {
                     $palaute = Tekstit::$kooste_virheilm_elementtien_tallennus . "<br/>" . $elem->tulosta_virheilmoitukset();
                 }
             }
         }
     } else {
         $palaute = $uusi_elem->tallenna_uusi();
         if ($palaute != Kooste::$OPERAATIO_ONNISTUI) {
             $palaute = Tekstit::$kooste_virheilm_elementtien_tallennus . " " . $uusi_elem->tulosta_virheilmoitukset();
         }
     }
     return $palaute;
 }
Ejemplo n.º 11
0
 /**
  * Toteuttaa ratkaisun poiston. Linkit kuviin poistetaan automaattisesti
  * tietokantatasolla.
  * @param Palaute $palauteolio
  */
 function toteuta_poista(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $id_kokon = $parametriolio->id_kokon;
     $id_teht = $parametriolio->id_teht;
     $id_ratk = $parametriolio->id_ratk;
     $omaid = $parametriolio->get_omaid();
     $tietokantaolio = $parametriolio->get_tietokantaolio();
     $onnistuminen = Palaute::$VIRHEKOODI_POISTO;
     $palaute = "";
     /* Ilmoitus. */
     $palautesisalto = "";
     $palauteolio = new Palaute();
     $poistettava = new Ratkaisu($id_ratk, $tietokantaolio);
     if ($poistettava->olio_loytyi_tietokannasta) {
         $palaute = $poistettava->poista();
         if ($palaute === Ratkaisu::$OPERAATIO_ONNISTUI) {
             // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit:
             if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$RATKAISU, $id_ratk) === Malliluokkapohja::$OPERAATIO_ONNISTUI) {
                 // Aktiivisuusmerkintä:
                 $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$RATKAISUN_POISTO);
                 if (!$aktiivisuuspalaute) {
                     $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok);
                 } else {
                     // Onnistuminen:
                     $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK;
                 }
                 $palaute = Tekstit::$ratkaisu_ilm_poisto_ok;
             } else {
                 $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok;
             }
         } else {
             $palaute = Tekstit::$ratkaisu_virheilm_poisto_eiok;
         }
     } else {
         $palaute = Tekstit::$ratkaisu_virheilm_poistettavaa_ei_loytynyt;
     }
     $this->toteuta_nayta($palauteolio);
     $palauteolio->set_ilmoitus($palaute);
     $palauteolio->set_virhekoodi($onnistuminen);
     $palauteolio->set_valikkonaytto(false);
 }
Ejemplo n.º 12
0
 /**
  * Palauttaa parametrina annetun tehtävän tulostukseen optimoidun
  * html-koodin.
  *
  * @param Elementti $elementti
  * @param Tehtava $tehtava
  * @param int $omaid Käyttäjän id
  * @param array $painikkeet
  * @return string
  */
 function luo_koostenakyma_tulostus($elementti, $tehtava, $painikkeet)
 {
     $palaute = "";
     if (!$tehtava instanceof Tehtava && $elementti instanceof Elementti) {
         $palaute = "Jokin parametri metodissa 'luo_koostenakyma' ei ole ok!";
     } else {
         /* Muotoillaan tehtävän merkit ja kaavat: */
         $tehtavateksti = muotoile_merkit($tehtava->getTehtavananto());
         $tehtavateksti = Kaavaeditori::muotoile_pikkukaavat($tehtavateksti);
         $tehtavateksti = Kaavaeditori::muotoile_kaavat($tehtavateksti);
         /* Muotoillaan otsikon merkit ja kaavat:  */
         $otsikko = muotoile_merkit($tehtava->getOtsikko());
         $otsikko = Kaavaeditori::muotoile_pikkukaavat($otsikko);
         $otsikko = Kaavaeditori::muotoile_kaavat($otsikko);
         $kuvat = $tehtava->hae_kuvat_koostenakymaan();
         $sisalto = $kuvat . $tehtavateksti;
         $otsikko = "<div class = 'elementti_teht' " . "id='elem" . $elementti->get_id() . "'>" . "<h3>" . $tehtava->getOtsikkomerkinta() . ": " . $otsikko . "</h3>";
         $palaute .= $otsikko;
         $palaute .= $sisalto;
         // Tehtävä ja kuvat
         if (is_array($painikkeet)) {
             foreach ($painikkeet as $painike) {
                 $palaute .= $painike . " ";
             }
         }
         $palaute .= "</div>";
     }
     return $palaute;
 }