/**
 * Näyttää lomakkeen, jossa voi muuttaa yhden henkilön valtuuksia.
 * @param <type> $tietokantaolio
 * @param <type> $henkilo_id
 * @param <type> $toteuta_valtuusmuutos
 * @param <type> $peru_valtuusmuutos
 */
function nayta_valtuusmuutoslomake($tietokantaolio, $henkilo_id, $toteuta_valtuusmuutos, $peru_valtuusmuutos)
{
    // Haetaan tarvittavat henkilötiedot:
    $hakulause = "SELECT id, etunimi, sukunimi, valtuudet \n                    FROM henkilot\n                    WHERE id = {$henkilo_id}";
    $haku = $tietokantaolio->tee_OMAhaku($hakulause);
    $tietotaulu = $tietokantaolio->hae_osumarivit_olioina($haku);
    if (sizeof($tietotaulu) == 1) {
        $henkilotiedot = $tietotaulu[0];
        $lomakehtml = "<form method='post' class='tietolomake'" . "action='{$_SERVER['PHP_SELF']}?henkilo_id={$henkilotiedot->id}'>" . "<p class='keskitys'><b>K&auml;ytt&auml;j&auml;tiedot</b></p>" . "<table summary='Valtuudet' align='center' class='tietotaulukko'>";
        // Muotoillaan ensin käyttöoikeusvalintanapit:
        $arvot = Valtuudet::hae_valtuusarvot();
        $nimet = Valtuudet::hae_valtuuskuvaukset();
        $name_arvo = "valtuudet";
        // Valtaoikeudet tarkistetaan; oletus normaali eli peruskäyttäjä.
        $valta = $henkilotiedot->valtuudet;
        if (!isset($valta) || $valta < 0) {
            $valta = Valtuudet::$NORMAALI;
        }
        $oletusvalinta_arvo = $valta;
        $vaakatasossa = false;
        $otsikko = "";
        // Laitetaan otsikko erikseen.
        $valtuusvalinnat = luo_valintanapit($arvot, $nimet, $name_arvo, $oletusvalinta_arvo, $vaakatasossa, $otsikko);
        $lomakehtml .= "<tr>";
        $lomakehtml .= "<th>" . $henkilotiedot->etunimi;
        $lomakehtml .= " " . $henkilotiedot->sukunimi . "</th></tr>";
        $lomakehtml .= "<tr><td>" . $valtuusvalinnat . "</td></tr>";
        $lomakehtml .= "<tr><td>" . "<input type='submit' name='toiminta'" . "value='{$toteuta_valtuusmuutos}'/>" . "<input type='submit' name='toiminta'" . "value='{$peru_valtuusmuutos}'/></td></tr>";
        $lomakehtml .= "</table></form>";
    } else {
        $lomakehtml = "Yht&auml;&auml;n henkil&ouml;&auml; ei l&ouml;ytynyt!";
    }
    return $lomakehtml;
}
Exemple #2
0
 /**
  * Poistaa yhden kuvan (kuvatiedoston ja tietokannan kuvatiedot). Linkit
  * poistuvat automaattisesti, kun kuvalinkkitaulussa on
  * FOREIGN KEY (kuva_id) REFERENCES kuvat (id) ON DELETE CASCADE -määrittely.
  * 
  * @param <type> $id_kuva
  * @param <type> $tietokantaolio
  */
 function poista_kuva($oma_id, $id_kuva, $tietokantaolio)
 {
     // Haetaan kuvan src poistoa varten:
     $hakulause = "SELECT src\n                    FROM kuvat\n                    WHERE id = {$id_kuva}";
     $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
     $osumataulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
     if (sizeof($osumataulukko) == 0) {
         $src = "";
     } else {
         $src = $osumataulukko[0]->src;
     }
     // POistetaan kuvatiedot tietokannasta:
     $taulu = "kuvat";
     $taulun_sarake = "id";
     $hakuarvo = $id_kuva;
     $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
     // Jos kuvantietojen poisto tietokannasta onnistui, poistetaan
     // myös orvoksi jäänyt kuvatiedosto:
     if ($ilmoitus == "onnistui") {
         // Tämä tuhoaa tiedoston lopullisesti:
         $todellinen_poisto = unlink($src);
         // Aktiivisuusmerkintä:
         $viimeksi_aktiivi = time();
         $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO;
         paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji);
         if ($todellinen_poisto) {
             $ilmoitus = "Kuvan poisto onnistui! Kuva tuhottu lopullisesti. ";
         } else {
             $ilmoitus = "Virhe kuvan poistossa! Kuvan tiedot poistettu\n                    tietokannasta, mutta kuvatiedoston poisto ei onnistunut. ";
         }
     } else {
         $ilmoitus = "Virhe kuvan poistossa! Yrit&auml; uudelleen!";
     }
     return $ilmoitus;
 }
