Exemplo n.º 1
0
 /**
  * Toteuttaa koosteen kahden peräkkäisen elementin järjestyksen vaihdon.
  * Kyseisten elementtien jarjestysluku-muuttujien arvot vaihdetaan keskenään.
  * Näyttää lopuksi koosteen normaalinäkymän.
  * 
  * @param Palaute $palauteolio
  */
 public function toteuta_vaihda_elem_jarjestus(&$palauteolio)
 {
     $ilm = "";
     // Haetaan kyseiset vaihdettavat elementit:
     $nyk_id = $this->get_parametriolio()->elementti_id;
     $alemman_id = $this->get_parametriolio()->kooste_seur_elem_id;
     $ylemman_id = $this->get_parametriolio()->kooste_ed_elem_id;
     $nyk_elem = new Elementti($nyk_id, $this->get_tietokantaolio());
     // Nykyinen vaihdetaan joko ylä- tai alapuolella olevan kanssa:
     if ($alemman_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
         $elem_toka = new Elementti($alemman_id, $this->get_tietokantaolio());
     } else {
         $elem_toka = new Elementti($ylemman_id, $this->get_tietokantaolio());
     }
     if ($nyk_elem->olio_loytyi_tietokannasta && $elem_toka->olio_loytyi_tietokannasta) {
         $nyk_jarjluku = $nyk_elem->get_arvo(Elementti::$sarakenimi_jarjestysluku);
         $tokan_jarjluku = $elem_toka->get_arvo(Elementti::$sarakenimi_jarjestysluku);
         // Vaihdetaan. Tässä pitää vähän temppuilla, koska tietokanta ei
         // salli kahta samaa jarjestyslukua missään vaiheessa. Siksi
         // vaihdetaan ensin yhden arvo sellaiseen, mitä ei pitäisi olla
         // millään elementillä (-1).
         $temp_val = -1;
         $nyk_elem->set_arvo($temp_val, Elementti::$sarakenimi_jarjestysluku);
         $tallennus = $nyk_elem->tallenna_muutokset();
         if ($tallennus === Elementti::$OPERAATIO_ONNISTUI) {
             $elem_toka->set_arvo($nyk_jarjluku, Elementti::$sarakenimi_jarjestysluku);
             $nyk_elem->set_arvo($tokan_jarjluku, Elementti::$sarakenimi_jarjestysluku);
             // Ja oikeassa järjestyksessä:
             $tallennus1 = $elem_toka->tallenna_muutokset();
             $tallennus2 = $nyk_elem->tallenna_muutokset();
             // Jos tallennus ok:
             if ($tallennus1 === Elementti::$OPERAATIO_ONNISTUI && $tallennus2 === Elementti::$OPERAATIO_ONNISTUI) {
                 $ilm = Tekstit::$kooste_ilm_elemjarjmuutos_ok;
             } else {
                 $ilm = Tekstit::$kooste_virheilm_elemjarjmuutos_eiok . "<br/>" . $nyk_elem->tulosta_virheilmoitukset() . "<br/>" . $elem_toka->tulosta_virheilmoitukset();
             }
         } else {
             $ilm = Tekstit::$kooste_virheilm_elemjarjmuutos_eiok . "<br/>" . $nyk_elem->tulosta_virheilmoitukset();
         }
     } else {
         // Elementtiä tai toista ei löytynyt:
         $ilm = Tekstit::$kooste_virheilm_elementti_ei_kunnollinen;
     }
     $this->toteuta_nayta($palauteolio);
     $palauteolio->set_ilmoitus($ilm);
 }
Exemplo n.º 2
0
 /**
  * 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;
 }