Example #1
0
 /** Palauttaa tietokannasta ensimmäisen henkilön id:n */
 public function hae_henkilon_id()
 {
     $hakulause = "select id from henkilot";
     $tk_henkilo_oliot = $this->tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
     if (!empty($tk_henkilo_oliot)) {
         return $tk_henkilo_oliot[0]->id;
     }
 }
Example #2
0
/**
 * 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;
}
Example #3
0
 /**
  * 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;
 }
Example #4
0
 /**
  * Poistaa elementit, jotka viittaavat olioon, joka tunnistetaan
  * parametrien avulla. Liittyy olion poiston jälkeiseen siivoukseen, jottei
  * jää elementtejä osoittamaan poistettuun olioon.
  * 
  * Jos kaikki onnistuu, palauttaa arvon Pohja::$OPERAATIO_ONNISTUI,
  * muussa tapauksessa arvon Pohja::$VIRHE.
  * 
  * @param Tietokantaolio $tietokantaolio
  * @param type $oliotyyppi Poistetun olion tyyppi (kokon, teht, ratk,...)
  * @param type $olio_id Poistetun olion id.
  */
 public static function poista_elementit($tietokantaolio, $oliotyyppi, $olio_id)
 {
     $palaute = Pohja::$VIRHE;
     // Haetaan elementit:
     $hakulause = "SELECT id FROM " . Elementti::$taulunimi . " WHERE " . Elementti::$sarakenimi_oliotyyppi . "=" . $oliotyyppi . " AND " . Elementti::$sarakenimi_olio_id . "=" . $olio_id;
     $osumat = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
     $poistolaskuri = 0;
     // Laskee onnistuneet poistot
     foreach ($osumat as $tk_olio) {
         $id = $tk_olio->id;
         $elem = new Elementti($id, $tietokantaolio);
         if ($elem->olio_loytyi_tietokannasta) {
             if ($elem->poista() + 0 === Malliluokkapohja::$OPERAATIO_ONNISTUI) {
                 $poistolaskuri++;
             }
         }
     }
     // Tarkistus, että kaikki poistot ok. Ellei osumia, myös ok!
     if ($poistolaskuri === sizeof($osumat)) {
         $palaute = Pohja::$OPERAATIO_ONNISTUI;
     }
     return $palaute;
 }
Example #5
0
/**
 * Palauttaa aina luvun, joka osoittaa, kuinka monta kertaa henkilö on harjoittanut
 * kyseistä liikuntalajia halutun kuukauden aikana.
 * Virheen sattuessa palauttaa luvun 0.
 * @param int $liikkujaid luku - Juoksijan tunniste
 * @param string $laji merkkijono - liikuntalaji
 * @param int $kuu luku 1-12 - kuukausi
 * @param int $vuosi luku xxxx - tämä tarvitaan toki! Muuten etsii kaikilta
 * vuosilta...
 * @param Tietokantaolio $tietokantaolio
 * @return <type>
 */
function hae_kuukauden_kerrat($liikkujaid, $laji, $kuu, $vuosi, $tietokantaolio)
{
    $hakulause = "SELECT id FROM suoritukset\n                    WHERE henkilo_id='{$liikkujaid}'\n                    AND kk='{$kuu}'\n                    AND vuosi='{$vuosi}'\n                    AND laji='{$laji}'";
    $hakutulos = $tietokantaolio->tee_OMAhaku_oliotaulukkopalautteella($hakulause);
    return sizeof($hakutulos);
}
Example #6
0
 /**
  * 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;
 }
/**
 * 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;
}
Example #8
0
 /**
  * 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;
 }
Example #9
0
 /**
  * 
  * 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;
 }