Esempio n. 1
0
 /**
  * Palauttaa koostelomakkeen koodin. Jos $kooste-parametri on 
  * Kooste-luokan alkio, on kysymys vanhan muokkaamisesta, muuten 
  * uuden koosteen luomisesta.
  * @param type $kooste
  * @param Parametrit $parametrit
  * @param string $elementit Mahdolliset elementit tai niiden otsikot
  * @param string $valitut Valittujen olioiden tiedot html-koodina.
  */
 public function nayta_lomake($kooste, $parametrit, $elementit, $valitut)
 {
     $sisalto = "";
     $nimi = "";
     $selitys = "";
     $osaset = "";
     $tekstikentan_lev = 55;
     $tekstiruudun_lev = 57;
     $uuden_luominen = true;
     // Asetetaan mahdolliset vanhat arvot kohdilleen:
     if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) {
         $uuden_luominen = false;
         // Perustiedot:
         $kooste_taso = $kooste->get_arvo(Kooste::$sarakenimi_taso);
         $kooste_oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine);
         $kooste_kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli);
         // Valittavien oletusvalinnat:
         $valittavat_taso = $kooste_taso;
         $valittavat_oppiaine = $kooste_oppiaine;
         $valittavat_kieli = $kooste_kieli;
         $koostetyyppi = $kooste->get_arvo(Kooste::$sarakenimi_tyyppi);
         $nakyvyys = $kooste->get_arvo(Kooste::$sarakenimi_nakyvyys);
         $lomakeotsikko = Html::luo_otsikko(Tekstit::$kooste_lomakeotsikko_muokkaus, array(), 1);
         // Alla ovat tärkeitä, jotta esim. JS-koodi toimii, eikä
         // ala kehittämään mitään ylimääräistä muokatessa.
         $nimi = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_nimi)), ENT_QUOTES, "UTF-8", true);
         $kooste_id = $kooste->get_id();
         // Aattelin, että jos on tyhjä ... pitäisi tarkistaa, meneekö näin.
         if ($selitys === Kooste::$MUUTTUJAA_EI_MAARITELTY) {
             $selitys = "";
         } else {
             $selitys = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_selitys)), ENT_QUOTES, "UTF-8", true);
         }
         $koosteotsikko = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_otsikko)), ENT_QUOTES, "UTF-8", true);
         $organisaatiotunnus = htmlspecialchars(stripslashes($kooste->get_arvo(Kooste::$sarakenimi_organisaatio)), ENT_QUOTES, "UTF-8", true);
     } else {
         // Uusi kooste
         $kooste_taso = $parametrit->taso_kokon;
         $kooste_oppiaine = $parametrit->oppiaine_kokon;
         $kooste_kieli = $parametrit->kieli_id;
         $valittavat_taso = $parametrit->taso_kokon;
         $valittavat_oppiaine = $parametrit->oppiaine_kokon;
         $valittavat_kieli = $parametrit->kieli_id;
         $koostetyyppi = $parametrit->kooste_tyyppi;
         $nakyvyys = $parametrit->kooste_nakyvyys;
         // Uusi kooste:
         if ($nakyvyys === Kooste::$MUUTTUJAA_EI_MAARITELTY) {
             $nakyvyys = Nakyvyys::$YKSITYINEN;
         }
         $lomakeotsikko = Html::luo_otsikko(Tekstit::$kooste_lomakeotsikko_uusi, array(), 1);
         $nimi = $parametrit->kooste_nimi;
         $selitys = $parametrit->kooste_selitys;
         $koosteotsikko = $parametrit->kooste_otsikko;
         $organisaatiotunnus = $parametrit->kooste_org;
         $kooste_id = Kooste::$MUUTTUJAA_EI_MAARITELTY;
         // Arvo ei_maaritelty (-2) ei näytä kivalta, joten muutetaan se
         // tyhjäksi. Huomaa &, ilman sitä ei toimi..
         $syotteet = array(&$nimi, &$selitys, &$koosteotsikko, &$organisaatiotunnus);
         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::$koostelomake_nimikenttaid, Tekstit::$kooste_lomake_nimi . " *: ", array()), array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$kooste_name_nimi), Attr::size($tekstikentan_lev), Attr::max_length(100), Attr::id(Koostenakymat::$koostelomake_nimikenttaid), Attr::value($nimi))), array()), array(Attr::title(Tekstit::$kooste_lomake_nimi_title)));
     // rivi
     // Tyyppirivi (uusi hieno metodi Asetuspohjan avulla:
     $koostetyypit = new Koostetyypit();
     $select_maaritteet = array(Attr::name(Koostekontrolleri::$kooste_name_tyyppi));
     $option_maaritteet = array();
     $oletusvalinta_arvo = $koostetyyppi;
     $otsikko = "";
     // Asetetaan erikseen.
     $koostevalikko = $koostetyypit->luo_pudotusvalikko($select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko);
     // Luodaan näkyvyysvalikko mukaan samalle riville:
     $nakyvyydet = new Perusnakyvyys();
     $select_maaritteet_nak = array(Attr::name(Koostekontrolleri::$kooste_name_nakyvyys));
     $option_maaritteet_nak = array();
     $otsikko_nak = Tekstit::$nakyvyys_valikko_otsikko;
     $nakyvyysvalikko = $nakyvyydet->luo_pudotusvalikko($select_maaritteet_nak, $option_maaritteet_nak, $nakyvyys, $otsikko_nak);
     $tyyppirivi = Html::luo_tablerivi(Html::luo_tablesolu(Tekstit::$kooste_lomake_tyyppi . ": ", array()) . Html::luo_tablesolu($koostevalikko . " " . $nakyvyysvalikko, array()), array());
     // Perustietorivi eli oppiaine, taso ja kieli:
     $valikko = $this->kokonaisuusnakymat->nayta_tasovalikko($kooste_taso) . " ";
     $valikko .= $this->kokonaisuusnakymat->nayta_oppiainevalikko($kooste_oppiaine) . " ";
     //$valikko .= $this->kokonaisuusnakymat->nayta_kielivalikko(
     //                $parametrit->kieli_id);
     $valikko .= ucfirst(Tekstit::$language) . ": " . Html::luo_b(Kielet::hae_kielen_nimi($kooste_kieli), array());
     $perustietorivi = Html::luo_tablerivi(Html::luo_tablesolu(Tekstit::$kooste_lomake_perustiedot . ": ", array()) . Html::luo_tablesolu($valikko, array()), array());
     // Organisaatiotunnusrivi:
     $organisaatiorivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_organkenttaid, Tekstit::$kooste_lomake_organisaatio . ": ", array(Attr::title(Tekstit::$kooste_lomake_organisaatio_title))), array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$kooste_name_organ_code), Attr::size($tekstikentan_lev), Attr::max_length(20), Attr::id(Koostenakymat::$koostelomake_organkenttaid), Attr::value($organisaatiotunnus))), array()), array());
     // rivi
     // Tulostettava otsikko -rivi:
     $otsikkorivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_tulost_ots_kenttaid, Tekstit::$kooste_lomake_otsikko . ": ", array()), array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::name(Koostekontrolleri::$kooste_name_otsikko), Attr::size($tekstikentan_lev), Attr::max_length(200), Attr::id(Koostenakymat::$koostelomake_tulost_ots_kenttaid), Attr::value($koosteotsikko))), array()), array(Attr::title(Tekstit::$kooste_lomake_otsikko_title)));
     // rivi
     // Selitysrivi:
     $selitysrivi = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_label_for(Koostenakymat::$koostelomake_selityskenttaid, Tekstit::$kooste_lomake_selitys . ": ", array()), array()) . Html::luo_tablesolu(Html::luo_textarea($selitys, array(Attr::name(Koostekontrolleri::$kooste_name_selitys), Attr::cols($tekstiruudun_lev), Attr::rows(9), Attr::id(Koostenakymat::$koostelomake_selityskenttaid))), array()), array(Attr::title(Tekstit::$kooste_lomake_selitys_title)));
     // rivi
     //
     // Ohje elementtien hakuun (väliteksti):
     $valiotsikko = Html::luo_tablerivi(Html::luo_tablesolu(Html::luo_b(Tekstit::$kooste_lomake_valiots_elementit, array()), array(Attr::colspan(2))), array());
     // rivi
     // Perusvalikot taso, oppiaine ja kieli elementtien etsintään:
     $tasotiedot = new Koulutasot();
     $oppiainetiedot = new Oppiaineet();
     $kielitiedot = new Kielet();
     // Lähetetään nämä, niin ei tartte js:ssä arvailla:
     $koostelomakevalinnat_oppiaine_name = Koostekontrolleri::$koostelom_elemval_oppiaine_name;
     $koostelomakevalinnat_kieli_name = Koostekontrolleri::$koostelom_elemval_kieli_name;
     $koostelomakevalinnat_taso_name = Koostekontrolleri::$koostelom_elemval_taso_name;
     // Osa arvoista on valikoille yhteiset, osa ei:
     $select_maaritteet_taso = array(Attr::onchange("hae_elementit", array(Koostenakymat::$koostelomake_tasovalikkoid, Koostenakymat::$koostelomake_oppiainevalikkoid, Koostenakymat::$koostelomake_kielivalikkoid, Koostekontrolleri::$kooste_name_id, $koostelomakevalinnat_kieli_name, $koostelomakevalinnat_oppiaine_name, $koostelomakevalinnat_taso_name, $kooste_id)), Attr::id(Koostenakymat::$koostelomake_tasovalikkoid));
     $select_maaritteet_oppiaine = array(Attr::onchange("hae_elementit", array(Koostenakymat::$koostelomake_tasovalikkoid, Koostenakymat::$koostelomake_oppiainevalikkoid, Koostenakymat::$koostelomake_kielivalikkoid, Koostekontrolleri::$kooste_name_id, $koostelomakevalinnat_kieli_name, $koostelomakevalinnat_oppiaine_name, $koostelomakevalinnat_taso_name, $kooste_id)), Attr::id(Koostenakymat::$koostelomake_oppiainevalikkoid));
     $select_maaritteet_kieli = array(Attr::onchange("hae_elementit", array(Koostenakymat::$koostelomake_tasovalikkoid, Koostenakymat::$koostelomake_oppiainevalikkoid, Koostenakymat::$koostelomake_kielivalikkoid, Koostekontrolleri::$kooste_name_id, $koostelomakevalinnat_kieli_name, $koostelomakevalinnat_oppiaine_name, $koostelomakevalinnat_taso_name, $kooste_id)), Attr::id(Koostenakymat::$koostelomake_kielivalikkoid));
     $option_maaritteet = array();
     $otsikko_tasot = Tekstit::$kokonlomake_koulutaso;
     $otsikko_aineet = Tekstit::$kokonlomake_oppiaine;
     $otsikko_kielet = Tekstit::$kielivalikko_otsikko;
     $tasovalikko = $tasotiedot->luo_pudotusvalikko($select_maaritteet_taso, $option_maaritteet, $valittavat_taso, $otsikko_tasot);
     $ainevalikko = $oppiainetiedot->luo_pudotusvalikko($select_maaritteet_oppiaine, $option_maaritteet, $valittavat_oppiaine, $otsikko_aineet);
     $kielivalikko = $kielitiedot->luo_pudotusvalikko($select_maaritteet_kieli, $option_maaritteet, $valittavat_kieli, $otsikko_kielet);
     $valikko = $tasovalikko . " " . $ainevalikko . " " . $kielivalikko;
     $valikkorivi = Html::luo_tablerivi(Html::luo_tablesolu($valikko, array(Attr::colspan(3))), array());
     // Huom: asetetaan valittavien taso, kieli ja oppiaine sessiotietoihin,
     // jotta ne muistetaan, ovat määriteltujä ja niihin päästään käsiksi
     // myöhemminkin:
     $sessiomuuttujanimi_taso = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_taso();
     $sessiomuuttujanimi_kieli = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_kieli();
     $sessiomuuttujanimi_oppiaine = Parametrit::sessiomuuttujanimi_koostelomake_valittavat_oppiaine();
     $_SESSION[$sessiomuuttujanimi_taso] = $valittavat_taso;
     $_SESSION[$sessiomuuttujanimi_kieli] = $valittavat_kieli;
     $_SESSION[$sessiomuuttujanimi_oppiaine] = $valittavat_oppiaine;
     //======================================================================
     // Näytetään elementtilista ja mahdollisesti valitut elementit:
     $tyhja_taul = array();
     /*$elem = 
       Html::luo_tablerivi(
           Html::luo_tablesolu(    // solu 1
               Html::luo_table(    // Taulu solun 1 sisään
                   Html::luo_tablerivi(
                       Html::luo_tablesolu_otsikko(
                           Tekstit::$kooste_lomake_valittavat_elementit, 
                           $tyhja_taul
                       ).
                       Html::luo_tablesolu_otsikko(
                           Tekstit::$kooste_lomake_valitut_elementit, 
                           $tyhja_taul
                       ),
                       $tyhja_taul
                   ).
                   Html::luo_tablerivi(
                       Html::luo_tablesolu($elementit, $tyhja_taul).
                       Html::luo_tablesolu(
                           $valitut_koodi, 
                           array(
                               Maarite::id(
                                   Koostenakymat::$koostelomake_valitut_elem_id)
                           )),
                       $tyhja_taul // rivi
                   ),
                   $tyhja_taul // table inner
               ),   
               array(Maarite::colspan(3))  // solu 1
           ), 
           array()     // rivi
       );   */
     $elem = Html::luo_tablerivi(Html::luo_tablesolu_otsikko(Tekstit::$kooste_lomake_valittavat_elementit, array(Attr::colspan(2))), $tyhja_taul) . Html::luo_tablerivi(Html::luo_tablesolu($elementit, array(Attr::colspan(2))), array());
     //======================================================================
     // Luodaan vielä tallennuspainike:
     if ($uuden_luominen) {
         $painike_value = Painikkeet::$kooste_uuden_tallennus_value;
         $painike_title = Painikkeet::$kooste_uuden_tallennus_title;
         $form_action = "index.php";
     } else {
         $painike_value = Painikkeet::$kooste_muokkaustallennus_value;
         $painike_title = Painikkeet::$kooste_muokkaustallennus_title;
         $form_action = "index.php?" . Koostekontrolleri::$kooste_name_id . "=" . $kooste->get_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)));
     if ($uuden_luominen) {
         $paluupainike = "";
     } else {
         $paluupainike = $this->nayta_painike_paluu_koosteeseen($kooste->get_id(), Elementti::$MUUTTUJAA_EI_MAARITELTY);
     }
     $tallennuspainikerivi = Html::luo_tablerivi(Html::luo_tablesolu($tallennuspainike . " " . $paluupainike, array(Attr::colspan(3))), array());
     // rivi
     //======================================================================
     $taulukko = Html::luo_table($nimirivi . $tyyppirivi . $perustietorivi . $organisaatiorivi . $otsikkorivi . $selitysrivi . $tallennuspainikerivi . $valikkorivi . $elem, array());
     // Tehdään vielä vähän isommaksi, jotta valitut saadaan näkymään
     // oikealla kuten oikeassa palkissa (oikea palkki on hankala, koska
     // lomakkeen jakaminen sinne ei oikein onnistunut).
     $maar_array = array();
     $isotaulukko = Html::luo_table(Html::luo_tablerivi(Html::luo_tablesolu($taulukko, array()) . Html::luo_tablesolu($valitut, array(Attr::style("vertical-align: text-top;"))), $maar_array), array());
     $sisalto .= $lomakeotsikko . $isotaulukko;
     $koodi = Html::luo_form($sisalto, array(Attr::classs("koostelomake"), Attr::action($form_action), Attr::method("post"), Attr::onsubmit("tarkista_arvot_kooste", array(Koostenakymat::$koostelomake_nimikenttaid, Tekstit::$kooste_virheilm_syotevika))));
     return $koodi;
 }