/** * Poistaa yhden kuvatiedoston ja siihen liittyvät kuvatiedot ja kuvalinkit * tietokannasta (tietokanta hoitaa viimeksimainitut - cascade-määritykset ok). * * @param Parametrit $parametriolio * @return Palaute $palauteolio */ function toteuta_poista_kuva($parametriolio) { $kohde = $parametriolio->kohde_kuva; $id_kuva = $parametriolio->id_kuva; $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(); $palauteolio = new Palaute(); // Haetaan kuvan src poistoa varten: $hakulause = "SELECT src\n FROM kuvat\n WHERE id = {$id_kuva}"; $taulunimi = "kuvat"; $sarakenimi = "id"; $hakuarvo = $id_kuva; $kuvaolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($kuvaolio == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $src = ""; } else { $src = $kuvaolio->src; } // POistetaan kuvatiedot tietokannasta: $taulu = "kuvat"; $taulun_sarake = "id"; $hakuarvo = $id_kuva; $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); // Jos kuvan poisto onnistui, poistetaan myös orvoiksi jääneet linkit: if ($ilmoitus == Tietokantaolio::$HAKU_ONNISTUI) { // Tämä tuhoaa tiedoston lopullisesti (ellei jo tuhottu): if (file_exists($src)) { $todellinen_poisto = unlink($src); } else { $todellinen_poisto = true; } // Aktiivisuusmerkintä: /* Valitaan oikea aktiivisuusmerkintä: */ if ($kohde === Kuvat::$kohde_kokonaisuus_tiivistelma || $kohde === Kuvat::$kohde_kokonaisuus_selitys) { $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO_KOKONAISUUS; } else { if ($kohde === Kuvat::$kohde_tehtava) { $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO_TEHTAVA; } else { if ($kohde === Kuvat::$kohde_ratkaisu) { $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO_RATKAISU; } else { $aktiivisuuslaji = Aktiivisuus::$TUNTEMATON_KUVA_AKTIIVISUUS; } } } $viimeksi_aktiivi = time(); paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); if ($todellinen_poisto) { $ilmoitus = Tekstit::$ilm_kuva_poisto_ok; } else { $ilmoitus = Tekstit::$virheilm_kuvan_poisto_tiedosto_ei_tuhottu . " SRC: '" . $src . "'"; } } else { $ilmoitus = Tekstit::$virheilm_kuvan_poisto; } $palauteolio = toteuta_nayta_oliot($parametriolio); $palauteolio->set_ilmoitus($ilmoitus); return $palauteolio; }
/** * Palauttaa koosteessa näytettävän kokonaisuuden tulostusta varten optimoidun * html-koodin. * * @param Elementti $elementti Olio, joka viittaa kokonaisuuteen, jonka * näkymää parhaillaan puuhaillaan. * @param Kokonaisuusolio $kokonaisuus * @param Parametrit $parametriolio * @param int $kohdeoikeudet Käyttäjän oikeudet tähän olioon. * @param <type> $selitys_auki jos true, niin selitys näytetään, muuten ei. * @return <type> */ function luo_koostenakyma_tulostus($elementti, $kokonaisuus, $parametriolio, $selitys_auki, $kohdeoikeudet) { $omaid = $parametriolio->get_omaid(); $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $palaute = ""; $selitys = ""; $nayta_selitys_nappi = ""; /* Näyttää selityksen. */ $siirra_ylemmaksi_nappi = ""; $siirra_alemmaksi_nappi = ""; // 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); } else { $title = Painikkeet::$NAYTA_SELITYS_title; $onsubmit_funktionimi = "nayta_selitys"; $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$NAYTA_SELITYS_value, 'title' => $title); } $nayta_selitys_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { // 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" => "rinnakkain", "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); 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" => "rinnakkain", "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,); 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(); } }*/ } // Tehtävien lisääminen sopivasti oikeutetuille: if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { /* Uuden tehtävän luontipainike * $onsubmit_funktionimi= "nayta_tehtavalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Tarpeen?* $form_maaritteet = array('method'=>'post', 'class'=>'rinnakkain', 'action'=>"{$_SERVER['PHP_SELF']}?". "id_kokon=".$kokonaisuus->get_id(). "&uusi=true"); $input_maaritteet = array('name'=>Toimintonimet::$tehtavatoiminto, 'value'=>Painikkeet::$tehtava_uusi_value); try{ $uusi_teht_nappi = Html::luo_submit_painike_onsubmit_toiminnolla( $onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus){ $palaute .= "Virhe tehtavanapin luomisessa: ". $poikkeus->getMessage(); }*/ } // TEhtävien lisäyspainikekoodi loppuu. /* haetaan mahdolliset kuvat */ $kuvahtml_tiivis = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_tiivistelma, $omaid, $tietokantaolio, false); /* Kaikki kokonaisuudet ovat samanlaisia tasosta riippumatta */ $class_arvo = "elementti_kokon"; $otsikko = "<div class = " . $class_arvo . " id='elem" . $elementti->get_id() . "'>" . "<h3>" . $kokonaisuus->getOtsikkomerkinta() . $kokonaisuus->getOtsikko() . " " . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . "</h3>"; /* Haetaan vielä tarvittaessa selitys: */ if ($selitys_auki && $kokonaisuus->getSelitys() != "") { /* 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::$VAIN_KOOSTEESSA || $kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA) { $normaali_kokonaisuus = $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 .= $tiivistelma; } else { if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) { $normaali_kokonaisuus .= $tiivistelma; } else { $normaali_kokonaisuus .= $tiivistelma; } } } /* $normaali_kokonaisuus .= " ".$nayta_selitys_nappi;*/ /* Lisätään vielä div selitystä varten: */ if ($selitys_auki && $kokonaisuus->getSelitys() != "") { $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 = "elementti_kokon"; $otsikko = "<div class = " . $class_arvo . " id='elem" . $elementti->get_id() . "'>" . "<h3>" . $kokonaisuus->getOtsikko() . " " . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . "</h3>"; $palaute = $otsikko; $palaute .= $piilotushuomautus; $palaute .= "</div>"; /* Kokonaisuus loppuu. */ } else { // Kun jonkun toisen yksityinen / vain koosteessa, eikä hallintavaltuuksia: $palaute = ""; } } return $palaute; }
require_once '../kokonaisuudet/yhteiset/php_yhteismetodit.php'; load_files("submit"); // 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(); // Kontrollerit ja näkymät: $palautuskontrolleri = new Palautuskontrolleri($tietokantaolio, $parametriolio); $palautusnakymat = new Palautusnakymat(); /*********************** TOIMINTA-TOIMINNOT *******************************/ $toiminta = $parametriolio->get_toiminta(); $palautustoiminta = $parametriolio->get_palautustoiminto(); $lang_id = $parametriolio->kieli_id; $kayttajan_valtuudet = $parametriolio->get_valtuudet(); // Käsitellään tilanne "$toiminta on määritelty" eli lähinnä // kokonaisuuksiin liittyvät toiminnot sekä yleisiä toimintoja: if ($parametriolio->get_toiminta() != "") { // Kirjautuminen ulos: if ($toiminta == Painikkeet::$KIRJAUDU_ULOS_VALUE) { $palauteolio = toteuta_uloskirjautuminen($parametriolio); } } else { if ($palautustoiminta != "") { if ($palautustoiminta === Palautustekstit::button_new_course_value($lang_id)) { $palautuskontrolleri->toteuta_nayta_kurssitietolomake($palauteolio); } else { $palautuskontrolleri->toteuta_nayta($palauteolio); } } else {
/** * Hakee tietyn oppiaineen kokonaisuudet tietokannasta. Palauttaa * kokonaisuuksien html:n, eli siis kaikki kokonaisuudet kerralla. * * @param Parametrit $parametriolio */ function hae_kokonaisuudet(&$parametriolio) { $oppiaineindeksi = $parametriolio->oppiaine_kokon; $taso = $parametriolio->taso_kokon; $tietokantaolio = $this->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); $kieli_id = $parametriolio->kieli_id; $omaid = $parametriolio->get_omaid(); $selitys_auki_id = $parametriolio->selitys_auki_id; $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ä: $kokonaisuusoliopuu = $this->hae_kokonaisuusoliopuu($kokonaisuustaulukko, $otsikkomerkinta_alussa, $otsikkotaso_alussa, $kieli_id, $oppiaineindeksi, $taso, $ylakokonaisuuden_id, $tietokantaolio, $omaid); // ASetetaan edellisten ja seuraavien kokonaisuuksien id:t: $kokonaisuusoliot = $this->aseta_ed_ja_seur_idt_kokonaisuuksiin($kokonaisuusoliopuu); // Jotta kokonaisuudet menevät kutsujan suuntaankin (linkkien näyttö) $parametriolio->kokonaisuusoliot = $kokonaisuusoliot; $palaute = ""; // Palautettava html if (sizeof($kokonaisuusoliot) == 0) { $palaute = Tekstit::$ilm_kokon_yhtaan_kokon_ei_loytynyt; } else { foreach ($kokonaisuusoliot as $kok) { /* Tarkistetaan mahdollinen näytettävä selitys: */ if (is_numeric($selitys_auki_id) && $selitys_auki_id != Kokonaisuusolio::$SELITYS_KIINNI_ID) { if ($selitys_auki_id == $kok->get_id()) { $selitys_auki = true; } else { $selitys_auki = false; } } else { $selitys_auki = false; } if ($kok instanceof Kokonaisuusolio) { $palaute .= $this->kokonaisuusnakymat->tulosta_kokonaisuus($kok, $this->get_parametriolio(), $selitys_auki, $kok->getEdellisenId_kaikista(), $kok->getSeuraavanId_kaikista()); } } } return $palaute; }
/** * @param Parametrit $parametriolio * @param Palaute $palauteolio * @return html Palauttaa sivun täydellisen html:n. */ function nayta_etusivu($parametriolio, $palauteolio, $nayttotapa) { $valtuudet = $parametriolio->get_valtuudet(); $ylapalkkipainikkeet = $palauteolio->get_ylapalkkipainikkeet(); $sisalto = $palauteolio->get_sisalto(); $ilmoitus = $palauteolio->get_ilmoitus(); $linkit = $palauteolio->get_linkkihtml(); $aika = Aika::anna_nyk_viikonp_suomeksi() . " " . date("d.m.Y"); $aikailmoitus = "Tänään on " . $aika . " "; // Kieli: $lang_id = $parametriolio->kieli_id; // Tulostetaan etusivun html-koodi: $otsikkoteksti = Palautustekstit::heading1($lang_id); // Vain katselu on mahdollista ilman kirjautumista: if ($valtuudet > Valtuudet::$KATSELU) { $kirjautuminen = Html::span(array(Attr::style("font-size:70%")), " " . $_SESSION['tiedot']->etunimi . " ") . Html::luo_forminput_painike(array(Attr::classs("navbar-form inline-block")), array(Attr::classs("btn btn-default btn-md"), Attr::name("toiminta"), Attr::value(Painikkeet::$KIRJAUDU_ULOS_VALUE))); } else { $kirjautuminen = Html::a(array(Attr::title(Tekstit::$linkit_tunnistautuminen)), Html::span(array(Attr::classs("glyphicon glyphicon-log-in login-painike")), ""), "../kokonaisuudet/tunnistus.php?target=submit"); } $ylapalkkipainikkeet .= $kirjautuminen; // Näyttötavan vaikutus: if ($nayttotapa === Palautusnakymat::$show_1col) { $number_of_col = 1; } else { if ($nayttotapa === Palautusnakymat::$show_2col) { $number_of_col = 2; } else { $number_of_col = 1; } } $links = $linkit; $content = $sisalto; $header_content = $otsikkoteksti; $etusivu = '<!DOCTYPE html>' . '<html>' . $this->create_head() . '<body onload="kaynnista_metodit(2)"> <div id="ilmoitus">' . $ilmoitus . '</div> ' . $this->create_nav($header_content, $ylapalkkipainikkeet) . ' ' . $this->create_sidenavs_and_content_row($links, $content, $number_of_col) . ' ' . $this->create_footer($aikailmoitus, "") . ' </body> </html>'; return $etusivu; }
/** * 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; }