/** * Palauttaa ratkaisun muokkauspainikkeen html-koodin. Täällä ei * tarkistella käyttöoikeuksia, vaan se tehdään kutsuvassa osassa. * * Elementti-luokan olio annetaan toisena parametrina, jos muokkaukseen mennään * koosteesta. Tällöin annetaan mahdollisuus palata koosteeseen takaisin * muokkauksen jälkeen. * * Jos kyse on normaalista painikkeesta ratkaisussa, annetaan * toiseksi parametriksi arvo Elementti::$MUUTTUJAA_EI_MAARITELTY. * * @param Ratkaisu $ratkaisu * @param Elementti $elementti Huomaa: kysymyksessa elementti, joka * sisältää sen tehtävän, jonka ratkaisu tämä on. Ratkaisuja ei käsitellä * erillisinä elementteinä ainakaan nyt (2/2016). * @return string */ public function luo_muokkauspainike($ratkaisu, $elementti) { // Muokkaus koosteesta käsin: $koostetiedot = ""; if ($elementti instanceof Elementti) { $koostetiedot = "&" . Koostekontrolleri::$kooste_name_id . "=" . $elementti->get_arvo(Elementti::$sarakenimi_kooste_id) . "&" . Koostekontrolleri::$elementti_name_id . "=" . $elementti->get_arvo(Elementti::$SARAKENIMI_ID); } $class = "rinnakkain"; $id = ""; $action = "index.php?id_teht=" . $ratkaisu->getTeht_id() . "&id_ratk=" . $ratkaisu->getId() . $koostetiedot; $name = Toimintonimet::$tehtavatoiminto; $value = Painikkeet::$ratkaisu_muokkaa_value; $muokkausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value); return $muokkausnappi; }
/** * 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; }
/** * Toteuttaa tehtävän poiston. HUOM! Tehtävään liittyvät ratkaisut poistetaan * automaattisesti tietokantatasolla samoin kuin kuvalinkit tehtävään ja * ratkaisuihin. * * HUOM! Täällä ei oikeuksia enää tarkasteta. Voisi olla ihan hyvä ajatus * tarkistaa poisto-oikeus täälläkin vielä. En tiedä, mutta saattaa olla * mahdollista jossakin tilanteissa, että tähän metodiin pääsisi käsiksi väärä * henkilö(?). * * @param Palaute $palauteolio */ function toteuta_poista(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $omaid = $parametriolio->get_omaid(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $palaute = ""; /* Ilmoitus. */ $palautesisalto = ""; $poistettava = new Tehtava($id_teht, $tietokantaolio); if ($poistettava->olio_loytyi_tietokannasta) { $palaute = $poistettava->poista(); if ($palaute === Tehtava::$OPERAATIO_ONNISTUI) { // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit: if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$TEHTAVA, $id_teht) === Malliluokkapohja::$OPERAATIO_ONNISTUI) { $palaute = Tekstit::$tehtava_ilm_poisto_ok; } else { $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok; $this->lisaa_virheilmoitus($palaute); } } else { $palaute = Tekstit::$tehtava_virheilm_poisto_eiok; $this->lisaa_virheilmoitus($palaute); } } else { $palaute = Tekstit::$tehtava_virheilm_poistettavaa_ei_loytynyt; $this->lisaa_virheilmoitus($palaute); } $this->toteuta_nayta_tehtavat($palauteolio); $palauteolio->set_ilmoitus($palaute); $palauteolio->set_valikkonaytto(false); }
/** * Hakee sen olion tietokannasta, johon parametrina annettu arvo (raaka-id) * viittaa ja palauttaa sen oikeantyyppisen luokan oliona * (Kokonaisuus, Tehtava, Ratkaisu,...). * * Palauttaa yllä mainitun tyyppisen olion, jonka tietojen löytymisen * tietokannasta tarkistetaan muuttujan "olio_loytyi_tietokannasta"-muuttujan * avulla. Ellei parametri ole hyvä, palautetaan arvo * $MUUTTUJAA_EI_MAARITELTY. * * * @param type $id_raaka * @param type * @param Tietokantaolio $tietokantaolio * @return \Ratkaisu */ public static function hae_viittausolio_id_raaka($id_raaka, $tietokantaolio) { $olio_id = Elementti::irrota_elem_olion_id($id_raaka); $oliotyyppi = Elementti::irrota_elem_olion_tyyppi($id_raaka); if ($oliotyyppi === Oliotyyppi::$KOKONAISUUS) { $taulunimi = Kokonaisuusolio::$taulunimi; $sarakenimi = Kokonaisuusolio::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Kokonaisuusolio($id, $tietokantaolio); } else { if ($oliotyyppi === Oliotyyppi::$TEHTAVA) { $taulunimi = Tehtava::$taulunimi; $sarakenimi = Tehtava::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Tehtava::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Tehtava($id, $tietokantaolio); } else { if ($oliotyyppi === Oliotyyppi::$RATKAISU) { $taulunimi = Ratkaisu::$taulunimi; $sarakenimi = Ratkaisu::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Ratkaisu::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Ratkaisu($id, $tietokantaolio); } else { $palautettava = Elementti::$MUUTTUJAA_EI_MAARITELTY; } } } return $palautettava; }
/** * Toteuttaa kokonaisuuden poistotoiminnon ellei kokonaisuudella ole lapsia. * Jos on, käsketään poistamaan ensin lapset. Jos kokonaisuus poistetaan, * tarkistetaan sen mahdollisen yläkokonaisuuden lapsekkuus. * * HUOM! On_lapsia kenttä tietokannassa aiheutti tästä aika monimutkaisen. * Ajattelin sen kuitenkin kannattavan, koska se vähentää suuresti * tietokantahakuja usein toistuvissa hauissa. * * Yllä mainitusta syystä on olennaisen tärkeää käyttää tätä metodia * kokonaisuuden poistamiseen. * * @return Palaute $palauteolio */ function toteuta_poista(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $onnistuminen = Palaute::$VIRHEKOODI_YLEINEN; $id_kokon = $parametriolio->get_id_kokon(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $palauteolio = new Palaute(); $palaute = ""; // Tämä tulee palauteolion sisällöksi. $poistettava = new Kokonaisuusolio($id_kokon, $tietokantaolio); //================== Edellisen kokonaisuuden id_n haku ================= // Kun kokonaisuus poistetaan, pitää sitä edeltävän kokonaisuuden id // hakea, jotta se näätetään ensi kerralla. Ellei edellistä ole, // näytetään seuraava. $ed_id = Kokonaisuusolio::$kokon_ei_maaritelty; $oppiaineindeksi = $parametriolio->oppiaine_kokon; $taso = $parametriolio->taso_kokon; $kieli_id = $parametriolio->kieli_id; $omaid = $parametriolio->get_omaid(); $ylakokonaisuuden_id = -1; // 1. tason kokonaisuudet - ei yläkokonaisuutta. $otsikkomerkinta_alussa = ""; $otsikkotaso_alussa = Kokonaisuusolio::$otsikkotaso_oletus; $kokonaisuustaulukko = array(); // Seuraava on aina taulukko (array), joka voi olla tyhjä: $kokonaisuusoliot = $this->hae_kokonaisuusoliopuu($kokonaisuustaulukko, $otsikkomerkinta_alussa, $otsikkotaso_alussa, $kieli_id, $oppiaineindeksi, $taso, $ylakokonaisuuden_id, $tietokantaolio, $omaid); // ASetetaan edellisten ja seuraavien kokonaisuuksien id:t: $this->aseta_ed_ja_seur_idt_kokonaisuuksiin($kokonaisuusoliot); if (!empty($kokonaisuusoliot)) { foreach ($kokonaisuusoliot as $kokonolio) { if ($kokonolio instanceof Kokonaisuusolio && $kokonolio->get_id() == $id_kokon) { $ed_id = $kokonolio->getEdellisenId_kaikista(); if ($ed_id == Kokonaisuusolio::$kokon_edellista_ei_ole) { $ed_id = $kokonolio->getSeuraavanId_kaikista(); } } } } //========================================================================= if ($poistettava->olio_loytyi_tietokannasta) { // Poistometodi tarkastaa, onko lapsia ja huolehtii on_lapsia-arvoista. $palaute = $poistettava->poista(); if ($palaute === Malliluokkapohja::$OPERAATIO_ONNISTUI) { // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit: if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$KOKONAISUUS, $id_kokon) === Malliluokkapohja::$OPERAATIO_ONNISTUI) { $palaute = Tekstit::$ilm_kokon_poisto_ok; //Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$KOKONAISUUDEN_POISTO); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } } else { $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok; } } else { $palaute = Tekstit::$virheilm_kokonaisuuden_poisto; } } else { $palaute = Tekstit::$ilm_kokon_poisto_eiok_kokonaisuutta_ei_loytynyt; } $parametriolio->set_id_kokon($ed_id); // Jotta osaa näyttää edellisen. $this->toteuta_nayta($palauteolio); $palauteolio->set_ilmoitus($palaute); $palauteolio->set_virhekoodi($onnistuminen); $palauteolio->set_valikkonaytto(true); $palauteolio->nayta_kiintolinkit(); return $palauteolio; }
/** * @param string $id_raaka Id value of the element (like teht_43) * @param Parametrit $parametriolio * @param Tehtavanakymat $tehtavanakymat * @param Kokonaisuusnakymat $kokonnakymat */ function show_element_preview($id_raaka, $parametriolio, $tehtavanakymat, $kokonnakymat) { $tietokantaolio = $parametriolio->get_tietokantaolio(); $omaid = $parametriolio->get_omaid(); // Let's find out the type of element: $type = Elementti::irrota_elem_olion_tyyppi($id_raaka); // Let's find out the id of the original object: $id = Elementti::irrota_elem_olion_id($id_raaka); if ($type === Oliotyyppi::$TEHTAVA) { // Luodaan uusi Tehtäväolio tietojen perusteella: $teht = new Tehtava($id, $tietokantaolio); $html = $tehtavanakymat->tulosta_esikatselu($omaid, $teht); } else { if ($type === Oliotyyppi::$KOKONAISUUS) { $kokon = new Kokonaisuusolio($id, $tietokantaolio); $html = $kokonnakymat->tulosta_esikatselu($kokon, $parametriolio); } else { $html = "Unknown type=" . $type . " and id=" . $id; } } //echo $output = str_replace(array("\r\n", "\r", "\n"), "", $html); return $html; }
/** * Luo kooste-elementiin painikkeet, joista elementtiä voi siirtää * ylös- tai alaspäin koosteessa. Elementtien määrästä ja paikasta riippuen * luodaan 0-2 painiketta. Palauttaa merkkijonon, joka sisältää mahdollisten * painikkeiden html-koodin. * @param Elementti $elementti * @param Kooste $kooste * @return type */ function luo_elem_jarj_muutospainikkeet($elementti, $kooste) { $painike_alas = ""; $painike_ylos = ""; // Luodaan painikkeet järjestyksen vaihtoa varten vain, // jos järkevää eli vaihdettavat olemassa: if ($elementti->get_seur_id() != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $form_maaritteet = array(Attr::action(Attr::muotoile_action_arvo("index.php", array(Koostekontrolleri::$kooste_name_id, Koostekontrolleri::$elementti_name_id, Koostekontrolleri::$kooste_name_seur_elem_id, Oliotyyppi::$naytettava_name), array($kooste->get_id(), $elementti->get_id(), $elementti->get_seur_id(), Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE))), Attr::classs("summary")); $input_maaritteet_alas = array(Attr::name(Toimintonimet::$koostetoiminto), Attr::value(Painikkeet::$kooste_elem_siirra_alas_value), Attr::title(Painikkeet::$kooste_elem_siirra_alas_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary)); $painike_alas = Html::luo_forminput_painike($form_maaritteet, $input_maaritteet_alas); } if ($elementti->get_ed_id() != Elementti::$MUUTTUJAA_EI_MAARITELTY) { $form_maaritteet = array(Attr::action(Attr::muotoile_action_arvo("index.php", array(Koostekontrolleri::$kooste_name_id, Koostekontrolleri::$elementti_name_id, Koostekontrolleri::$kooste_name_ed_elem_id, Oliotyyppi::$naytettava_name), array($kooste->get_id(), $elementti->get_id(), $elementti->get_ed_id(), Palaute::$NAYTETTAVA_OLIOTYYPPI_KOOSTE))), Attr::classs("summary")); $input_maaritteet_ylos = array(Attr::name(Toimintonimet::$koostetoiminto), Attr::value(Painikkeet::$kooste_elem_siirra_ylos_value), Attr::title(Painikkeet::$kooste_elem_siirra_ylos_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary)); $painike_ylos = Html::luo_forminput_painike($form_maaritteet, $input_maaritteet_ylos); } return $painike_alas . $painike_ylos; }
/** * Asettaa elementin elem_id-parametrin osoittaman elementin jälkeen. * * Palauttaa arvon Kooste::$OPERAATIO_ONNISTUI tai virheilmoituksen. * * @param type $uusi_viittausolio Kokonaisuus tai Tehtävä * @param Elementti $rajaelem */ public function lisaa_elem_jalkeen($uusi_viittausolio, $rajaelem) { $parametriolio = $this->get_parametriolio(); $palaute = Kooste::$VIRHE; // Haetaan ensin kooste, johon uusi elementti sijoitetaan: $kooste = new Kooste($rajaelem->get_arvo(Elementti::$sarakenimi_kooste_id), $this->get_tietokantaolio()); // Kun kysymys muokkaamisesta, haetaan koosteeseen kuuluvat elementit: $elementtitunnisteet = array(); if ($kooste instanceof Kooste && $kooste->olio_loytyi_tietokannasta) { $vanhat_elementit = $kooste->hae_elementit(); // Haetaan koosteen vanhojen elementtien tiedot myös, jotta // voidaan käyttää jo olemassaolevia toimintoja. Samalla // sujautetaan uusi mukaan oikeaan paikkaan eli rajaelementin taakse: foreach ($vanhat_elementit as $elementti) { if ($elementti instanceof Elementti) { $viittausolio = $elementti->hae_viittausolio(); $tunniste = $this->luo_valittulistan_valintaruudun_value($viittausolio); array_push($elementtitunnisteet, $tunniste); // Jos elementti on rajaelem, lisätään uusi tänne: if ($elementti->get_id() + 0 === $rajaelem->get_id() + 0) { $tunniste = $this->luo_valittulistan_valintaruudun_value($uusi_viittausolio); array_push($elementtitunnisteet, $tunniste); } } } // Asetetaan parametriolioon uusi lista tunnisteista ja tallennetaan. $parametriolio->kooste_elementtivalinnat = $elementtitunnisteet; $parametriolio->kooste_id = $kooste->get_id(); $entiset_elem = $vanhat_elementit; $elem_valinnat = $elementtitunnisteet; $virheilm = ""; $jluku = 0; $laskuri = 0; $muokkauslaskuri = 0; // Laskee vanhojen elem järjestyslukumuokkaukset. foreach ($elem_valinnat as $id) { $jluku++; $tarkista = true; $tallennus_elem = $kooste->aseta_jluku_ja_tallenna_elementti_jos_uusi($id, $tarkista, $jluku); if ($tallennus_elem === Elementti::$OPERAATIO_ONNISTUI) { $laskuri++; } else { if ($tallennus_elem === Tekstit::$kooste_ilm_elem_jo_koosteessa) { $muokkauslaskuri++; } else { if ($tallennus_elem != Tekstit::$kooste_ilm_elem_jo_koosteessa) { $virheilm .= "<br/>" . $tallennus_elem; } } } } // Tarkistus: vanhat + tallennetut =? valinnat // ja toisaalta uudet+muokatut=?valitut if (sizeof($entiset_elem) + $laskuri === sizeof($elem_valinnat) && $laskuri + $muokkauslaskuri === sizeof($elem_valinnat)) { $this->lisaa_kommentti(Tekstit::$kooste_ilm_muokkaustallennus_ok . ": " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . "<br/> " . Tekstit::$kooste_ilm_Elementteja_yhteensa . sizeof($elem_valinnat)); $palaute = Kooste::$OPERAATIO_ONNISTUI; } else { $this->lisaa_virheilmoitus($virheilm .= " " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . "<br/> " . Tekstit::$kooste_ilm_Valintoja_yhteensa . sizeof($elem_valinnat) . "<br/> " . $muokkauslaskuri . " " . Tekstit::$kooste_ilm_elem_jlukua_muokattu . $kooste->tulosta_virheilmoitukset()); $palaute = $this->tulosta_virheilmoitukset(); } } return $palaute; }
/** * Etsii tietokannasta ja palauttaa olion näkyvyysarvon. Oletuspalautusarvo * on Nakyvyys::$YKSITYINEN. Muita arvoja tutkitaan vain, jos kyseinen * olio löytyy tietokannasta. * @param type $kohdeolio_id * @param type $kohdeoliotyyppi * @param type $tietokantaolio */ public static function hae_nakyvyys($kohdeolio_id, $kohdeoliotyyppi, $tietokantaolio) { $nakyvyys = Nakyvyys::$YKSITYINEN; if ($kohdeoliotyyppi + 0 === Oliotyyppi::$KOKONAISUUS) { $kohde = new Kokonaisuusolio($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$TEHTAVA) { $kohde = new Tehtava($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$RATKAISU) { $kohde = new Ratkaisu($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->getNakyvyys(); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$KOOSTE) { $kohde = new Kooste($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->get_arvo(Kooste::$sarakenimi_nakyvyys); } } else { if ($kohdeoliotyyppi + 0 === Oliotyyppi::$ELEMENTTI) { $kohde = new Elementti($kohdeolio_id, $tietokantaolio); if ($kohde->olio_loytyi_tietokannasta) { $nakyvyys = $kohde->get_arvo(Elementti::$sarakenimi_nakyvyys); } } else { } } } } } return $nakyvyys; }
/** * Tallentaa parametrina annetun olio_id:n mukaisen elementin koosteelle, * ellei tällä ole samaa elementtiä (sama olio_id ja olio_tyyppi). * Jos elementti on jo olemassa, * ei tee muuta kuin palauttaa ilmoituksen (string). * * Tarkistus elementin olemassaolosta tehdään vain, jos toinen parametri * on arvoltaan true. Jos kooste on uusi, ei tarkistusta luonnollisesti * kannata tehdä. * * Asettaa onnistuessaan elementille kaikki olennaiset tiedot, kuten * kooste_id:n, järjestysluvun ja näkyvyyden ("koosteissa"). * * Järjestysluvut tallennetaan uusiksi jokaisella tallennuksella, jotta * väliin lisätyt pysyvät oikealla paikallaan. * * @param type $olio_id_raaka * @param type $tarkista * @param type $jluku järjestysluku, joka asetetaan elementille. */ function aseta_jluku_ja_tallenna_elementti_jos_uusi($olio_id_raaka, $tarkista, $jluku) { $palaute = ""; $mahd_id = Kooste::$MUUTTUJAA_EI_MAARITELTY; $uusi_elem = new Elementti($mahd_id, $this->tietokantaolio); $uusi_elem->set_arvo($this->get_id(), Elementti::$sarakenimi_kooste_id); // Elementin näkyvyys asetetaan tässä "julkinen". Näkyvyyden merkitystä // ei vielä päätetty, eikä sillä vielä ole merkitystä. Viittausolioilla // on kuitenkin oma näkyvyytensä, joka ehkä riittää käytännön tarpeisiin. // Lähinnä, jos haluaisi piilottaa koosteesta elementin, joka kuitenkin // näkyy muualla.. $uusi_elem->set_arvo(Perusnakyvyys::$JULKINEN, Elementti::$sarakenimi_nakyvyys); // Pisteiksi asetetaan nolla: $uusi_elem->set_arvo(0, Elementti::$sarakenimi_pisteet); // Id pitää parsia ensin esille, jos kyseessä tehtävä: // Testattu: php_yleinen/testaus_yleinen/sekalaisia_testeja.php if (is_numeric($olio_id_raaka)) { $uusi_elem->set_arvo($olio_id_raaka, Elementti::$sarakenimi_olio_id); $uusi_elem->set_arvo(Oliotyyppi::$KOKONAISUUS, Elementti::$sarakenimi_oliotyyppi); } else { if (is_numeric(str_replace("teht_", "", $olio_id_raaka))) { // Kysymys tehtävästä $lukuarvo = (int) str_replace("teht_", "", $olio_id_raaka); $uusi_elem->set_arvo($lukuarvo, Elementti::$sarakenimi_olio_id); $uusi_elem->set_arvo(Oliotyyppi::$TEHTAVA, Elementti::$sarakenimi_oliotyyppi); } else { // Kysymys ratkaisusta $lukuarvo = (int) str_replace("ratk_", "", $olio_id_raaka); $uusi_elem->set_arvo($lukuarvo, Elementti::$sarakenimi_olio_id); $uusi_elem->set_arvo(Oliotyyppi::$RATKAISU, Elementti::$sarakenimi_oliotyyppi); } } // Järjestysluvuissa riittää, että saman koosteen elementeillä ei ole // samoja. Samakin kokonaisuus puetaan muissa koosteissa uuteen // elementtiin, joten eri koosteiden elementit eivät häiritse toisiaan. $uusi_jarjluku = $jluku; $uusi_elem->set_arvo($uusi_jarjluku, Elementti::$sarakenimi_jarjestysluku); // Tarkistus tehdään vain muokattavaan koosteeseen. Uudessa tallennetaan // kaikki. if ($tarkista) { $hakulause = "SELECT id FROM " . Elementti::$taulunimi . " WHERE " . Elementti::$sarakenimi_kooste_id . "=" . $this->get_id() . " AND " . Elementti::$sarakenimi_olio_id . "=" . $uusi_elem->get_arvo(Elementti::$sarakenimi_olio_id) . " AND " . Elementti::$sarakenimi_oliotyyppi . "=" . $uusi_elem->get_arvo(Elementti::$sarakenimi_oliotyyppi); $osumat = $this->tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); // Elementti ei vielä koosteessa: if (empty($osumat)) { $palaute = $uusi_elem->tallenna_uusi(); if ($palaute != Kooste::$OPERAATIO_ONNISTUI) { $palaute = Tekstit::$kooste_virheilm_elementtien_tallennus . " " . $uusi_elem->tulosta_virheilmoitukset(); } } else { $elem_id = $osumat[0]->id; // Haetaan vanha elementti: $elem = new Elementti($elem_id, $this->tietokantaolio); $elem->set_arvo($jluku, Elementti::$sarakenimi_jarjestysluku); $pal = $elem->tallenna_muutokset(); if ($pal === Elementti::$OPERAATIO_ONNISTUI) { $palaute = Tekstit::$kooste_ilm_elem_jo_koosteessa; } else { if ($elem->tulosta_viimeisin_virheilmoitus() === Perustustekstit::$ilm_tiedoissa_ei_muutoksia) { // Kaikki ok, koska usein muutosta ei tarvita. $palaute = Tekstit::$kooste_ilm_elem_jo_koosteessa; } else { $palaute = Tekstit::$kooste_virheilm_elementtien_tallennus . "<br/>" . $elem->tulosta_virheilmoitukset(); } } } } else { $palaute = $uusi_elem->tallenna_uusi(); if ($palaute != Kooste::$OPERAATIO_ONNISTUI) { $palaute = Tekstit::$kooste_virheilm_elementtien_tallennus . " " . $uusi_elem->tulosta_virheilmoitukset(); } } return $palaute; }
/** * Toteuttaa ratkaisun poiston. Linkit kuviin poistetaan automaattisesti * tietokantatasolla. * @param Palaute $palauteolio */ function toteuta_poista(&$palauteolio) { $parametriolio = $this->get_parametriolio(); $id_kokon = $parametriolio->id_kokon; $id_teht = $parametriolio->id_teht; $id_ratk = $parametriolio->id_ratk; $omaid = $parametriolio->get_omaid(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $onnistuminen = Palaute::$VIRHEKOODI_POISTO; $palaute = ""; /* Ilmoitus. */ $palautesisalto = ""; $palauteolio = new Palaute(); $poistettava = new Ratkaisu($id_ratk, $tietokantaolio); if ($poistettava->olio_loytyi_tietokannasta) { $palaute = $poistettava->poista(); if ($palaute === Ratkaisu::$OPERAATIO_ONNISTUI) { // Poistetaan mahdolliset tyhjään osoittavat kooste-elementit: if (Elementti::poista_elementit($tietokantaolio, Oliotyyppi::$RATKAISU, $id_ratk) === Malliluokkapohja::$OPERAATIO_ONNISTUI) { // Aktiivisuusmerkintä: $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $tietokantaolio, time(), Aktiivisuus::$RATKAISUN_POISTO); if (!$aktiivisuuspalaute) { $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok); } else { // Onnistuminen: $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK; } $palaute = Tekstit::$ratkaisu_ilm_poisto_ok; } else { $palaute = Tekstit::$kooste_virheilm_elementtien_poistosiivous_ei_ok; } } else { $palaute = Tekstit::$ratkaisu_virheilm_poisto_eiok; } } else { $palaute = Tekstit::$ratkaisu_virheilm_poistettavaa_ei_loytynyt; } $this->toteuta_nayta($palauteolio); $palauteolio->set_ilmoitus($palaute); $palauteolio->set_virhekoodi($onnistuminen); $palauteolio->set_valikkonaytto(false); }
/** * Palauttaa parametrina annetun tehtävän tulostukseen optimoidun * html-koodin. * * @param Elementti $elementti * @param Tehtava $tehtava * @param int $omaid Käyttäjän id * @param array $painikkeet * @return string */ function luo_koostenakyma_tulostus($elementti, $tehtava, $painikkeet) { $palaute = ""; if (!$tehtava instanceof Tehtava && $elementti instanceof Elementti) { $palaute = "Jokin parametri metodissa 'luo_koostenakyma' ei ole ok!"; } else { /* Muotoillaan tehtävän merkit ja kaavat: */ $tehtavateksti = muotoile_merkit($tehtava->getTehtavananto()); $tehtavateksti = Kaavaeditori::muotoile_pikkukaavat($tehtavateksti); $tehtavateksti = Kaavaeditori::muotoile_kaavat($tehtavateksti); /* Muotoillaan otsikon merkit ja kaavat: */ $otsikko = muotoile_merkit($tehtava->getOtsikko()); $otsikko = Kaavaeditori::muotoile_pikkukaavat($otsikko); $otsikko = Kaavaeditori::muotoile_kaavat($otsikko); $kuvat = $tehtava->hae_kuvat_koostenakymaan(); $sisalto = $kuvat . $tehtavateksti; $otsikko = "<div class = 'elementti_teht' " . "id='elem" . $elementti->get_id() . "'>" . "<h3>" . $tehtava->getOtsikkomerkinta() . ": " . $otsikko . "</h3>"; $palaute .= $otsikko; $palaute .= $sisalto; // Tehtävä ja kuvat if (is_array($painikkeet)) { foreach ($painikkeet as $painike) { $palaute .= $painike . " "; } } $palaute .= "</div>"; } return $palaute; }