/**
 * Hakee käyttäjien havaintomäärät kyseisestä luokasta.
 * @param <type> $ylaluokka_id luku, joka määrää sen, mistä yläluokasta
 * havaintoja haetaan. Jos parametri on alle 1 tai epäluku, etsitään kaikista
 * luokista.
 * @param <type> $tietokantaolio
 * @param <type> $nyk_puolivuotiskauden_nro: 1->kevät 2010, 2-> syksy2010, 3->kevät2011 jne.
 */
function hae_havaintomaarat($ylaluokka_id, $tietokantaolio, $nyk_puolivuotiskauden_nro)
{
    $palaute = "";
    $ylaluokkaehto = "";
    // Muotoillaan yläluokan lause:
    if (isset($ylaluokka_id) && is_numeric($ylaluokka_id) && $ylaluokka_id > 0) {
        $ylaluokkaehto = "blajiluokat.ylaluokka_id = {$ylaluokka_id}";
    } else {
        $ylaluokkaehto = "blajiluokat.ylaluokka_id <> -1";
    }
    if (isset($nyk_puolivuotiskauden_nro) && is_numeric($nyk_puolivuotiskauden_nro) && $nyk_puolivuotiskauden_nro > 0) {
        /* Käydään läpi kaikki puolivuotiskaudet, joilla havaintoja tehty. */
        for ($i = 0; $i < $nyk_puolivuotiskauden_nro; $i++) {
            $puolivuotiskauden_nro = $nyk_puolivuotiskauden_nro - $i;
            // Muotoillaan puolivuotiskauden valinta:
            if (is_numeric($puolivuotiskauden_nro)) {
                $vuosi = floor(2010 + ($puolivuotiskauden_nro - 1) / 2);
                $kk_alaraja = 0;
                $kk_ylaraja = 7;
                if ($puolivuotiskauden_nro % 2 == 0) {
                    $kk_alaraja = 6;
                    $kk_ylaraja = 13;
                }
                $jaksoaikaehto = "bhavainnot.vuosi = {$vuosi}\n                                AND bhavainnot.kk > {$kk_alaraja}\n                                AND bhavainnot.kk < {$kk_ylaraja}";
            } else {
                $jaksoaikaehto = "";
                /* Haetaan kaikki! */
            }
            $hakulause = "SELECT DISTINCT\n                                henkilot.etunimi AS nimi,\n                                henkilot.id AS henk_id\n                        FROM blajiluokat\n                        JOIN bhavainnot\n                        ON bhavainnot.lajiluokka_id = blajiluokat.id\n                        JOIN henkilot\n                        ON bhavainnot.henkilo_id = henkilot.id\n                        WHERE {$ylaluokkaehto}\n                        AND {$jaksoaikaehto}\n                        ";
            $havaintohaku = $tietokantaolio->tee_OMAhaku($hakulause);
            $havaintotaulu = $tietokantaolio->hae_osumarivit_olioina($havaintohaku);
            if (!empty($havaintotaulu)) {
                // Muotoillaan jakso-otsikko:
                $palaute .= "<div class='bongaukset_jakso'><b>";
                if ($puolivuotiskauden_nro % 2 == 0) {
                    $palaute .= "Syksy ";
                } else {
                    $palaute .= "Kev&auml;t ";
                }
                $palaute .= floor(2010 + ($puolivuotiskauden_nro - 1) / 2) . "</b><br />";
                // Haluan nimet havaintomääräjärjestyksessä, joten teen
                // uuden taulukon, jossa järjestys oikea. Hmm.
                // Uuteen taulukkoon tulee jokaisesta henkilöstä tämän
                // tulosviesti ja lkm pikkutaulukossa.
                $havaintotulostaulu = array();
                foreach ($havaintotaulu as $henkilo) {
                    $lkm = laske_henkilon_bongausten_lkm($tietokantaolio, $henkilo->henk_id, $ylaluokka_id, $puolivuotiskauden_nro);
                    // Tulostetaan lajimäärät ja lisätään mahdollisuus
                    // klikkaamalla nähdä havaitut lajit.
                    $tulosmj = "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_KAIKKI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . "," . $puolivuotiskauden_nro . "," . "\"nayta_kaikki\")'>" . $henkilo->nimi . ": " . $lkm[0] . "</span>" . "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_SUOMI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . "," . $puolivuotiskauden_nro . ",\"" . Bongausasetuksia::$nayta_vain_suomessa_havaitut . "\")'>" . " (FI: " . $lkm[1] . ")" . "</span><br />";
                    array_push($havaintotulostaulu, array($lkm[0], $tulosmj));
                }
                usort($havaintotulostaulu, "vertaa_havaintomaarat");
                foreach ($havaintotulostaulu as $tulos) {
                    $palaute .= $tulos[1];
                }
                $palaute .= "</div>";
            }
        }
    }
    // Haetaan lopuksi vielä kaikki havainnot:
    $hakulause = "SELECT DISTINCT\n                            henkilot.etunimi AS nimi,\n                            henkilot.id AS henk_id\n                FROM blajiluokat\n                JOIN bhavainnot\n                ON bhavainnot.lajiluokka_id = blajiluokat.id\n                JOIN henkilot\n                ON bhavainnot.henkilo_id = henkilot.id\n                WHERE {$ylaluokkaehto}";
    $havaintohaku = $tietokantaolio->tee_OMAhaku($hakulause);
    $havaintotaulu = $tietokantaolio->hae_osumarivit_olioina($havaintohaku);
    if (!empty($havaintotaulu)) {
        // Muotoillaan jakso-otsikko:
        $palaute .= "<div id='bongaukset_kaikki'><b>Kaikki</b><br />";
        $havaintotulostaulu = array();
        foreach ($havaintotaulu as $henkilo) {
            $lkm = laske_henkilon_bongausten_lkm($tietokantaolio, $henkilo->henk_id, $ylaluokka_id, "Ehi vuan ihan kaikki!");
            $tulosmj = "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_KAIKKI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . ",\"kaikki_jaksot\"," . "\"nayta_kaikki\")'>" . $henkilo->nimi . ": " . $lkm[0] . "</span>" . "<span class='huomio2' title='" . Bongauspainikkeet::$HAVAINNOT_NAYTA_HENKILON_LAJIT_SUOMI_TITLE . "' onclick='hae_henkilon_bongauslajit(" . $henkilo->henk_id . ",\"kaikki_jaksot\",\"" . Bongausasetuksia::$nayta_vain_suomessa_havaitut . "\")'>" . " (FI: " . $lkm[1] . ")" . "</span><br />";
            array_push($havaintotulostaulu, array($lkm[0], $tulosmj));
        }
        usort($havaintotulostaulu, "vertaa_havaintomaarat");
        foreach ($havaintotulostaulu as $tulos) {
            $palaute .= $tulos[1];
        }
        // Kaikkien loppu:
        $palaute .= "</div>";
    }
    return $palaute;
}
/**
 * Hakee tietokannasta liikkujien nimet ja palauttaa ne tekstin&auml;.
 * @param <type> $tietokantaolio olio, joka sis&auml;lt&auml;&auml; yhteystiedot tietokantaan.
 * @return <type> Palauttaa merkkijonon, jota muokattu html:
 */
