/** * Palauttaa muotoillun merkinnän taulukkosoluun pujotettuna. * Yksirivinen viittaa siihen, että koko kaavarivissä on vain yksi kerros. * @param bool $yksirivinen * @return type */ public function get_muotoiltu_html($yksirivinen) { if ($yksirivinen) { $rowspan = 1; } else { $rowspan = 2; } $html = Html::luo_tablesolu(Html::luo_span($this->syotehtml, array(Attr::classs(Kaava::$class_isosulku))), array(Attr::rowspan($rowspan))); return $html; }
/** * Palauttaa kokonaisuuden html-koodin. * * Huomaa, että täällä käsitellään aika paljon turvallisuusarkoja aiheita, * kuten esimerkiksi kokonaisuuden lukitus. Ois parempi ehkä sellaisen * olla aiemmin, mutta en vielä ole jaksanut muuttaa.. * * @param Parametrit $parametriolio * @param Kokonaisuusolio $kokonaisuus * @param <type> $selitys_auki jos true, niin selitys näytetään, muuten ei. * @param type $id_prev Edellisen kokonaisuuden id. * @param type $id_next Seuraavan kokonaisuuden id. * @return string|\<type> */ function tulosta_kokonaisuus($kokonaisuus, $parametriolio, $selitys_auki, $id_prev, $id_next) { $btn_type = Kokonaisuusnakymat::$btn_type_article; $btn_size = Kokonaisuusnakymat::$btn_size_article; $omaid = $parametriolio->get_omaid() + 0; $tietokantaolio = $parametriolio->get_tietokantaolio(); $kayttajan_valtuudet = $parametriolio->get_valtuudet(); // Luodaan tämä tehtävien lkm:n hakua varten. Vähän raskasta, mutta olkoon. $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $palaute = ""; $selitys = ""; $poistonappi = ""; $muokkausnappi = ""; $tehtavanappi = ""; /* Tehtävien näyttö */ $uusi_teht_nappi = ""; /* Tästä luodaan uusi tehtävä. */ $nayta_selitys_nappi = ""; /* Näyttää selityksen. */ $siirra_ylemmaksi_nappi = ""; $siirra_alemmaksi_nappi = ""; $jaa_oikeuksia_nappi = ""; $nayta_jarj_luku = ""; $korjausnappi = ""; // Tämän avulla järjestysluvun voi korjata $nakyvyysmuutosnappi = ""; $nayta_ed_nappi = $this->create_button_show_prev($id_prev); $nayta_seur_nappi = $this->create_button_show_next($id_next); /*======================== käyttäjän oikeudet ========================*/ $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokonaisuus->getHenkiloId(), $omaid, Oliotyyppi::$KOKONAISUUS, $kokonaisuus->get_id(), $tietokantaolio); /*====================================================================*/ // Koodia voivat kaikki vilkaista, ellei ole piilotettu: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $nayta_koodi_nappi = Html::luo_button(Painikkeet::$NAYTA_KOODI_value, array(Attr::title(Painikkeet::$NAYTA_KOODI_title), Attr::onclick("hae_koodi", array($kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS)), Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size . " article"))); } else { $nayta_koodi_nappi = ""; } /* Kuvan lisäyspainikkeet: */ $uusi_kuva_tiivis = ""; $uusi_kuva_seli = ""; // 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, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article"); } else { $title = Painikkeet::$NAYTA_SELITYS_title; $onsubmit_funktionimi = "nayta_selitys"; $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$NAYTA_SELITYS_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size . " article"); } $nayta_selitys_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } // Haetaan kokonaisuuden tehtävien lkm: $teht_lkm = sizeof($tehtavakontrolleri->hae_tehtavat()); // Tehtävät näkyvät kaikille, jos niitä on: if ($teht_lkm > 0) { $onsubmit_funktionimi = "nayta_tehtavat"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Tämän avulla löytyvät */ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . Oliotyyppi::$naytettava_name . "=" . Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA); $title = Painikkeet::$tehtava_nayta_tehtavat_title . " (" . $teht_lkm . ")"; $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_nayta_tehtavat_value, 'title' => $title, 'class' => "btn btn-" . $btn_type . " btn-" . $btn_size); $tehtavanappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } /** * Muokkaus ja poisto tietysti kunkulle ja kokonaisuuden tekijälle. * Vain heille on myös luvallista jakaa lisäoikeuksia olioon. <p>Jos kokonaisuus lukittu toisen toimesta, ei sitä voida poistaa eikä muokata. Uusia tehtäviä voi kuitenkin lisätä, koska siinä mahdollinen samanaikaisuus ei haittaa.</p> <p>Uusia tehtäviä voi lisätä valtuusarvot >= "tehtävien_lisäys".</p> Kokonaisuuksien poisto sallitaan turvallisuussyistä vain lapsettomille kokonaisuuksille. */ if ($kohdeoikeudet == Lisavaltuudet::$KAIKKI_OIKEUDET) { // Oikeuksien eli lisävaltuuksien jakopainike:====================== $action_os = "oLetUs"; // Testaan samalla kirjainkoon vaikutusta. $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id); $action_kyselyarvot = array($kokonaisuus->get_id(), $kokonaisuus->getOppiaine(), $kokonaisuus->getKieli(), $kokonaisuus->get_id(), Oliotyyppi::$KOKONAISUUS, $kokonaisuus->getHenkiloId()); $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot); //================================================================== } if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { //====================== LUKITUKSEN HUOMIOINTI ===================== // Muokkaus- ja poistonapit lukitsemattomalle tai omalle. if (!$this->lukitus_estaa_muokkauksen($kokonaisuus, $omaid)) { // Muokkauspainike: $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $muokkausnappi = $this->luo_muokkauspainike($kokonaisuus, $elementti, $elemryhma); //============================================================= if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) { // Poisto vain lapsettomille ja tehtävättömille: if ($kokonaisuus->getOn_lapsia() == 0) { $tehtavat = Tehtava::hae_kokonaisuuden_tehtavat($kokonaisuus->get_id(), $parametriolio->get_tietokantaolio()); // Ellei tehtäviä löydy, voidaan poistaa: if (empty($tehtavat)) { // POistopainike: $poistonappi = Html::luo_forminput_painike(array(Attr::classs("article"), Attr::action("{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id())), array(Attr::classs("btn btn-" . $btn_type . " btn-" . $btn_size), Attr::name("toiminta"), Attr::value(Painikkeet::$POISTA_KOKON_VALUE))); if ($kokonaisuus->getLukitus() == $omaid) { $poistonappi .= "<span style='color: green; font-weight:bold'>" . Tekstit::$ilm_kokon_omalukitus_paalla . "<br/></span>"; } } } } //============================================================= // Julkista/piilota-painike: if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $value = Painikkeet::$PIILOTA_KOKON_value; $title = Painikkeet::$PIILOTA_KOKON_title; } else { $value = Painikkeet::$JULKISTA_KOKON_value; $title = Painikkeet::$JULKISTA_KOKON_title; } $onsubmit_funktionimi = ""; // Tulevaa varten. $onsubmit_parametrit = ""; // Ei ole vielä. $form_maaritteet = array("class" => "article", "method" => "post", "action" => "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli()); $input_maaritteet = array("class" => "btn btn-" . $btn_type . " btn-" . $btn_size, "value" => $value, "title" => $title, "name" => Toimintonimet::$kokonaisuustoiminto); try { $nakyvyysmuutosnappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $nakyvyysmuutosnappi = $poikkeus->getMessage(); } //============================================================= // 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" => "article", "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, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); 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" => "article", "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, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); 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(); } } // Tämä liittyy vanhan järjestysnumeron korjaukseen (kun monilla // kokonaisuuksilla oli sama järjestysnumero -1). Nykyään // tekniikka on muuttunut, eikä sitä yleensä tarvita. if ($kokonaisuus->getJarjestysnro() == -1) { $nayta_jarj_luku = " jarjestysnro: " . $kokonaisuus->getJarjestysnro(); $class = "rinnakkain"; $id = ""; $action = "{$_SERVER['PHP_SELF']}?id_kokon=" . $kokonaisuus->get_id() . "&oppiaine_kokon=" . $kokonaisuus->getOppiaine() . "&kieli_id=" . $kokonaisuus->getKieli(); $name = Toimintonimet::$kokonaisuustoiminto; $value = "Korjaa jarjestysnro"; $korjausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value); } /**************************************************************/ } else { if ($kokonaisuus->lukitus != Kokonaisuusolio::$LUKITUS_OFF) { $poistonappi = "<span style='color: red; font-weight:bold'>" . Tekstit::$ilm_kokon_lukitus_paalla . "<br/></span>"; } } /* Uuden kuvan lisäyspainike tiivistelmään*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Kokonaisuuden id*/ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_tiivistelma); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_TIIVIS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $uusi_kuva_tiivis = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } /* Uuden kuvan lisäyspainike selitykseen:*/ $onsubmit_funktionimi = "nayta_kuvalomake"; $onsubmit_parametrit = array($kokonaisuus->get_id()); /* Kokonaisuuden id*/ $form_maaritteet = array('method' => 'post', 'class' => 'article', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $kokonaisuus->get_id() . "&" . "kohde_kuva=" . Kuvat::$kohde_kokonaisuus_selitys); $input_maaritteet = array('name' => Toimintonimet::$kokonaisuustoiminto, 'value' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_VALUE, 'title' => Painikkeet::$LISAA_KUVA_SELITYS_KOKON_TITLE, "class" => "btn btn-" . $btn_type . " btn-" . $btn_size); try { $uusi_kuva_seli = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage(); } } // Hallinnan / muokkaaajan / luojan osuus päättyy // Tehtävien lisääminen sopivasti oikeutetuille: if ($kayttajan_valtuudet >= Valtuudet::$TEHTAVA_LISAYS) { $elementti = Elementti::$MUUTTUJAA_EI_MAARITELTY; $elemryhma = Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY; $uusi_teht_nappi = $this->luo_uusi_teht_painike($kokonaisuus, $elementti, $elemryhma); } // TEhtävien lisäyspainikekoodi loppuu. /* haetaan mahdolliset kuvat */ $kuvahtml_tiivis = $kokonaisuus->hae_kuvat(Kuvat::$kohde_kokonaisuus_tiivistelma, $omaid, $tietokantaolio, false); /* kokolaisuuksien hierarkia: html-otsikkotasot. */ $class_arvo = "kokonaisuus"; $painikkeet_ylla = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $tehtavanappi . $uusi_teht_nappi . $muokkausnappi . $korjausnappi . $nakyvyysmuutosnappi . $jaa_oikeuksia_nappi . $nayta_seur_nappi; $painikkeet_alla = $nayta_koodi_nappi . $uusi_kuva_tiivis . $uusi_kuva_seli . $nayta_selitys_nappi . $poistonappi; $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">"; /* Haetaan vielä tarvittaessa selitys: */ if ($selitys_auki) { /* 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::$JULKINEN || $kokonaisuus->getHenkiloId() == $omaid || $kayttajan_valtuudet + 0 === Valtuudet::$HALLINTA) { $normaali_kokonaisuus = Html::div(array(Attr::classs("kokon_ylanapit")), $painikkeet_ylla) . $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 .= $yksityisilmoitus . $tiivistelma; } else { if ($kokonaisuus->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) { $normaali_kokonaisuus .= $vainkoosteilmoitus . $tiivistelma; } else { $normaali_kokonaisuus .= $tiivistelma; } } } $normaali_kokonaisuus .= Html::div(array(Attr::classs("kokon_alanapit")), $painikkeet_alla); /* Lisätään vielä div selitystä varten: */ if ($selitys_auki) { $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 = "kokonaisuus"; $otsikko = "<div class = " . $class_arvo . " id=" . $kokonaisuus->get_id() . ">" . "<h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">" . $kokonaisuus->getOtsikkomerkinta() . " " . $kokonaisuus->getOtsikko() . " " . "</h" . ($kokonaisuus->getOtsikkotaso() + 1) . ">"; $palaute = $nayta_ed_nappi . $siirra_ylemmaksi_nappi . $siirra_alemmaksi_nappi . $nayta_koodi_nappi . $nakyvyysmuutosnappi . $nayta_seur_nappi . $otsikko; $palaute .= $piilotushuomautus; $palaute .= "</div>"; /* Kokonaisuus loppuu. */ } else { // Kun jonkun toisen yksityinen / vain koosteessa, eikä hallintavaltuuksia: $palaute = ""; } } return $palaute; }
/** * * @param type $links * @param type $content * @param type $right_bar_content * @param type $number_of_col number of columns * @param bool $sidenav_fixed if true, the sidebar will be fixed * @return type */ function create_sidenavs_and_content_row($links, $content, $right_bar_content, $number_of_col, $sidenav_fixed) { // Checks the number parameter: if (!is_numeric($number_of_col) || $number_of_col != 1 && $number_of_col != 2 && $number_of_col != 3) { $number_of_col = 2; } $right_nav = ""; $range_1 = "xs"; // lg/md/sm/xs $range_2 = "sm"; // lg/md/sm/xs $range_3 = "lg"; // lg/md/sm/xs $sidebarwidth_1 = 4; $sidebarwidth_2 = 3; $sidebarwidth_3 = 3; $main_width_1 = 12; // Bootstrap columns small screen $main_width_2 = 12 - $sidebarwidth_2; // Bootstrap columns bigger screen $main_width_3 = 12 - $sidebarwidth_3; // Bootstrap columns big screen $left_nav_attr_array = array(Attr::classs("col-" . $range_1 . "-" . $sidebarwidth_1 . " col-" . $range_2 . "-" . $sidebarwidth_2 . " " . " col-" . $range_3 . "-" . $sidebarwidth_3 . " " . "sidenav sidebar-offcanvas text-left"), Attr::id("sidenav-left")); if ($sidenav_fixed) { array_push($left_nav_attr_array, Attr::BS_data_spy("affix")); } $left_nav = Html::luo_div($links, $left_nav_attr_array); if ($number_of_col === 1) { $left_nav = ""; $main_width_2 = 12; } else { if ($number_of_col === 3) { $right_nav = Html::luo_div($right_bar_content, array(Attr::classs("col-" . $range_1 . "-" . $sidebarwidth_1 . " col-" . $range_2 . "-" . $sidebarwidth_2 . " col-" . $range_3 . "-" . $sidebarwidth_3))); $main_width_2 -= 2; // Bootstrap columns bigger screen $main_width_1 -= 2; // Bootstrap columns small screen } } $main = Html::luo_div(Html::p(array(Attr::classs("pull-left visible-xs")), Html::button(array(Attr::classs("btn btn-warning btn-xs"), Attr::BS_data_toggle("offcanvas"), Attr::title(Painikkeet::$toggle_sidenav_title)), "<>")) . $content, array(Attr::classs("col-" . $range_1 . "-" . $main_width_1 . " " . "col-" . $range_2 . "-" . $main_width_2 . " " . "col-" . $range_3 . "-" . $main_width_3 . " " . "main_content text-left"), Attr::id("main_content"))); $row = Html::luo_div(Html::luo_div($left_nav . $main . $right_nav, array(Attr::classs("row row-offcanvas " . "row-offcanvas-left"))), array(Attr::classs("container-fluid text-center"))); return $row; }
/** * Näyttää poistovahvistuskyselyn ja painikkeet, joista joko hyväksytään * tai perutaan poisto. * @param Elementtiryhma $poistettava Poistettava Elementtiryhma-luokan * olio, joka on löytynyt tietokannasta (varmistettu kutsuvassa funktiossa). * @return string */ public function nayta_elemryhman_poistovahvistuskysely($poistettava) { $otsikko = $poistettava->get_arvo(Elementtiryhma::$sarakenimi_nimi); $kooste_id = $poistettava->get_arvo(Elementtiryhma::$sarakenimi_kooste_id); //========= Vahvistuspainike ==================================== $form_maaritteet = array(Attr::action(Attr::muotoile_action_arvo("index.php", array(Koostekontrolleri::$elemryhma_name_id, Koostekontrolleri::$kooste_name_id), array($poistettava->get_id(), $kooste_id))), Attr::classs("summary")); $input_maaritteet = array(Attr::name(Toimintonimet::$koostetoiminto), Attr::value(Painikkeet::$kooste_vahvista_poista_ryhmittely_value), Attr::title(Painikkeet::$kooste_vahvista_poista_ryhmittely_title), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary)); $poistopainike = Html::luo_forminput_painike($form_maaritteet, $input_maaritteet); //============================================================== $paluupainike = $this->nayta_painike_paluu_koosteeseen($poistettava->get_arvo(Elementtiryhma::$sarakenimi_kooste_id), Elementti::$MUUTTUJAA_EI_MAARITELTY); $vahvistuskys = Html::luo_div(Tekstit::$elementtiryhma_poiston_vahvistuskysymys, array(Attr::classs("keskitys"), Attr::style("font-size: 120%; color: red"))) . Html::luo_otsikko($otsikko, array(), 1) . Html::luo_div($poistopainike . $paluupainike, array(Attr::classs("keskitys"))); return $vahvistuskys; }
/** * Creates the html for the nav bar. */ function create_nav() { $text = Html::luo_div(Html::luo_div(Html::luo_ul(Html::luo_li("", array(Attr::classs("active"))), array(Attr::classs("nav navbar-nav"))), array(Attr::classs("container-fluid"))), array(Attr::classs("navbar navbar-default"))); return $text; }
/** * Palauttaa tiettyihin (tietyn tehtävän) ratkaisujen html-koodin, joka * sisältää tarvittavat rakenteet ratkaisujen piilottamista ja näyttämistä * varten. * @param type $ratkaisut * @param boolean $tulostus True, jos halutaan tulostushtml. Muuten normi. * @param int $omaid Käyttäjän tunniste. * @param Elementti $tehtavaelem Elementti-luokan olio. Ratkaisuja ei * käsitellä kiinteinä elementteinä, vaan pikemminkin tehtävä-elementin * ominaisuutena, joka haetaan dynaamisesti tietokannasta tarvittaessa. */ public function luo_tehtavan_ratkaisut_koodi($ratkaisut, $tulostus, $omaid, $tehtavaelem) { $id_teht = "_tuntematon"; $class_arvo = ""; $lask = 0; $pal = ""; foreach ($ratkaisut as $ratk) { if ($ratk instanceof Ratkaisu) { $painikkeet = array(); // Ei painikkeita nyt. // Haetaan käyttäjän oikeudet: $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($ratk->getHenkiloId(), $omaid, Oliotyyppi::$RATKAISU, $ratk->getId(), $this->get_tietokantaolio()); // Lisätään muutospainike vain, jos oikeudet sallivat eikä tulostus: if (!$tulostus) { if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { if ($ratk->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $ratk->setNakyvyysmerkkiPublic(); } else { $ratk->setNakyvyysmerkkiPrivate(); } $muokkausnappi = $this->ratkaisunakymat->luo_muokkauspainike($ratk, $tehtavaelem); array_push($painikkeet, $muokkausnappi); } } if ($lask === 0) { $id_teht = $ratk->getTeht_id(); } if ($tulostus) { $pal .= $this->ratkaisunakymat->luo_koostenakyma_tulostus($ratk, $painikkeet); $class_arvo = "elemtehtavan_ratkaisut_tulostus"; } else { $pal .= $this->ratkaisunakymat->luo_koostenakyma($ratk, $painikkeet); $class_arvo = "elemtehtavan_ratkaisut"; } } } $palaute = Html::luo_div($pal, array(Attr::classs($class_arvo), Attr::style("display:none"), Attr::id("ratkaisut_teht" . $id_teht))); return $palaute; }
$url = ""; } } } } } // Kieli- taso- ja oppiainevalikot: if ($palauteolio->get_valikkonaytto()) { // Lisätään pikapainikkeet koulutason muuttamiseen: $show_curr = false; $ylapalkkipainikkeet = $kokonaisuusnakymat->create_level_buttons(Koulutasot::hae_koulutasojen_arvot(), $parametriolio->taso_kokon, $show_curr, true); // Lisätään koostepainike täällä, koska se on luontevasti samassa // paikassa kuin oppiainetiedot: array_push($ylapalkkipainikkeet, $kokonaisuusnakymat->create_summary_button()); // muut valikot: $valikot = Html::form(array(Attr::classs("navbar-form"), Attr::id("kielivalikko")), Html::div(array(Attr::classs("form-group")), $kokonaisuusnakymat->nayta_kielivalikko($parametriolio->get_kieli_id()) . " " . $kokonaisuusnakymat->nayta_oppiainevalikko($parametriolio->get_oppiaine_kokon()) . " " . $kokonaisuusnakymat->nayta_tasovalikko($parametriolio->get_taso_kokon()) . " " . $kokonaisuusnakymat->nayta_nayttotapavalikko($parametriolio->get_kokonaisuuksien_nayttotapa())) . Html::luo_input(array(Attr::type("submit"), Attr::classs("btn btn-default"), Attr::name(Toimintonimet::$kokonaisuustoiminto), Attr::value("->")))); } else { $valikot = ""; } // Muokattu näkyviin: if ($palauteolio->get_muokatun_id() > -1) { $parametriolio->id_kokon = $palauteolio->get_muokatun_id(); } /* Lisätään pari painiketta, jotka saavat olla aina näkyvissä tehtävissä ja ratkaisuissa: */ /* Tämän avulla saadaan sisältö-laatikko levennettyä esim. * videotykkiesitystä varten. Toimii nyt vain fixed-näytöllä.*/ if ($palauteolio->get_naytettava_oliotyyppi() == Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA || $palauteolio->get_naytettava_oliotyyppi() == Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU) { /*$suurenna_nappi = "<button type='button' id='suurenna_nappi'". "onclick='suurenna()' title='".Painikkeet::$SUURENNA_title."'>". Painikkeet::$SUURENNA_value."</button>";
/** * Palauttaa tehtävän 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 tehtävässä, annetaan * toiseksi parametriksi arvo Elementti::$MUUTTUJAA_EI_MAARITELTY. * * Samoin jos uusi ratkaisu lisätään elementtiryhmästä käsin, palataan * takaisin samaan ryhmään. Muuten parametrin arvo on * Elementtiryhma::$MUUTTUJAA_EI_MAARITELTY. * * @param Tehtava $tehtava * @param Elementti $elementti * @param Elementtiryhma $elementtiryhma * @return string */ public function luo_ratkaisun_lisayspainike($tehtava, $elementti, $elementtiryhma) { // Muokkaus koosteesta käsin: $koostetiedot = ""; if ($elementtiryhma instanceof Elementtiryhma) { $koostetiedot = "&" . Koostekontrolleri::$elemryhma_name_id . "=" . $elementtiryhma->get_id(); } 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); } $form_maaritteet = array(Attr::action(Attr::muotoile_action_arvo("index.php", array(Tehtavakontrolleri::$tehtava_name_id, "uusi"), array($tehtava->get_id(), "true")) . $koostetiedot), Attr::classs("summary")); $input_maaritteet = array(Attr::name(Toimintonimet::$tehtavatoiminto), Attr::value(Painikkeet::$ratkaisu_uusi_value), Attr::classs("btn btn-" . Koostenakymat::$btn_type_summary . " btn-" . Koostenakymat::$btn_size_summary)); $uusitehtpainike = Html::luo_forminput_painike($form_maaritteet, $input_maaritteet); return $uusitehtpainike; }
/** * Hakee annetusta tekstistä pikkukaavat eli merkkijonot, jotka ovat * merkkijonojen $pikkukaavan_alku ja $pikkukaavan_loppu välissä, ja * muotoilee kaavat samantyylisiksi kuin varsinaiset kaavat. * * Hyödyntää metodia php_yleinen/php_yleismetodit.php: * 'hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki)' * * Jos tekstistä löytyy $kaavan_alku mutta ei $kaavan_loppu, ei kyseistä * merkkijonoa muokata. * * Ellei mitään kaavaa löydy, tai tapahtuu muuta kummaa, palautetaan sama teksti. * Muuten palautetaan saatu teksti, jossa kaavamerkinnät on korvattu html- * muotoiluilla. * * Pikkukaavoissa ei voi käyttää neliöjuuria tai murtolukumuotoja, vaan * kyse on lähinnä fonttittyyleistä, koosta, joidenkin merkkien muotoilusta * yms. Pikkukaavat ovat useimmiten rivien osia, joten niitä ei aseteta * taulukon sisään. * * @param <type> $teksti * @param <type> $kaavan_alku * @param <type> $kaavan_loppu * @param <type> $jako_alku * @param <type> $jako_loppu * @return string muotoiltu html-koodi */ static function muotoile_pikkukaavat($teksti) { $palautus = $teksti; // Haetaan tekstistä kaavat taulukkoon: $alkumj = Kaavaeditori::$pikkukaavan_alku; $loppumj = Kaavaeditori::$pikkukaavan_loppu; $hae_kaikki = true; $raakakaavat = Yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); /* Tarkempaan työhön aletaan vain, jos kaavoja löytyy */ if (!empty($raakakaavat)) { $valmiit_kaavat = array(); // Käydään läpi jokainen raakakaava: HUOM katso metodi // muotoile_merkit() tiedostossa yhteiset/php_yhteismetodit.php! foreach ($raakakaavat as $kaava) { // Muotoillaan merkkejä hiukan. Miinusmerkit on kiva olla // pitkiä (ja hiukan tekstistä erillään). Yhdysviivat kaavoissa // merkitsevät käytännössä aina miinusmerkkiä, joten muutetaan ne // oikeiksi. Tehdään se täällä, koska // tekstissä väliviivaa tarvitaan kuitenkin. // NÄIN EI TOIMI MIKSI?? $kaava = str_replace("-",Merkit::$miinusmerkki,$kaava); $kaava = str_replace("-", "−", $kaava); // Näin taas toimii! $kaava = str_replace("+", "<span class='erillaan'>+</span>", $kaava); // Seuraava estää merkinnän z^*, jota käytetään kompleksiluvuissa. //$kaava = str_replace("*","<span class='erillaan'>⋅</span>", $kaava); // Tämäkin aiheuttaa taas sen ongelman, ettei kaavaan voi lisätä // esimerkiksi css-määrettä font-style väliviivan takia.. //$kaava = str_replace("−","<span class='erillaan'>−</span>", $kaava); $kaava = str_replace("−", " − ", $kaava); // Tämä täällä, koska muualla pitää olla mahis laittaa // esim. merkki => (ohjelmointi tms.) // Huom! =-merkkiin ei voi lisätä yleensä html-koodia, koska merkkiä käytetään // html:n sisällä (attribuutit)" $kaava = str_replace("=", " = ", $kaava); // Sama kuin yllä: $kaava = str_replace(":", " : ", $kaava); // Nää oli ennen muotoile_kaavat yhteismetodissa: //================ Kokeillaan toimiiko 1.12.2015 =============== $kaava = str_replace("⋅", "<span class='erillaan'>⋅</span>", $kaava); $kaava = str_replace("≈", "<span class='erillaan'>≈</span>", $kaava); $kaava = str_replace("≠", "<span class='erillaan'>≠</span>", $kaava); $kaava = str_replace("║", "<span class='erillaan'>║</span>", $kaava); //================ Kokeillaan toimiiko loppu =================== // Tehdään kursivoinnin poisto ennen varsinaista kaavamuotoilua. $kaava = str_replace("(ioff_b)", "<span class='ital_off'>", $kaava); $kaava = str_replace("(ioff_e)", "</span>", $kaava); $kaavahtml = Html::luo_span($kaava, array(Attr::classs(Kaavaeditori::$pikkukaava_class))); array_push($valmiit_kaavat, $kaavahtml); } // Lisätään jokaiseen raakakaavaan alku- ja // loppumerkit, jotta myös kyseiset merkit poistuvat. $kaavojen_lkm = sizeof($raakakaavat); for ($i = 0; $i < $kaavojen_lkm; $i++) { $raakakaavat[$i] = Kaavaeditori::$pikkukaavan_alku . $raakakaavat[$i] . Kaavaeditori::$pikkukaavan_loppu; // Käydään vielä läpi valmiit kaavat ja suoristetaan vielä sulut. // Huomaa, ettei tätä voi tehdä aiemmin, koska sulut ovat osa // monia erikoismerkintöjä. $valmiit_kaavat[$i] = str_replace("(", "<span class='ital_off'>(</span>", $valmiit_kaavat[$i]); $valmiit_kaavat[$i] = str_replace(")", "<span class='ital_off'>)</span>", $valmiit_kaavat[$i]); } // Korvataan tekstin raakakaavat valmiilla kaavoilla: $palautus = str_replace($raakakaavat, $valmiit_kaavat, $teksti); } return $palautus; }
/** * Palauttaa koodi, joka luo lomakkeen, jonka avulla voi muokata omaa * salasanaa ja muita tietoja. * * @param Parametrit $parametriolio * @param type $uusi jos true, niin kyseessä uuden henkilön luominen. * @return type */ function nayta_henkilotietolomake(&$parametriolio, $uusi) { /*$puh = $parametriolio->puhelin; $os = $parametriolio->osoite; $asuinmaa = $parametriolio->asuinmaa; $kieli = $parametriolio->kieli_henkilo;*/ $tahti_molemmissa = "*"; $tahti_vain_uudessa = ""; $otsikko = Html::luo_b(Kayttajatekstit::henkilolomakeotsikko_muokkaus(), array()); $tallennuspainike = Html::luo_input(array(Attr::type("submit"), Attr::name(Toimintonimet::$henkilotietotoiminto), Attr::value(Kayttajatekstit::$nappi_tallenna_tietomuutokset_value), Attr::title(Kayttajatekstit::$nappi_tallenna_tietomuutokset_title), Attr::classs("rinnakkain"))); if ($uusi) { $etun = $parametriolio->etun; $sukun = $parametriolio->sukun; $lempin = $parametriolio->lempin; $komm = $parametriolio->komm; $uusktunnus = $parametriolio->uusktunnus; $eosoite = $parametriolio->eosoite; $name = Toimintonimet::$henkilotietotoiminto; $tahti_vain_uudessa = "*"; $tallennuspainike = Html::luo_input(array(Attr::type("submit"), Attr::name(Toimintonimet::$henkilotietotoiminto), Attr::value(Kayttajatekstit::$nappi_henkilo_tallenna_uusi_value), Attr::title(Kayttajatekstit::$nappi_henkilo_tallenna_uusi_title), Attr::classs("rinnakkain"))); $otsikko = Kayttajatekstit::henkilolomakeotsikko_uusi(); } else { // Haetaan tiedot tietokannasta: $user = new Henkilo($parametriolio->get_omaid(), $parametriolio->get_tietokantaolio()); if ($user->olio_loytyi_tietokannasta) { $etun = $user->get_arvo(Henkilo::$sarakenimi_etunimi); $sukun = $user->get_arvo(Henkilo::$sarakenimi_sukunimi); $lempin = $user->get_arvo(Henkilo::$sarakenimi_lempinimi); $komm = $user->get_arvo(Henkilo::$sarakenimi_kommentti); $uusktunnus = $parametriolio->uusktunnus; $eosoite = $user->get_arvo(Henkilo::$sarakenimi_eosoite); $name = Toimintonimet::$henkilotietotoiminto; } else { $this->lisaa_virheilmoitus(Tekstit::$virheilm_henkiloa_ei_loytynyt); } } $otsikko .= Html::luo_p(Kayttajatekstit::henkilolomake_nakyvyysselitys(), array(Attr::style("font-size: 80%"))); $mj = $otsikko; // Ilmoitukset: $mj .= Html::luo_div($parametriolio->ilmoitus_kokon, array(Attr::id(Kayttajanakymat::$id_henkilotietolomakeilmoitukset), Attr::classs("korostus"))); $mj .= Html::luo_table(Html::luo_tablerivi(Html::luo_tablesolu("*" . Kayttajatekstit::$lomakekentta_etunimi, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("text"), Attr::name(Kayttajakontrolleri::$name_etunimi), Attr::value($etun), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu("*" . Kayttajatekstit::$lomakekentta_sukunimi, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("text"), Attr::name(Kayttajakontrolleri::$name_sukunimi), Attr::value($sukun), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu(Kayttajatekstit::$lomakekentta_lempinimi, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("text"), Attr::name(Kayttajakontrolleri::$name_lempinimi), Attr::value($lempin), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu(Kayttajatekstit::$lomakekentta_kuvaus_itsesta, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("text"), Attr::name(Kayttajakontrolleri::$name_kommentti), Attr::value($komm), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu("*" . Kayttajatekstit::$lomakekentta_email, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("text"), Attr::name(Kayttajakontrolleri::$name_eosoite), Attr::value($eosoite), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu($tahti_vain_uudessa . Kayttajatekstit::$lomakekentta_kayttajatunnus, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("text"), Attr::name(Kayttajakontrolleri::$name_uusikayttajatunnus), Attr::value(""), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu($tahti_vain_uudessa . Kayttajatekstit::$lomakekentta_salasana, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("password"), Attr::name(Kayttajakontrolleri::$name_uusisalasana), Attr::value(""), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu($tahti_vain_uudessa . Kayttajatekstit::$lomakekentta_salasana_vahvistus, array()) . Html::luo_tablesolu(Html::luo_input(array(Attr::type("password"), Attr::name(Kayttajakontrolleri::$name_salasanavahvistus), Attr::value(""), Attr::size(40))), array()), array()) . Html::luo_tablerivi(Html::luo_tablesolu("", array()) . Html::luo_tablesolu($tallennuspainike . Html::luo_input(array(Attr::type("submit"), Attr::name(Toimintonimet::$henkilotietotoiminto), Attr::value(Kayttajatekstit::$nappi_poistu_tiedoista_value), Attr::title(Kayttajatekstit::$nappi_poistu_tiedoista_title), Attr::classs("rinnakkain"))), array()), array()), array(Attr::summary("Muokkaustiedot"), Attr::align("center"))); $lomake = Html::luo_form($mj, array(Attr::action("index.php"), Attr::method("post"), Attr::classs("tietolomake_rajaton"))); return $lomake; }