예제 #1
0
 /**
 * HUOM! Tallentaa pikkukuvat tietokantaan ja alkuperäisen eri kansioon!
 * Kuvan tiedot on tarkistettu ennen tänne tuloa,
 * joten niitä ei tarkemmin tarkisteta täällä.
 *
 * SQL:
 * create table kuvat
     (
  id                    mediumint auto_increment not null,
  henkilo_id            tinyint not null,
  kuvaotsikko           varchar(200),
  kuvaselitys           varchar(5000),
  vuosi                 smallint default 0,
  kk                    tinyint default 0,
  paiva                 tinyint default 0,
  src                   varchar(300),
  leveys                smallint not null,
  korkeus               smallint not null,
  tiedostokoko          int not null,
  tiedostotunnus        varchar(20) not null,
  tiedostonimi          varchar(100) not null,
  tallennusaika_sek     int default 0,
  minikuva1             longblob,
  minikuva2             longblob,
  primary key (id),
  index(henkilo_id),
  index(tallennusaika_sek),
  index(jarjestysluku)
     );
 *
 * Tallentaa kuvan ja palauttaa taulukon, jonka ensimmäinen alkio on
 * palautte tallennuksen onnistumisesta ('onnistui' tai virheilmoitus) ja toinen
 * tallennetun kuvan id:n, jotta uusi kuva osataan näyttää heti.
 *
 * @param Parametrit $parametriolio
 * @return Array Palautetaulukko
 */
 public static function tallenna_kuva($parametriolio)
 {
     $omaid = $parametriolio->omaid;
     $uuden_kuvan_id = -1;
     //$_FILES['ladattu_kuva']:
     $ladattu_kuva = $parametriolio->ladattu_kuva;
     $kuvaotsikko_kuva = $parametriolio->kuvaotsikko_kuva;
     $kuvaselitys_kuva = $parametriolio->kuvaselitys_kuva;
     $vuosi_kuva = $parametriolio->vuosi_kuva;
     $kk_kuva = $parametriolio->kk_kuva;
     $paiva_kuva = $parametriolio->paiva_kuva;
     $tietokantaolio = $parametriolio->tietokantaolio;
     $id_lj = -1;
     // bongausalbumeiden näyttöä varten tarvitaan tämä.
     // Antaa sen kansion suhteellisen tiedostopolun,
     // jonne ladattu tiedosto on tarkoitus siirtää pysyvää sijoitusta varten.
     $latauskansio = $parametriolio->get_kuvien_kansio_osoite();
     // Vastaava pikkukuville:
     $pikkukuvakansio = $parametriolio->get_pikkukuvien_kansio_osoite();
     $palautustaulukko = array();
     $palaute = "";
     $taulu = "kuvat";
     $sarakenimi_kuvataulukko = array('henkilo_id', 'kuvaotsikko', 'kuvaselitys', 'vuosi', 'kk', 'paiva', 'src', 'leveys', 'korkeus', 'tiedostokoko', 'tiedostotunnus', 'tiedostonimi', 'tallennusaika_sek', 'minikuva1', 'minikuva2');
     if ($ladattu_kuva['tmp_name'] == "") {
         $palaute = "\$ladattu_kuva['tmp_name'] on tyhjä!";
     } 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älukuja! (lev: " . $leveys . ", kork: " . $kork . "\n                            ja tunniste: " . $tunniste . ")";
             return $palaute;
         }
         /**********************************************************************/
         // Alla olevat liittyvät kuvan tallentamiseen tietokantaan tms:
         //$kuva = file_get_contents("vikakuva.img");
         /*$instr = fopen("vikakuva.img","rb");
           $kuva = addslashes(fread($instr,filesize("vikakuva.img")));*/
         // TÄMÄKIN TOIMII:
         /*$instr = fopen($ladattu_kuva['tmp_name'],"rb");
           $kuva = addslashes(fread($instr,filesize($ladattu_kuva['tmp_name'])));*/
         /***********************************************************************/
         // Kuvan nimeen lisätään tallennusaika sekunteina, jottei
         // duplikaatteja syntyisi. Samannimisiä kuvia voi kuitenkin tulla.
         // Kuvan tiedostonimeä ei muuteta.
         $tiedostonimi = time() . "_" . $ladattu_kuva['name'];
         $kohdeosoite = $latauskansio . "/" . $tiedostonimi;
         // Tiedostopolku minikuviin: eri kansio pikkukuville
         // ja lisätään nimeen miniloppu:
         $kohdeosoite_mini1 = $pikkukuvakansio . "/" . Kuva::$pikkukuva1_nimen_osa . $tiedostonimi;
         $kohdeosoite_mini2 = $pikkukuvakansio . "/" . Kuva::$pikkukuva2_nimen_osa . $tiedostonimi;
         $kohdeosoite_mini3 = $pikkukuvakansio . "/" . Kuva::$pikkukuva3_nimen_osa . $tiedostonimi;
         // IDEA: PIENENNÄ ENSIN 1600 -> 700 -> 400 -> 150 NIIN MENNEE
         // NOPSEMMIN. KUVALAATU SÄILYY IHAN OK!
         /******************************************************************/
         /******************************************************************/
         /* 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 > Kuva::$KUVALATAUS_RAJAKOKO) {
             $max_mitta = Kuva::$KUVATALLENNUS_PIENENNOSMITTA;
             if (Kuva::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);
         }
         // Tehdään ensin 700 pikselin pienennös. Tätä ei tallenneta
         // tietokantaan, koska on suht iso kuitenkin.
         $max_mitta = Kuva::$TIETOKANTAKUVA_ISO2_MITTA;
         if (Kuva::muuta_kuvan_koko($kohdeosoite, $max_mitta, $kohdeosoite_mini3, 75)) {
             // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan:
             $max_mitta = Kuva::$TIETOKANTAKUVA_ISO_MITTA;
             // Tänne kopioidaan pienennös, koska en keksinyt, miten muuten
             // kuvan saa tietokantaan:
             $kuvatiedosto = "../temp/muokkaus2.jpg";
             if (Kuva::muuta_kuvan_koko($kohdeosoite_mini3, $max_mitta, $kuvatiedosto, 75)) {
                 $minikuva2 = mysql_real_escape_string(file_get_contents($kuvatiedosto));
                 // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa
                 // tietokannasta haku oli toivottoman hidasta!
                 copy($kuvatiedosto, $kohdeosoite_mini2);
                 // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan:
                 $max_mitta = Kuva::$TIETOKANTAKUVA_PIENI_MITTA;
                 $kuvatiedosto = "../temp/muokkaus1.jpg";
                 // Tänne kopioidaan pienennös
                 // Luku tarkoittaa %:n laatua. Oletus on 75%.
                 if (Kuva::muuta_kuvan_koko($kohdeosoite_mini2, $max_mitta, $kuvatiedosto, 75)) {
                     $minikuva1 = mysql_real_escape_string(file_get_contents($kuvatiedosto));
                     // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa
                     // tietokannasta haku oli toivottoman hidasta!
                     copy($kuvatiedosto, $kohdeosoite_mini1);
                 } else {
                     // Ellei minikuva1 onnistunut:
                     $minikuva1 = "";
                 }
             } else {
                 $minikuva2 = "";
             }
         } else {
             // Ellei minikuva3:kaan onnistunut:
             $minikuva1 = "";
             $minikuva2 = "";
         }
         $henkilo_id = $omaid;
         $tallennusaika_sek = time();
         $arvotaulukko = array($henkilo_id, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $kohdeosoite, $leveys, $kork, $koko, $tunniste, $tiedostonimi, $tallennusaika_sek, $minikuva1, $minikuva2);
         // Palauttaa merkkijonon 'onnistui', jos tallennus onnistuu.
         $virheilmoitus = "Virhe kuvatietojen tallennuksessa (tallenna_kuva2)!";
         $onnistuikos = $tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimi_kuvataulukko, $arvotaulukko, $virheilmoitus);
         if ($onnistuikos == Tietokantaolio::$HAKU_ONNISTUI) {
             // Jos onnistui, lisätään linkki albumin ja kuvan välille.
             // Ainakin bongauksissa voidaan linkkejä tehdä monta kerralla.
             $uuden_kuvan_id = mysql_insert_id();
             $parametriolio->id_kuva = $uuden_kuvan_id;
             $onnistuiko_linkki = Kuva::tallenna_kuvalinkit($parametriolio);
             if ($onnistuiko_linkki === Kuva::$OPERAATIO_ONNISTUI) {
                 $palaute = 'onnistui';
             } else {
                 $palaute = 'Kuvan tallennus ok, mutta linkin tallennus ei
                     onnistunut!<br>' . $onnistuiko_linkki;
                 $uuden_kuvan_id = "";
                 // Uusi kuva ei kuitenkaan löydy.
             }
             // Aktiivisuusmerkintä:
             $viimeksi_aktiivi = time();
             $aktiivisuuslaji = Aktiivisuus::$KUVAN_LUOMINEN;
             paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji);
         } else {
             // Ellei kuvan tallennus onnistunut:
             $uuden_kuvan_id = "";
             $palaute = $onnistuikos;
         }
     }
     array_push($palautustaulukko, $palaute, $uuden_kuvan_id);
     return $palautustaulukko;
 }
예제 #2
0
function luo_bongauspikkukuvat_muutos_maalis2011($tietokantaolio)
{
    // Haetaan ensin kansion sisältämien kuvien tiedot:
    $kuva_id_taulukko = hae_bongauskuvien_idt($tietokantaolio);
    $onnistuneiden_muokkausten_lkm = 0;
    // Haetaan sitten kuvat yksi kerrallaan ja kopioidaan sitten kuvan
    // pienennettyjä versioita sekä tietokantaan (2kpl) ja pikkukuviin (3kpl).
    for ($i = 0; $i < sizeof($kuva_id_taulukko); $i++) {
        // Voidaan hakea kaikki tiedot, koska näillä ei edes pikkukuvia
        // pitäisi olla.
        $taulunimi = "kuvat";
        $sarakenimi = "id";
        $hakuarvo = $kuva_id_taulukko[$i];
        $kuvaolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo);
        if ($kuvaolio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) {
            // Kuvan tiedostonimeä ei muuteta.
            $tiedostonimi = $kuvaolio->tiedostonimi;
            $kuvaosoite = $kuvaolio->src;
            // Tiedostopolku minikuviin: eri kansio pikkukuville
            // ja lisätään nimeen miniloppu:
            $kohdeosoite_mini1 = Kuva::$kansion_os_bongauskuvat_pikkukuvat . "/" . Kuva::$pikkukuva1_nimen_osa . $tiedostonimi;
            $kohdeosoite_mini2 = Kuva::$kansion_os_bongauskuvat_pikkukuvat . "/" . Kuva::$pikkukuva2_nimen_osa . $tiedostonimi;
            $kohdeosoite_mini3 = Kuva::$kansion_os_bongauskuvat_pikkukuvat . "/" . Kuva::$pikkukuva3_nimen_osa . $tiedostonimi;
            // IDEA: PIENENNÄ ENSIN 1600 -> 700 -> 400 -> 150 NIIN MENNEE
            // NOPSEMMIN. KUVALAATU PITÄÄ KATSOA, JOTTA SÄILYY. IHAN OK!
            /******************************************************************/
            /******************************************************************/
            // Tehdään ensin 700 pikselin pienennös. Tätä ei tallenneta
            // tietokantaan, koska on suht iso kuitenkin.
            $max_mitta = Kuva::$TIETOKANTAKUVA_ISO2_MITTA;
            if (Kuva::muuta_kuvan_koko($kuvaosoite, $max_mitta, $kohdeosoite_mini3, 75)) {
                // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan:
                $max_mitta = Kuva::$TIETOKANTAKUVA_ISO_MITTA;
                // Tänne kopioidaan pienennös, koska en keksinyt, miten muuten
                // kuvan saa tietokantaan:
                $kuvatiedosto = "../temp/muokkaus2.jpg";
                if (Kuva::muuta_kuvan_koko($kohdeosoite_mini3, $max_mitta, $kuvatiedosto, 75)) {
                    $minikuva2 = mysql_real_escape_string(file_get_contents($kuvatiedosto));
                    // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa
                    // tietokannasta haku oli toivottoman hidasta!
                    copy($kuvatiedosto, $kohdeosoite_mini2);
                    // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan:
                    $max_mitta = Kuva::$TIETOKANTAKUVA_PIENI_MITTA;
                    $kuvatiedosto = "../temp/muokkaus1.jpg";
                    // Tänne kopioidaan pienennös
                    // Luku tarkoittaa %:n laatua. Oletus on 75%.
                    if (Kuva::muuta_kuvan_koko($kohdeosoite_mini2, $max_mitta, $kuvatiedosto, 75)) {
                        $minikuva1 = mysql_real_escape_string(file_get_contents($kuvatiedosto));
                        // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa
                        // tietokannasta haku oli toivottoman hidasta!
                        copy($kuvatiedosto, $kohdeosoite_mini1);
                        // Päivitetään pikkukuvat tietokantaan:
                        // Kyselyparametrit:
                        $taulu = "kuvat";
                        $muutossarakkeet = array('minikuva1', 'minikuva2');
                        $muutosarvot = array($minikuva1, $minikuva2);
                        $ehtosarake = "id";
                        $ehtoarvo = $kuva_id_taulukko[$i];
                        $max_muutosrivilkm = 1;
                        // Muutetaan max yhtä riviä.
                        $muokkaus = $tietokantaolio->tee_UPDATEhaku($taulu, $muutossarakkeet, $muutosarvot, $ehtosarake, $ehtoarvo, $max_muutosrivilkm);
                        // Jos tämäkin ok:
                        if (mysql_affected_rows() == 1) {
                            $onnistuneiden_muokkausten_lkm++;
                        }
                    }
                }
            }
        }
        // if-lauseen "jos kuva löytyi" loppu
    }
    // For-lauseen loppu
    if (sizeof($kuva_id_taulukko) == $onnistuneiden_muokkausten_lkm) {
        $palaute = "Kaikki " . $onnistuneiden_muokkausten_lkm . " bongauskuvaa on\n                    pienennetty ja kustakin viisi kopiota tallennettu!";
    } else {
        $palaute = $onnistuneiden_muokkausten_lkm . " bongauskuvaa muokattu, mutta " . (sizeof($kuva_id_taulukko) - $onnistuneiden_muokkausten_lkm) . " kuvan kohdalla toiminto EI ONNISTUNUT!";
    }
    return $palaute;
}