add_image.php 6.23 KB
<?php
/*
if(!$_GET['i'] AND !$_GET['h']) {
header("Location:etusivu");
} else {
echo "id: " .$_GET['i']  . "<br>";
echo "hash: " . $_GET['h']  . "<br>";
}
*/


$maxkoko = 10485760; // korkein tiedoston koko tavuina

if ($_POST["i"] && $_POST["h"]) {
	if ( $_POST["i"]<0 || !is_numeric($_POST["i"]) ) die("Malformed ID");
	$id = $_POST["i"];

	$sha1 = sha1("A4VJoyfVecto10nbGCCE41".$id."H3yvFDAqramaxGYn7mc");

	if ($sha1 != $_POST["h"]) die("Malformed hash");
	$tiedosto = $_FILES["f"];

	if (isset($tiedosto)) {
	$siirtoeroorit = array("", "Liian iso tiedosto", "Liian iso tiedosto",
	"Tiedosto siirtyi vain osittain", "Tiedosto ei siirtynyt", "Palvelimen sisäinen virhe");

    if ($tiedosto["size"] > $maxkoko) {
        echo "<p>Tiedosto {$tiedosto["name"]} on liian suuri! Muista maksimikoko, " .
        round($maxkoko / 1048576, 1) . "Mt.</p>\n";
    }

	elseif ($tiedosto["error"] != 0) {
        echo "<p>Siirrossa tapahtui virhe! (" . $siirtoeroorit[$tiedosto["error"]] . ")</p>\n";
    }

	elseif ($tiedosto["tmp_name"] == "") {
        echo "<p>Et valinnut tiedostoa? <a href=\"image.php?i=$id&h=$h\">Takaisin</a></p>\n";
    }

	elseif (is_uploaded_file($tiedosto["tmp_name"])) { 
		list($width, $height) = getimagesize($tiedosto["tmp_name"]);
		$old = imagecreatefromjpeg($tiedosto["tmp_name"]);
		if (!$old) die("Sopimaton JPEG!");
		$wid = imagesx($old);
		$hei = imagesy($old);
		$miniw = 280;
		$minih = 410;
		$thumb = 4; // neljasosa
		$new = imagecreatetruecolor($miniw, $minih);

		if ($wid / $hei > $miniw / $minih) 
		{
			$y=0;
			$x = ($wid - $hei / $minih * $miniw) / 2;
			$wid = $hei / $minih * $miniw;
		}
		else
		{
			$x=0;
 			$y = ($hei - $wid / $miniw * $minih) / 2;
 			$hei = $wid / $miniw * $minih;
		}
		imagecopyresampled($new, $old, 0, 0, $x, $y, $miniw, $minih, $wid, $hei);

		imagepng($new, $tiedosto["tmp_name"]);
		$fullpic = file_get_contents($tiedosto["tmp_name"]);
		$halfpic = imagecreatetruecolor($miniw/$thumb, $minih/$thumb);
		imagecopyresampled($halfpic, $new, 0, 0, 0, 0, $miniw/$thumb, $minih/$thumb, $miniw, $minih);
		ob_start();
		imagepng($halfpic);
		$halfpic2 = ob_get_contents();
		ob_end_clean();

        $fullpic = base64_encode($fullpic);
        $data = array(  'IMAGEDATA' => $fullpic,
                        'MIMETYPE' => 'image/png',
                        'DEFAULTIMAGE' => '1'
                    );
        
        $hasimg = $db->fetchOne("SELECT count(ID) FROM USERIMAGE WHERE OWNER_ID = '$id'");
        if($hasimg != 0) {
            $db->update('USERIMAGE', $data, "OWNER_ID = $id");
        } else {
            $data['OWNER_ID'] = $id;
            $db->insert('USERIMAGE', $data, "OWNER_ID = $id");
        }
		header("Location: /index.php?pid=addimg&i=$id&h=$sha1");

	}

	}
}

if ( $_GET["i"]<0 || !is_numeric($_GET["i"]) ) die("Malformed ID");
$id = $_GET["i"];
$sha1 = sha1("A4VJoyfVecto10nbGCCE41".$id."H3yvFDAqramaxGYn7mc");
if ($sha1 != $_GET["h"]) die("Malformed hash");

