/**
 * Tallentaa kuvan tietokantaan. Kuvan tiedot on tarkistettu ennen tänne tuloa,
 * joten niitä ei tarkemmin tarkisteta täällä.
 *
 * Tallentaa kuvan ja palauttaa palauteolion, joka sisältää
 * palautteen tallennuksen onnistumisesta ('onnistui' tai virheilmoitus) ja
 * tallennetun kuvan id:n, jotta uusi kuva osataan näyttää heti. Kolmanneksi
 * palauteoliossa on tallennetun kuvan tiedosto-osoite.
 *
 * @param <type> $kohde
 * @param <type> $id_kokon
 * @param <type> $id_teht
 * @param <type> $id_ratk
 * @param <type> $omaid
 * @param <type> $ladattu_kuva $_FILES['ladattu_kuva']
 * @param <type> $kuvaotsikko_kuva
 * @param <type> $kuvaselitys_kuva
 * @param <type> $vuosi_kuva
 * @param <type> $kk_kuva
 * @param <type> $paiva_kuva
 * @param <type> $nayttokokoindeksi_kuva
 * @param <type> $tietokantaolio
 * @param <type> $latauskansio Antaa sen kansion suhteellisen tiedostopolun,
 * jonne ladattu tiedosto on tarkoitus siirtää pysyvää sijoitusta varten.
 * @return Palaute $palauteolio
 */