function hae_liikkujat($tietokantaolio, $omaid)
{
    $hakulause = "SELECT id, etunimi, sukunimi\n                    FROM henkilot\n                    WHERE id != '{$omaid}'";
    $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
    $nimet_taulukko_all = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
    //============= SUODATUS ALKU ======================
    $nimet_taulukko = array();
    $suodattimet = Suodatin::hae_suodattimet($omaid, $tietokantaolio);
    foreach ($nimet_taulukko_all as $osuma) {
        $henkilo_id = $osuma->id;
        if (!Suodatin::henkilo_suodatetaan_kevyt($henkilo_id, $omaid, $suodattimet)) {
            array_push($nimet_taulukko, $osuma);
        }
    }
    //============= SUODATUS LOPPU =====================
    $nimet = '';
    //kirjoita_elementtiin("nimet","Eka liikkuja on ".$nimet_taulukko[0]->etunimi);
    foreach ($nimet_taulukko as $nyk_olio) {
        // Otetaan mukaan vain sellaiset henkilöt, joilla on suorituksia:
        $tulos = $tietokantaolio->hae_eka_osuma_oliona("suoritukset", "henkilo_id", $nyk_olio->id);
        if ($tulos != "tuntematon") {
            // Haetaan uusien pikakommenttien lkm:
            $uusien_pk_lkm = Kontrolleri_pikakommentit::hae_henkilon_uusien_suorituspikakomm_lkm($omaid, $tietokantaolio, $nyk_olio->id);
            // Siivotaan mahdollinen URL:n kautta kulkeva liikenne.
            $kayt_ind = rawurlencode($nyk_olio->id);
            $omaind = rawurlencode($omaid);
            $etu = rawurlencode($nyk_olio->etunimi);
            $suku = rawurlencode($nyk_olio->sukunimi);
            $kysely = "kayttajaid={$kayt_ind}&enimi={$etu}&snimi={$suku}&omaid={$omaind}";
            // Alla huomaa, ett&auml; kysely pit&auml;&auml; olla lainausmerkeiss&auml;! Muuten ei toimi.
            $mj = <<<HASSUTAPA
                    <a
                    onclick="toteutaAJAX('suoritus_kyselyt.php',
                    '{$kysely}',
                    'reagoi','post', 'text')">
                    {$nyk_olio->etunimi} {$nyk_olio->sukunimi} {$uusien_pk_lkm}
                    </a>
HASSUTAPA;
            $nimet .= $mj;
        }
    }
    return $nimet;
}
Exemple #5
0
 /**
  * Palauttaa lajivalikon html-koodin. Pohjautuu tässä vaiheessa vain
  * kaksikerroksiseen lajiluokkahierarkkiaan.
  * @param <type> $lajiluokka_id_hav
  * @param <type> $tietokantaolio
  * @param <type> $ylaluokka_id_lj
  * @param <type> $kieli_kuv
  * @param <type> $otsikko
  */
 static function nayta_lajivalikko(&$lajiluokka_id_hav, $tietokantaolio, $ylaluokka_id_lj, $kieli_kuv, $otsikko)
 {
     // Haetaan lajiluokkien ja niihin liittyvien kuvausten tiedot.
     // HUOM! Tässä luotan siihen, ettei samalla kielellä ole kuin yksi
     // kuvausrivi yhtä lajiluokkaa kohti.
     $hakulause = "SELECT DISTINCT blajiluokat.id AS lj_id, bkuvaukset.nimi AS nimi\n                   FROM blajiluokat\n                   JOIN bkuvaukset\n                   ON bkuvaukset.lajiluokka_id = blajiluokat.id\n                   WHERE (bkuvaukset.kieli= {$kieli_kuv}\n                   AND blajiluokat.ylaluokka_id = {$ylaluokka_id_lj})\n                   ORDER BY bkuvaukset.nimi ASC\n                  ";
     $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
     $osumat = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
     // Luodaan taulukot tyhjine vaihtoehtoineen (jolloin ei yläkokonaisuutta):
     $arvot = array();
     $nimet = array();
     // Viedään otsikot ja vastaavat arvot taulukoihin:
     if (sizeof($osumat) != 0) {
         foreach ($osumat as $lajiluokka) {
             array_push($arvot, $lajiluokka->lj_id);
             array_push($nimet, $lajiluokka->nimi);
         }
     }
     $valikkohtml = "";
     try {
         $name_arvo = "lajiluokka_id_hav";
         $oletusvalinta_arvo = $lajiluokka_id_hav;
         $valikkohtml .= Html::luo_pudotusvalikko($arvot, $nimet, $name_arvo, $oletusvalinta_arvo, $otsikko);
     } catch (Exception $poikkeus) {
         $valikkohtml = Bongaustekstit::$havaintolomake_virheilm_lajivalikko . " (" . $poikkeus->getMessage() . ")";
     }
     return $valikkohtml;
 }
