/**
  * 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;
 }
 /**
  * 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;
 }
Beispiel #3
0
<?php

session_start();
// Aloitetaan istunto tai otetaan kiinni vanha.
// Haetaan asetukset ja avataan yhteys tietokantaan:
require_once 'asetukset/tietokantayhteys.php';
require_once 'yhteiset/php_yhteismetodit.php';
load_files("articles");
require_once 'sivukoodit.php';
// Yhdistetään tietokantaan:
$tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis);
$tietokantaolio->yhdista_tietokantaan($dbnimi);
$parametriolio = new Parametrit($tietokantaolio);
// Tekstien käännös.
Kielet::kaanna($parametriolio->get_kieli_id());
// Jos "submit", niin suuntana submit-sivu:
$target = isset($_GET['target']) ? $_GET['target'] : "";
$ktunnus = isset($_POST['ktunnus']) ? $_POST['ktunnus'] : "";
// Onko alla oleva iso turvallisuusriski? Noo ellei ssl-salausta käytetä,
// kulkevat salasana ja muut tiedot selainkoneen ja palvelimen välillä
// salaamattomassa muodossa, mistä ne on mahdollista
// viekkaan ilkimyksen noukkia. Toki tässä ohjelmassa ei kovin intiimejä
// tietoja siirry, joten ssl lienee tarpeeton toistaiseksi.
$salasana = isset($_POST['salasana']) ? $_POST['salasana'] : "";
$toiminta = isset($_POST['toiminta']) ? $_POST['toiminta'] : "";
$hamy = isset($_GET['id']) ? $_GET['id'] : "kelvoton";
$viesti = isset($_GET['viesti']) ? $_GET['viesti'] : "";
// Viesti käyttäjälle.
$sisalto = '';
// Varsinainen sisältö.
$hamynimi = 'id';
/**
 * Luo ja palauttaa kielivalikon html-koodin. Ei sisällä lomake- eli
 * form-tageja!
 * @param <type> $kieli
 * @param <type> $otsikko
 * @return <type>
 */
