예제 #1
0
 /**
  * Toteuttaa tehtävän muokkauksen perumisen.
  * @param Palaute $palauteolio
  */
 function toteuta_peru_tehtavan_muokkaus(&$palauteolio)
 {
     // Otetaan selville, tuleekö käyttäjä koosteesta vai
     // kokonaisuuksista ja näytetään vastaava juttu:
     $parametriolio = $this->get_parametriolio();
     $tietokantaolio = $this->get_tietokantaolio();
     $muokattavan_id = $this->get_olio()->get_id();
     $elem_id = $parametriolio->elementti_id;
     $elemryhma_id = $parametriolio->elemryhma_id;
     // Tarkistetaan, mistä ollaan tulossa ja minne menossa:
     $koostekontrolleri = new Koostekontrolleri($tietokantaolio, $parametriolio);
     if ($elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) {
         $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio);
         // JOtta palataan varmasti samaan elementtiin:
         $palauteolio->set_muokatun_id($parametriolio->elementti_id);
     } else {
         if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
             $koostekontrolleri->toteuta_nayta($palauteolio);
         } else {
             $this->toteuta_nayta_tehtavat($palauteolio);
             $palauteolio->set_muokatun_id($muokattavan_id);
         }
     }
     $palauteolio->set_ilmoitus(Tekstit::$tehtava_ilm_muokkaus_peruttu);
 }
 /**
  * Toteuttaa kokonaisuuden muokkauksen tallentamisen. Erityisesti käyttäjän
  * tekemät muutokset kokonaisuuteen kulkevat aina tämän metodin kautta, 
  * lukuunottamatta näkyvyyttä ja lukitusta.
  * 
  * Huomaa, ettei lukitusta tai käyttöoikeuksia tarkisteta täällä. Ne
  * tarkistetaan Kayttajakontrolleri-luokan metodeilla kokonaisuuden
  * tulostuksen (ruudulle) yhteydessä, jolloin vain asianmukaisille
  * käyttäjille annetaan painikkeet muokkausta tai poistoa varten.
  * 
  * Joitakin ominaisuuksia ei voi muuttaa täällä:
  *   luomishetki_sek - ei muuteta
  *   ed_muutos_sek - automaattinen
  *   näkyvyys - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa)
  *   on_lapsia - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa)
  *   lukitus - arvoja ei aseteta täällä (oma metodi Kokonaisuusoliossa)
  *   jarjestysluku - arvoja ei aseteta täällä (oma metodi Kokonaisuuskontrollerissa)
  *   kieli_id - arvoa ei aseteta täällä.
  *   taso - ei muuteta
  *   oppiaine - ei muuteta.
  * 
  * Lukitus poistetaan oliolta onnistuneen operaation päätteeksi.
  * 
  * @param Palaute $palauteolio
  */
 function toteuta_tallenna_muokkaus(&$palauteolio)
 {
     $parametriolio = $this->get_parametriolio();
     $ilmoitus = "";
     // Tarkistuksessa putsataan vain riskimerkit.
     $parametriolio->set_uusi(false);
     $omaid = $parametriolio->get_omaid();
     $otsikko_kokon = $parametriolio->get_otsikko_kokon();
     $tiivis_kokon = $parametriolio->get_tiivis_kokon();
     $selitys_kokon = $parametriolio->get_selitys_kokon();
     $laajennetun_id_kokon = $parametriolio->get_laajennetun_id_kokon();
     $ylakokonaisuuden_id_kokon = $parametriolio->get_ylakokonaisuuden_id_kokon();
     $nakyvyys_kokon = $parametriolio->nakyvyys_kokon;
     $muutettavan_kokon_id = $parametriolio->id_kokon;
     $virhekoodi = Palaute::$VIRHEKOODI_KAIKKI_OK;
     // Haetaan kokonaisuuden omistaja, jotta voidaan tarkistaa:
     $vanha_kokon = $this->get_olio();
     if ($vanha_kokon instanceof Kokonaisuusolio && $vanha_kokon->olio_loytyi_tietokannasta) {
         $muutettavan_kokon_luojan_id = $vanha_kokon->getHenkiloId();
     } else {
         $muutettavan_kokon_luojan_id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY;
     }
     //============== Tarkistetaan, onko käyttäjä vielä oikeasti online
     // ja valtuudet kunnossa: ======
     $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($muutettavan_kokon_luojan_id, $omaid, Oliotyyppi::$KOKONAISUUS, $muutettavan_kokon_id, $this->get_tietokantaolio());
     /*====================================================================*/
     //======================================================================
     // Muokattava aolio:
     $muokattava = new Kokonaisuusolio($muutettavan_kokon_id, $this->get_tietokantaolio());
     if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) {
         if ($muokattava->olio_loytyi_tietokannasta) {
             $palauteolio->set_virhekoodi($virhekoodi);
             // Lisätään kokonaisuudelle saadut mahdollisesti muutettavat parametrit
             // (vain ne, joita ylipäätään voidaan muuttaa):
             $muokattava->set_arvo($otsikko_kokon, Kokonaisuusolio::$sarakenimi_otsikko);
             $muokattava->set_arvo($tiivis_kokon, Kokonaisuusolio::$sarakenimi_tiivis);
             $muokattava->set_arvo($selitys_kokon, Kokonaisuusolio::$sarakenimi_selitys);
             $muokattava->set_arvo($laajennetun_id_kokon, Kokonaisuusolio::$sarakenimi_laajennetun_id);
             $muokattava->set_arvo($ylakokonaisuuden_id_kokon, Kokonaisuusolio::$sarakenimi_ylakokonaisuuden_id);
             $muokattava->set_arvo($nakyvyys_kokon, Kokonaisuusolio::$sarakenimi_nakyvyys);
             // Tallennus tietokantaan:
             $palaute = $muokattava->tallenna_muutokset();
             // Jos tiedoissa on vikaa, esim. tyhjä otsikko:
             if ($palaute != Kokonaisuusolio::$OPERAATIO_ONNISTUI) {
                 $this->get_parametriolio()->set_ilmoitus_kokon($muokattava->tulosta_virheilmoitukset());
                 $this->lisaa_virheilmoitus($muokattava->tulosta_virheilmoitukset());
                 $this->toteuta_nayta_kokonaisuuslomake($palauteolio);
                 $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_YLEINEN);
                 $ilmoitus .= Tekstit::$ilm_kokon_muokkaustallennus_eiok;
             } else {
                 // Kaikki kunnossa.
                 $ilmoitus = " ";
                 /* Poistetaan kokonaisuuden lukitus: */
                 $lukon_tila = Kokonaisuusolio::$LUKITUS_OFF;
                 $lukituksen_avaus = $muokattava->aseta_kokonaisuuden_lukitus($parametriolio->get_omaid(), $lukon_tila);
                 /* Ilmoitus, ellei lukitus jostakin syystä onnistunut: */
                 if ($lukituksen_avaus != Kokonaisuusolio::$OPERAATIO_ONNISTUI) {
                     $ilmoitus .= " " . Tekstit::$virheilm_kokonaisuuden_lukituksen_avaus_eiok . $muokattava->tulosta_virheilmoitukset();
                     $virhekoodi = Palaute::$VIRHEKOODI_LUKITUS_KOKONAISUUDET;
                 } else {
                     $ilmoitus = Tekstit::$ilm_kokon_muokkaustallennus_ok;
                     //Aktiivisuusmerkintä:
                     $aktiivisuuspalaute = paivita_aktiivisuus($omaid, $this->get_tietokantaolio(), time(), Aktiivisuus::$KOKONAISUUDEN_MUUTOSTEN_TALLENNUS);
                     if (!$aktiivisuuspalaute) {
                         $this->lisaa_virheilmoitus(Tekstit::$virheilm_aktiivisuuden_tallennus_eiok);
                     } else {
                         $onnistuminen = Palaute::$VIRHEKOODI_KAIKKI_OK;
                     }
                 }
                 // Huom: täällä hämäävästi käyttöön tulee uusi palauteolio, jolloin
                 // esim aiemmat virhekoodin asetukset eivät voimassa.
                 if ($parametriolio->tallennuskesken) {
                     $parametriolio->uusi = false;
                     $this->toteuta_nayta_kokonaisuuslomake($palauteolio);
                 } else {
                     // Otetaan selville, tuleekö käyttäjä koosteesta vai
                     // kokonaisuuksista ja näytetään vastaava juttu:
                     $parametriolio = $this->get_parametriolio();
                     $elem_id = $parametriolio->elementti_id;
                     $elemryhma_id = $parametriolio->elemryhma_id;
                     // Tarkistetaan, mistä ollaan tulossa ja minne menossa:
                     $koostekontrolleri = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio);
                     if ($elemryhma_id != Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY) {
                         $koostekontrolleri->toteuta_nayta_elementtiryhma($palauteolio);
                         $palauteolio->set_muokatun_id($elem_id);
                     } else {
                         if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
                             $koostekontrolleri->toteuta_nayta($palauteolio);
                             $palauteolio->set_muokatun_id($elem_id);
                         } else {
                             $this->toteuta_nayta($palauteolio);
                             $palauteolio->set_muokatun_id($muutettavan_kokon_id);
                         }
                     }
                 }
                 // Tämän pitää olla vasta täällä (ks. ylempi kommentti).
                 $palauteolio->set_virhekoodi(Palaute::$VIRHEKOODI_KAIKKI_OK);
                 // Lisätään mahdollinen lukitusvirhekoodi
                 if ($virhekoodi != Palaute::$VIRHEKOODI_KAIKKI_OK) {
                     $palauteolio->set_virhekoodi($virhekoodi);
                     $ilmoitus .= Tekstit::$ilm_kokon_muokkaustallennus_eiok . ": " . $virhekoodi;
                 }
             }
         } else {
             $this->lisaa_virheilmoitus(Tekstit::$ilm_kokon_ei_loytynyt);
         }
     } else {
         // Kun sessio loppunut tai muuten väärä muokkaaja:
         $this->lisaa_virheilmoitus(Tekstit::$virheilm_kokon_muok_ei_valtuuksia);
         $this->toteuta_nayta($palauteolio);
     }
     $palauteolio->set_ilmoitus($ilmoitus . "<br/>" . $this->tulosta_virheilmoitukset());
     return $palauteolio;
 }
