From 11736393f168441e379bf1c928694f3dc9890f35 Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Tue, 9 Mar 2021 22:22:23 +0800 Subject: [PATCH] add save attachment --- include/functions.php | 216 ++++++++++++++++++++++++++++++++++++++++++ public/takeupload.php | 15 ++- 2 files changed, 230 insertions(+), 1 deletion(-) diff --git a/include/functions.php b/include/functions.php index 2984c1da..5208bed4 100644 --- a/include/functions.php +++ b/include/functions.php @@ -4681,6 +4681,222 @@ function displayHotAndClassic() } } + function saveAttachment($file) + { + $filesize = $file["size"]; + $filetype = $file["type"]; + $origfilename = $file['name']; + $ext_l = strrpos($origfilename, "."); + $ext = strtolower(substr($origfilename, $ext_l+1, strlen($origfilename)-($ext_l+1))); + $banned_ext = array('exe', 'com', 'bat', 'msi'); + $img_ext = array('jpeg', 'jpg', 'png', 'gif'); + + if (!$file || $filesize == 0 || $file["name"] == "") // nothing received + { + $warning = $lang_attachment['text_nothing_received']; + } + elseif (!$count_left) //user cannot upload more files + { + $warning = $lang_attachment['text_file_number_limit_reached']; + } + elseif ($filesize > $size_limit || $filesize >= 5242880) //do not allow file bigger than 5 MB + { + $warning = $lang_attachment['text_file_size_too_big']; + } + elseif (!in_array($ext, $allowed_exts) || in_array($ext, $banned_ext)) //the file extension is banned + { + $warning = $lang_attachment['text_file_extension_not_allowed']; + } + else //everythins is okay + { + if (in_array($ext, $img_ext)) + $isimage = true; + else $isimage = false; + if ($savedirectorytype_attachment == 'onedir') + $savepath = ""; + elseif ($savedirectorytype_attachment == 'monthdir') + $savepath = date("Ym")."/"; + elseif ($savedirectorytype_attachment == 'daydir') + $savepath = date("Ymd")."/"; + $filemd5 = md5_file($file['tmp_name']); + $filename = date("YmdHis").$filemd5; + $file_location = make_folder($savedirectory_attachment."/", $savepath) . $filename; + do_log("file_location: $file_location"); + $db_file_location = $savepath.$filename; + $abandonorig = false; + $hasthumb = false; + $width = 0; + if ($isimage) //the uploaded file is a image + { + $maycreatethumb = false; + $stop = false; + $imagesize = getimagesize($file['tmp_name']); + if ($imagesize){ + $height = $imagesize[1]; + $width = $imagesize[0]; + $it = $imagesize[2]; + if ($it != 1 || !$Attach->is_gif_ani($file['tmp_name'])){ //if it is an animation GIF, stop creating thumbnail and adding watermark + if ($thumbnailtype_attachment != 'no') //create thumbnail for big image + { + //determine the size of thumbnail + if ($altsize == 'yes'){ + $targetwidth = $altthumbwidth_attachment; + $targetheight = $altthumbheight_attachment; + } + else + { + $targetwidth = $thumbwidth_attachment; + $targetheight = $thumbheight_attachment; + } + $hscale=$height/$targetheight; + $wscale=$width/$targetwidth; + $scale=($hscale < 1 && $wscale < 1) ? 1 : (( $hscale > $wscale) ? $hscale : $wscale); + $newwidth=floor($width/$scale); + $newheight=floor($height/$scale); + if ($scale != 1){ //thumbnail is needed + if ($it==1) + $orig=@imagecreatefromgif($file["tmp_name"]); + elseif ($it == 2) + $orig=@imagecreatefromjpeg($file["tmp_name"]); + else + $orig=@imagecreatefrompng($file["tmp_name"]); + if ($orig && !$stop) + { + $thumb = imagecreatetruecolor($newwidth, $newheight); + imagecopyresized($thumb, $orig, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + if ($thumbnailtype_attachment == 'createthumb'){ + $hasthumb = true; + imagejpeg($thumb, $file_location.".".$ext.".thumb.jpg", $thumbquality_attachment); + } + elseif ($thumbnailtype_attachment == 'resizebigimg'){ + $ext = "jpg"; + $filetype = "image/jpeg"; + $it = 2; + $height = $newheight; + $width = $newwidth; + $maycreatethumb = true; + $abandonorig = true; + } + } + } + } + $watermarkpos = $watermarkpos_attachment; + if ($watermarkpos != 'no' && !$stop) //add watermark to image + { + if ($width > $watermarkwidth_attachment && $height > $watermarkheight_attachment) + { + if ($abandonorig) + { + $resource = $thumb; + } + else + { + $resource=imagecreatetruecolor($width,$height); + if ($it==1) + $resource_p=@imagecreatefromgif($file["tmp_name"]); + elseif ($it==2) + $resource_p=@imagecreatefromjpeg($file["tmp_name"]); + else + $resource_p=@imagecreatefrompng($file["tmp_name"]); + imagecopy($resource, $resource_p, 0, 0, 0, 0, $width, $height); + } + $watermark = imagecreatefrompng('pic/watermark.png'); + $watermark_width = imagesx($watermark); + $watermark_height = imagesy($watermark); + //the position of the watermark + if ($watermarkpos == 'random') + $watermarkpos = mt_rand(1, 9); + switch ($watermarkpos) + { + case 1: { + $wmx = 5; + $wmy = 5; + break; + } + case 2: { + $wmx = ($width-$watermark_width)/2; + $wmy = 5; + break; + } + case 3: { + $wmx = $width-$watermark_width-5; + $wmy = 5; + break; + } + case 4: { + $wmx = 5; + $wmy = ($height-$watermark_height)/2; + break; + } + case 5: { + $wmx = ($width-$watermark_width)/2; + $wmy = ($height-$watermark_height)/2; + break; + } + case 6: { + $wmx = $width-$watermark_width-5; + $wmy = ($height-$watermark_height)/2; + break; + } + case 7: { + $wmx = 5; + $wmy = $height-$watermark_height-5; + break; + } + case 8: { + $wmx = ($width-$watermark_width)/2; + $wmy = $height-$watermark_height-5; + break; + } + case 9: { + $wmx = $width-$watermark_width-5; + $wmy = $height-$watermark_height-5; + break; + } + } + + imagecopy($resource, $watermark, $wmx, $wmy, 0, 0, $watermark_width, $watermark_height); + if ($it==1) + imagegif($resource, $file_location.".".$ext); + elseif ($it==2) + imagejpeg($resource, $file_location.".".$ext, $watermarkquality_attachment); + else + imagepng($resource, $file_location.".".$ext); + $filesize = filesize($file_location.".".$ext); + $maycreatethumb = false; + $abandonorig = true; + } + } + if ($maycreatethumb){ // if no watermark is added, create the thumbnail now for the above resized image. + imagejpeg($thumb, $file_location.".".$ext, $thumbquality_attachment); + $filesize = filesize($file_location.".".$ext); + } + } + } + else $warning = $lang_attachment['text_invalid_image_file']; + } + if (!$abandonorig){ + if(!move_uploaded_file($file["tmp_name"], $file_location.".".$ext)) + $warning = $lang_attachment['text_cannot_move_file']; + } + if (!$warning) //insert into database and add code to editor + { + $dlkey = md5($db_file_location.".".$ext); + sql_query("INSERT INTO attachments (userid, width, added, filename, filetype, filesize, location, dlkey, isimage, thumb) VALUES (".$CURUSER['id'].", ".$width.", ".sqlesc(date("Y-m-d H:i:s")).", ".sqlesc($origfilename).", ".sqlesc($filetype).", ".$filesize.", ".sqlesc($db_file_location.".".$ext).", ".sqlesc($dlkey).", ".($isimage ? 1 : 0).", ".($hasthumb ? 1 : 0).")") or sqlerr(__FILE__, __LINE__); + $count_left--; + if (!empty($_REQUEST['callback_func'])) { + $url = $httpdirectory_attachment."/".$db_file_location . ".$ext"; + if ($hasthumb) { + $url .= ".thumb.jpg"; + } + echo sprintf('', $_REQUEST['callback_func'], $dlkey, $url); + } else { + echo(""); + } + } + } + } + } ?> diff --git a/public/takeupload.php b/public/takeupload.php index 78cfef6d..ce1c72a9 100644 --- a/public/takeupload.php +++ b/public/takeupload.php @@ -356,8 +356,9 @@ $id = mysql_insert_id(); * add custom fields * @since v1.6 */ +$now = date('Y-m-d H:i:s'); if (!empty($_POST['custom_fields'])) { - $now = date('Y-m-d H:i:s'); + foreach ($_POST['custom_fields'] as $customField => $customValue) { foreach ((array)$customValue as $value) { $customData = [ @@ -371,6 +372,18 @@ if (!empty($_POST['custom_fields'])) { } } } +if (!empty($_FILES['custom_fields'])) { + foreach ($_FILES['custom_fields'] as $customField => $customValue) { + $customData = [ + 'torrent_id' => $id, + 'custom_field_id' => $customField, + 'custom_field_value' => $value, + 'created_at' => $now, + 'updated_at' => $now, + ]; + \Nexus\Database\DB::insert('torrents_custom_field_values', $customData); + } +} @sql_query("DELETE FROM files WHERE torrent = $id"); foreach ($filelist as $file) {