function nayta_kielivalikko(&$kieli, $otsikko)
{
    $kielivalikkohtml = "";
    try {
        $arvot = Kielet::hae_kielten_arvot();
        $nimet = Kielet::hae_kielten_nimet();
        $name_arvo = "kieli_kuv";
        $oletusvalinta_arvo = $kieli;
        $kielivalikkohtml .= Html::luo_pudotusvalikko($arvot, $nimet, $name_arvo, $oletusvalinta_arvo, $otsikko);
    } catch (Exception $poikkeus) {
        $kielivalikkohtml = Bongaustekstit::$kielivalikko_virheilm . " (" . $poikkeus->getMessage() . ")";
    }
    return $kielivalikkohtml;
}
Beispiel #5
0
 /**
  * Näyttää joukon lajiluokkia ja niiden nimet eri kielillä.
  * @param array $lajiluokat Sisältää kaikki lajiluokat olioina
  * @param <type> $painikkeet
  * @param <type> $on_admin TRUE, jos käyttäjällä admin-oikeudet
  * @return <type>
  */
 public static function nayta_lajiluokat($lajiluokat, $painikkeet, $on_admin)
 {
     // Haetaan kielten nimet ja arvot:
     $kielinimet = Kielet::hae_kielten_nimet();
     $kieliarvot = Kielet::hae_kielten_arvot();
     $sarakkeiden_lkm = sizeof($kieliarvot) + 1;
     $html = "<div class=''>";
     $html = "<div class=''>" . $painikkeet . "</div>";
     $html .= "<table class='tietotaulu'>";
     $html .= "<tr><td colspan=" . $sarakkeiden_lkm . "class='tietotauluotsikko'>" . Bongaustekstit::$lajiluokka_lajiluokkataulun_otsikko . "</td></tr>";
     $html .= "<tr>";
     foreach ($kielinimet as $kieli) {
         $html .= "<th>" . $kieli . "</th>";
     }
     $html .= "<th>" . Bongaustekstit::$lajiluokka_toimintapainikkeet . "</th>";
     $html .= "</tr>";
     // Haetaan sitten kuvaukset:
     $laskuri = 0;
     foreach ($lajiluokat as $lajiluokka) {
         if ($lajiluokka instanceof Lajiluokka) {
             // Pariton rivi eri värillä:
             if ($laskuri % 2 == 0) {
                 $html .= "<tr class='tietotaulu_parillinen_rivi'>";
             } else {
                 $html .= "<tr>";
             }
             // Painikkeet havaintojen siirtoon ja lajiluokan poistoon vain,
             // jos järkevää, eli kun havaintoja/kuvia on olemassa tai
             // poistossa ei ole :)
             $poistonappi = "";
             $siirtonappi = "";
             if ($on_admin) {
                 // Poistonappi:
                 if (!$lajiluokka->lajiin_kohdistuu_havaintoja() && !$lajiluokka->lajiin_kohdistuu_kuvia() && !$lajiluokka->lajilla_on_aliluokkia()) {
                     $id = "";
                     $class = "rinnakkain";
                     $value = Bongauspainikkeet::$LAJILUOKAT_POISTA_VALUE;
                     $title = Bongauspainikkeet::$LAJILUOKAT_POISTA_TITLE;
                     $onclick = "poista_lajiluokka(" . $lajiluokka->get_id() . ",\"" . Bongaustekstit::$lajiluokan_poisto_varmistuskysymys . "\",\"" . Bongaustekstit::$lajiluokan_poisto_perumisviesti . "\")";
                     $poistonappi = Html::luo_buttonpainike($id, $class, $value, $title, $onclick);
                 }
                 // Siirtonappi:
                 if ($lajiluokka->lajiin_kohdistuu_havaintoja() || $lajiluokka->lajiin_kohdistuu_kuvia()) {
                     $id = "";
                     $class = "rinnakkain";
                     $value = Bongauspainikkeet::$LAJILUOKAT_SIIRRA_HAVKUV_VALUE;
                     $title = Bongauspainikkeet::$LAJILUOKAT_SIIRRA_HAVKUV_TITLE;
                     $onclick = "hae_siirtolomake(" . $lajiluokka->get_id() . ")";
                     $siirtonappi = Html::luo_buttonpainike($id, $class, $value, $title, $onclick);
                 }
             }
             // Haetaan nimet muilla kielillä:
             $kuvaukset = $lajiluokka->hae_kuvaukset();
             // Kuvauksen sisältämä nimi pitää tulla oikeaan paikkaan
             // kielen mukaisesti. Ellei kuvausta löydy, jätetään tyhjä solu.
             // Tässä hyödynnetään sitä, että kuvaukset on järjestetty
             // kieli_id:n mukaisesti. Näin vältetään tupla for-lause.'
             $sarakkeiden_lkm = sizeof($kieliarvot);
             // Käännetään kuvaukset toisinpäin, eli pienin kieli_id
             // vikaksi. Kun tuo poisto on vain lopusta..
             $kuvaukset = array_reverse($kuvaukset);
             for ($i = 0; $i < $sarakkeiden_lkm; $i++) {
                 // Jokaisella solulla pitää olla oma erityinen id,
                 // jotta solu tunnistetaan:
                 $soluid = "nimisolu" . $laskuri . $i;
                 $id_koodi = "id='" . $soluid . "'";
                 // Soluihin lisätään onclick-määre, jotta niitä päästään
                 // muokkaamaan:
                 // 2. parametri -1 -> olemattoman olion id.
                 $onklikki = "onclick = 'hae_nimikuvauslomake(" . $kieliarvot[$i] . ",-1,\"" . $soluid . "\"," . $lajiluokka->get_id() . " )'";
                 $kielinimi = Kielet::hae_kielen_nimi($kieliarvot[$i]);
                 // Eka sarake on aina latina:
                 if ($i == 0) {
                     // Latinassa olio on lajiluokka, jonka id tarvitaan
                     // jatkossa. Tämä on aina olemassa.
                     $onklikki = "onclick = 'hae_nimikuvauslomake(" . $kieliarvot[$i] . "," . $lajiluokka->get_id() . ",\"" . $soluid . "\"," . $lajiluokka->get_id() . " )'";
                     $html .= "<td class='huomio'" . $id_koodi . $onklikki . " title='" . Bongauspainikkeet::$LAJILUOKAT_MUOKKAA_TITLE . " (" . $kielinimi . ")'>" . $lajiluokka->get_nimi_latina() . "</td>";
                 } else {
                     if (!empty($kuvaukset)) {
                         // Valitaan aina viimeinen taulukosta:
                         $kuvaus = $kuvaukset[sizeof($kuvaukset) - 1];
                         //$kuvaus = null;
                         if ($kuvaus instanceof Kuvaus && $kuvaus->get_kieli() == $kieliarvot[$i]) {
                             // Suomea ei päästetä muokkaamaan kuin admin:
                             if ($kieliarvot[$i] == Kielet::$SUOMI) {
                                 if ($on_admin) {
                                     $onklikki = "onclick = 'hae_nimikuvauslomake(" . $kuvaus->get_kieli() . "," . $kuvaus->get_id() . ",\"" . $soluid . "\"," . $lajiluokka->get_id() . " )'";
                                 } else {
                                     $onklikki = "onclick = 'nayta_viesti(\"" . Bongaustekstit::$lajiluokan_muok_ei_voi_suomenkiel . "\")'";
                                 }
                             } else {
                                 $onklikki = "onclick = 'hae_nimikuvauslomake(" . $kuvaus->get_kieli() . "," . $kuvaus->get_id() . ",\"" . $soluid . "\"," . $lajiluokka->get_id() . " )'";
                             }
                             $html .= "<td class='huomio' " . $id_koodi . $onklikki . " title='" . Bongauspainikkeet::$LAJILUOKAT_MUOKKAA_TITLE . " (" . $kielinimi . ")'>" . $kuvaus->get_nimi() . "</td>";
                             // Poistetaan vika eli jo käytetty kuvaus:
                             array_pop($kuvaukset);
                         } else {
                             $html .= "<td class='huomio' " . $id_koodi . $onklikki . " title='" . Bongauspainikkeet::$LAJILUOKAT_SYOTA_UUSI_TITLE . " (" . $kielinimi . ")'></td>";
                         }
                     } else {
                         $html .= "<td class='huomio' " . $id_koodi . $onklikki . "  title='" . Bongauspainikkeet::$LAJILUOKAT_SYOTA_UUSI_TITLE . " (" . $kielinimi . ")'></td>";
                     }
                 }
             }
             //Lisätään painikkeet:
             $html .= "<td>" . $siirtonappi . $poistonappi . "</td>";
             $html .= "</tr>";
             $laskuri++;
         }
     }
     $html .= "</table>";
     $html .= "</div>";
     // Lajiluokkalaatikon loppu
     return $html;
 }
 /**
  * Toteuttaa yhden kokonaisuuden näytön. Näyttää joko yhden kokonaisuudet tai
  * sitten kaikki käyttäjän valinnan mukaan.
  *
  * @return Palaute $palauteolio
  */
 function toteuta_nayta(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $kokonnakymat = $this->kokonaisuusnakymat;
     // VARmistetaan ensin, että klikattu kokonaisuus on "auki":
     $sessiomuuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($parametriolio->id_kokon);
     $_SESSION[$sessiomuuttujanimi] = Kokonaisuusolio::$LINKKI_AUKI;
     // Liitetään parametriolioon tieto siitä, jos näyttö pitää tehdä
     // pelkän urlin perusteella (linkistä tulo, ks index.php loppuosa):
     if ($palauteolio->naytto_urlin_mukaan()) {
         $parametriolio->set_naytto_urlin_mukaan(true);
         // Tämä haetaan tietokannasta, jos id kunnollinen:
         $kokon = $this->get_olio();
         // Jos löytyi, asetetaan kieli, taso ja oppiaine, jottei tarvita
         // urlissa. Muussa tapauksessa näytetään ensimmäinen sopiva
         // kokonaisuus (ks. metodi hae_kokonaisuushtml()).
         if ($kokon instanceof Kokonaisuusolio && $kokon->olio_loytyi_tietokannasta) {
             aseta_kieli_taso_ja_oppiaine($kokon->getKieli(), $kokon->getOppiaine(), $kokon->getTaso(), $parametriolio);
             // Kielen vaihto ei muuten onnistunut, joten piti täällä tehdä.
             Kielet::kaanna($parametriolio->get_kieli_id());
         }
     }
     // Uuden kokonaisuuden luova nappi vain, jos käyttäjällä riittävät valtuudet:
     if ($parametriolio->get_valtuudet() >= Valtuudet::$MUOKKAUS) {
         $painike = $kokonnakymat->create_new_article_button();
     } else {
         // Muuten ei näytetä painiketta:
         $painike = "";
     }
     if ($parametriolio->get_kokonaisuuksien_nayttotapa() == Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayta_kaikki_arvo) {
         $this->toteuta_nayta_kokonaisuudet_kaikki($palauteolio);
     } else {
         $sisalto = $this->hae_kokonaisuushtml($parametriolio);
         //Haetaan linkit:
         $linkit = $this->hae_kokonaisuuslinkit($parametriolio, true);
         $palauteolio = new Palaute();
         $palauteolio->set_sisalto($sisalto);
         $palauteolio->set_valikkonaytto(true);
         $palauteolio->nayta_kiintolinkit();
         $palauteolio->set_linkkihtml($linkit);
         $palauteolio->set_kokonaisuudet($parametriolio->kokonaisuusoliot);
         $palauteolio->set_uusi_kokon_painike($painike);
     }
     $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS);
     // Onnistumista ei varsinaisesti tarkisteta, mutta olkoon täällä näin.
     $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
     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);
 }
