/** * 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ä!"; } 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; } // 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; }
/** * Päivittää aktiivisuudeksi parametrina annetun aktiivisuuden, joka on tehty * annettuna timestamp-hetkenä. Lisää aina uuden rivin taulukkoon. Palauttaa * true, jos lisäys onnistui, false muutoin. Päivittää myös sessiomuuttujaan * viimeisen aktiivisuuden ajan: $_SESSION['viim_aktiivisuus'] = time(); * * @param <type> $omaid * @param <type> $tietokantaolio * @param <type> $viimeksi_aktiivi Viimeisen aktiivisuuden aika sek. * @param <type> $aktiivisuuslaji Viimeisen aktiivisuuden symboliluku. */ function paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji) { $sarakenimitaulukko = array("henkilo_id", "viimeksi_aktiivi", "aktiivisuuslaji"); $arvotaulukko = array($omaid, $viimeksi_aktiivi, $aktiivisuuslaji); $taulu = "aktiivisuus"; $onnistui = $tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimitaulukko, $arvotaulukko, Tekstit::$aktiivisuustallennus_virheilm_tallennus_eiok); $_SESSION['viim_aktiivisuus'] = time(); return $onnistui; }