/** * Luo ja tallentaa uuden tehtävän tietokantaan. Onnistuminen näkyy * palauteolion Virhekoodi-muuttujan arvossa. * @param type $id_kokon * @param type $ots */ function luo_testitehtava($id_kokon, $ots) { /************** UUDEN TEHTÄVÄN TALLENNUS **********************************/ $palauteolio = new Palaute(); $this->parametriolio->otsikko_teht = $ots; $this->parametriolio->tehtavananto_teht = KokonTehtRatkTestaus::$testiteht_tehtava; $this->parametriolio->vaikeustaso_teht = Vaikeustasot::$NORMAALI; $this->parametriolio->id_kokon = $id_kokon; $this->tehtavakontrolleri->toteuta_tallenna_uusi($palauteolio); return $palauteolio; }
/** * Toteuttaa kuvan tietojen tallennuksen tietokantaan ja kuvan tallennuksen * tallennuskansioon. Kuvan tiedot tarkistetaan. * * Tallentaa kuvan ja palauttaa taulukon, jonka ensimmäinen alkio on * palautte tallennuksen onnistumisesta ('onnistui' tai virheilmoitus) ja toinen * tallennetun kuvan id:n, jotta uusi kuva osataan näyttää heti. Kolmas alkio * taulukossa on tallennetun kuvan tiedosto-osoite. * * @param Parametrit $parametriolio * @return Palaute $palauteolio */ function toteuta_tallenna_kuva($parametriolio) { $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $id_ratk = $parametriolio->id_ratk; $omaid = $parametriolio->get_omaid(); $kuvaotsikko_kuva = $parametriolio->kuvaotsikko_kuva; $kuvaselitys_kuva = $parametriolio->kuvaselitys_kuva; $vuosi_kuva = $parametriolio->vuosi_kuva; $kk_kuva = $parametriolio->kk_kuva; $paiva_kuva = $parametriolio->paiva_kuva; $nayttokokoindeksi_kuva = $parametriolio->nayttokokoindeksi_kuva; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio); $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio); //$latauskansio_os Antaa sen kansion suhteellisen tiedostopolun, // jonne ladattu tiedosto on tarkoitus siirtää pysyvää sijoitusta varten. $latauskansio_os = $parametriolio->latauskansio_os; //"selitys"/"tiivis"/"manuaali"/"tehtava"/"ratkaisu" $kohde_kuva = $parametriolio->kohde_kuva; $palauteolio = new Palaute(); $palauteolio2 = new Palaute(); /* tallenna_kuva-metodin palaute */ $palauteolio_kokon = new Palaute(); $pal_olio = new Palaute(); $palauteolio_tehtavat = new Palaute(); $sisalto = ""; $id_kuva = ""; /* Tallennetun kuvan tunniste. */ $uusi = true; $linkit = ""; // Liittyy tehtäviin esim. // Huom! alla olevaan ei tulekaan kuvan id, vaan isäntäolion id! $muokatun_id = Kokonaisuusolio::$kokon_ei_maaritelty; /* Tarkistetaan, onko latauksia tullut palvelimelle: */ if (!array_key_exists(Kuvat::$kuvalatauksen_name, $_FILES)) { $ilmoitus_kuva = 'Ei latauksia havaittu!'; $sisalto = nayta_kuvalomake_uusi($kohde_kuva, $omaid, $uusi, $ilmoitus_kuva, $tietokantaolio, $id_kuva, $id_kokon, $id_teht, $id_ratk, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva); $palauteolio->set_ilmoitus($ilmoitus_kuva); $palauteolio->set_sisalto($sisalto); } else { $ladattu_kuva = $_FILES[Kuvat::$kuvalatauksen_name]; // Ilmeisesti koko on valmiiksi tavuina (täsmää kuvan omin. kans): //$info = getImageSize($ladattu_kuva['tmp_name']); $ilmoitus = "Tiedoston nimi: " . $ladattu_kuva['name'] . " (" . round($ladattu_kuva['size'] / 1024) . " kt)" . "<br/> Tyyppi: " . $ladattu_kuva['type'] . "<br />"; //"<br/> Tmp-nimi: ".$ladattu_kuva['tmp_name']. //"<br/> Virheviesti: ".$ladattu_kuva['error']. //"<br/> Kuvan tyyppi: ".$info[2]; $tarkistus = tarkista_kuvatiedot($ladattu_kuva, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $uusi); // Jos korjaamista, näytetään lomake uudelleen: if ($tarkistus != Palautteita::$lomaketiedot_ok) { $ilmoitus_kuva = $tarkistus; $sisalto = nayta_kuvalomake_uusi($kohde_kuva, $omaid, $uusi, $ilmoitus_kuva, $tietokantaolio, $id_kuva, $id_kokon, $id_teht, $id_ratk, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva); } else { // Tallenna_kuva palauttaa olion, joka sisältää kolme // tietoa; palautteen (ilmoitus), tallennetun kuvan id:n (2), joka // voi olla tyhjä virheen sattuessa ja kuvaosoitteen (3). $palauteolio2 = tallenna_kuva($kohde_kuva, $id_kokon, $id_teht, $id_ratk, $omaid, $ladattu_kuva, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva, $tietokantaolio, $latauskansio_os); if ($palauteolio2->get_ilmoitus() == Tietokantaolio::$HAKU_ONNISTUI) { $ilmoitus = Tekstit::$ilm_kuva_uusi_tallennus_ok; $id_kuva = $palauteolio2->get_muokatun_id(); $linkit = ""; // Lisälinkkejä, esim. tehtävissä. /* Palautetaan se näkymä, jonka parissa on tehty töitä: */ if ($kohde_kuva === Kuvat::$kohde_kokonaisuus_tiivistelma || $kohde_kuva === Kuvat::$kohde_kokonaisuus_selitys) { if ($kohde_kuva == Kuvat::$kohde_kokonaisuus_selitys) { $selitys_auki_id = $id_kokon; } else { $selitys_auki_id = ""; } $parametriolio->selitys_auki_id = $selitys_auki_id; $kokonaisuuskontrolleri->toteuta_nayta($palauteolio_kokon); $sisalto = $palauteolio_kokon->get_sisalto(); $linkit = $palauteolio_kokon->get_linkkihtml(); $muokatun_id = $id_kokon; } else { if ($kohde_kuva === Kuvat::$kohde_kokonaisuus_tiivis_manuaali || $kohde_kuva === Kuvat::$kohde_kokonaisuus_selitys_manuaali) { $kohteena_tiivis = $kohde_kuva === Kuvat::$kohde_kokonaisuus_tiivis_manuaali; if ($kohteena_tiivis) { $sarakenimi = "tiivis"; } else { $sarakenimi = "selitys"; } // Haetaan ajantasalla olevat tiedot tietokannasta. /* Muutettavat tiedot alla, jotka siis pitää asettaa: * $muutosarvot = array(time(), $oppiaine_kokon, $otsikko_kokon, $tiivis_kokon, $selitys_kokon, $taso_kokon, $jarjestysnro, $laajennetun_id_kokon, $kieli_id, $ylakokonaisuuden_id); */ $taulunimi = "kokonaisuudet"; $sarakenimi = "id"; $hakuarvo = $id_kokon; $kokonaisuus = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($kokonaisuus != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $parametriolio->oppiaine_kokon = $kokonaisuus->oppiaine; $parametriolio->otsikko_kokon = $kokonaisuus->otsikko; $parametriolio->tiivis_kokon = $kokonaisuus->tiivis; $parametriolio->selitys_kokon = $kokonaisuus->selitys; $parametriolio->taso_kokon = $kokonaisuus->taso; $parametriolio->jarjestysnro_kokon = $kokonaisuus->jarjestysnro; $parametriolio->laajennetun_id_kokon = $kokonaisuus->laajennetun_id; $parametriolio->ylakokonaisuuden_id_kokon = $kokonaisuus->ylakokonaisuuden_id; } // Haetaan kokonaisuuden tiivistelmä/selitys: if ($kohteena_tiivis) { $vanha = $parametriolio->tiivis_kokon; } else { $vanha = $parametriolio->selitys_kokon; } // Haetaan tallennettu kuva tietokannasta: if ($tietokantaolio instanceof Tietokantaolio) { $taulunimi = "kuvat"; $sarakenimi = "id"; $hakuarvo = $id_kuva; $tk_olio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($tk_olio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $kuva = new Kuva($tk_olio, $tietokantaolio); } $kuvahtml = $kuva->nayta_pelkka_kuva($latauskansio_os); // Uusi on vanha + kuvahtml: $uusi = $vanha . "\n" . $kuvahtml; if ($kohteena_tiivis) { $parametriolio->tiivis_kokon = $uusi; } else { $parametriolio->selitys_kokon = $uusi; } $kokonaisuuskontrolleri->toteuta_tallenna_muokkaus($palauteolio_kokon); } $sisalto = $palauteolio_kokon->get_sisalto(); $muokatun_id = $id_kokon; } else { if ($kohde_kuva === Kuvat::$kohde_tehtava) { $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio_tehtavat); $linkit = $palauteolio_tehtavat->get_linkkihtml(); $sisalto = $palauteolio_tehtavat->get_sisalto(); $muokatun_id = $id_teht; } else { if ($kohde_kuva === Kuvat::$kohde_ratkaisu) { $ratkaisukontrolleri->toteuta_nayta($pal_olio); $sisalto = $pal_olio->get_sisalto(); $muokatun_id = $id_ratk; } else { $sisalto = "kohde_kuva?? (toteuta_tallenna_kuva)"; } } } } } else { $ilmoitus .= $palauteolio2->get_ilmoitus() . " ja " . $palauteolio_kokon->get_ilmoitus(); $ilmoitus_kuva = $palauteolio2->get_ilmoitus(); $sisalto = nayta_kuvalomake_uusi($kohde_kuva, $omaid, $uusi, $ilmoitus_kuva, $tietokantaolio, $id_kuva, $id_kokon, $id_teht, $id_ratk, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva); } } } $palauteolio->set_ilmoitus($ilmoitus); $palauteolio->set_sisalto($sisalto); $palauteolio->set_muokatun_id($muokatun_id); /* Kuvan suhteellinen osoite (kutsuvasta ohjelmanosasta). */ $palauteolio->set_oma($palauteolio2->get_oma()); /* Linkit (esim. tehtävät) */ $palauteolio->set_linkkihtml($linkit); return $palauteolio; }
/** * Palauttaa kokonaisuuden html-koodin. * * Huomaa, että täällä käsitellään aika paljon turvallisuusarkoja aiheita, * kuten esimerkiksi kokonaisuuden lukitus. Ois parempi ehkä sellaisen * olla aiemmin, mutta en vielä ole jaksanut muuttaa.. * * @param Parametrit $parametriolio * @param Kokonaisuusolio $kokonaisuus * @param <type> $selitys_auki jos true, niin selitys näytetään, muuten ei. * @param type $id_prev Edellisen kokonaisuuden id. * @param type $id_next Seuraavan kokonaisuuden id. * @return string|\<type> */ function tulosta_kokonaisuus($kokonaisuus, $parametriolio, $selitys_auki, $id_prev, $id_next) { $btn_type = Kokonaisuusnakymat::$btn_type_article; $btn_size = Kokonaisuusnakymat::$btn_size_article; $omaid = $parametriolio->get_omaid() + 0; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); // Luodaan tämä tehtävien lkm:n hakua varten. Vähän raskasta, mutta olkoon. $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $palaute = ""; $selitys = ""; $poistonappi = ""; $muokkausnappi = ""; $tehtavanappi = ""; /* Tehtävien näyttö */ $uusi_teht_nappi = ""; /* Tästä luodaan uusi tehtävä. */ $nayta_selitys_nappi = ""; /* Näyttää selityksen. */ $siirra_ylemmaksi_nappi = ""; $siirra_alemmaksi_nappi = ""; $jaa_oikeuksia_nappi = ""; $nayta_jarj_luku = ""; $korjausnappi = ""; // Tämän avulla järjestysluvun voi korjata $nakyvyysmuutosnappi = ""; $nayta_ed_nappi = $this->create_button_show_prev($id_prev); $nayta_seur_nappi = $this->create_button_show_next($id_next); /*======================== käyttäjän oikeudet ========================*/ $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokonaisuus->getHenkiloId(), $omaid, Oliotyyppi::$KOKONAISUUS, $kokonaisuus->get_id(), $tietokantaolio); /*====================================================================*/ // Koodia voivat kaikki vilkaista, ellei ole piilotettu: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $nayta_koodi_nappi = Html::luo_button(Painikkeet::$NAYTA_KOODI_value, array(Attr::title(Painikkeet::$NAYTA_KOODI_title), Attr::onclick("hae_koodi", array($kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS)), Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size . " article"))); } else { $nayta_koodi_nappi = ""; } /* Kuvan lisäyspainikkeet: */ $uusi_kuva_tiivis = ""; $uusi_kuva_seli = ""; // Alla jostakin syystä !empty($kokonaisuus->getSelitys()) ei toiminut! if ($kokonaisuus->getSelitys() != "") { $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Tämän avulla löytyvät */ $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id()); if ($selitys_auki) { $title = Painikkeet::$SULJE_SELITYS_title; $onsubmit_funktionimi = "sulje_selitys"; $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$SULJE_SELITYS_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article"); } else { $title = Painikkeet::$NAYTA_SELITYS_title; $onsubmit_funktionimi = "nayta_selitys"; $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$NAYTA_SELITYS_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article"); } $nayta_selitys_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } // Haetaan kokonaisuuden tehtävien lkm: $teht_lkm = sizeof($tehtavakontrolleri->hae_tehtavat()); // Tehtävät näkyvät kaikille, jos niitä on: if ($teht_lkm > 0) { $onsubmit_funktionimi = "nayta_tehtavat"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Tämän avulla löytyvät */ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . Oliotyyppi::$naytettava_name . "=" . Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA); $title = Painikkeet::$tehtava_nayta_tehtavat_title . " (" . $teht_lkm . ")"; $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_nayta_tehtavat_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size); $tehtavanappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } /** * Muokkaus ja poisto tietysti kunkulle ja kokonaisuuden tekijälle. * Vain heille on myös luvallista jakaa lisäoikeuksia olioon. <p>Jos kokonaisuus lukittu toisen toimesta, ei sitä voida poistaa eikä muokata. Uusia tehtäviä voi kuitenkin lisätä, koska siinä mahdollinen samanaikaisuus ei haittaa.</p> <p>Uusia tehtäviä voi lisätä valtuusarvot >= "tehtävien_lisäys".</p> Kokonaisuuksien poisto sallitaan turvallisuussyistä vain lapsettomille kokonaisuuksille. */ if ($kohdeoikeudet == Lisavaltuudet::$KAIKKI_OIKEUDET) { // Oikeuksien eli lisävaltuuksien jakopainike:====================== $action_os = "oLetUs"; // Testaan samalla kirjainkoon vaikutusta. $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id); $action_kyselyarvot = array($kokonaisuus->get_id(), $kokonaisuus->getOppiaine(), $kokonaisuus->getKieli(), $kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS, $kokonaisuus->getHenkiloId()); $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot); //================================================================== } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { //====================== LUKITUKSEN HUOMIOINTI ===================== // Muokkaus- ja poistonapit lukitsemattomalle tai omalle. if (!$this->lukitus_estaa_muokkauksen($kokonaisuus, $omaid)) { // Muokkauspainike: $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $muokkausnappi = $this->luo_muokkauspainike($kokonaisuus, $elementti, $elemryhma); //============================================================= if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) { // Poisto vain lapsettomille ja tehtävättömille: if ($kokonaisuus->getOn_lapsia() == 0) { $tehtavat = Tehtava::hae_kokonaisuuden_tehtavat($kokonaisuus->get_id(), $parametriolio->get_tietokantaolio()); // Ellei tehtäviä löydy, voidaan poistaa: if (empty($tehtavat)) { // POistopainike: $poistonappi = Html::luo_forminput_painike(array(Attr::classs("article"), Attr::action("{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id())), array(Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size), Attr::name("toiminta"), Attr::value(Painikkeet::$POISTA_KOKON_VALUE))); if ($kokonaisuus->getLukitus() == $omaid) { $poistonappi .= "<span style='color: green; font-weight:bold'>" . Tekstit::$ilm_kokon_omalukitus_paalla . "<br/></span>"; } } } } //============================================================= // Julkista/piilota-painike: if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $value = Painikkeet::$PIILOTA_KOKON_value; $title = Painikkeet::$PIILOTA_KOKON_title; } else { $value = Painikkeet::$JULKISTA_KOKON_value; $title = Painikkeet::$JULKISTA_KOKON_title; } $onsubmit_funktionimi = ""; // Tulevaa varten. $onsubmit_parametrit = ""; // Ei ole vielä. $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli()); $input_maaritteet = array("class" => "btn btn-" . $btn_type . " btn-" . $btn_size, "value" => $value, "title" => $title, "name" => Toimintonimet::$kokonaisuustoiminto); try { $nakyvyysmuutosnappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $nakyvyysmuutosnappi = $poikkeus->getMessage(); } //============================================================= // Järjestyksen muutosnapit (jos mielekästä): $siirra_ylemmaksi_nappi = ""; if ($kokonaisuus->getEdellisenId_taso() != Kokonaisuusolio::$kokon_edellista_ei_ole) { $onsubmit_funktionimi = ""; // Tulevaa varten. $onsubmit_parametrit = ""; // Ei ole vielä. $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli() . "&ed_id_kokon=" . $kokonaisuus->getEdellisenId_taso() . "&siirto_ylos=true"); $input_maaritteet = array("value" => Painikkeet::$SIIRRA_YLEMMAKSI_KOKON_value, "title" => Painikkeet::$SIIRRA_YLEMMAKSI_KOKON_title, "name" => Toimintonimet::$kokonaisuustoiminto, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $siirra_ylemmaksi_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $siirra_ylemmaksi_nappi = $poikkeus->getMessage(); } } // Alaspäin siirto: $siirra_alemmaksi_nappi = ""; if ($kokonaisuus->getSeuraavanId_taso() != Kokonaisuusolio::$kokon_seuraavaa_ei_ole) { $onsubmit_funktionimi = ""; // Tulevaa varten. $onsubmit_parametrit = ""; // Ei ole vielä. $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli() . "&seur_id_kokon=" . $kokonaisuus->getSeuraavanId_taso() . "&siirto_ylos=0"); $input_maaritteet = array("value" => Painikkeet::$SIIRRA_ALEMMAKSI_KOKON_value, "title" => Painikkeet::$SIIRRA_ALEMMAKSI_KOKON_title, "name" => Toimintonimet::$kokonaisuustoiminto, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $siirra_alemmaksi_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $siirra_alemmaksi_nappi = $poikkeus->getMessage(); } } // Tämä liittyy vanhan järjestysnumeron korjaukseen (kun monilla // kokonaisuuksilla oli sama järjestysnumero -1). Nykyään // tekniikka on muuttunut, eikä sitä yleensä tarvita. if ($kokonaisuus->getJarjestysnro() == -1) { $nayta_jarj_luku = " jarjestysnro: " . $kokonaisuus->getJarjestysnro(); $class = "rinnakkain"; $id = ""; $action = "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli(); $name = Toimintonimet::$kokonaisuustoiminto; $value = "Korjaa jarjestysnro"; $korjausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value); } /**************************************************************/ } else { if ($kokonaisuus->lukitus != Kokonaisuusolio::$LUKITUS_OFF) { $poistonappi = "<span style='color: red; font-weight:bold'>" . Tekstit::$ilm_kokon_lukitus_paalla . "<br/></span>"; } } /* Uuden kuvan lisäyspainike tiivistelmään*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Kokonaisuuden id*/ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_tiivistelma); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $uusi_kuva_tiivis = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } /* Uuden kuvan lisäyspainike selitykseen:*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Kokonaisuuden id*/ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_selitys); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $uusi_kuva_seli = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } } // Hallinnan / muokkaaajan / luojan osuus päättyy // Tehtävien lisääminen sopivasti oikeutetuille: if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $uusi_teht_nappi = $this->luo_uusi_teht_painike($kokonaisuus, $elementti, $elemryhma); } // TEhtävien lisäyspainikekoodi loppuu. /* haetaan mahdolliset kuvat */ $kuvahtml_tiivis = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_tiivistelma, $omaid, $tietokantaolio, false); /* kokolaisuuksien hierarkia: html-otsikkotasot. */ $class_arvo = "kokonaisuus"; $painikkeet_ylla = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $tehtavanappi . $uusi_teht_nappi . $muokkausnappi . $korjausnappi . $nakyvyysmuutosnappi . $jaa_oikeuksia_nappi . $nayta_seur_nappi; $painikkeet_alla = $nayta_koodi_nappi . $uusi_kuva_tiivis . $uusi_kuva_seli . $nayta_selitys_nappi . $poistonappi; $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">"; /* Haetaan vielä tarvittaessa selitys: */ if ($selitys_auki) { /* haetaan mahdolliset kuvat */ $kuvahtml_selitys = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_selitys, $omaid, $tietokantaolio, false); $selitysotsikko = "<div class='selitysotsikko'>" . Tekstit::$otsikko_selitys . "</div>"; /* Muotoillaan selitys: */ $selitys_muokattu = muotoile_merkit($kokonaisuus->getSelitys()); // Pikkukaavat ensin, jotta kursiivin poisto onnistuu ennen // sulkujen käsittelyä. $selitys_muokattu = Kaavaeditori::muotoile_pikkukaavat($selitys_muokattu); // Sitten normaalikaavat: $selitys_muokattu = Kaavaeditori::muotoile_kaavat($selitys_muokattu); $selitys = $selitysotsikko . $kuvahtml_selitys . $selitys_muokattu; } /* Muotoillaan tiivistelmän merkit ja kaavat: */ $tiivistelma = muotoile_merkit($kokonaisuus->getTiivis()); $tiivistelma = Kaavaeditori::muotoile_pikkukaavat($tiivistelma); $tiivistelma = Kaavaeditori::muotoile_kaavat($tiivistelma); $tiivistelma = $kuvahtml_tiivis . $tiivistelma . "<br />"; /* Ja sitten vain palaset pakettiin: HUOM! Täällä katsotaan, ettei * piilotetun sisältö näy. */ $piilotushuomautus = "<div class='piilotushuomautus'>" . Tekstit::$ilm_kokon_piilotettu_paitsi_ots . "</div>"; $yksityisilmoitus = "<div class='yksityisilmoitus'>" . Tekstit::$ilm_kokon_yksityinen . "</div>"; $vainkoosteilmoitus = "<div class='koosteilmoitus'>" . Tekstit::$ilm_kokon_vain_kooste . "</div>"; /** * Tänne mennään, kun kokonaisuus näytetään, * oli se sitten piilossa tahi ei. */ if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN || $kokonaisuus->getHenkiloId() == $omaid || $kayttajan_valtuudet + 0 === Valtuudet::$HALLINTA) { $normaali_kokonaisuus = Html::div(array(Attr::classs("kokon_ylanapit")), $painikkeet_ylla) . $otsikko; // Jos kokonaisuus on muilta piilossa, lisätään viesti: if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) { $normaali_kokonaisuus .= $piilotushuomautus . $tiivistelma; } else { if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) { $normaali_kokonaisuus .= $yksityisilmoitus . $tiivistelma; } else { if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) { $normaali_kokonaisuus .= $vainkoosteilmoitus . $tiivistelma; } else { $normaali_kokonaisuus .= $tiivistelma; } } } $normaali_kokonaisuus .= Html::div(array(Attr::classs("kokon_alanapit")), $painikkeet_alla); /* Lisätään vielä div selitystä varten: */ if ($selitys_auki) { $normaali_kokonaisuus .= "<div class='selitys' id='selitys" . $kokonaisuus->get_id() . "'>" . $selitys . "</div>"; } $normaali_kokonaisuus .= "</div>"; /* Kokonaisuus loppuu. */ $palaute = $normaali_kokonaisuus; } else { if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) { $class_arvo = "kokonaisuus"; $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">"; $palaute = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $nayta_koodi_nappi . $nakyvyysmuutosnappi . $nayta_seur_nappi . $otsikko; $palaute .= $piilotushuomautus; $palaute .= "</div>"; /* Kokonaisuus loppuu. */ } else { // Kun jonkun toisen yksityinen / vain koosteessa, eikä hallintavaltuuksia: $palaute = ""; } } return $palaute; }
// Muutama kysely liittyen vain ajaxiin (vois sijoittaa kyllä parametriolioon): $aukaisu = isset($_REQUEST['aukaisu']) ? $_REQUEST['aukaisu'] : 0; $id_raaka = isset($_REQUEST['id_raaka']) ? $_REQUEST['id_raaka'] : Malliluokkapohja::$MUUTTUJAA_EI_MAARITELTY; $id_nappi = isset($_REQUEST['id_nappi']) ? $_REQUEST['id_nappi'] : -1; // Kohde liittyy siihen, missä otsikot näytetään (kokonaisuusnäkymä vai // koostelomake lähinnä). $kohde = isset($_REQUEST['kohde']) ? $_REQUEST['kohde'] : 'kokonaisuudet'; //-------------------- // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); // Tee parametriolio ja palauteolio! $parametriolio = new Parametrit($tietokantaolio); $palauteolio = new Palaute(); $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio); $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio); $koostekontrolleri = new Koostekontrolleri($tietokantaolio, $parametriolio); $kokonaisuusnakymat = new Kokonaisuusnakymat(); $tehtavanakymat = new Tehtavanakymat(); $ratkaisunakymat = new Ratkaisunakymat(); $koostenakymat = new Koostenakymat(); $omaid = $parametriolio->get_omaid(); $id_kokon = $parametriolio->id_kokon; /** * Hakee koostelomakkeeseen valittavat elementit ja palauttaa tiedot xml-muodossa. */ function hae_elementit($parametriolio, $koostekontrolleri, $tietokantaolio, $koodaus) { $xml = ""; $kooste_kieli = $parametriolio->koostelomake_valittavat_kieli;
/** * * @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); } } } } } } }
/** * Edellisen yleistetty ja hiukan muokattu versio. * Palauttaa Palaute-olion, jonka sisältönä on ne oliot (kokonaisuudet/ * tehtävät/ratkaisut/tms), johon parametri 'naytettava' viittaa (Oliotyyppi- * luokan arvoja). * * @param Parametrit $parametriolio * @return Palaute $palauteolio */ function toteuta_nayta_oliot2($parametriolio) { $kohde = $parametriolio->naytettava; $id_kokon = $parametriolio->id_kokon; $oppiaine_kokon = $parametriolio->oppiaine_kokon; $taso_kokon = $parametriolio->taso_kokon; $id_teht = $parametriolio->id_teht; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $kieli_id = $parametriolio->kieli_id; $omaid = $parametriolio->get_omaid(); $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio); $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio); $palauteolio = new Palaute(); $nayta_valikot = false; $selitys_auki = Kokonaisuusolio::$SELITYS_KIINNI_ID; /* Palautetaan kohteen mukainen näkymä: */ if ($kohde == Oliotyyppi::$KOKONAISUUS) { // Selityksen näyttämisen voisi jotenkin mahdollistaa tarvittaessa. $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); $nayta_valikot = true; $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS); } else { if ($kohde == Oliotyyppi::$TEHTAVA) { $tehtavakontrolleri->toteuta_nayta_tehtavat($palauteolio); $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA); } else { if ($kohde == Oliotyyppi::$RATKAISU) { $ratkaisukontrolleri->toteuta_nayta($palauteolio); $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU); } else { $kokonaisuuskontrolleri->toteuta_nayta($palauteolio); $nayta_valikot = true; $palauteolio->set_naytettava_oliotyyppi(Palaute::$NAYTETTAVA_OLIOTYYPPI_KOKONAISUUS); $palauteolio->set_ilmoitus("Tuntematon kohde (parametriolio->naytettava)!"); } } } $palauteolio->set_valikkonaytto($nayta_valikot); return $palauteolio; }