Beispiel #8
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;
 }
Beispiel #9
0
 /**
  * Palauttaa lukua eli kieli_indeksiä vastaavan kielen lyhennöksen, tai
  * tekstin "Tuntematon", jos parametri on sopimaton.
  * @param <type> $arvo
  * @return <type>
  */
 public static function hae_kielen_nimi_lyhennos($arvo)
 {
     $asetukset = new Kielet();
     return $asetukset->hae_nimi_versio2($arvo);
 }
Beispiel #10
0
 $parametriolio = new Parametrit($kokoelmanimi, $omaid, $tietokantaolio);
 // Luodaan Havaintokontrolleri- ja Havaintonakymaluokan oliot:
 $havaintokontrolleri = new Havaintokontrolleri($tietokantaolio, $parametriolio);
 $havaintonakymat = new Havaintonakymat($tietokantaolio, $parametriolio);
 // Samoin lajiluokan jutut:
 $lajiluokkakontrolleri = new Kontrolleri_lj($tietokantaolio, $parametriolio);
 $lajiluokkanakymat = new Nakymat_lj();
 /**************************************************************************/
 // Yleisten toimintomuuttujien arvojen haku/alustus:
 $perustoiminto = isset($_REQUEST[Bongaustoimintonimet::$perustoiminto]) ? $_REQUEST[Bongaustoimintonimet::$perustoiminto] : "";
 $havaintotoiminto = isset($_REQUEST[Bongaustoimintonimet::$havaintotoiminto]) ? $_REQUEST[Bongaustoimintonimet::$havaintotoiminto] : "";
 $lajiluokkatoiminto = isset($_REQUEST[Bongaustoimintonimet::$lajiluokkatoiminto]) ? $_REQUEST[Bongaustoimintonimet::$lajiluokkatoiminto] : "";
 $kuvatoiminto = isset($_REQUEST[Bongaustoimintonimet::$kuvatoiminto]) ? $_REQUEST[Bongaustoimintonimet::$kuvatoiminto] : "";
 $yllapitotoiminto = isset($_REQUEST[Bongaustoimintonimet::$yllapitotoiminto]) ? $_REQUEST[Bongaustoimintonimet::$yllapitotoiminto] : "";
 // Tekstien käännös.
 Kielet::kaanna($parametriolio->kieli_id);
 // Poistumisnappi
 $id = Yleisarvoja::$ulosnappiID;
 $name = Bongaustoimintonimet::$perustoiminto;
 $value = Bongauspainikkeet::$KIRJAUDU_ULOS_VALUE;
 $ulosnappi = luo_uloskirjauspainike($id, $name, $value);
 // Sivun pääsisältö:
 $sisalto = "";
 $tiedot = $kirjautumistieto . ". " . $aikailmoitus;
 // Käyttäjälle tuleva huomautusviesti:
 $ilmoitus = "";
 $kielivalikko = "";
 // Ei vielä mitään.
 // Toimintojen toteutukset (ainakin metodikutsut, jos toiminto pitkä)
 if ($perustoiminto != "") {
     if ($perustoiminto == Bongauspainikkeet::$KIRJAUDU_ULOS_VALUE) {
Beispiel #11
0
/**
 * 
 * @param Palaute $palauteolio
 * @param Parametrit $parametriolio
 * @param Koostekontrolleri $koostekontrolleri
 * @param Tehtavakontrolleri $tehtavakontrolleri
 * @param Ratkaisukontrolleri $ratkaisukontrolleri
 * @param Kokonaisuuskontrolleri $kokonaisuuskontrolleri
 */
function nayta_urlin_mukaan(&$palauteolio, &$parametriolio, &$koostekontrolleri, &$tehtavakontrolleri, &$ratkaisukontrolleri, &$kokonaisuuskontrolleri)
{
    $palauteolio->set_oma(Yleiset_arvot::$toimintaa_ei_maaritelty);
    $palauteolio->set_naytto_urlin_mukaan(true);
    // Mietittävää: kielen, oppiaineen ja tason määritykset voisi laittaa
    // toteuta-metodeiden sisälle, jottei niitä tarvita roskaamaan urlia.
    // Lähinnä koosteiden kohdalla pitää
    // miettiä, koska tällä hetkellä kaikki näkyy kaikille, eli siis
    // niiden näkyvyyttä ei ole rajoitettu kielen, oppiaineen tai tason
    // perusteella. Mahdollisesti kielen perusteella näin voisi tehdäkin,
    // vaikka muut jättäisi ennalleen.
    // Huomaa myös, että urlissa voi olla pelkästään kielen, aineen ja
    // tason arvot, jolloin pitäisi osata näyttää ensimmäinen vastaava
    // kokonaisuus.
    // Otetaan kuitenkin parametrinolion arvo mukaan [, jos se on jokin muu
    // oletus "kokonaisuus"] (esim kun urlin perusteella tullaan):
    //if($parametriolio->naytettava != Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS){
    $palauteolio->set_naytettava_oliotyyppi(Oliotyyppi::muunna_palauteolion_arvoksi($parametriolio->naytettava));
    //}
    // Alla pitäisi riittää palauteolion arvo. Se ohjaa nykyisin
    // näytettävää oliota. Muu-arvo (vähän kuin ei-määr) viittaa siihen,
    // ettei url määritä näytettävää oliota, joten pitää "arvata" se muuten.
    if ($palauteolio->get_naytettava_oliotyyppi() != Palaute::$NAYTETTAVA_OLIOTYYPPI_MUU) {
        if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA) {
            $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio);
        } else {
            if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU) {
                $ratkaisukontrolleri->toteuta_nayta($palauteolio);
            } else {
                if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE) {
                    // Haetaan kooste kieltä, tasoa ja oppiainetta varten:
                    $kooste = $koostekontrolleri->get_olio();
                    if ($kooste->olio_loytyi_tietokannasta) {
                        $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli);
                        $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine);
                        $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso);
                        // Kokonaisuusarvot ohjaavat eniten sovellusta:
                        aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio);
                        Kielet::kaanna($kieli);
                        $koostekontrolleri->toteuta_nayta($palauteolio);
                    } else {
                        $koostekontrolleri->toteuta_nayta_koosteet($palauteolio);
                        $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa);
                    }
                } else {
                    if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_TULOSTUS) {
                        $koostekontrolleri->toteuta_nayta_tulostus($palauteolio);
                    } else {
                        if ($palauteolio->get_naytettava_oliotyyppi() === Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE_ELEMRYHMA) {
                            // Haetaan kooste kieltä, tasoa ja oppiainetta varten:
                            $kooste = $koostekontrolleri->get_olio();
                            if ($kooste->olio_loytyi_tietokannasta) {
                                $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli);
                                $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine);
                                $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso);
                                // Kokonaisuusarvot ohjaavat eniten sovellusta:
                                aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio);
                                Kielet::kaanna($kieli);
                                $koostekontrolleri->toteuta_nayta($palauteolio);
                            } else {
                                $koostekontrolleri->toteuta_nayta_koosteet($palauteolio);
                                $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa);
                            }
                        } else {
                            // default:
                            $kokonaisuuskontrolleri->toteuta_nayta($palauteolio);
                        }
                    }
                }
            }
        }
        //======================================================================
        //======================================================================
        // Kun näytettävää oliota ei urlissa, tarkistetaan mahdolliset
        // id-arvot. Jos jokin määritelty, mennään sinne sitten!
    } else {
        // Tarkistetaan, onko kooste-id:tä:
        if ($parametriolio->kooste_id != Kooste::$MUUTTUJAA_EI_MAARITELTY || $parametriolio->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) {
            $nayta_kooste = true;
            if ($parametriolio->elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) {
                $nayta_kooste = false;
            }
            // Haetaan kooste kieltä, tasoa ja oppiainetta varten:
            // Huomaa, että ei välttämättä Kooste-olio!
            $kooste = $koostekontrolleri->get_olio();
            if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) {
                $kieli = $kooste->get_arvo(Kooste::$sarakenimi_kieli);
                $oppiaine = $kooste->get_arvo(Kooste::$sarakenimi_oppiaine);
                $taso = $kooste->get_arvo(Kooste::$sarakenimi_taso);
                // Kokonaisuusarvot ohjaavat eniten sovellusta:
                aseta_kieli_taso_ja_oppiaine($kieli, $oppiaine, $taso, $parametriolio);
                Kielet::kaanna($kieli);
                // NÄytetään joko kooste tai elementtiryhmä:
                if ($nayta_kooste) {
                    $koostekontrolleri->toteuta_nayta($palauteolio);
                } else {
                    $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio);
                }
            } else {
                $koostekontrolleri->toteuta_nayta_koosteet($palauteolio);
                $palauteolio->set_ilmoitus(Tekstit::$kooste_koostetta_ei_ole_tai_ei_voida_nayttaa);
            }
            // Huomaa järjestys: ensin tarkistetaan ratkaisu, sitten teht ja
            // vasta lopuksi kokonaisuus (jonka id tahtoo kummitella muistissa).
        } else {
            if ($parametriolio->id_teht != Tehtava::$MUUTTUJAA_EI_MAARITELTY) {
                // Näytetään yksi tehtävä:
                $tehtavakontrolleri->toteuta_nayta($palauteolio);
            } else {
                if ($parametriolio->id_ratk != Ratkaisu::$MUUTTUJAA_EI_MAARITELTY) {
                    $ratkaisukontrolleri->toteuta_nayta($palauteolio);
                } else {
                    if ($parametriolio->id_kokon != Kokonaisuusolio::$kokon_ei_maaritelty) {
                        $kokonaisuuskontrolleri->toteuta_nayta($palauteolio);
                        // Ellei näytettävää oliota, viedään oppiaineen mukaisesti:
                    } else {
                        if ($parametriolio->oppiaine_kokon != Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY) {
                            $kokonaisuuskontrolleri->toteuta_nayta($palauteolio);
                        } else {
                            $kokonaisuuskontrolleri->toteuta_nayta($palauteolio);
                        }
                    }
                }
            }
        }
    }
}
 /**
  * Hakee kaikki yhteen tehtävään liittyvät ratkaisut ja palauttaa ne
  * kauniisti html-koodina palauteoliossa.
  *
  * @param Palaute $palauteolio
  */
 function toteuta_nayta(&$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();
     $kuvakansion_os = Kuvat::$latauskansion_osoite;
     $paluunappi = "";
     /* Palauttaa käyttäjän tehtävänäkymään. */
     $ratkaisu_html = "";
     $uusi_ratkaisu_nappi = "";
     /*  */
     $tehtavanakymat = new Tehtavanakymat();
     /***************************************************************************/
     // Haetaan ensin tehtävä, jotta sen voi nähdä samalla: ********************/
     $tehtava_html = "";
     $teht = new Tehtava($id_teht, $tietokantaolio);
     if (!$teht->olio_loytyi_tietokannasta) {
         $tehtava_html = Tekstit::$tehtava_ilm_ei_loytynyt;
     } else {
         $tehtava_html .= $tehtavanakymat->tulosta_tehtava_ilman_painikkeita($omaid, $teht);
     }
     /**************************************************************************/
     // Asetetaan kieli, taso ja oppiaine kokonaisuuden perusteella, kun urlista
     // tullaan. Ratkaisun avulla löydetään tehtävä ja sen avulla kokonaisuus:
     if ($palauteolio->naytto_urlin_mukaan()) {
         $parametriolio->set_naytto_urlin_mukaan(true);
         // Isäntäkokonaisuus haetaan tietokannasta, jos ratk_id kunnollinen:
         $ratk = $this->get_olio();
         if ($ratk instanceof Ratkaisu && $ratk->olio_loytyi_tietokannasta) {
             $teht_id = $ratk->getTeht_id();
             $teht = new Tehtava($teht_id, $tietokantaolio);
             if ($teht->olio_loytyi_tietokannasta) {
                 $kokon_id = $teht->getKokon_id();
             }
             // Lopulta päästään käsiksi kokonaisuuteen:
             $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;
                 $parametriolio->id_teht = $teht_id;
                 aseta_kieli_taso_ja_oppiaine($kokon->getKieli(), $kokon->getOppiaine(), $kokon->getTaso(), $parametriolio);
                 // Tekstien käännös.
                 Kielet::kaanna($parametriolio->get_kieli_id());
             }
         }
     }
     //=====================================================================
     try {
         $paluunappi = $this->tehtavanakymat->button_gobackto_all_exercises($id_teht);
     } catch (Exception $poikkeus) {
         $tehtava_html .= "Palaa-painike: " . $poikkeus->getMessage();
     }
     // Uusia ratkaisuja saavat tehdä ne, jotka lisätä tehtäviäkin:
     if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
         // Uusi_ratkaisu_painike:
         $onsubmit_funktionimi = "nayta_ratkaisulomake";
         $onsubmit_parametrit = array($id_teht);
         /* Tehtävän id */
         $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_teht=" . $id_teht . "&id_kokon=" . $id_kokon . "&uusi=1");
         $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);
     }
     $ratkaisu_html .= $paluunappi . $tehtava_html;
     $ratkaisu_html .= "<h3>" . Tekstit::$ratkaisu_ratkaisut_valiotsikko . "</h3>";
     $ratkaisu_html .= $uusi_ratkaisu_nappi;
     $ratkaisut = $this->hae_ratkaisut($id_teht);
     if (empty($ratkaisut)) {
         $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_ilm_ei_loytynyt);
     } else {
         foreach ($ratkaisut as $ratkaisu) {
             if ($ratkaisu instanceof Ratkaisu) {
                 // Jos on kirjautunut käyttäjä, näytetään väripallolla, onko
                 // yksityinen vai julkinen:
                 if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) {
                     if ($ratkaisu->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) {
                         $ratkaisu->setNakyvyysmerkkiPrivate();
                     } else {
                         $ratkaisu->setNakyvyysmerkkiPublic();
                     }
                 }
                 $painikkeet = $this->luo_ratkaisupainikkeet($ratkaisu->getId());
                 $ratkaisu_html .= $this->ratkaisunakymat->tulosta_ratkaisu($id_kokon, $ratkaisu, $omaid, $painikkeet);
             } else {
                 $this->lisaa_virheilmoitus(Tekstit::$ratkaisu_ilm_ei_loytynyt);
             }
         }
     }
     /* Tämä ottaa palauteolion samalla käyttöön */
     $palauteolio->set_sisalto($ratkaisu_html);
     $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU);
     // Kieli- yms valikot pois näkyvistä:
     $palauteolio->set_valikkonaytto(false);
     return $palauteolio;
 }