Exemple #6
0
 /**
  * Palauttaa luvun, joka ilmoittaa, kuinka monta annetun yläluokan lajia
  * annettu henkilö on havainnut.
  * @param <type> $tietokantaolio
  * @param <type> $henkilo_id
  * @param <type> $lajiluokka_id
  * @param <type> $puolivuotiskauden_nro: 1->kevät 2010, 2-> syksy2010, 3->kevät2011 jne.
  * Jos tämä on ei-numeerinen, haetaan kaikki.
  *
  * Palauttaa taulukon, jossa kaksi lkm-alkiota: kaikki ja Suomessa havaitut
  *
  * KORJAA MENEMÄÄN HAVAINTOJAKSOJEN KAUTTA KUN KERKIÄT
  */
 static function laske_henkilon_bongausten_lkm($tietokantaolio, $henkilo_id, $ylaluokka_id, $puolivuotiskauden_nro)
 {
     $lkm = array();
     // Muotoillaan yläluokan lause:
     if (isset($ylaluokka_id) && is_numeric($ylaluokka_id) && $ylaluokka_id > 0) {
         $ylaluokkaehto = "blajiluokat.ylaluokka_id = {$ylaluokka_id}";
     } else {
         $ylaluokkaehto = "blajiluokat.ylaluokka_id <> -1";
     }
     // Muotoillaan puolivuotiskauden valinta:
     if (is_numeric($puolivuotiskauden_nro)) {
         $vuosi = floor(2010 + ($puolivuotiskauden_nro - 1) / 2);
         $kk_alaraja = 0;
         $kk_ylaraja = 7;
         if ($puolivuotiskauden_nro % 2 == 0) {
             $kk_alaraja = 6;
             $kk_ylaraja = 13;
         }
         $jaksoaikaehto = "AND bhavainnot.vuosi = {$vuosi}\n                           AND bhavainnot.kk > {$kk_alaraja}\n                           AND bhavainnot.kk < {$kk_ylaraja}";
     } else {
         $jaksoaikaehto = "";
         /* Haetaan kaikki! */
     }
     // Muotoillaan varmuusehto:
     $varmuusehto = "AND bhavainnot.varmuus >= " . Varmuus::$melkoisen_varma;
     $hakulause = "SELECT bhavainnot.lajiluokka_id AS laji_id\n                   FROM bhavainnot\n                   JOIN henkilot\n                   ON bhavainnot.henkilo_id = henkilot.id\n                   JOIN blajiluokat\n                   ON bhavainnot.lajiluokka_id = blajiluokat.id\n                   WHERE henkilot.id = {$henkilo_id}\n                   AND {$ylaluokkaehto}\n                   {$jaksoaikaehto}\n                   {$varmuusehto}\n                   GROUP BY laji_id;\n                  ";
     $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
     // Palauttaa luvun 0 myös jos parametri paha.
     $lkm[0] = $tietokantaolio->hae_osumarivien_lkm($hakutulos);
     // Haetaan sitten vain Suomessa nähtyjen lkm:
     $suomi = Maat::$suomi;
     $hakulause = "SELECT bhavainnot.lajiluokka_id AS laji_id\n                   FROM bhavainnot\n                   JOIN henkilot\n                   ON bhavainnot.henkilo_id = henkilot.id\n                   JOIN blajiluokat\n                   ON bhavainnot.lajiluokka_id = blajiluokat.id\n                   WHERE henkilot.id = {$henkilo_id}\n                   AND {$ylaluokkaehto}\n                   {$jaksoaikaehto}\n                   {$varmuusehto}\n                   AND bhavainnot.maa = {$suomi}\n                   GROUP BY laji_id;\n                  ";
     $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
     // Palauttaa luvun 0 myös jos parametri paha.
     $lkm[1] = $tietokantaolio->hae_osumarivien_lkm($hakutulos);
     return $lkm;
 }
