/** * * @param Palaute $palauteolio */ public function toteuta_tallenna_muokkaus(&$palauteolio) { $jluku = 0; // ekan elementin järjestysluku. $param = $this->get_parametriolio(); $tietokantaolio = $this->get_tietokantaolio(); $id = $param->kooste_id; $muokattava = new Kooste($id, $this->get_tietokantaolio()); // Sijoitetaan saadut arvot oliolle: $muokattava->set_arvo($param->get_omaid(), Kooste::$sarakenimi_henkilo_id); $muokattava->set_arvo($param->oppiaine_kokon, Kooste::$sarakenimi_oppiaine); $muokattava->set_arvo($param->taso_kokon, Kooste::$sarakenimi_taso); $muokattava->set_arvo($param->kooste_nakyvyys, Kooste::$sarakenimi_nakyvyys); $muokattava->set_arvo($param->kooste_nimi, Kooste::$sarakenimi_nimi); $muokattava->set_arvo($param->kooste_otsikko, Kooste::$sarakenimi_otsikko); $muokattava->set_arvo($param->kooste_selitys, Kooste::$sarakenimi_selitys); $muokattava->set_arvo($param->kooste_tyyppi, Kooste::$sarakenimi_tyyppi); // Organisaatiotunnus jätetään tyhjäksi, ellei määritelty (ei pakollinen): if ($param->kooste_org === Kooste::$MUUTTUJAA_EI_MAARITELTY) { $param->kooste_org = ""; } $muokattava->set_arvo($param->kooste_org, Kooste::$sarakenimi_organisaatio); $tallennus = $muokattava->tallenna_muutokset(); $this->set_olio($muokattava); // Jos tallennus ok tai sitten koosteen perustietoja ei muutettu, käydään // läpi mahdolliset muutokset elementeissä. if ($tallennus === Kooste::$OPERAATIO_ONNISTUI || $muokattava->tulosta_viimeisin_virheilmoitus() === Perustustekstit::$ilm_tiedoissa_ei_muutoksia) { // Tallennetaan sitten elementit, jotka valittu tähän koosteeseen ja // jotka eivät ennestään kuulu koosteeseen. Toisaalta pitää myös // poistaa ne elementit, joiden valinta on poistettu, ja jotka aiemmin // ovat kuuluneet koosteeseen. $entiset_elem = $muokattava->hae_elementit(); $elem_valinnat = $param->kooste_elementtivalinnat; // Pitää muistaa, että tehtävillä valinta-arvo on "teht_X", missä // X viittaa id-arvoon. Kokonaisuuksilla pelkkä id. Ratkaisuilla // arvo on vastaavasti "ratk_X", vaikka ratkaisuja ei vielä tallennetakaan. $virheilm = ""; $laskuri = 0; $muokkauslaskuri = 0; // Laskee vanhojen elem järjestyslukumuokkaukset. foreach ($elem_valinnat as $id) { $jluku++; $tallennus_elem = $muokattava->aseta_jluku_ja_tallenna_elementti_jos_uusi($id, true, $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; } } } } // Poistetaan elementit, joiden valinta poistettu: $poistettujen_lkm = $muokattava->poista_elementit_joiden_valinta_poistettu($elem_valinnat); // Tarkistus: vanhat - poistetut + tallennetut =? valinnat // ja toisaalta uudet+muokatut=?valitut if (sizeof($entiset_elem) + $laskuri - $poistettujen_lkm + 0 === sizeof($elem_valinnat) && $laskuri + $muokkauslaskuri === sizeof($elem_valinnat)) { $this->toteuta_nayta($palauteolio); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK); $palauteolio->set_ilmoitus(Tekstit::$kooste_ilm_muokkaustallennus_ok . ": " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . " ja " . $poistettujen_lkm . " " . Tekstit::$kooste_ilm_elem_poistettu . "<br/> " . Tekstit::$kooste_ilm_Elementteja_yhteensa . sizeof($elem_valinnat)); } else { $this->toteuta_nayta_koostelomake($palauteolio); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_TALLENNUS); $virheilm .= " " . $laskuri . " " . Tekstit::$kooste_ilm_elem_tallennettu . " " . Tekstit::$ja . " " . $poistettujen_lkm . " " . Tekstit::$kooste_ilm_elem_poistettu . " " . "<br/> " . Tekstit::$kooste_ilm_Valintoja_yhteensa . sizeof($elem_valinnat) . "<br/> " . $muokkauslaskuri . " " . Tekstit::$kooste_ilm_elem_jlukua_muokattu . $muokattava->tulosta_virheilmoitukset(); $palauteolio->set_ilmoitus(Tekstit::$kooste_virheilm_elementtien_tallennus . $virheilm); } } else { // Koosteen tallennus ei onnistunut $this->toteuta_nayta_koostelomake($palauteolio); $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_TALLENNUS); $palauteolio->set_ilmoitus(Tekstit::$kooste_virheilm_tallennus . $muokattava->tulosta_virheilmoitukset()); } }