Beispiel #13
0
 public function testaa_kuvauksen_muokkaus()
 {
     $this->lisaa_testikommentti("<h4>Kuvauksen muokkaustesti alkaa</h4>", false);
     $this->lisaa_testikommentti("Muokataan ekaa valmista kuvausta (Linnut)", false);
     $this->muokattava = $this->kuvaukset[0];
     //======================================================================
     // Testataan ennen muutoksia onTallennuskelpoinen-metodi, jonka
     // pitäisi valittaa:
     $this->lisaa_testikommentti("Testataan ennen muutoksia\n            onTallennuskelpoinen-metodi, jonka pitaisi valittaa:", false);
     $uusi = false;
     if ($this->muokattava->on_tallennuskelpoinen($uusi)) {
         $this->lisaa_testikommentti("Virhe: muuttumattomia tietoja ei\n                ole tarkoitus antaa tallentaa!", true);
     } else {
         $this->lisaa_testikommentti("Oikein: muuttumattomia tietoja ei\n                tallenneta!", false);
     }
     //======================================================================
     // ASetetaan kuvaukselle tahallaan vääriä arvoja:
     $this->muokattava->set_kieli(Kuvaus::$MUUTTUJAA_EI_MAARITELTY);
     $this->muokattava->set_kuvaus(Kuvaus::$MUUTTUJAA_EI_MAARITELTY);
     //$this->muokattava->set_lajiluokka("jkljö"); Tätä ei voi muuttaa!
     $this->muokattava->set_nimi(Kuvaus::$MUUTTUJAA_EI_MAARITELTY);
     $this->lisaa_testikommentti("Testataan tahallaan vaarien muutosten jalkeen\n            onTallennuskelpoinen-metodi, jonka pitaisi valittaa:", false);
     // tyhjennetään vielä aiemmat virheilmoitukset:
     $this->muokattava->tyhjenna_virheilmoitukset();
     // Virheilmoituksia pitäisi tulla, yksi kustakin arvosta yllä:
     if ($this->muokattava->on_tallennuskelpoinen(false)) {
         $this->lisaa_testikommentti("Virhe: virheita livahti ohi\n                        tarkastuksen!", true);
     } else {
         if ($this->muokattava->virheilmoitusten_lkm() == 6) {
             $this->lisaa_testikommentti("Oikein:  Tiedoissa virheita:<br/>" . $this->muokattava->tulosta_virheilmoitukset(), false);
         } else {
             $this->lisaa_testikommentti("Virhe: virheita (" . (3 - $this->muokattava->virheilmoitusten_lkm()) . " kpl) livahti ohi\n                        tarkastuksen! Seuraavat huomattu:<br/>" . $this->muokattava->tulosta_virheilmoitukset(), true);
         }
     }
     //======================================================================
     // ASetetaan kuvaukselle hyviä arvoja:
     $muokattu_kuvaus = "Hurraa Sverige!";
     $muokattu_nimi = "Fåglar";
     $this->muokattava->set_kieli(Kielet::$RUOTSI);
     $this->muokattava->set_kuvaus($muokattu_kuvaus);
     $this->muokattava->set_nimi($muokattu_nimi);
     $this->lisaa_testikommentti("Testataan hyvien muutosten jalkeen\n            onTallennuskelpoinen-metodi, jonka ei pitaisi valittaa:", false);
     // tyhjennetään vielä aiemmat virheilmoitukset:
     $this->muokattava->tyhjenna_virheilmoitukset();
     // Virheilmoituksia ei pitäisi tulla:
     if ($this->muokattava->on_tallennuskelpoinen(false)) {
         $this->lisaa_testikommentti("Oikein! ARvot puhtaita!", false);
     } else {
         $this->lisaa_testikommentti("Virhe:  Tiedoissa olevinaan virheita:<br/>" . $this->muokattava->tulosta_virheilmoitukset(), false);
     }
     //======================================================================
     // tyhjennetään vielä aiemmat virheilmoitukset:
     //$this->muokattava->tyhjenna_virheilmoitukset();
     // Kokeillaan sitten tallentaa muuttuneet tiedot:
     $this->lisaa_testikommentti("Kokeillaan tallentaa muutokset:", false);
     $tallennuspalaute = $this->muokattava->tallenna_muutokset();
     if ($tallennuspalaute == Kuvaus::$OPERAATIO_ONNISTUI) {
         $this->lisaa_testikommentti("Muutosten tallennus onnistui!", false);
         // Kokeillaan hakea sama tietokannasta ja varmistetaan, että
         // muutettu kommentti on todella muuttunut:
         $testi = new Kuvaus($this->tietokantaolio, $this->muokattava->get_id());
         if ($testi->get_kuvaus() == $muokattu_kuvaus && $testi->get_kieli() == Kielet::$RUOTSI && $testi->get_nimi() == $muokattu_nimi) {
             $this->lisaa_testikommentti("Muutokset oikein tietokannassa!\n                     Kuvaus on nykyaan: '" . $testi->get_kuvaus() . "', " . "nimi '" . $testi->get_nimi() . "', " . "ja kieli '" . Kielet::hae_kielen_nimi($testi->get_kieli()) . "'", false);
         } else {
             $this->lisaa_testikommentti("Muutokset vaarin tietokannassa!\n                     Kuvaus on nykyaan: '" . $testi->get_kuvaus() . "', " . "nimi '" . $testi->get_nimi() . "', " . "ja kieli '" . Kielet::hae_kielen_nimi($testi->get_kieli()) . "'", true);
         }
         // Muutetaan kuvaus alkuperäiseksi, jottei siivous häiriinny:
         $this->lisaa_testikommentti("Muutetaan kuvaus alkuperaiseksi,\n                 jotta siivous pysyy kasassa", false);
         // Huom! Alla käytetään testi-oliota, koska $this->muokattava ei
         // ole aivan ajan tasalla.
         $testi->set_kuvaus(Kuvaustestaus::$kuvaus_kuvaus);
         $tallennus2 = $testi->tallenna_muutokset();
         if ($tallennus2 != Kuvaus::$OPERAATIO_ONNISTUI) {
             $this->lisaa_testikommentti("Virhe alkup. kuvaus-kuvauksen palauttamisessa: " . $tallennus2, true);
         }
     } else {
         $this->lisaa_testikommentti($tallennuspalaute, true);
     }
     //====================== Yritetään muuttaa varpus-kuvausta
     // ruotsinkieliseksi, minkä ei pitäisi onnistua, koska sellainen on jo:
     $this->lisaa_testikommentti("Yritetaan muuttaa varpus-kuvausta\n            ruotsinkieliseksi, minka ei pitaisi onnistua, koska sellainen on jo", false);
     $varpunen = $this->kuvaus2;
     $varpunen->set_kieli(Kielet::$RUOTSI);
     $palaute = $varpunen->tallenna_muutokset();
     if ($palaute == Kuvaus::$OPERAATIO_ONNISTUI) {
         $this->lisaa_testikommentti("Virhe!! Tupla sparv tallennettu!", true);
     } else {
         $this->lisaa_testikommentti("Tuplaa ei sallittu (OIKEIN): " . $palaute, false);
     }
     //======================================================================
     $this->lisaa_testikommentti("<h4>Kuvauksen muokkaustesti loppui</h4>", false);
 }