Exemple #7
0
 /**
  * Poistaa yhden kuvan ja siihen liittyvät kuva_albumi_linkit.
  * @param <type> $id_kuva
  * @param <type> $tietokantaolio
  */
 function poista_kuva($oma_id, $id_kuva, $tietokantaolio)
 {
     // Haetaan kuvan src poistoa varten:
     $hakulause = "SELECT src\n                    FROM kuvat\n                    WHERE id = {$id_kuva}";
     $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
     $osumataulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
     if (sizeof($osumataulukko) == 0) {
         $src = "";
     } else {
         $src = $osumataulukko[0]->src;
     }
     // POistetaan kuvatiedot tietokannasta:
     $taulu = "kuvat";
     $taulun_sarake = "id";
     $hakuarvo = $id_kuva;
     $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
     // Jos kuvan poisto onnistui, poistetaan myös orvoiksi jääneet linkit:
     if ($ilmoitus == "onnistui") {
         // Tämä tuhoaa tiedoston lopullisesti:
         $todellinen_poisto = unlink($src);
         // Aktiivisuusmerkintä:
         $viimeksi_aktiivi = time();
         $aktiivisuuslaji = Aktiivisuus::$KUVAN_POISTO;
         paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji);
         if ($todellinen_poisto) {
             $ilmoitus = "Kuvan poisto onnistui! Kuva tuhottu lopullisesti. ";
         } else {
             $ilmoitus = "Virhe kuvan poistossa! Kuvan tiedot poistettu\n                    tietokannasta, mutta kuvatiedoston poisto ei onnistunut. ";
         }
         // Haetaan ja poistetaan linkit. Kerrallakin voisi poistaa delete-
         // lauseella, mutta se tuntuu vähän uskaliaalta. Näin ainakin poisto
         // pysyy hanskassa, eikä nopeudella lie tässä niin väliä.
         $hakulause = "SELECT id\n                    FROM kuva_albumi_linkit\n                    WHERE kuva_id = {$id_kuva}";
         $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
         $linkit = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
         $poistetut_linkit_lkm = 0;
         foreach ($linkit as $linkki) {
             $taulu = "kuva_albumi_linkit";
             $taulun_sarake = "id";
             $hakuarvo = $linkki->id;
             $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
             if ($ilm == "onnistui") {
                 $poistetut_linkit_lkm++;
             }
         }
         $ilmoitus .= "Linkit (" . $poistetut_linkit_lkm . " kpl) poistettu.";
     } else {
         $ilmoitus = "Virhe kuvan poistossa! Yrit&auml; uudelleen!";
     }
     return $ilmoitus;
 }