function tallenna_kuva($kohde, $id_kokon, $id_teht, $id_ratk, $omaid, $ladattu_kuva, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $nayttokokoindeksi_kuva, $tietokantaolio, $latauskansio)
{
    // Tallenna_kuva palauttaa olion, joka sisältää kolme
    // muuttujaa; palautteen (ilmoitus), tallennetun kuvan id:n (2), joka
    // voi olla tyhjä virheen sattuessa ja kuvaosoitteen (3) ($palauteolio::oma).
    $palauteolio = new Palaute();
    $tallennetaan = true;
    /* Tallennetaanko kuvalinkki. */
    $palaute = "";
    $uuden_kuvan_id = -1;
    $kohdeosoite = "";
    /* Tarkistetaan kohde: */
    $taulu = "kuvat";
    $sarakenimi_kuvataulukko = array('henkilo_id', 'kuvaotsikko', 'kuvaselitys', 'vuosi', 'kk', 'paiva', 'src', 'leveys', 'korkeus', 'tiedostokoko', 'tiedostotunnus', 'tiedostonimi', 'tallennushetki_sek', 'nayttokokoindeksi');
    if ($ladattu_kuva['tmp_name'] == "") {
        $palaute = "\$ladattu_kuva['tmp_name'] on tyhj&auml;!";
    } else {
        $kuvatietotaulukko = getImageSize($ladattu_kuva['tmp_name']);
        $leveys = $kuvatietotaulukko[0];
        $kork = $kuvatietotaulukko[1];
        // Tiedostotunnisteet:
        $tunniste = $kuvatietotaulukko[2];
        //gif = 1/jpg = 2/png = 3/...
        //$html_lev_ja_kork = $kuvatietotaulukko[3];  // "height='333' width='455'"
        $koko = $ladattu_kuva['size'];
        // Koko tavuina (ilm.)
        if (!(is_numeric($leveys) && is_numeric($kork) && is_numeric($tunniste))) {
            $palaute = "getImageSize(\$ladattu_kuva['tmp_name'])-\n                        palautearvotaulukossa lev, kork tai tunniste\n                        ep&auml;lukuja! (lev: " . $leveys . ", kork: " . $kork . "\n                        ja tunniste: " . $tunniste . ")";
            return $palaute;
        }
        // Kuvan nimeen lisätään tallennusaika sekunteina, jottei
        // duplikaatteja syntyisi. Samannimisiä kuvia voi muuten tulla.
        // Kuvan tiedostonimeä ei muuteta.
        $tiedostonimi = time() . "_" . $ladattu_kuva['name'];
        $kohdeosoite = $latauskansio . "/" . $tiedostonimi;
        $kuvatiedosto = $ladattu_kuva['tmp_name'];
        //*******************************************************************
        /* TÄSSÄ KUVAN KOKO TARKISTETAAN JA KUVA PIENENNETÄÄN, ETTEI
         * ÄLYTTÖMIÄ TULE. YLI 300 KT:N KUVAT PIENENNETÄÄN 1600 PIKSELIN
         * KOKOON, JOLLOIN MYÖS KUVAKOKO PIENENTYY. */
        if ($koko > Kuvat::$KUVALATAUS_RAJAKOKO) {
            $max_mitta = Kuvat::$KUVATALLENNUS_PIENENNOSMITTA;
            if (muuta_kuvan_koko($ladattu_kuva['tmp_name'], $max_mitta, $kohdeosoite, 75)) {
                // Haetaan pienennetyn kuvan uudet tiedot:
                $kuvatietotaulukko = getImageSize($kohdeosoite);
                $leveys = $kuvatietotaulukko[0];
                $kork = $kuvatietotaulukko[1];
                // Tiedostotunnisteet:
                $tunniste = $kuvatietotaulukko[2];
                //gif = 1/jpg = 2/png = 3/...
                $koko = filesize($kohdeosoite);
                //
            } else {
                // Ellei onnistu, tallennetaan alkuperäinen:
                $kuvatiedosto = $ladattu_kuva['tmp_name'];
                move_uploaded_file($kuvatiedosto, $kohdeosoite);
            }
        } else {
            // Ellei pienennöstarvetta ole.
            $kuvatiedosto = $ladattu_kuva['tmp_name'];
            move_uploaded_file($kuvatiedosto, $kohdeosoite);
        }
        //*******************************************************************
        $henkilo_id = $omaid;
        $tallennushetki_sek = time();
        $arvotaulukko = array($henkilo_id, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $kohdeosoite, $leveys, $kork, $koko, $tunniste, $tiedostonimi, $tallennushetki_sek, $nayttokokoindeksi_kuva);
        // Palauttaa merkkijonon 'onnistui', jos tallennus onnistuu.
        $virheilm = Tekstit::$ilm_kuva_uusi_tallennus_eiok;
        $onnistuikos = $tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimi_kuvataulukko, $arvotaulukko, $virheilm);
        $palaute = $onnistuikos;
        if ($onnistuikos == Tietokantaolio::$HAKU_ONNISTUI) {
            $tallennetaan = true;
            $uuden_kuvan_id = mysql_insert_id();
            $virheilm = Tekstit::$ilm_kuva_linkin_tallennus_eiok;
            /*
             * Linkki kuvan ja kohteen välille tehdään huolella oikein päin:
             */
            if ($kohde === Kuvat::$kohde_kokonaisuus_tiivistelma) {
                $taulu = "kuva_linkit";
                $sarakenimet = array("kokon_id", "kuva_id", "kohde");
                $arvot = array($id_kokon, $uuden_kuvan_id, $kohde);
                $aktiivisuuslaji = Aktiivisuus::$KUVAN_TALLENNUS_KOKONAISUUTEEN;
            } else {
                if ($kohde === Kuvat::$kohde_kokonaisuus_selitys) {
                    $taulu = "kuva_linkit";
                    $sarakenimet = array("kokon_id", "kuva_id", "kohde");
                    $arvot = array($id_kokon, $uuden_kuvan_id, $kohde);
                    $aktiivisuuslaji = Aktiivisuus::$KUVAN_TALLENNUS_KOKONAISUUTEEN;
                } else {
                    if ($kohde === Kuvat::$kohde_kokonaisuus_tiivis_manuaali || $kohde === Kuvat::$kohde_kokonaisuus_selitys_manuaali) {
                        $taulu = "kuva_linkit";
                        $sarakenimet = array("kokon_id", "kuva_id", "kohde");
                        $arvot = array($id_kokon, $uuden_kuvan_id, $kohde);
                        $aktiivisuuslaji = Aktiivisuus::$KUVAN_TALLENNUS_KOKONAISUUTEEN;
                    } else {
                        if ($kohde === Kuvat::$kohde_tehtava) {
                            $taulu = "tehtavakuvalinkit";
                            $sarakenimet = array("tehtava_id", "kuva_id");
                            $arvot = array($id_teht, $uuden_kuvan_id);
                            $aktiivisuuslaji = Aktiivisuus::$KUVAN_TALLENNUS_TEHTAVAAN;
                        } else {
                            if ($kohde === Kuvat::$kohde_ratkaisu) {
                                $taulu = "ratkaisukuvalinkit";
                                $sarakenimet = array("ratkaisu_id", "kuva_id");
                                $arvot = array($id_ratk, $uuden_kuvan_id);
                                $aktiivisuuslaji = Aktiivisuus::$KUVAN_TALLENNUS_RATKAISUUN;
                            } else {
                                $tallennetaan = false;
                                $aktiivisuuslaji = "";
                                /* Tämän ei pitäisi tulla käyttäjälle, minkä takia ei käännetä. */
                                $onnistuiko_linkki = "Tuntematon kuvien kohdenimi! " . "(tallenna_kuva.php)" . "Tallennus peruttu!";
                            }
                        }
                    }
                }
            }
            /* Jos kaikki kunnossa, tallennetaan kuvalinkki */
            if ($tallennetaan) {
                $onnistuiko_linkki = $tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimet, $arvot, $virheilm);
            } else {
                // Perutaan kuvan tallennus, koska sitä ei löydy ilman linkkiä!
                unlink($kohdeosoite);
                // Kuvan tod. poisto tiedostosta!
                /* Kuvatiedot poistetaan myös. */
                $taulu = "kuvat";
                $taulun_sarake = "id";
                $hakuarvo = $uuden_kuvan_id;
                $poistopalaute = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
                $palaute .= "<br />" . $poistopalaute;
            }
            if ($onnistuiko_linkki != Tietokantaolio::$HAKU_ONNISTUI) {
                $uuden_kuvan_id = -1;
                // Uusi kuva ei kuitenkaan löydy.
                // Perutaan kuvan tallennus, koska sitä ei löydy ilman linkkiä!
                unlink($kohdeosoite);
                // Kuvan tod. poisto tiedostosta!
                /* Kuvatiedot poistetaan myös! */
                $taulu = "kuvat";
                $taulun_sarake = "id";
                $hakuarvo = $uuden_kuvan_id;
                $poistopalaute = $tietokantaolio->poista_rivi($taulu, $taulun_sarake, $hakuarvo);
                $palaute = Tekstit::$ilm_kuva_linkin_tallennus_eiok;
                $palaute .= "<br />" . $poistopalaute;
            } else {
                /* Kun linkin tallennuskin onnistui: */
                // Aktiivisuusmerkintä:
                $viimeksi_aktiivi = time();
                paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji);
                $palaute = Tietokantaolio::$HAKU_ONNISTUI;
            }
        }
    }
    $palauteolio->set_ilmoitus($palaute);
    $palauteolio->set_muokatun_id($uuden_kuvan_id);
    $palauteolio->set_oma($kohdeosoite);
    /* kansio-osoite+kuvan nimi! */
    return $palauteolio;
}
Exemple #2
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;
 }
Exemple #3
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;
 }
/**
 * 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;
}