/** * Hakee tietokannasta henkilön nimen ja palauttaa sen. Ellei löydy, * palauttaa merkkijonon "tuntematon". * @param <type> $id */ public function hae_henkilon_nimi($id) { $nimi = "Tuntematon"; $tk_henkilo_olio = $this->tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $id); if ($tk_henkilo_olio !== Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $nimi = $tk_henkilo_olio->etunimi . " " . $tk_henkilo_olio->sukunimi; $this->lisaa_kommentti("Henkilön nimi tietokannassa: " . $nimi); } else { $this->lisaa_kommentti("Henkilön nimen haku tietokannasta ei onnistunut!"); $this->lisaa_virheilmoitus("Henkilön nimen haku tietokannasta ei onnistunut!"); } return $nimi; }
/** * Palauttaa true, jos tietokannasta löytyy yksi useampi sellainen rivi, * joka vastaa kaikkia parametrina annettuja sarakenimiä vastaavia * tietokantasoluja. Ellei yhtään sellaista riviä löydy, palauttaa arvon * false. * * Virhetapauksessa, esimerkiksi jos jokin tietokantasoluarvoista on * virheellinen, metodi palauttaa arvon true. * * Tästä on hyötyä, kun ennen uuden olion tai muutoksen tallennusta * halutaan tarkistaa, onko tietyn ehdot täyttävä olio jo tallennettu * tietokantaan. */ public function on_jo_olemassa($taulunimi, $sarakenimet) { $palaute = true; $ehtotietokantasolut = array(); foreach ($sarakenimet as $snimi) { array_push($ehtotietokantasolut, $this->get_tietokantasolu($snimi)); } $osumat = $this->tietokantaolio->hae_tk_oliot($taulunimi, $ehtotietokantasolut); // Ellei osumia löydy, ei linkkiä ilmeisesti ole vielä luotu. if (empty($osumat)) { $palaute = false; } return $palaute; }
/** * Konstruktorin "overloading" eli eri konstruktorit eri parametreille * ei ole tuettu PHP:ssä. Kierrän tämän antamalla parametreille, joita * ei käytetä, vakioarvon, joka tarkoittaa, ettei parametri käytössä. * * @param Tietokantaolio $tietokantaolio * @param <type> $tk_pikakommenttiolio Tietokantahausta saatava yksi rivi * oliona. */ function __construct($tietokantaolio, $id) { $this->TAULUNIMI_PIKAKOMMENTIT = Tietokannan_taulunimet::$pikakommentit; $this->virheilmot = array(); $this->tietokantaolio = $tietokantaolio; if ($id == Pikakommentti::$PARAMETRI_EI_KAYTOSSA) { $this->id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; } else { $this->id = $id; } $this->henkilo_id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->tallennushetki_sek = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->muokkaushetki_sek = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->kohde_id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->kohde_tyyppi = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->kommentti = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->tk_pikakommenttiolio = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; // Haetaan ja sijoitetaan tietokantarivin arvot, jos se on // olemassa eli parametri käytössä. if ($id != Pikakommentti::$PARAMETRI_EI_KAYTOSSA) { // Haetaan pikakommentin tiedot tietokannasta: try { $taulunimi = "pikakommentit"; $sarakenimi = "id"; $hakuarvo = $id; $tk_pikakommenttiolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); // Kun olio löytyy, asetetaan tiedot paikalleen: if ($tk_pikakommenttiolio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $this->henkilo_id = $tk_pikakommenttiolio->henkilo_id; $this->tallennushetki_sek = $tk_pikakommenttiolio->tallennushetki_sek; $this->muokkaushetki_sek = $tk_pikakommenttiolio->muokkaushetki_sek; $this->kohde_id = $tk_pikakommenttiolio->kohde_id; $this->kohde_tyyppi = $tk_pikakommenttiolio->kohde_tyyppi; $this->kommentti = $tk_pikakommenttiolio->kommentti; $this->olio_loytyi_tietokannasta = true; } else { // Jos mitään ei löydy, muutetaan ei-määritellyksi: $tk_pikakommenttiolio = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->id = Pikakommentti::$MUUTTUJAA_EI_MAARITELTY; $this->olio_loytyi_tietokannasta = false; } // Otetaan ylös tiedot luokan muuttujaaan. $this->tk_pikakommenttiolio = $tk_pikakommenttiolio; } catch (Exception $virhe) { nollaa_muuttujat(); } } }
/** * Tämä palauttaa onnistuessaa uuden Tietokantarivi-luokan olion, jossa on * samanlaiset solut kuin tämän luokan tietokantarivillä ja jonka * id-tunnisteen arvo on $id. * Solujen arvoiksi syötetään tietokannan arvot. Metodi luo siis uuden * tietokantarivin, <i>eikä tee muutoksia this->tietokantarivi-olioon</i>. * * <p> * Tätä voidaan hyödyntää esimerkiksi ennen muutosten tallennusta niin, että * tämän avulla voidaan tarkistaa, onko yhtään tietoa muutettu. * </p> * * Ellei tunnistetta vastaavaa riviä löydy tietokannasta, palautetaan arvo * Malliluokkapohja2::$EI_LOYTYNYT_TIETOKANNASTA. * Palautteen arvioinnissa kannattaa käyttää instanceof-metodia. * * @param type $id */ public function hae_tietokantarivi_tietokannasta($id) { $palaute = Malliluokkapohja2::$EI_LOYTYNYT_TIETOKANNASTA; $tietokantasolut_array = array(); foreach ($this->get_tietokantasolut() as $solu) { if ($solu instanceof Tietokantasolu) { array_push($tietokantasolut_array, new Tietokantasolu($solu->get_sarakenimi(), $solu->get_arvo_on_luku())); } } // Haetaan arvot tietokannasta: $osumataulukko = $this->tietokantaolio->hae_eka_osuma_taulukkona($this->tk_taulunimi, Malliluokkapohja2::$SARAKENIMI_ID, $this->id_tietokanta); // Huom! Alla osumataulukko sisältää kaikki tiedot kahteen kertaan // (indeksin ja sarakenimen avulla haettaviksi)! if (!empty($osumataulukko) && sizeof($osumataulukko) == 2 * sizeof($tietokantasolut_array)) { foreach ($tietokantasolut_array as $solu) { $solu->set_arvo_kevyt($osumataulukko[$solu->get_sarakenimi()]); } $palaute = new Tietokantarivi($this->tk_taulunimi, $tietokantasolut_array); } else { $this->lisaa_virheilmoitus("Virhe metodissa 'hae_tietokantarivi" . "_tietokannasta'. Osumataulukon koko =" . sizeof($osumataulukko) . " ja tietokantasolut_arrayn koko=" . sizeof($tietokantasolut_array)); } return $palaute; }
/** * Hakee suurimmän parametrina annettavan tietokantataulun id-kentän arvoista. * Ellei mitään löydy, palauttaa arvon -1. * @param Tietokantaolio $tietokantaolio * @param <type> $taulunimi */ function hae_suurin_id($tietokantaolio, $taulunimi) { // Haetaan suurin olemassaolevista havainto-id:eistä, jotta // mahdollisen kopioitavan/uuden havainnon id voidaan "arvata" // (=yhtä isompi). Tämä ei välttämättä pidä paikkaansa esimerkiksi // tapauksessa, jossa joku toinen ehtii tallentamaan välissä. $hakulause = "SELECT MAX(id) AS suurin FROM {$taulunimi}"; $osumataulukko = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); $suurin_id = -1; if (!empty($osumataulukko) && is_numeric($osumataulukko[0]->suurin)) { $suurin_id = $osumataulukko[0]->suurin; } return $suurin_id; }
/** * * @param <type> $valinnat * @param Tietokantaolio $tietokantaolio * @param int $omaid * @return <string> Palauttaa viestin suorituksen onnistumisesta, joka * näytetään käyttäjälle. */ function poista_suoritukset(&$valinnat, $tietokantaolio, $omaid) { $vastaus = ''; $lkm = 0; if (!isset($valinnat)) { $vastaus = "Poisto epäonnistui!\n Valintataulukko on määrittelemätön"; } else { if ($valinnat == "" || sizeof($valinnat) == 0) { $vastaus = "Poisto epäonnistui!\n Yhtään valittua riviä ei löytynyt!"; } else { $ilmoitus = ""; $poistettu_lkm = 0; // PIkakommentitt! foreach ($valinnat as $id) { $poisto = $tietokantaolio->poista_rivi("suoritukset", "id", $id); if ($poisto == "onnistui") { $lkm++; //=============== PIkakommenttien poisto ======================= // Luodaan Kontrolleri_pikakommentit-olio, joka huolehtii //orpojen pikakommenttien poistosta (parametriolio tarvitaan siihen): $kokoelmanimi = ""; //Ei tarvetta $paraolio = new Parametrit($kokoelmanimi, $omaid, $tietokantaolio); $kontrolleri = new Kontrolleri_pikakommentit($tietokantaolio, $paraolio, ""); $kohde_tyyppi = Pikakommentti::$KOHDE_LIIKUNTASUORITUS; $kohde_id = $id; $poistettu_lkm += $kontrolleri->poista_pikakommentit($tietokantaolio, $kohde_tyyppi, $kohde_id); //============================================================== } } if ($poistettu_lkm == 0) { $ilmoitus = "<br /> Poistettavia pikakommentteja ei löytynyt."; } else { $ilmoitus .= "<br /> Pikakommentit (yht. " . $poistettu_lkm . " kpl) poistettu."; } $vastaus = "Suorituksia poistettiin onnistuneesti " . $lkm . " kpl. " . $ilmoitus; } } return $vastaus; }
<?php session_start(); // Aloitetaan istunto. require_once '../kokonaisuudet/asetukset/tietokantayhteys.php'; 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)) {
require_once 'kayttajahallinta/Kayttajatekstit.php'; require_once 'kayttajahallinta/Henkilo.php'; require_once 'kayttajahallinta/Suodatin.php'; require_once 'kayttajahallinta/Kayttajanakymat.php'; require_once 'kayttajahallinta/Kayttajakontrolleri.php'; require_once 'yhteiset/php_yhteiset.php'; require_once 'yhteiset/Parametrit.php'; require_once 'yhteiset/Palaute.php'; $kirjautumistieto = ''; if (isset($_SESSION['tiedot'])) { $kirjautumistieto = "Kirjautunut: " . $_SESSION['tiedot']->etunimi; } $aika = anna_nyk_viikonp_suomeksi() . " " . date("d.m.Y"); $aikailmoitus = "Tänään on {$aika}"; // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); $omaid = $_SESSION['tiedot']->id; // Tarkistetaan, ettei käyttäjää ole potkaistu ulos (sessiotiedot // voivat olla vanhentuneita tai kopioituja): if (!online($omaid, $tietokantaolio)) { $kansiotaso = 1; toteuta_kirjaudu_ulos($tietokantaolio, $dbnimi, $kansiotaso); exit; } // Verkkosivujen hallitsijan totuusarvo: $omat_valtuudet = $_SESSION['tiedot']->valtuudet; $kuningas = on_kuningas_pika($omat_valtuudet); // Luodaan parametri- ja palautusolio: $kokoelmanimi = ""; // Tämä koskee kuvia. Ei tarvinne täällä, ellei
/** * Hakee bongauskuva_albumit tietokannasta. Kaikki albumit ovat yhteisiä ja * albumit luodaan aina lennossa niin, että jokaiselle lajiluokalle, josta on * kuvia, näytetään oma albumi. Lisäksi näytetään kullekin yläluokalle oma * yhteinen albumi, jossa on esimerkiksi kaikki linnut. * * Kuvien muokkaukseen ja poistoon tulee kuvakohtaiset rajoitukset niin, että * itse ladatun kuvan saa poistaa/muokata normaali jäsen ja ylläpitäjä saa * poistaa/muokata minkä tahansa kuvan. Lisätä saa kuka vain. * * @param <type> $omaid * @param Tietokantaolio $tietokantaolio * @return <type> */ function bongaus_hae_albumit($omaid, $tietokantaolio) { // Paluu havaintoihin -painike: $paluu = Bongauspainikkeet::$TAKAISIN_HAVAINTOIHIN_VALUE; $onsubmit_funktionimi = "hae_havainnot_bongaus"; $onsubmit_parametrit = array(); $form_maaritteet = array("method" => "post", "id" => "nayta_havainnot_bong", "action" => "{$_SERVER['PHP_SELF']}"); $input_maaritteet = array('name' => Bongaustoimintonimet::$havaintotoiminto, 'value' => $paluu); try { $paluunappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $paluunappi = $poikkeus->getMessage(); } $albumiHTML = "<table id='albumitaulu'>\n <tr class='otsikkorivi'><th>Laji tai luokka</th>\n <th>Kuvien lkm</th>\n <th colspan=2>{$paluunappi}</th>\n </tr>\n "; // Haetaan bongauskuvien yläluokkien id:t: $hakulause = "SELECT blajiluokat.id AS yla_id\n FROM blajiluokat\n WHERE ylaluokka_id = -1\n ORDER BY yla_id"; $ylaluokka_id_oliotaulu = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); // Käydään läpi yläluokat: $rivilaskuri = 0; foreach ($ylaluokka_id_oliotaulu as $ylaluokka_id_olio) { $ylaluokkaid = $ylaluokka_id_olio->yla_id; // Haetaan sitten kuvien lukumäärät yläluokittain. Ensin haetaan kaikki // kyseisen yläluokan kuvat (siis lkm), sitten kuvat lajeittain. // Kaikki yläluokan kuvat: /*$hakulause = "SELECT DISTINCT kuvat.id FROM kuvat JOIN bkuvalinkit AS linkit ON kuvat.id = linkit.kuva_id JOIN blajiluokat ON blajiluokat.id = linkit.lajiluokka_id WHERE blajiluokat.ylaluokka_id = $ylaluokkaid"; $kuva_lkm_taulu = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); $kuvien_lkm = sizeof($kuva_lkm_taulu);*/ $kuvien_lkm = bongaus_hae_albumin_kuvien_lkm($ylaluokkaid, $tietokantaolio, $omaid); // Haetaan lajiluokan nimi: $nimi = Lajiluokka::hae_lajiluokan_nimi($ylaluokkaid, $tietokantaolio, Kielet::$SUOMI); // Jos kuvia löytyi, jatketaan eteenpäin: if ($kuvien_lkm > 0) { // Albumin näyttöpainike: Yhdistetään submit (toissijainen) // ja ajax (ensisijainen) -toiminnot samaan painikkeeseen: $katso_pikkukuvat = Bongauspainikkeet::$NAYTA_ESIKATSELUKUVAT_VALUE; $onsubmit_funktionimi = "hae_esikatselukuvat"; $onsubmit_parametrit = array($ylaluokkaid, Kuva::$ESIKATSELUKUVIA_RIVILLA_LKM_OLETUS, "\"" . Kuva::$KUVAT_BONGAUS . "\""); $form_maaritteet = array("method" => "post", "id" => "nayta_kuvat_bong", "action" => "{$_SERVER['PHP_SELF']}?id_lj={$ylaluokkaid}"); $input_maaritteet = array('name' => Bongaustoimintonimet::$kuvatoiminto, 'value' => $katso_pikkukuvat, "title" => Bongauspainikkeet::$NAYTA_ESIKATSELUKUVAT_TITLE); try { $albumin_katselunappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $albumin_katselunappi = $poikkeus->getMessage(); } // Muotoillaan kuvien määrä niin, että uudet kuvat huomataan: /*$kuvien_lkm = "<td align='center'>$lkm</td>"; if($uudet_lkm > 0){ $kuvien_lkm = "<td align='center' class='uusia_kuvia'". "title='Uusia kuvia ".$uudet_lkm." kpl'>$lkm</td>"; }*/ $albumiHTML .= "<tr class='ylaluokkarivi'>"; $albumiHTML .= "<td>{$nimi}</td>"; $albumiHTML .= "<td>{$kuvien_lkm}</td>"; $albumiHTML .= "<td colspan=2>{$albumin_katselunappi}</td>"; $albumiHTML .= "</tr>"; /******************************************************************/ // Haetaan sitten lajeittain kyseiseen yläluokkaan kuuluvat kuvaat: // Haetaan lajiluokkien id:t: // KIELI PITÄÄ MYÖHEMMIN OTTAA MUKAAN! $kieli_id = Kielet::$SUOMI; $hakulause = "SELECT blajiluokat.id AS lj_id\n FROM blajiluokat\n JOIN bkuvaukset\n ON bkuvaukset.lajiluokka_id = blajiluokat.id\n WHERE blajiluokat.ylaluokka_id = {$ylaluokkaid}\n AND bkuvaukset.kieli = {$kieli_id}\n ORDER BY bkuvaukset.nimi"; $lj_id_oliot = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); // Käydään läpi jokainen yläluokan laji ja tehdään albumi jokaisesta // lajista (vaikka ei olisi kuvia?). foreach ($lj_id_oliot as $lj_id_olio) { $id_lj = $lj_id_olio->lj_id; // Kuvia voi lisätä vain lajiin, ei yläluokkaan, jotta laji // saadaan muistiin. $kuvan_lisaysnappi = "<form method='post'id='lisaa_kuvia_bong' " . "action='../bongaus/index.php?id_lj={$id_lj}'>" . "<input type='submit' name='" . Bongaustoimintonimet::$kuvatoiminto . "'" . "value='" . Bongauspainikkeet::$UUSI_KUVA_VALUE . "'/>" . "</form>"; // Albumin näyttöpainike: Yhdistetään submit (toissijainen) // ja ajax (ensisijainen) -toiminnot samaan painikkeeseen: $katso_pikkukuvat = Bongauspainikkeet::$NAYTA_ESIKATSELUKUVAT_VALUE; $onsubmit_funktionimi = "hae_esikatselukuvat"; $onsubmit_parametrit = array($id_lj, Kuva::$ESIKATSELUKUVIA_RIVILLA_LKM_OLETUS, "\"" . Kuva::$KUVAT_BONGAUS . "\""); $form_maaritteet = array("method" => "post", "id" => "nayta_kuvat_bong", "action" => "../bongaus/index.php?id_lj={$id_lj}"); $input_maaritteet = array('name' => Bongaustoimintonimet::$kuvatoiminto, 'value' => $katso_pikkukuvat, "title" => Bongauspainikkeet::$NAYTA_ESIKATSELUKUVAT_TITLE); try { $albumin_katselunappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet); } catch (Exception $poikkeus) { $albumin_katselunappi = $poikkeus->getMessage(); } // Haetaan lajiluokan nimi: $nimi = Lajiluokka::hae_lajiluokan_nimi($id_lj, $tietokantaolio, Kielet::$SUOMI); // Haetaan albumin kuvien lkm: /*$hakulause = "SELECT DISTINCT kuvat.id FROM kuvat JOIN bkuvalinkit AS linkit ON kuvat.id = linkit.kuva_id JOIN blajiluokat ON blajiluokat.id = linkit.lajiluokka_id WHERE blajiluokat.id = $id_lj"; $kuva_lkm_taulu = $tietokantaolio-> tee_OMAhaku_oliotaulukkopalautteella($hakulause); $kuvien_lkm = sizeof($kuva_lkm_taulu);*/ $kuvien_lkm = bongaus_hae_albumin_kuvien_lkm($id_lj, $tietokantaolio, $omaid); if ($rivilaskuri % 2 == 1) { $rivi_class = "class='bongausalbumi_parillinen_rivi'"; } else { $rivi_class = ""; } $albumiHTML .= "<tr " . $rivi_class . ">"; $albumiHTML .= "<td>{$nimi}</td>"; $albumiHTML .= "<td>{$kuvien_lkm}</td>"; $albumiHTML .= "<td>{$albumin_katselunappi}</td>"; $albumiHTML .= "<td>{$kuvan_lisaysnappi}</td>"; $albumiHTML .= "</tr>"; $rivilaskuri++; } } else { // Ellei kuvia ole: $albumiHTML .= "<tr class='ylaluokkarivi'><td>{$nimi}</td>"; $albumiHTML .= "<td colspan=3>" . Bongaustekstit::$ilm_kuvia_ei_loytynyt . "</td></tr>"; } /******************************************************************/ /* Tarkistetaan ensin, onko albumissa uusia kuvia, eli * edellisen uloskirjautumisen jälkeen lisättyjä: * $uudet_lkm = 0; // Kertoo uusien lkm:n // Jos viimeistä katseluaikaa ei ole asetettu, asetetaan 0: if(!isset($_SESSION['kuvat_katsottu_viimeksi'])){ $_SESSION['kuvat_katsottu_viimeksi'] = 0; } $hakulause = "SELECT COUNT(*) AS uudet_lkm FROM kuvat JOIN kuva_albumi_linkit AS linkit ON kuvat.id = linkit.kuva_id JOIN albumit ON albumit.id = linkit.albumi_id WHERE (kuvat.tallennusaika_sek > ". $_SESSION['kuvat_katsottu_viimeksi']." AND albumit.id = ".$alb->id.")"; $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause); if($hakutulos != false){ $lkmtaulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos); // Kai taulukossa aina vähintään nolla on, joten // tämä tarkistus lienee tarpeeton. if(sizeof($lkmtaulukko)>0){ $uudet_lkm = $lkmtaulukko[0]->uudet_lkm; } }*/ /******************************************************************/ } $albumiHTML .= "</table>"; return $albumiHTML; }
/** * Tämä metodi poistaa isäntäolion poiston yhteydessä isäntäolioon * linkitetyt pikakommentit ja palauttaa poistettujen olioiden lukumäärän. * @param Tietokantaolio $tietokantaolio (täällä, koska static!) * @param <type> $kohde_tyyppi * @param <type> $kohde_id */ public static function poista_pikakommentit($tietokantaolio, $kohde_tyyppi, $kohde_id) { $poistettujen_lkm = 0; // Haetaan ensin kyseiset rivit ja poistetaan ne sitten $hakulause = "SELECT id\n FROM pikakommentit\n WHERE kohde_id={$kohde_id}\n AND kohde_tyyppi={$kohde_tyyppi}"; $osumat = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); foreach ($osumat as $pk_olio) { $taulu = "pikakommentit"; $taulun_sarake = "id"; $hakuarvo = $pk_olio->id; $palaute = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo); if ($palaute == Tietokantaolio::$HAKU_ONNISTUI) { $poistettujen_lkm++; } } return $poistettujen_lkm; }
/** * Palauttaa valikon html:n. * HUOM! Listasta jätetään muokatessa pois kokonaisuudet, jotka on * kyseisen luokan aliluokkia (muuten tulee tosi jänniä sotkuja). * Lisäksi myös kokonaisuus itse pitää poistaa listasta. (Nämä koskevat * muokkausta. Uuden luomisessa näitä ongelmia ei ole. Kaikki käyvät uudelle * yläkokonaisuuksiksi) * * * @param <type> $id_kokon * @param Tietokantaolio $tietokantaolio * @param <type> $ylakokonaisuuden_id_kokon * @param <type> $oppiaine * @param <type> $kieli_id * @param <type> $taso * @param <type> $uusi * @param <type> $omaid tarvitaan oliopuun hakua varten (muutos 13.12.2011) * @param Kokonaisuuskontrolleri $kokonaisuuskontrolleri tarvitaan oliopuun * haussa myös. * @return <type> */ function nayta_ylakokonaisuusvalikko($id_kokon, $tietokantaolio, &$ylakokonaisuuden_id_kokon, $oppiaine, $kieli_id, $taso, $uusi, $omaid, $kokonaisuuskontrolleri) { // Haetaan otsikot ja id:t: $hakulause = "SELECT id,otsikko\n FROM kokonaisuudet\n WHERE oppiaine={$oppiaine}\n AND taso = {$taso}\n AND kieli = {$kieli_id}\n ORDER BY otsikko"; /* AND (nakyvyys = ".Nakyvyys::$JULKINEN. " OR henkilo_id = $omaid)";*/ $osumat = $tietokantaolio->tee_omahaku_oliotaulukkopalautteella($hakulause); $sallitut = array(); // Sallitut valintaarvot // Muokkaustilassa poistetaan osumista kokonaisuusalipuu, ettei // viittaukset mene sekaisin: if (!$uusi) { $ekan_otsikko = ""; $kokonaisuudet = array(); $otsikkotaso = Kokonaisuusolio::$otsikkotaso_oletus; /* Ei tarvita */ $alipuu = $kokonaisuuskontrolleri->hae_kokonaisuusoliopuu($kokonaisuudet, $ekan_otsikko, $otsikkotaso, $kieli_id, $oppiaine, $taso, $id_kokon, $tietokantaolio, $omaid); foreach ($osumat as $ehdokas) { $ehdokas_sallittu = true; foreach ($alipuu as $kielletty) { if ($ehdokas->id == $kielletty->get_id()) { $ehdokas_sallittu = false; } } /* Tarkistetaan vielä, ettei itse juurikokonaisuus ole mukana * (tehdyn muutoksen jälkeen juurikok. ei ole enää mukana * alipuussa): */ if ($ehdokas->id == $id_kokon) { $ehdokas_sallittu = false; } /* Ellei löytynyt kiellettyjen listalta, lisätään valikkoon: */ if ($ehdokas_sallittu) { array_push($sallitut, $ehdokas); } } } else { // Uudelle kokonaisuudelle yläkokonaisuuden valinta on vapaa! $sallitut = $osumat; } // Luodaan taulukot tyhjine vaihtoehtoineen (jolloin ei yläkokonaisuutta): $arvot = array(-1); $nimet = array(Tekstit::$kokonlomake_ei_ylatasoa); // Viedään otsikot ja vastaavat arvot taulukoihin: if (sizeof($sallitut) != 0) { foreach ($sallitut as $kokonaisuus) { array_push($arvot, $kokonaisuus->id); array_push($nimet, $kokonaisuus->otsikko); } } $valikkohtml = ""; try { $name_arvo = "ylakokonaisuuden_id_kokon"; if ($uusi) { // Oletuksena viimeksi aktiivisen kokonaisuuden alle: $oletusvalinta_arvo = $id_kokon; } else { $oletusvalinta_arvo = $ylakokonaisuuden_id_kokon; } $otsikko = Tekstit::$ylakokonaisuusvalikko_otsikko; $valikkohtml .= Html::luo_pudotusvalikko($arvot, $nimet, $name_arvo, $oletusvalinta_arvo, $otsikko); } catch (Exception $poikkeus) { $valikkohtml = Tekstit::$virheilm_ylakokonaisuusvalikko . " (" . $poikkeus->getMessage() . ")"; } return $valikkohtml; }
/** * Tutkii, onko parametrin mukaisessa tietokantataulussa kyseistä arvoa * kyseisessä sarakkeessa. Jos on vähintää yksi, palauttaa arvon true, * muuten false. * * Tätä käytetään muun muassa unique-arvojen tarkistamiseen ennen * tietokantaan tallentamista (esim. kayttajatunnus). * * @param type $taulunimi * @param type $sarakenimi * @param type $arvo // ARvo, jonka olemassaoloa tutkitaan. * @param Tietokantaolio $tietokantaolio */ static function arvo_jo_kaytossa($taulunimi, $sarakenimi, $arvo, $tietokantaolio) { $palaute = true; $tulos = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $arvo); if ($tulos == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $palaute = false; } return $palaute; }
/** * Palauttaa true, jos henkilö on alaikäinen tai yli-ikäinen (!), muuten false. * @param <type> $id Kysyttävän henkilön tunniste. * @param Tietokantaolio $tietokantaolio */ function on_alaikainen_tai_elakkeella($id, $tietokantaolio) { $alaikainen = true; $kayttaja = $tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $id); if ($kayttaja !== Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $svuosi = $kayttaja->syntymavuosi; $skk = $kayttaja->syntymakk; $spaiva = $kayttaja->syntymapaiva; if (on_ialtaan_vahintaan(18, $spaiva, $skk, $svuosi) && !on_ialtaan_vahintaan(65, $spaiva, $skk, $svuosi)) { $alaikainen = false; } } return $alaikainen; }
/** * Tarkistetaan varsinaisen lisävaltuuden olemassaolo * henkilo_id:n, oliotyypin ja olio_id:n perusteella (staattinen metodi). * <p> * Huomaa, että tallennettaessa uutta lisävaltuutta käytetään * ei-staattista metodia <p>tarkista_lisavaltuuden_olemassaolo()</p>! Metodit ovat * hiukan erilaisia! * </p> * * <p> * Palauttaa lisävaltuuden löytyessä Lisävaltuus-luokan olion. Muussa * tapauksessa palauttaa arvon Lisavaltuudet::$EI_LISAVALTUUKSIA (kun * arvot ovat kunnolla määriteltyjä). Jos vähintään yksi arvoista * henkilo_id, oliotyyppi ja olio_id on $MUUTTUJAA_EI_MAARITELTY, * palautetaan arvo Lisavaltuudet::$VIRHE. * </p> * * <p> * Tietokannasta saa löytyä korkeintaan kaksi lisävaltuutta: yleinen ja * kohdetta koskeva. Tässä tapauksessa <i>korkeampi valtuustaso</i> palautetaan. * </p> * * @param type $olio_id * @param type $oliotyyppi * @param type $henkilo_id Jolle lisävaltuus myönnetään. * @param type $omistaja_id Olion omistaja * @param Tietokantaolio $tietokantaolio * * @return Palauttaa joko olemassaolevan Lisavaltuus-luokan olion tai * joko arvon $EI_LISAVALTUUKSIA tai $VIRHE. Viimeksi mainittu ei kerro * mitään siitä, onko lisävaltuutta jo olemassa! */ public static function tarkista_lisavaltuudet_tietokannasta($olio_id, $oliotyyppi, $henkilo_id, $omistaja_id, $tietokantaolio) { $palaute = Lisavaltuudet::$VIRHE; $valtuusolio_yl = ""; $valtuusolio_erit = ""; $valtuus_yl = Lisavaltuudet::$EI_LISAVALTUUKSIA; $valtuus_erit = Lisavaltuudet::$EI_LISAVALTUUKSIA; // HUOM! Valtuuksia ei saa olla kuin yksi yhtä // käyttäjä-olio -paria kohti! Sitä ei estetä tietokantatasolla! if ($olio_id != Lisavaltuudet::$MUUTTUJAA_EI_MAARITELTY && $henkilo_id != Lisavaltuudet::$MUUTTUJAA_EI_MAARITELTY && $oliotyyppi != Lisavaltuudet::$MUUTTUJAA_EI_MAARITELTY) { // Tarkistetaan ensin globaalin (omistajan kaikki oliot) lisäoikeuden // olemassaolo. Täällä tarvitaan linkki omistajaan, jottei lisä- // oikeuksia ihan kaikkiin olioihin myönnetä. $hakulause = "SELECT id FROM " . Lisavaltuudet::$taulunimi . " WHERE " . Lisavaltuudet::$sarakenimi_oliotyyppi . "=" . Lisavaltuudet::$kaikki_omistajan_oliot . " AND " . Lisavaltuudet::$sarakenimi_olio_id . "=" . Lisavaltuudet::$kaikki_omistajan_oliot . " AND " . Lisavaltuudet::$sarakenimi_omistaja_id . "=" . $omistaja_id . " AND " . Lisavaltuudet::$sarakenimi_henkilo_id . "=" . $henkilo_id; $osumaoliot = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); // Jos lisävaltuus löytyi: if (sizeof($osumaoliot) > 0) { $valtuusolio_yl = new Lisavaltuudet($osumaoliot[0]->id, $tietokantaolio); $valtuus_yl = $valtuusolio_yl->get_valtuusarvo(); } // Sitten etsitään tarkasti olioon viittaavaa lisäoikeutta: $hakulause = "SELECT id FROM " . Lisavaltuudet::$taulunimi . " WHERE " . Lisavaltuudet::$sarakenimi_oliotyyppi . "=" . $oliotyyppi . " AND " . Lisavaltuudet::$sarakenimi_olio_id . "=" . $olio_id . " AND " . Lisavaltuudet::$sarakenimi_henkilo_id . "=" . $henkilo_id; $osumaoliot = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); // Jos lisävaltuus löytyi: if (sizeof($osumaoliot) > 0) { $valtuusolio_erit = new Lisavaltuudet($osumaoliot[0]->id, $tietokantaolio); $valtuus_erit = $valtuusolio_erit->get_valtuusarvo(); } // Palaute tarkasti: if ($valtuus_erit > $valtuus_yl) { $palaute = $valtuusolio_erit; } else { if ($valtuusolio_yl instanceof Lisavaltuudet) { $palaute = $valtuusolio_yl; } else { $palaute = Lisavaltuudet::$EI_LISAVALTUUKSIA; } } } return $palaute; }
require_once '../kayttajahallinta/Kayttajanakymat.php'; require_once '../kayttajahallinta/Kayttajakontrolleri.php'; require_once '../asetukset/tietokantayhteys.php'; require_once '../yhteiset/php_yhteiset.php'; require_once '../kuvatoiminnot/php_kuvametodit.php'; require_once '../php_yleinen/Tietokantaolio.php'; require_once '../php_yleinen/html.php'; require_once '../viestit/Viesti.php'; require_once '../yhteiset/Parametrit.php'; require_once '../yhteiset/Palaute.php'; require_once '../pikakommentointi/Pikakommenttitekstit.php'; require_once '../pikakommentointi/Pikakommentti.php'; require_once '../bongaus/lajiluokat/Kuvaus.php'; require_once '../bongaus/lajiluokat/Lajiluokka.php'; // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); //$tietokantaolio->yhdista_tietokantaan($dbnimi); $tietokantaolio->yhdista_tietokantaan_uusi_yhteys($dbnimi); /********************************************************************/ // Tarkistetaan, ettei käyttäjää ole potkaistu tai itse kirjautunut ulos: // Tämä voisi olla aiemmin, mutta en halunnut rasittaa liian usein // tapahtuvaksi. if (!online($_SESSION['tiedot']->id, $tietokantaolio)) { $kansiotaso = 2; toteuta_passiivinen_ulos_toiminto($kansiotaso); echo Yleisarvoja::$istunto_vanhentunut; exit; } /******************************************************************/ // Ikätarkistus: if (on_alaikainen_tai_elakkeella($omaid, $tietokantaolio)) {
/** * Palauttaa yhden keskustelun html-koodin halutulla tavalla, eli joko * näytetään kaikki kommentit tai vain osa ($kiinni = true). * * @param int $kesk_id Keskustelun id eli aloitusviestin id = kommenttien * emo_id. * @param bool $auki totuusarvo true, jos kaikki kommentit näytetään, false - * vain osa ($kiinni_lkm kappaletta vanhoja + uudet). * @param int $kiinni_lkm näin monta vanhaa viestiä näytetään korkeintaan, * kun keskustelu on "kiinni"-tilassa. * @param int $aikaraja uusien viestien alkuaika sekunteina. Tätä vanhempia * näytetään vain $kiinni_lkm kpl. * @param Tietokantaolio $tietokantaolio * @param bool $kuningas * @param int $oma_id Käyttäjän om id. * @return string Palauttaa keskustelun html:n ilman alku- ja päätedivtageja * (helpottaa näyttötyylin muuttamista ajaxin avulla). */ function hae_keskusteluVANHA($kesk_id, $auki, $kiinni_lkm, $aikaraja, $tietokantaolio, $kuningas, $oma_id) { $palaute = "ei_onnistunut"; $mj = ""; // html-koodi $on_piilotettavia = false; // Näytetäänkö kaikki kommentit? // Haetaan ensin keskustelun aloitusviesti: $aloitusviesti = $tietokantaolio->hae_eka_osuma_oliona("viestit", "id", $kesk_id); // Ellei tämä onnistunut, ei tehdä mitään. Muuten jatketaan. if ($aloitusviesti != "tuntematon") { // Haetaan kaikki kommentit (joista vain osa näytetään, mutta // on hyvä tietää kommenttien kokonaislkm): $hakulause1 = "SELECT viestit.*\n FROM viestit\n WHERE emo_id = '" . $kesk_id . "'\n ORDER by tallennushetki_sek ASC"; $viestihaku1 = $tietokantaolio->tee_OMAhaku($hakulause1); $viestitaulu1 = $tietokantaolio->hae_osumarivit_olioina($viestihaku1); $kommenttien_lkm = sizeof($viestitaulu1); // Muodostetaan uusi taulukko, johon kopioidaan aloitusviesti ja // sopiva määrä kommentteja oikeassa järjestyksessä: $kesk_viestit = array(); array_push($kesk_viestit, $aloitusviesti); // Jos näytetään kaikki, kopsataan kaikki. Muuten vain sopiva osa. if ($auki) { foreach ($viestitaulu1 as $v) { array_push($kesk_viestit, $v); } } else { // Ei näytetä kaikkia: // Haetaan ensin ensimmäisen uuden viestin sijainnin indeksin: $eka_uusi_taulukkoid = -1; for ($i = 0; $i < sizeof($viestitaulu1); $i++) { $v = $viestitaulu1[$i]; // Otetaan id ylös vain 1. kerran: if ($v->tallennushetki_sek > $aikaraja && $eka_uusi_taulukkoid == -1) { $eka_uusi_taulukkoid = $i; } } // Sitten päästään kopioimaan kommentteja: $alkuindeksi = 0; // Jos vanhoja enemmän kuin näytetään: if ($eka_uusi_taulukkoid > $kiinni_lkm) { $alkuindeksi = $eka_uusi_taulukkoid - $kiinni_lkm; $on_piilotettavia = true; } for ($i = $alkuindeksi; $i < sizeof($viestitaulu1); $i++) { $v2 = $viestitaulu1[$i]; array_push($kesk_viestit, $v2); } } // Nyt meillä on aloitusviesti ja kommentit samassa taulukossa // oikeassa järjestyksessä ja päästään muotoilemaan viestien html:ää. for ($i = 0; $i < sizeof($kesk_viestit); $i++) { $nyk_olio = $kesk_viestit[$i]; // Haetaan lähettäjän tiedot: $lahettaja = $tietokantaolio->hae_eka_osuma_oliona("henkilot", "id", $nyk_olio->henkilo_id); $on_valintaruutu = false; // Muokkauksen/poiston salliminen. Kuninkaalla kaikki valta. if ($lahettaja !== "tuntematon" && $lahettaja->id === $oma_id && $nyk_olio->kommenttien_lkm < '1' || $kuningas) { // Valintaruutu sisältää vastaavan // tietokantarivin id:n, jotta se valittu rivi löydetään. $on_valintaruutu = true; } // Muotoillaan lähettäjä mahdollistaen sen, että sitä ei löytynyt. if ($lahettaja !== "tuntematon") { $lahettaja = $lahettaja->etunimi; } // Luodaan uusi viestiolio (=taulukon eka viesti)): if ($i == 0) { $viesti = new Viesti($nyk_olio, false); } else { $viesti = new Viesti($nyk_olio, true); } $mj .= $viesti->palauta_html($on_valintaruutu, $lahettaja, $kommenttien_lkm, $on_piilotettavia, $auki); } $palaute = $mj; } return $palaute; }
/** * Kirjaa käyttäjän ulos hänen niin halutessaan tai pakolla kun * aikaa on kulunut laiskasti tietyn ajan verran. Sopii koodin alkuun, koska * lukee tarvitsemansa kirjastot. Yhdistää tietokantaan ja kutsuu sitten * kirjaa_ulos()-metodia. Palauttaa merkkijonon "Istunto aikakatkaistu". * * @param int $kansiotaso Ilmoittaa kutsuvan ohjelmanosan kansiotason eli * esim. luku 1 tarkoittaa, että kutsuva ohjelmanosa on ylimmällä tasolla eli * samalla kuin vaikkapa alku.php. Mitä syvemmällä kansioissa ollaan, sitä * suurempi on tason nro. Tämän avulla osataan hakea tarvittavat tiedostot * toimintoja varten. */ function toteuta_passiivinen_ulos_toiminto($kansiotaso) { // Muokataan tiedosto-osoitteet: $alku = ""; if (is_numeric($kansiotaso) && $kansiotaso > 1) { for ($i = 0; $i < $kansiotaso - 1; $i++) { $alku .= "../"; } } require_once $alku . 'php_yleinen/php_yleismetodit.php'; require_once $alku . 'asetukset/tietokantayhteys.php'; require_once $alku . 'yhteiset/php_yhteiset.php'; require_once $alku . 'asetukset/valtuudet.php'; require_once $alku . 'asetukset/yleinen.php'; require_once $alku . 'kayttajahallinta/php_kayttajahallintametodit.php'; require_once $alku . 'php_yleinen/Tietokantaolio.php'; // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); // Tämä sulkeen tietokannan myös: kirjaa_ulos($tietokantaolio); return "Istunto vanhentunut!"; exit; }
/** * Hakee tietyn kauden havainnot tietokannasta ja palauttaa ne * (Havainto-luokan oliot) taulukossa. * Yläluokka ja kieli ja näyttötapa saadaan parametrioliosta. * * <p>Vaativuus: Yleisen haun jälkeen jokaisen havainnon luonnin yhteydessä * tehdään tietokantahaku. Jos havaintoja on esim. tuhansia, voi tämä * viedä resurssia aika paljon. Tämä ei oikeastaan olisi tarpeellista, koska * havainto-olion tiedot on jo kertaalleen haettu. Pitäisikö havainnon * luomiseen tehdä vaihtoehto "älä koske tietokantaan?". Ainakin jos alkaa * tökkimään.</p> * * @param \Tietokantaolio $tietokantaolio * @param \Parametrit $parametriolio */ public static function hae_soveliaat($tietokantaolio, $parametriolio) { // Muotoillaan yläluokan lause: $ylaluokka_id = $parametriolio->ylaluokka_id_lj; if (isset($ylaluokka_id) && is_numeric($ylaluokka_id) && $ylaluokka_id > 0) { $ylaluokkaehto = "blajiluokat.ylaluokka_id = {$ylaluokka_id}"; } else { $ylaluokkaehto = "blajiluokat.ylaluokka_id <> -1"; } // Tarkistetaan, haetaanko vuoden, määrän tai jonkin muun ehdon mukaan: $max_lkm = $parametriolio->max_lkm_hav; if ($parametriolio->havaintojen_nayttomoodi == Havaintojen_nayttomoodi::$nayta_uusimmat) { $ehtolause = "WHERE (bkuvaukset.kieli= " . Kielet::$SUOMI . "\n AND {$ylaluokkaehto})\n ORDER by vuosi DESC, kk DESC, paiva DESC, laji\n LIMIT " . $max_lkm; $nayttoilmoitus = $parametriolio->max_lkm_hav . Bongaustekstit::$max_nayttoilm_bongaussivu1; } else { if ($parametriolio->havaintojen_nayttomoodi == Havaintojen_nayttomoodi::$nayta_vuoden_mukaan) { $ehtolause = "WHERE (bkuvaukset.kieli= " . Kielet::$SUOMI . "\n AND {$ylaluokkaehto}\n AND vuosi = {$parametriolio->nayttovuosi_hav})\n ORDER by vuosi DESC, kk DESC, paiva DESC, laji"; $nayttoilmoitus = $parametriolio->nayttovuosi_hav; } else { $ehtolause = "WHERE (bkuvaukset.kieli= " . Kielet::$SUOMI . "\n AND {$ylaluokkaehto})\n ORDER by vuosi DESC, kk DESC, paiva DESC, laji\n LIMIT 10"; $nayttoilmoitus = "???"; } } $hakulause = "SELECT \n bhavainnot.id AS hav_id,\n bkuvaukset.nimi AS laji,\n bhavainnot.vuosi AS vuosi,\n bhavainnot.kk AS kk,\n bhavainnot.paiva AS paiva,\n bhavainnot.henkilo_id AS henkilo_id\n FROM blajiluokat\n JOIN bkuvaukset\n ON bkuvaukset.lajiluokka_id = blajiluokat.id\n JOIN bhavainnot\n ON bhavainnot.lajiluokka_id = blajiluokat.id\n {$ehtolause}\n "; $havaintohaku = $tietokantaolio->tee_OMAhaku($hakulause); $havaintotaulu_kaikki = $tietokantaolio->hae_osumarivit_olioina($havaintohaku); //============= SUODATUS ALKU ====================================== $havaintotaulu = array(); $suodattimet = Suodatin::hae_suodattimet($parametriolio->omaid, $tietokantaolio); foreach ($havaintotaulu_kaikki as $osuma) { $henkilo_id = $osuma->henkilo_id; if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $parametriolio->omaid, $suodattimet)) { array_push($havaintotaulu, $osuma); } } //============= SUODATUS LOPPU ===================================== $oliotaulu = array(); // Tämä sisältää Havainto-oliot. if (!empty($havaintotaulu)) { foreach ($havaintotaulu as $tk_hav) { $uusi = new Havainto($tietokantaolio, $tk_hav->hav_id); if ($uusi->olio_loytyi_tietokannasta) { array_push($oliotaulu, $uusi); } } } return $oliotaulu; }
/** * Hakee sen olion tietokannasta, johon parametrina annettu arvo (raaka-id) * viittaa ja palauttaa sen oikeantyyppisen luokan oliona * (Kokonaisuus, Tehtava, Ratkaisu,...). * * Palauttaa yllä mainitun tyyppisen olion, jonka tietojen löytymisen * tietokannasta tarkistetaan muuttujan "olio_loytyi_tietokannasta"-muuttujan * avulla. Ellei parametri ole hyvä, palautetaan arvo * $MUUTTUJAA_EI_MAARITELTY. * * * @param type $id_raaka * @param type * @param Tietokantaolio $tietokantaolio * @return \Ratkaisu */ public static function hae_viittausolio_id_raaka($id_raaka, $tietokantaolio) { $olio_id = Elementti::irrota_elem_olion_id($id_raaka); $oliotyyppi = Elementti::irrota_elem_olion_tyyppi($id_raaka); if ($oliotyyppi === Oliotyyppi::$KOKONAISUUS) { $taulunimi = Kokonaisuusolio::$taulunimi; $sarakenimi = Kokonaisuusolio::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Kokonaisuusolio::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Kokonaisuusolio($id, $tietokantaolio); } else { if ($oliotyyppi === Oliotyyppi::$TEHTAVA) { $taulunimi = Tehtava::$taulunimi; $sarakenimi = Tehtava::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Tehtava::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Tehtava($id, $tietokantaolio); } else { if ($oliotyyppi === Oliotyyppi::$RATKAISU) { $taulunimi = Ratkaisu::$taulunimi; $sarakenimi = Ratkaisu::$SARAKENIMI_ID; $hakuarvo = $olio_id; $osuma = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($osuma == Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { $id = Ratkaisu::$MUUTTUJAA_EI_MAARITELTY; } else { $id = $osuma->id; } $palautettava = new Ratkaisu($id, $tietokantaolio); } else { $palautettava = Elementti::$MUUTTUJAA_EI_MAARITELTY; } } } return $palautettava; }
/** * Palauttaa henkilön valtuusarvon tai arvon $EI_LOYTYNYT_TIETOKANNASTA, * ellei mitään löydy. * @param type $id * @param Tietokantaolio $tietokantaolio */ public static function hae_henkilon_valtuusarvo($id, $tietokantaolio) { $palaute = Henkilo::$EI_LOYTYNYT_TIETOKANNASTA; $osuma = $tietokantaolio->hae_eka_osuma_taulukkona(Henkilo::$taulunimi, Henkilo::$SARAKENIMI_ID, $id); if (!empty($osuma)) { $palaute = $osuma[Henkilo::$sarakenimi_valtuudet]; } return $palaute; }
require_once '../../kayttajahallinta/Kayttajakontrolleri.php'; require_once '../../kayttajahallinta/Kayttajanakymat.php'; require_once '../../kayttajahallinta/php_kayttajahallintametodit.php'; require_once '../../kayttajahallinta/testaus/Kayttajatestaus.php'; require_once '../../kayttajahallinta/Kayttajatekstit.php'; require_once '../../sivukoodit.php'; require_once '../Kuva.php'; require_once '../Kuvakontrolleri.php'; require_once '../Kuvalinkki.php'; require_once '../Kuvanakymat.php'; require_once '../Tekstit.php'; require_once 'testikooste_kuvat.php'; require_once 'Testiapu_kuvat.php'; require_once '../Kuva.php'; // Valmistellaan tietokantayhteys testejä varten: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); //============================================================================= // Kaikki testit yhteen: $palautteet = array(); array_push($palautteet, toteuta_kuvatestit($tietokantaolio)); // Kootaan virheilmoitukset peräkkäin omaan muuttujaan ja toiseen muuttujaan // otsikot ja sisällöt niin, että otsikko aina edeltää sisältöä. $virheilmoitukset = ""; $sisalto = ""; foreach ($palautteet as $testipalaute) { $virheilmoitukset .= $testipalaute->get_virheilmoitukset() . "<br />"; $sisalto .= "============================================================================<br />" . "============================================================================" . "<h2 style='color:blue'>" . $testipalaute->get_otsikko() . "</h2>" . $testipalaute->get_sisalto(); } //$otsikko = $tulokset[0]; $paaotsikko = "<h1>Testataan opinnot.net-sivuston kuvatoimintoihin\n liittyviäluokkia ja metodeita</h1>";
} else { $kayttajaid = $_REQUEST['kayttajaid']; } /*$suoritukset = <<<POSSU <form align='center' method='post' action='{$_SERVER['PHP_SELF']}'> Liikkujan $etunimi $sukunimi suoritukset: <input type="submit" name="toiminta" value="Näytäa omat suoritukset" /></form> POSSU;*/ $suoritukset = ''; // Jos näytetään omat suoritukset: if ($nayta_omat) { $suoritukset .= "Omat suoritukset:<br />"; } else { $painike = <<<HASSUTAPA <button type='button' onclick="toteutaAJAX('suoritus_kyselyt.php', 'omaid={$omaid}','reagoi','post', 'text')"> Näytä omat suoritukset </button> HASSUTAPA; $suoritukset .= $painike . " Käyttäjän {$etunimi} {$sukunimi} suoritukset: "; } // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); // Avataan uusi yhteys: $tietokantaolio->yhdista_tietokantaan_uusi_yhteys($dbnimi); $suoritukset .= hae_suoritukset($tietokantaolio, $kayttajaid, $nayta_omat, $omaid); echo $kuvaus = $suoritukset; $tietokantaolio->sulje_tietokanta($dbnimi); }
/** * Tietokannasta etsitään kaikki suodattimet, joiden omistaja_id TAI * vastapuoli_id on parametrina annettu käyttäjän id. Palautetaan * taulukko, jossa löydetyt Suodatin-luokan oliot. Taulukko on tyhjä, ellei * yhtään suodatinta löydy. * * @param type $omaid * @param Tietokantaolio $tietokantaolio * @return boolean */ public static function hae_suodattimet($omaid, $tietokantaolio) { $suodattimet = array(); $hakulause = "SELECT id FROM " . Suodatin::$taulunimi . " WHERE " . Suodatin::$sarakenimi_omistaja_id . "=" . $omaid . " OR " . Suodatin::$sarakenimi_vastapuoli_id . "=" . $omaid; $osumaoliot = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); // Taulukkoon löydetyt: $laskuri = 0; foreach ($osumaoliot as $osuma) { $osuma = new Suodatin($osumaoliot[$laskuri]->id, $tietokantaolio); if ($osuma->olio_loytyi_tietokannasta) { array_push($suodattimet, $osuma); } $laskuri++; } return $suodattimet; }
/** * * Hakee yhteen kokonaisuuteen (id_kokon) liittyvät julkiset tehtävät * Tehtava-luokan olioina tietokannasta. Palauttaa aina taulukon, joka voi olla * tyhjä. * * Huom: täällä haetaan vain julkiset tehtävät ja tätä kannattaa lähinnä * käyttää silloin, kun käyttäjä ei ole kirjautunut. * * Tietokannasta tehdään haku jokaisen tehtävän kohdalla. Jos tuntuu * aiheuttavan hitautta, voi tiedot hakea kerralla ja poimia * olioille tiedot tietokantaosumataulukosta. * * @param type $id_kokon Sen kokonaisuuden id, johon tehtävät kuuluvat. * @param Tietokantaolio $tietokantaolio * @return array */ static function hae_kokonaisuuden_julkiset_tehtavat($id_kokon, $tietokantaolio) { $tehtavat = array(); /* Haetaan tehtävät: */ $hakulause = "SELECT " . Tehtava::$SARAKENIMI_ID . " " . " FROM " . Tehtava::$taulunimi . " " . " WHERE " . Tehtava::$sarakenimi_kokon_id . " = " . $id_kokon . " AND " . Tehtava::$sarakenimi_nakyvyys . "=" . Nakyvyys::$JULKINEN . " ORDER BY vaikeustaso, otsikko"; /* Palauttaa taulukon, joka on tyhjä, ellei mitään löytynyt: */ $osumat = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause); foreach ($osumat as $osuma) { $id = $osuma->id; $teht = new Tehtava($id, $tietokantaolio); if ($teht->olio_loytyi_tietokannasta) { array_push($tehtavat, $teht); } } return $tehtavat; }
/** * Tallentaa valtuusmuutoksen ja antaa onnistumista kuvaavan palautteen, joka * on "onnistui", jos tallennus onnistui. * * @param int $henkilo_id * @param int $valtuudet * @param Tietokantaolio $tietokantaolio */ function tallenna_valtuusmuutos($henkilo_id, $valtuudet, $tietokantaolio) { $onnistu = false; $muutossarakkeet = array("valtuudet"); $muutosarvot = array($valtuudet); $taulu = "henkilot"; $ehtosarake = "id"; $ehtoarvo = $henkilo_id; $max_muutosrivilkm = 1; $tietokantaolio->tee_UPDATEhaku($taulu, $muutossarakkeet, $muutosarvot, $ehtosarake, $ehtoarvo, $max_muutosrivilkm); // Tarkistetaan muutettujen rivien lkm: if (mysql_affected_rows() == 1) { $onnistu = "onnistui"; } else { $onnistu = "Muutoksia ei tallennettu! Joko tietoja ei ole\n muutettu tai tapahtui jokin virhe (esim. nettiyhteydessä)."; } return $onnistu; }
/** * Poistaa yhden tai useamman tietueen tietokannasta. Poistettavien * tunnisteet (esim. id) annetaan parametritaulukossa. * * @param string $tunnistesarakenimi Sarakkeen nimi, jota vastaavasta * tietokantasarakkeesta tunnistetta etsitään. * @param array $valinnat * @param Tietokantaolio $tietokantaolio * @param string $taulun_nimi Sen taulun nimi, josta tietueet poistetaan. * @return string Palauttaa viestin suorituksen onnistumisesta, joka * näytetään käyttäjälle. */ function poista_tietueet($tunnistesarakenimi, &$valinnat, $tietokantaolio, $taulun_nimi) { $vastaus = ''; $lkm = 0; if (!isset($valinnat)) { $vastaus = "Poisto epäonnistui!\n Valintataulukko on määrittelemätön"; } else { if ($valinnat == "" || sizeof($valinnat) == 0) { $vastaus = "Poisto epäonnistui!\n Yhtään valintaa ei löytynyt!"; } else { foreach ($valinnat as $id) { /********************kerkkasten erikoistoiminto********************/ $emoidkysely = "SELECT emo_id\n FROM viestit\n WHERE id = '" . $id . "'\n AND taso = '2'"; $emoidhaku = $tietokantaolio->tee_OMAhaku($emoidkysely); $emooliotaulu = $tietokantaolio->hae_osumarivit_olioina($emoidhaku); if (sizeof($emooliotaulu) > 0) { $emoid = $emooliotaulu[0]->emo_id; if (isset($emoid)) { muuta_kommenttien_lkm(-1, $emoid, $tietokantaolio); } } /******************************************************************/ // poista_rivi poistaa korkeintaan yhden tietueen (rajoitettu). $poisto = $tietokantaolio->poista_rivi($taulun_nimi, $tunnistesarakenimi, $id); if ($poisto == "onnistui") { $lkm++; } } $vastaus = "Tietueita poistettiin onnistuneesti " . $lkm . " kpl."; } } return $vastaus; }
require_once 'yhteiset/php_yhteiset.php'; require_once 'php_yleinen/perustus/Perustustekstit.php'; require_once 'php_yleinen/perustus/Ilmoitus2.php'; require_once 'php_yleinen/perustus/Tietokantarivi.php'; require_once 'php_yleinen/perustus/Tietokantasolu.php'; require_once 'php_yleinen/perustus/Pohja.php'; require_once 'php_yleinen/perustus/Kontrolleripohja2.php'; require_once 'php_yleinen/perustus/Malliluokkapohja2.php'; require_once 'php_yleinen/perustus/Nakymapohja2.php'; require_once 'kayttajahallinta/Kayttajatekstit.php'; require_once 'kayttajahallinta/Henkilo.php'; require_once 'kayttajahallinta/Suodatin.php'; require_once 'kayttajahallinta/Kayttajanakymat.php'; require_once 'kayttajahallinta/Kayttajakontrolleri.php'; // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); $ktunnus = isset($_POST['ktunnus']) ? $_POST['ktunnus'] : ""; // Onko alla oleva iso turvallisuusriski? $salasana = isset($_POST['salasana']) ? $_POST['salasana'] : ""; $toiminta = isset($_POST['toiminta']) ? $_POST['toiminta'] : ""; $hamy = isset($_GET['piip']) ? $_GET['piip'] : "kelvoton"; $viesti = isset($_GET['viesti']) ? $_GET['viesti'] : ""; // Viesti käyttäjälle. $sisalto = ''; // Varsinainen sisältö. $hamynimi = 'piip'; // urliin liitettävän aikamuuttujan nimi. if ($toiminta == "") { $viesti .= " Kirjoita tunnukset tekstikenttiin ja klikkaa nappia!"; $sisalto = nayta_kirjautuminen($ktunnus, $hamynimi);
// Haetaan asetukset ja avataan yhteys tietokantaan. Täällä ei sessioita // jne tarvita? Ei kai tätä pystyne väärinkäyttämään, ehkä.. // KORJAUS! Pääsee kuviin suoraan ilman salasanaa, ellei tarkistusta ole, // joten korjataan asia! session_start(); // Aloitetaan istunto. require_once '../php_yleinen/Asetuspohja.php'; require_once '../asetukset/yleinen.php'; if (!isset($_SESSION['tunnistus']) || $_SESSION['tunnistus'] != 'kunnossa') { header("Location: ../tunnistus.php?piip=" . time()); exit; } else { require_once '../asetukset/tietokantayhteys.php'; require_once '../php_yleinen/Tietokantaolio.php'; // Yhdistetään tietokantaan: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); $kuva_id = isset($_REQUEST['kuva_id']) ? (int) $_REQUEST['kuva_id'] : -1; // Koko määrittelee sen, mikä tietokannan kuvista haetaan: $koko = isset($_REQUEST['koko']) ? $_REQUEST['koko'] : ""; if ($kuva_id > 0) { $taulunimi = "kuvat"; $sarakenimi = "id"; $hakuarvo = $kuva_id; $kuva_dbolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($kuva_dbolio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { header('Content-type: ' . $kuva_dbolio->tiedostotunnus); header('Content-length: ' . $kuva_dbolio->tiedostokoko); $kuva = $kuva_dbolio->minikuva2; if ($koko == "pieni") { $kuva = $kuva_dbolio->minikuva1;
require_once 'yhteiset/Parametrit.php'; require_once 'yhteiset/Palaute.php'; require_once 'bongaus/bongausasetukset.php'; require_once 'bongaus/testaus/testikooste_bongaus.php'; require_once 'bongaus/lajiluokat/Kontrolleri_lj.php'; require_once 'bongaus/lajiluokat/Kuvaus.php'; require_once 'bongaus/lajiluokat/Lajiluokka.php'; require_once 'bongaus/lajiluokat/Nakymat_lj.php'; require_once 'bongaus/havainnot/Havainto.php'; require_once 'pikakommentointi/Pikakommentti.php'; require_once 'pikakommentointi/Kontrolleri_pikakommentit.php'; require_once 'pikakommentointi/Nakyma_pikakommentit.php'; require_once 'pikakommentointi/Pikakommenttitekstit.php'; require_once 'pikakommentointi/testaus/testikooste_pikakommentit.php'; // Valmistellaan tietokantayhteys testejä varten: $tietokantaolio = new Tietokantaolio($dbtyyppi, $dbhost, $dbuser, $dbsalis); $tietokantaolio->yhdista_tietokantaan($dbnimi); // Ainakin käyttäjätestaus tarvitsee parametreja: $kayttajan_id = 1; $kokoelmanimi = Kuva::$KUVAT_ALBUMIT; $parametriolio = new Parametrit($kokoelmanimi, $kayttajan_id, $tietokantaolio); //============================================================================= // Luodaan uusi Käyttäjätestaus-olio: $kayttajatestaus = new Kayttajatestaus($tietokantaolio, $parametriolio); // Luodaan uusi Suodatintestaus-olio: $suodatintestaus = new Suodatintestaus($tietokantaolio, $parametriolio); // Kaikki testit yhteen: $palautteet = array(); array_push($palautteet, $suodatintestaus->toteuta_suodatintestit()); array_push($palautteet, $kayttajatestaus->toteuta_kayttajatestit()); array_push($palautteet, toteuta_pikakommentointitestit($tietokantaolio));
echo date("\\k\\l\\o H:i:s"); } else { // Haetaan asetukset ja avataan yhteys tietokantaan: require_once '../asetukset/tietokantayhteys.php'; require_once '../yhteiset/php_yhteismetodit.php'; load_files("ajax"); // Muutama kysely liittyen vain ajaxiin (vois sijoittaa kyllä parametriolioon): $aukaisu = isset($_REQUEST['aukaisu']) ? $_REQUEST['aukaisu'] : 0; $id_raaka = isset($_REQUEST['id_raaka']) ? $_REQUEST['id_raaka'] : Malliluokkapohja::$MUUTTUJAA_EI_MAARITELTY; $id_nappi = isset($_REQUEST['id_nappi']) ? $_REQUEST['id_nappi'] : -1; // Kohde liittyy siihen, missä otsikot näytetään (kokonaisuusnäkymä vai // koostelomake lähinnä). $kohde = isset($_REQUEST['kohde']) ? $_REQUEST['kohde'] : 'kokonaisuudet'; //-------------------- // 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(); $kokonaisuuskontrolleri = new Kokonaisuuskontrolleri($tietokantaolio, $parametriolio); $tehtavakontrolleri = new Tehtavakontrolleri($tietokantaolio, $parametriolio); $ratkaisukontrolleri = new Ratkaisukontrolleri($tietokantaolio, $parametriolio); $koostekontrolleri = new Koostekontrolleri($tietokantaolio, $parametriolio); $kokonaisuusnakymat = new Kokonaisuusnakymat(); $tehtavanakymat = new Tehtavanakymat(); $ratkaisunakymat = new Ratkaisunakymat(); $koostenakymat = new Koostenakymat(); $omaid = $parametriolio->get_omaid(); $id_kokon = $parametriolio->id_kokon; /**