Example #1
0
 /**
  * Palauttaa koosteen elementtiryhmälomakkeen koodin. Jos $elementtiryhma-
  * parametri löytyy tietokannasta, on kysymys vanhan muokkaamisesta, muuten 
  * uuden koosteen luomisesta.
  * @param Kooste $kooste Kooste-luokan olio, jonka elementeistä tehdään ryhmää.
  * @param Elementtiryhma $elementtiryhma Elementtiryhma-luokan olio.
  * @param Parametrit $parametrit Parametrit-luokan olio.
  * @param array $elementit Koosteen sellaiset elementit, joihin käyttäjällä
  * on vähintään katseluoikeus.
  */
 public function nayta_elemryhmalomake($kooste, $elementtiryhma, $parametrit, $elementit)
 {
     $sisalto = "";
     $elemryhma_kooste_id = "";
     $elemryhma_tunnus = "";
     $elemryhma_nimi = "";
     $elemryhma_selitys = "";
     $elemryhma_id = "";
     // Sisältää linkit ryhmän vanhoihin elementteihin (ennen nykyisiä muutoksia).
     $vanhat_elementtilinkit = array();
     $tekstikentan_lev = 55;
     $tekstiruudun_lev = 57;
     $uuden_luominen = true;
     $empty_array = array();
     // Asetetaan mahdolliset vanhat arvot kohdilleen:
     if ($elementtiryhma instanceof Elementtiryhma && $elementtiryhma->olio_loytyi_tietokannasta) {
         $uuden_luominen = false;
         // Perustiedot:
         $elemryhma_kooste_id = $elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_kooste_id);
         $elemryhma_tunnus = $elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_tunnus);
         // Alla ovat sen takia, ettei ala kehittämään mitään ylim. muokatessa.
         $elemryhma_nimi = htmlspecialchars(stripslashes($elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_nimi)), ENT_QUOTES, "UTF-8", true);
         $elemryhma_selitys = htmlspecialchars(stripslashes($elementtiryhma->get_arvo(Elementtiryhma::$sarakenimi_selitys)), ENT_QUOTES, "UTF-8", true);
         $lomakeotsikko = Html::luo_otsikko(Tekstit::$elemryhma_lomakeotsikko_muokkaus, $empty_array, 1);
         $elemryhma_id = $elementtiryhma->get_id();
         $vanhat_elementtilinkit = $elementtiryhma->hae_linkit();
     } else {
         // Uusi elementtiryhmä
         $elemryhma_nimi = $parametrit->elemryhma_nimi;
         $elemryhma_tunnus = $parametrit->elemryhma_tunnus;
         $elemryhma_kooste_id = $parametrit->elemryhma_kooste_id;
         $elemryhma_selitys = $parametrit->elemryhma_selitys;
         $lomakeotsikko = Html::luo_otsikko(Tekstit::$elemryhma_lomakeotsikko_uusi, $empty_array, 1);
         $elemryhma_id = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY;
         // Arvo ei_maaritelty (-2) ei näytä kivalta, joten muutetaan se
         // tyhjäksi. Huomaa &, ilman sitä ei toimi..
         $syotteet = array(&$elemryhma_nimi, &$elemryhma_selitys);
         for ($i = 0; $i < sizeof($syotteet); $i++) {
             if ($syotteet[$i] == Kooste::$MUUTTUJAA_EI_MAARITELTY) {
                 $syotteet[$i] = "";
             }
         }
     }
     // Luodaan lomakkeen osat rivi kerrallaan (taulukkoasettelu):
     $nimirivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$elemryhmalomake_nimikenttaid, Tekstit::$elemryhmalomake_nimi . " *: ", $empty_array), $empty_array) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$elemryhma_name_nimi), Attr::size($tekstikentan_lev), Attr::max_length(100), Attr::id(Koostenakymat::$elemryhmalomake_nimikenttaid), Attr::value($elemryhma_nimi))), array(Attr::colspan(2))), array(Attr::title(Tekstit::$elemryhmalomake_nimi_title)));
     // rivi
     // Tyyppirivi (uusi hieno metodi Asetuspohjan avulla:
     $tunnukset = new Elemryhmatunnukset();
     $select_maaritteet = array(Attr::name(Koostekontrolleri::$elemryhma_name_tunnus));
     $option_maaritteet = $empty_array;
     $oletusvalinta_arvo = $elemryhma_tunnus;
     $otsikko = "";
     // Asetetaan erikseen.
     $tunnusvalikko = $tunnukset->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko);
     $tunnusrivi = Html::luo_tablerivi(Html::luo_tablesolu(Tekstit::$elemryhmalomake_tunnus . ": ", $empty_array) . Html::luo_tablesolu($tunnusvalikko, array(Attr::colspan(2))), $empty_array);
     // Selitysrivi:
     $selitysrivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$elemryhmalomake_selityskenttaid, Tekstit::$elemryhmalomake_selitys . ": ", $empty_array), $empty_array) . Html::luo_tablesolu(Html::luo_textarea($elemryhma_selitys, array(Attr::name(Koostekontrolleri::$elemryhma_name_selitys), Attr::cols($tekstiruudun_lev), Attr::rows(9), Attr::id(Koostenakymat::$elemryhmalomake_selityskenttaid))), array(Attr::colspan(2))), array(Attr::title(Tekstit::$elemryhmalomake_selitys_title)));
     // rivi
     //
     // Elementit, joista voi valita sopivat. Ensin otsikko, sitten loput:
     $elementtirivit = Html::luo_tablerivi(Html::luo_tablesolu("", $empty_array) . Html::luo_tablesolu(Html::luo_b(Tekstit::$elemryhma_elemvalintaotsikko . ": ", $empty_array), array(Attr::colspan(2))), $empty_array);
     // Täällä muokkauksen yhteydessä käydään läpi aina vanhat linkit,
     // jotta osataan entiset valinnat asettaa kohdalleen.
     foreach ($elementit as $elementti) {
         if ($elementti instanceof Elementti) {
             $on_valittu = false;
             // Onko ennestään ryhmässä vai ei.
             if (!$uuden_luominen) {
                 foreach ($vanhat_elementtilinkit as $linkki) {
                     if ($linkki->get_arvo(Elementtiryhmalinkki::$sarakenimi_elementti_id) + 0 === $elementti->get_id() + 0) {
                         $on_valittu = true;
                         break;
                     }
                 }
             }
             // CheckBox attributes:
             $maaritteet = array(Attr::id("elem" . $elementti->get_id()), Attr::name(Koostekontrolleri::$elemryhma_name_elementtivalinnat . "[]"), Attr::value($elementti->get_id()));
             if ($on_valittu) {
                 array_push($maaritteet, Attr::checked());
             }
             // Luodaan rivi jokaista elementtiä kohti:
             $elementtirivit .= Html::luo_tablerivi(Html::luo_tablesolu("", $empty_array) . Html::luo_tablesolu(Html::luo_label_for("elem" . $elementti->get_id(), $elementti->hae_otsikko() . " ", $empty_array), $empty_array) . Html::luo_tablesolu(Html::luo_checkbox($maaritteet), $empty_array), $empty_array);
         }
     }
     //======================================================================
     //======================================================================
     // Luodaan vielä tallennuspainike:
     if ($uuden_luominen) {
         $painike_value = Painikkeet::$kooste_tallenna_uusi_ryhmittely_value;
         $painike_title = Painikkeet::$kooste_tallenna_uusi_ryhmittely_title;
         $form_action = "index.php?" . Koostekontrolleri::$kooste_name_id . "=" . $kooste->get_id();
         // Paluupainike:
         $paluupainike = $this->luo_paluu_koosteeseen_nayttopainike($kooste);
     } else {
         $painike_value = Painikkeet::$kooste_tallenna_ryhmittelymuokkaus_value;
         $painike_title = Painikkeet::$kooste_tallenna_ryhmittelymuokkaus_title;
         $form_action = "index.php?" . Koostekontrolleri::$kooste_name_id . "=" . $kooste->get_id() . "&" . Koostekontrolleri::$elemryhma_name_id . "=" . $elementtiryhma->get_id();
         // Paluupainike:
         $paluupainike = $this->nayta_painike_paluu_elementtiryhmaan($kooste->get_id(), $elemryhma_id);
     }
     $tallennuspainike = Html::luo_input(array(Attr::type("submit"), Attr::value($painike_value), Attr::name(Toimintonimet::$koostetoiminto), Attr::title($painike_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary)));
     $tallennuspainikerivi = Html::luo_tablerivi(Html::luo_tablesolu($tallennuspainike, array(Attr::colspan(3))), $empty_array);
     // rivi
     //======================================================================
     $taulukko = Html::luo_table($nimirivi . $tunnusrivi . $selitysrivi . $elementtirivit . $tallennuspainikerivi, $empty_array);
     $sisalto .= $lomakeotsikko . $taulukko;
     $koodi = Html::luo_form($sisalto, array(Attr::classs("elemryhmalomake"), Attr::action($form_action), Attr::method("post"), Attr::onsubmit("tarkista_arvot_elemryhma", array(Koostenakymat::$elemryhmalomake_nimikenttaid, Tekstit::$elemryhma_virheilm_syotevika))));
     return $koodi . $paluupainike;
 }
 /**
  * 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;
 }