예제 #3
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);
                        }
                    }
                }
            }
        }
    }
}
예제 #4
0
 /**
  * Hakee elementtiryhmän elementit ja palauttaa ne xml-muodossa.
  * @param type $omaid
  * @param Koostekontrolleri $koostekontrolleri
  */
 function hae_elementtiryhman_elementit($omaid, $koostekontrolleri, $koodaus)
 {
     $nyk_kooste = $koostekontrolleri->get_olio();
     $parametriolio = $koostekontrolleri->get_parametriolio();
     $tietokantaolio = $koostekontrolleri->get_tietokantaolio();
     // Haetaan elementtiryhmä:
     $elemryhma = new Elementtiryhma($parametriolio->elemryhma_id, $tietokantaolio);
     if ($elemryhma->olio_loytyi_tietokannasta) {
         $elementit = $elemryhma->hae_elementit();
         $viittausoliot_ok = array();
         $elementit_ok = array();
         $divi_mukaan = false;
         $all_elements = false;
         return muotoile_elemryhmaelem_xml($elemryhma, $koostekontrolleri, $nyk_kooste, $omaid, $elementit, $divi_mukaan, $all_elements, $viittausoliot_ok, $elementit_ok, $koodaus);
     } else {
         return "Error in ajax_kyselyt.php/hae_elementtiryhman_elementit()";
     }
 }
