/** Metodi, joka puhdistaa ja tarkastaa omien tietojen muutokset tiedot. * Palauttaa merkkijonon "kunnossa", ellei korjattavaa, muuten virheviestin. * * Huom: Salasanaa ei voida tuoda sen säilytystavan takia, vaan kentät jätetään * tyhjiksi. Ellei mitään ilmesty niihin, vanhat tunnukset jäävät voimaan. * Samoin käyttäjätunnusta ei tuoda, koska muuten tarkistuksessa sen todetaan * olevan jo käytössä. * * @param Parametrit $parametriolio * @return <type> */ function tarkista_henkilotietojen_muutokset(&$parametriolio) { $etun = $parametriolio->etun; $sukun = $parametriolio->sukun; $lempin = $parametriolio->lempin; $komm = $parametriolio->komm; $ktunnus = $parametriolio->uusktunnus; $sala = $parametriolio->uussalasana; $salavahvistus = $parametriolio->salavahvistus; $eosoite = $parametriolio->eosoite; $palaute = "kunnossa"; $etun = Yleismetodit::tarkista_syote($etun, true); $sukun = Yleismetodit::tarkista_syote($sukun, true); $lempin = Yleismetodit::tarkista_syote($lempin, true); $komm = Yleismetodit::tarkista_syote($komm, true); $eosoite = Yleismetodit::tarkista_syote($eosoite, true); // Tarkistetaan, etteivät tunnukset muutu puhdistuksessa: if ($ktunnus != Yleismetodit::tarkista_syote($ktunnus, true) || $sala != Yleismetodit::tarkista_syote($sala, true) || $salavahvistus != Yleismetodit::tarkista_syote($salavahvistus, true)) { $palaute = "Käyttäjätunnuksessa tai salasanassa on\n sopimattomia merkkejä tai tyhjää\n päissä! Korjaa ne!"; } else { if ($eosoite == '' || $etun == '' || $sukun == '') { $palaute = "Jokin pakollisista kentistä on tyhjä!\n (Salasana ja käyttäjätunnus saavat olla\n tyhjiä -> eivät vaihdu)\n Kokeile uudestaan!"; } else { if ($ktunnus != "" && Yleismetodit::arvo_kaytetty("henkilot", "kayttajatunnus", $ktunnus)) { $palaute = "Käyttäjätunnus on jo käytässä!\n Valitse toinen!"; } else { if ($sala != $salavahvistus) { $palaute = "Salasana ja sen vahvistus eivät täsmää!\n Kirjoita ne uudelleen!"; } } } } return $palaute; }
/** * Tarkistaa kuvan tiedot ja ladatun tiedoston ominaisuudet * @param <type> $ladattu_kuva Palvelimelle ladattu kuvatiedosto. * @param <type> $kuvaotsikko_kuva * @param <type> $kuvaselitys_kuva * @param <type> $vuosi_kuva * @param <type> $kk_kuva * @param <type> $paiva_kuva * @param <type> $uusi * @param <type> $lataustiedosto_kuva * @return <type> */ function tarkista_kuvatiedot($ladattu_kuva, &$kuvaotsikko_kuva, &$kuvaselitys_kuva, &$vuosi_kuva, &$kk_kuva, &$paiva_kuva, $uusi) { $tarkistuksen_tulos = "ok"; $tyhjatunnus = -1; // Tietokantaan tallennetaan -1, kun halutaan tyhjä. /* Tehdään rivinvaihdot html:ksi. */ $kuvaselitys_kuva = Yleismetodit::huolehdi_rivinvaihdoista($kuvaselitys_kuva); // Seuraava tehdään vain uudelle. Muokkauksessa kuvaa ei pysty // toistaiseksi vaihtamaan. if ($uusi) { // lataustarkistusmetodi heittää virheen sattuessa poikkeuksen: try { lataustarkistus_kuva($ladattu_kuva); } catch (Exception $poikkeus) { $tarkistuksen_tulos = $poikkeus->getMessage(); } } // Ellei virheitä havaittu, mennään tarkistuksessa eteenpäin: if ($tarkistuksen_tulos == 'ok') { // Putsataan: $kuvaotsikko_kuva = Yleismetodit::tarkista_syote($kuvaotsikko_kuva, false); $kuvaselitys_kuva = Yleismetodit::tarkista_syote($kuvaselitys_kuva, false); if ($vuosi_kuva == "") { $vuosi_kuva = $tyhjatunnus; } if ($kk_kuva == "") { $kk_kuva = $tyhjatunnus; } if ($paiva_kuva == "") { $paiva_kuva = $tyhjatunnus; } // Vuosiluku saa olla tyhjä tai muuten pitää olla 4 numeroa. if (preg_match('/^\\d\\d\\d\\d$/', $vuosi_kuva) == 0 && $vuosi_kuva != $tyhjatunnus) { $tarkistuksen_tulos = "Vuosiluvun pitää olla 4-numeroinen\n luku (esim. 1999) tai tyhjä!"; } else { if (preg_match('/^\\d\\d$/', $kk_kuva) == 0 && preg_match('/\\d/', $kk_kuva) == 0 && $kk_kuva != $tyhjatunnus || $kk_kuva < -1 || $kk_kuva == 0 || $kk_kuva > 12) { $tarkistuksen_tulos = "Kuukauden pitää olla\n luku väliltä 1-12 tai tyhjä!"; } else { if (preg_match('/^\\d\\d$/', $paiva_kuva) == 0 && preg_match('/\\d/', $paiva_kuva) == 0 && $paiva_kuva != $tyhjatunnus || $paiva_kuva < -1 || $paiva_kuva == 0 || $paiva_kuva > 31) { $tarkistuksen_tulos = "Päivän pitää olla\n luku väliltä 1-31 tai tyhjä!"; } else { $tarkistuksen_tulos = Palautteita::$lomaketiedot_ok; } } } } return $tarkistuksen_tulos; }
/** * Palauttaa html-linkkejä, jotka vievät kyseiseen tehtävään. Nämä * on tarkoitus sijoittaa tehtäväsivulle, jotta tehtävien selaaminen helpottuu. * * @param Parametrit $parametriolio * @return <type> */ function hae_tehtavalinkit($parametriolio) { $tehtavalinkki_html = ""; $id_kokon = $parametriolio->id_kokon; /* Haetaan tehtävät: */ $tietokantaolio = $parametriolio->get_tietokantaolio(); $tehtavat = $this->hae_tehtavat(); if (empty($tehtavat)) { // Jos muutat tätä, ota huomioon myös vastaanottava metodi. $tehtavalinkki_html = Tekstit::$tehtava_ilm_ei_loytynyt; } else { $laskuri = 1; // Kertoo tehtävän juoksevan numeron (juokseva nro). $pituus = 25; // Linkin suurin pituus (ylimenevä osa katkaistaan) foreach ($tehtavat as $tehtava) { /*$tehtavalinkki_html .= "<a href='index.php". "?id_kokon=".$id_kokon. "&kieli_id=".$parametriolio->kieli_id. "&taso_kokon=".$parametriolio->taso_kokon. "&oppiaine_kokon=".$parametriolio->oppiaine_kokon. "&id_teht=".$tehtava->getId(). "&".Oliotyyppi::$naytettava_name."=". Palaute::$NAYTETTAVA_OLIOTYYPPI_TEHTAVA. "#tehtava".$tehtava->getId()."' ". "title='".$tehtava->getOtsikko()."'>". $laskuri.". ". Yleismetodit::leikkaa_merkkijono($tehtava->getOtsikko(), $pituus). "</a>";*/ $tehtavalinkki_html .= "<a href='index.php" . "?id_teht=" . $tehtava->getId() . "#tehtava" . $tehtava->getId() . "' " . "title='" . $tehtava->getOtsikko() . "'>" . $laskuri . ". " . Yleismetodit::leikkaa_merkkijono($tehtava->getOtsikko(), $pituus) . "</a>"; $laskuri++; } } return $tehtavalinkki_html; }
/** * Palauttaa koostelinkit ja toimintapainikkeet html-koodina. Huomaa: * Parametrina annetaan vain sellaiset elementit, joihin käyttäjällä * ainakin katsomisoikeudet. Tosin muokkausoikeudet pitää täällä vielä * erikseen selvittää (jos mahd muokata). Viittausolioissa on valmiina * numerointi, jolloin tulee samat kuin varsinaisessa sisällössä. * * @param Kooste $kooste Kooste-luokan olio * @param array $elementit Elementti-luokan oliot * @param array $viittausoliot Oliot, joihin elementit viittaavat. * @param bool $wrapped Jos true, niin palautteen ympärille lisätään div, * muuten ei. * @return type */ public function luo_koostelinkit($kooste, $elementit, $viittausoliot, $wrapped) { $html = ""; $maxpituus = 22; // Linkin kirjainten maksimimäärä. Muu leikataan. /*======================== käyttäjän oikeudet ( ========*/ //$koosteoikeudet = $kooste->hae_kayttajan_oikeudet($omaid); /*====================================================*/ // Varmistetaan, että elementtejä ja olioita on yhtä paljon: if (sizeof($elementit) === sizeof($viittausoliot)) { for ($i = 0; $i < sizeof($elementit); $i++) { $painike_alas = ""; $painike_ylos = ""; $olio = $viittausoliot[$i]; $elementti = $elementit[$i]; $html_raaka = $olio->getOtsikkomerkinta() . " "; if ($olio instanceof Kokonaisuusolio) { $html_raaka .= Yleismetodit::leikkaa_merkkijono($olio->getOtsikko(), $maxpituus); } else { if ($olio instanceof Tehtava) { $html_raaka .= Yleismetodit::leikkaa_merkkijono($olio->getOtsikko(), $maxpituus); } else { if ($olio instanceof Ratkaisu) { $html_raaka .= Yleismetodit::leikkaa_merkkijono($olio->getVastaus(), $maxpituus); } } } $linkki = Html::luo_a_linkto("#elem" . $elementti->get_id(), $html_raaka . " " . $painike_alas . $painike_ylos, array(Attr::classs("koostelinkki"))); $html .= Html::luo_div($linkki, array(Attr::title($elementti->hae_otsikko()))); } } else { $html = Tekstit::$kooste_virheilm_linkeissa_erimaara_elem_ja_olioita; } if ($wrapped) { $html_wrapped = Html::luo_div($html, array(Attr::id(Koostenakymat::$kooste_otsikkolinkit_id))); } else { // Not wrapped.. $html_wrapped = $html; } return $html_wrapped; }
function tunnukset_ok($uusi_olio) { $ok = true; $muokkaustapa = $this->get_tunnusten_muokkaus(); $salavahvistus = $this->get_salavahvistus(); $sala = $this->get_arvo(Henkilo::$sarakenimi_salasana); // Mihin tahansa if-lauseeseen joutuminen merkitsee virhettä. // Käyttäjätunnus jo käytössä? Muokatessa tarkistetaan vain, jos // sitä on tarkoitus muuttaa. if ($uusi_olio || $muokkaustapa === Tunnukset::$kumpikin || $muokkaustapa === Tunnukset::$vain_kayttis) { $taulunimi = Henkilo::$taulunimi; $sarakenimi = Henkilo::$sarakenimi_kayttajatunnus; $ktunnus = $this->get_arvo(Henkilo::$sarakenimi_kayttajatunnus); if (Yleismetodit::arvo_jo_kaytossa($taulunimi, $sarakenimi, $ktunnus, $this->tietokantaolio)) { $this->lisaa_virheilmoitus(Kayttajatekstit::$tunnus_jo_kaytossa); $ok = false; } // Käyttäjätunnuksen merkit ja pituus: if (!Tunnukset::kayttajatunnus_ok($ktunnus)) { $this->lisaa_virheilmoitus(Kayttajatekstit::$tunnus_kayttajatunnus_pituus_tai_merkkivirhe . "<br/>" . Kayttajatekstit::$tunnus_kayttajatunnuksen_min_pituus_on . " " . Tunnukset::$pituus_min_kayttajatunnus . ". " . Kayttajatekstit::$tunnus_kayttajatunnuksen_max_pituus_on . " " . Tunnukset::$pituus_max_kayttajatunnus . ".<br/>" . Kayttajatekstit::$tunnus_vain_seuraavat_merkit_sopivat . ": " . Tunnukset::$sallitut_merkit); $ok = false; } } // Salasana tarkistetaan vain uudelle oliolle tai muokattaessa: if ($uusi_olio || $muokkaustapa === Tunnukset::$kumpikin || $muokkaustapa === Tunnukset::$vain_salis) { // Salasana ja vahvistus täsmäävät? if ($salavahvistus !== $sala) { $this->lisaa_virheilmoitus(Kayttajatekstit::$tunnus_vahvistus_ei_tasmaa); $ok = false; } // Salasanan merkit ja pituus: if (!Tunnukset::salasana_ok($sala)) { $this->lisaa_virheilmoitus(Kayttajatekstit::$tunnus_salasana_pituus_tai_merkkivirhe . "<br/>" . Kayttajatekstit::$tunnus_salasanan_min_pituus_on . " " . Tunnukset::$pituus_min_salasana . ". " . Kayttajatekstit::$tunnus_salasanan_max_pituus_on . " " . Tunnukset::$pituus_max_salasana . ".<br/>" . Kayttajatekstit::$tunnus_vain_seuraavat_merkit_sopivat . ": " . Tunnukset::$sallitut_merkit); $ok = false; } } return $ok; }
function testaa_merkkijonometodeita() { /* Testataan merkkijonometodia "php_yleinen/Yleismetodit.php. * yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki)":*/ $this->lisaa_kommentti("<h2>Testataan merkkijonometodia 'hae_merkkijonot'</h2>"); $this->lisaa_kommentti("Testataan merkkijonometodia 'hae_merkkijonot'<br/>"); $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhtia."; $alkumj = "("; $loppumj = ")"; $hae_kaikki = true; $this->lisaa_kommentti("Yritetään etsiä merkkijonosta <br/>"); $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>"); $this->lisaa_kommentti("kaikki sulkujen väliin jäävät merkkijonot eli '200 km/h' " . "ja 'siinä'<br/>"); $tulostaulukko = Yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); if (sizeof($tulostaulukko) == 2 && $tulostaulukko[0] == "200 km/h" && $tulostaulukko[1] == "siinä") { $this->lisaa_kommentti("OIKEIN! Loytyi merkkijonot '" . $tulostaulukko[0] . "' ja '" . $tulostaulukko[1] . "'"); $this->lisaa_kommentti("<br/><br/>"); } else { if (empty($tulostaulukko)) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>"); $virheiden_lkm++; } else { $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>"; for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"; } $taul .= "</div>"; $this->lisaa_virheilmoitus($taul); $virheiden_lkm++; } } /********************************/ $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhtia."; $alkumj = "("; $loppumj = ")"; $hae_kaikki = false; $this->lisaa_kommentti("Yritetään etsiä merkkijonosta <br/>"); $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>"); $this->lisaa_kommentti("1. sulkujen väliin jäävä merkkijono eli '200 km/h'<br/>"); $tulostaulukko = Yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); if (sizeof($tulostaulukko) == 1 && $tulostaulukko[0] == "200 km/h") { $this->lisaa_kommentti("OIKEIN! Loytyi merkkijono '" . $tulostaulukko[0] . "'"); $this->lisaa_kommentti("<br/><br/>"); } else { if (empty($tulostaulukko)) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>"); $virheiden_lkm++; } else { $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>"; for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"; } $taul .= "</div>"; $this->lisaa_virheilmoitus($taul); } } /********************************/ $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhtia."; $alkumj = "Auto"; $loppumj = "Oli"; $hae_kaikki = true; $this->lisaa_kommentti("Yritetään etsiä merkkijonosta <br/>"); $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>"); $this->lisaa_kommentti("sanojen 'Auto' ja 'Oli' väliin jäävä merkkijono " . "eli ' ajoi (200 km/h) kaarteeseen. '<br/>"); $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); if (sizeof($tulostaulukko) == 1 && $tulostaulukko[0] == " ajoi (200 km/h) kaarteeseen. ") { $this->lisaa_kommentti("OIKEIN! Loytyi merkkijono '" . $tulostaulukko[0] . "'"); $this->lisaa_kommentti("<br/><br/>"); } else { if (empty($tulostaulukko)) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>"); $virheiden_lkm++; } else { $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>"; for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"; } $taul .= "</div>"; $this->lisaa_virheilmoitus($taul); } } /*****************/ /* Haetaan a-kirjainten välistä. Kolme peräkkäistä aata pitäisi mennä * niin, että eka on lopetus, toka aloitus ja kolmas lopetus ja väliin * jäävää tyhjää ei palauteta. */ $teksti = "Auto ajoi (200 km/h) kaaarteeseen. Olipa (siinä) vauhtia."; $alkumj = "a"; $loppumj = "a"; $hae_kaikki = true; $this->lisaa_kommentti("Yritetään sitten etsiä merkkijonosta (huom 3 a-kirjainta) <br/>"); $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>"); $this->lisaa_kommentti("'a'-kirjainten (pienten) väliin jäävät merkkijonot.<br/>"); $this->lisaa_kommentti("<br/>"); $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); if (sizeof($tulostaulukko) == 2 && $tulostaulukko[0] == "joi (200 km/h) k" && $tulostaulukko[1] == " (siinä) v") { $this->lisaa_kommentti("OIKEIN! Loytyi seuraavat merkkijonot:<br/>"); for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $this->lisaa_kommentti($i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"); } $this->lisaa_kommentti("<br/><br/>"); } else { if (empty($tulostaulukko)) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>"); $virheiden_lkm++; } else { $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>"; for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"; } $taul .= "</div>"; $this->lisaa_virheilmoitus($taul); } } /*****************/ $teksti = "Auto ajoi (200 km/h) kaarteeseen. Olipa (siinä) vauhti."; $alkumj = "a"; $loppumj = "a"; $hae_kaikki = true; $this->lisaa_kommentti("Yritetään sitten etsiä merkkijonosta <br/>"); $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>"); $this->lisaa_kommentti("'a'-kirjainten (pienten) väliin jäävät merkkijonot:<br/>"); $this->lisaa_kommentti("<br/>"); $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); if (sizeof($tulostaulukko) == 2 && $tulostaulukko[0] == "joi (200 km/h) k" && $tulostaulukko[1] == "rteeseen. Olip") { $this->lisaa_kommentti("OIKEIN! Loytyi seuraavat merkkijonot:<br/>"); for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $this->lisaa_kommentti($i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"); } $this->lisaa_kommentti("<br/><br/>"); } else { if (empty($tulostaulukko)) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>"); $virheiden_lkm++; } else { $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>"; for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"; } $taul .= "</div>"; $this->lisaa_virheilmoitus($taul); } } /*****************/ $this->lisaa_kommentti("Yritetään sitten etsiä merkkijonosta <br/>"); $this->lisaa_kommentti("'<b>" . $teksti . "</b>'<br/>"); $this->lisaa_kommentti("vain 1. a-kirjainten väliin jäävä merkkijonot.<br/>"); $this->lisaa_kommentti("<br/>"); $hae_kaikki = false; $tulostaulukko = yleismetodit::hae_merkkijonot($teksti, $alkumj, $loppumj, $hae_kaikki); if (sizeof($tulostaulukko) == 1 && $tulostaulukko[0] == "joi (200 km/h) k") { $this->lisaa_kommentti("OIKEIN! Loytyi seuraavat merkkijonot:<br/>"); for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $this->lisaa_kommentti($i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"); } $this->lisaa_kommentti("<br/><br/>"); } else { if (empty($tulostaulukko)) { $this->lisaa_virheilmoitus("<div class='virhe'>Virhe! Mitään ei löytynyt!</div>"); $virheiden_lkm++; } else { $taul = "<div class='virhe'>Virhe! Taulukon sisältö:<br/>"; for ($i = 0; $i < sizeof($tulostaulukko); $i++) { $taul .= $i + 1 . ". merkkijono: " . $tulostaulukko[$i] . "<br/>"; } $taul .= "</div>"; $this->lisaa_virheilmoitus($taul); } } $this->lisaa_kommentti("<h2>Merkkijonometodin 'yleismetodit::hae_merkkijonot' testaus loppu!</h2>"); /***************************************************************************/ $this->lisaa_kommentti("<h2>Testataan luokan Kaavaeditori metodia\n 'muotoile_kaavat(teksti)'</h2>"); $this->lisaa_kommentti("Syötetään metodiin merkkijono '{@4⋅[@4##6@]=5@}'\n ja katsotaan, näyttääkö tulos hyvältä. Alla tulos:<br/><br/>"); $teksti = '{@4⋅[@4##6@]=5@}'; $tulos = Kaavaeditori::muotoile_kaavat($teksti); $this->lisaa_kommentti($tulos); $this->lisaa_kommentti("<a href='../php_yleinen/matematiikka/murtolukutesti.php'>" . "Murtolukutesti</a><br/>"); $this->lisaa_kommentti("<br/>"); "<h2>Loppu luokan Kaavaeditori metodin 'muotoile_kaavat(teksti)' testi LOPPU</h2>"; $this->lisaa_kommentti("******************************************************************<br/>"); }
/** * 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; }