/**
 * Poistaa albumin tietokannasta kuvineen ja kuvalinkkeineen.
 * Muuten albumin sisältämät kuvat ja kuva_albumi_linkit jäävät orvoiksi.
 * jäävät orvoiksi. Siispä kuvat poistetaan samalla! Aika vaarallinen komento,
 * joten varoitus pitää olla!
 * @param <type> $albumi_id
 * @param <type> $tietokantaolio
 * @return <type> Palauttaa merkkijonon, joka kertoo poiston onnistumisen.
 */
function poista_albumi($oma_id, $albumi_id, $tietokantaolio)
{
    // Haetaan ensin poistettavan albumin nimi:
    $hakulause = "SELECT nimi\n                FROM albumit\n                WHERE id = {$albumi_id}";
    $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
    $nimitaulukko = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
    if (sizeof($nimitaulukko) == 0) {
        $nimi = "tuntematon";
    } else {
        $nimi = $nimitaulukko[0]->nimi;
    }
    // Haetaan poistettavan albumin sisältämät kuvat (pitää hakea ennen
    // albumin poistoa!):
    $hakulause = "SELECT kuvat.id, kuvat.src\n                FROM albumit\n                JOIN kuva_albumi_linkit AS linkit\n                ON linkit.albumi_id = albumit.id\n                JOIN kuvat\n                ON kuvat.id = linkit.kuva_id\n                WHERE albumit.id = {$albumi_id}";
    $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
    $kuvat = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
    // Poistetaan albumi:
    $taulu = "albumit";
    $taulun_sarake = "id";
    $hakuarvo = $albumi_id;
    $ilmoitus = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
    // Jos albumin poisto onnistui, poistetaan myös orvoiksi jääneet linkit ja kuvat:
    if ($ilmoitus == "onnistui") {
        // Haetaan ja poistetaan linkit. Kerrallakin voisi poistaa delete-
        // lauseella, mutta se tuntuu vähän uskaliaalta. Näin ainakin poisto
        // pysyy hanskassa, eikä nopeudella lie tässä niin väliä.
        $hakulause = "SELECT id\n                FROM kuva_albumi_linkit\n                WHERE albumi_id = {$albumi_id}";
        $hakutulos = $tietokantaolio->tee_OMAhaku($hakulause);
        $linkit = $tietokantaolio->hae_osumarivit_olioina($hakutulos);
        $poistetut_linkit_lkm = 0;
        foreach ($linkit as $linkki) {
            $taulu = "kuva_albumi_linkit";
            $taulun_sarake = "id";
            $hakuarvo = $linkki->id;
            $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
            if ($ilm == "onnistui") {
                $poistetut_linkit_lkm++;
            }
        }
        // Poistetaan kuvat:
        $kuvalaskuri = 0;
        $tosituholaskuri = 0;
        //Todella tuhotut kuvatiedostot:
        foreach ($kuvat as $kuva) {
            $src = $kuva->src;
            $taulu = "kuvat";
            $taulun_sarake = "id";
            $hakuarvo = $kuva->id;
            $ilm = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
            if ($ilm == "onnistui") {
                $kuvalaskuri++;
            }
            // Tämä tuhoaa tiedoston lopullisesti:
            $todellinen_poisto = unlink($src);
            if ($todellinen_poisto) {
                $tosituholaskuri++;
            }
        }
        // Aktiivisuusmerkintä:
        $viimeksi_aktiivi = time();
        $aktiivisuuslaji = Aktiivisuus::$ALBUMIN_POISTO;
        paivita_aktiivisuus($oma_id, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji);
        if (sizeof($kuvat) == $kuvalaskuri && $kuvalaskuri == $tosituholaskuri) {
            $ilmoitus = "Albumi '" . $nimi . "' poistettu onnistuneesti.\n                    Samalla poistettu {$kuvalaskuri} kuvaa ja\n                    {$poistetut_linkit_lkm} linkki&auml;!";
        } else {
            $ilmoitus = "Albumi '" . $nimi . "' poistettu, mutta kuvien poistossa\n                    tuli virhe. " . sizeof($kuvat) . " kuvasta poistettu \n                    tietokannasta {$kuvalaskuri} kuvaa, tiedostosta\n                    {$tosituholaskuri} kuvaa ja {$poistetut_linkit_lkm}\n                    linkki&auml;!";
        }
    } else {
        $ilmoitus = "Albumin poisto ep&auml;onnistui!\n                    Mit&auml;&auml;n ei ole poistettu. Yrit&auml; uudelleen!";
    }
    return $ilmoitus;
}