예제 #5
0
 /**
  * Toteuttaa ratkaisun muokkauksen perumisen.
  * @param Palaute $palauteolio
  */
 function toteuta_peru_ratkaisun_muokkaus(&$palauteolio)
 {
     // Otetaan selville, tuleekö käyttäjä koosteesta vai
     // kokonaisuuksista ja näytetään vastaava juttu:
     $parametriolio = $this->get_parametriolio();
     $tietokantaolio = $this->get_tietokantaolio();
     $elem_id = $parametriolio->elementti_id;
     if ($elem_id != Elementti::$MUUTTUJAA_EI_MAARITELTY) {
         $elem = new Elementti($elem_id, $tietokantaolio);
         if ($elem->olio_loytyi_tietokannasta) {
             $parametriolio->kooste_id = $elem->get_arvo(Elementti::$sarakenimi_kooste_id);
         }
         $koostekontr = new Koostekontrolleri($this->get_tietokantaolio(), $parametriolio);
         $koostekontr->toteuta_nayta($palauteolio);
         // JOtta palataan varmasti samaan elementtiin:
         $palauteolio->set_muokatun_id($parametriolio->elementti_id);
     } else {
         $this->toteuta_nayta($palauteolio);
         // JOtta palataan varmasti samaan :
         $palauteolio->set_muokatun_id($parametriolio->id_ratk);
     }
     $palauteolio->set_ilmoitus(Tekstit::$ratkaisu_ilm_muokkaus_peruttu);
 }