/** * 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äyttäjä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ään henkilöä ei löytynyt!"; } return $lomakehtml; }
/** * 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ä 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ä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ä. * @param <type> $tietokantaolio olio, joka sisältää 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ä kysely pitää olla lainausmerkeissä! 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; }
/** * 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; }
/** * 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; }
/** * 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ä 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ä!"; } 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ä!"; } } else { $ilmoitus = "Albumin poisto epäonnistui!\n Mitään ei ole poistettu. Yritä uudelleen!"; } return $ilmoitus; }