if ($_GET["a"] == "sendurl") {
    $email = $db->fetchOne("SELECT EMAIL FROM USER WHERE ID = '$id'");

    if($email) {
	mail($email,
		"Insomnia XI -kuvasi",

		"Hei,\r\nsinua on pyydetty tallentamaan tai\r\n".
		"vaihtamaan Insomnia X-tapahtuman kulkukorttiin tuleva kuva.\r\n".
		"Kuvan voi vaihtaa osoitteesta \r\n".
        "http://kauppa.insomnia.fi/index.php?pid=addimg&i=$id&h=$sha1\r\n".
        "Tarkastathan samalla tietosi ja tarvittaessa muutat ne oikeiksi / pyydät ryhmänjohtajaasi muuttamaan.".
		"\r\n\r\n".
		"--\r\n".
		"Terveisin,\r\n".
		"Insomnia X organisaatio",

		"From: laskutus@insomnia.fi\r\n".
		"Reply-To: laskutus@insomnia.fi\r\n".
		"Content-Type: text/plain; charset=UTF-8\r\n".
                     "Content-Transfer-Encoding: 8bit"
		);
        $asia .= "Viesti lähetetty osoitteeseen $email. <a href=\"/index.php?pid=details\">Takaisin listaukseen</a>";
    } else {
        $asia .= "Sähköpostiosoitetta ei ole määritetty";
    }
} elseif ($_GET["a"] == "redirect") { // selain ei lähettäis uudelleen
	header("Location: image.php?i=$id&h=$sha1&a=up");

} elseif ($_GET["a"] == "show") { // näytetään kuva
    $row = $db->fetchRow("SELECT ID, IMAGEDATA, MIMETYPE, DESCRIPTION, NAME, DEFAULTIMAGE, OWNER_ID  FROM USERIMAGE WHERE OWNER_ID = '$id'");

	if(empty($row['IMAGEDATA'])) {
        die('12765b - ei kuvaa');
    }
    
	header('Content-type: ' . $row['MIMETYPE']);
    echo base64_decode($row['IMAGEDATA']);
#    die();
} else {

    $hlo = $db->fetchRow("SELECT NAME, NICK, EMAIL, ADDRESS, ZIP, TOWN, PHONE, BIRTHYEAR, TYPE FROM USER WHERE ID = '$id'");
    $kuvadata = $db->fetchOne("SELECT COUNT(ID) FROM USERIMAGE WHERE OWNER_ID = '$id'");

$asia .=  "<h3>Kuvan vaihtaminen</h3>";
if ($_GET["a"] == "up") echo "<p><b>Tiedoston lähettäminen onnistui!</b></p>";

	$asia .= ($kuvadata != 0 ? "<img src=\"/index.php?pid=addimg&i=$id&h=$sha1\" />" : "&nbsp;");
	$asia .= "
    <table style=\"text-align:left\">
	<tr><th>Nimi: </th><td>".$hlo['NAME']."</td></tr>
	<tr><th>Nick: </th><td>".$hlo['NICK']."</td></tr>
	<tr><th>Sähköposti: </th><td>".$hlo['EMAIL']."</td></tr>
	<tr><th valign=\"top\">Osoite: </th><td>".$hlo['ADDRESS']."<br />".$hlo['ZIP']." " .$hlo['TOWN']."</td></tr>
	<tr><th>Puhelin: </th><td>".$hlo['PHONE']."</td></tr>
    <tr><th align=\"top\">Kuva </th><td>".
    ($kuvadata != 0 ? " 
        <a href=\"/index.php?pid=addimg&i=$id&h=$sha1&a=show\" style=\"color:blue\">
            <img style=\"border: 2px solid black\" src=\"/index.php?pid=addimg&i=$id&h=$sha1&a=show\" width=70 height=102 >
            </a>." : "<b>Ei</b>")."</td></tr>
</table>
<hr />

<h3>Tallenna uusi kuva</h3>

".($i["id"] != '' ? "<p><i>Huomaathan, että olet lähettänyt jo kuvasi. Jos lähetät uuden kuvan, vanha kuvasi pyyhkiytyy pois.</i></p>" : '')."
<form action=\"/index.php?pid=addimg\" method=\"post\" enctype=\"multipart/form-data\">
	<input type=\"hidden\" name=\"h\" value=\"{$sha1}\" />
	<input type=\"hidden\" name=\"i\" value=\"{$id}\" />
	<input type=\"file\" name=\"f\" />
	<input type=\"submit\" value=\"Tallenna kuva\" />
</form>
<a href=\"http://www.poliisi.fi/poliisi/home.nsf/pages/43B5BDB1FCDD358CC22570180036A9C0?opendocument\" target=\"_blank\">Kuvaohje</a><br><br>
Suositeltu kuvan koko on 280x410 pikseliä. Kuva rajataan tarvittaessa oikean kokoiseksi. <br>
Vain <b>alle 1MB kokoiset JPEG-kuvat</b> kelpaavat.
";

} // a=show else

?>