aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/functions_posting.php
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2003-06-20 17:20:22 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2003-06-20 17:20:22 +0000
commit2e13c45371cedd0060c9798076ca2f1f7d1877c4 (patch)
tree75a24524dbb2d8064b5731db51f3a34e6eeca86f /phpBB/includes/functions_posting.php
parent4f2cf69b68fa85c46ed4a74430536b35bc1ab5a9 (diff)
downloadforums-2e13c45371cedd0060c9798076ca2f1f7d1877c4.tar
forums-2e13c45371cedd0060c9798076ca2f1f7d1877c4.tar.gz
forums-2e13c45371cedd0060c9798076ca2f1f7d1877c4.tar.bz2
forums-2e13c45371cedd0060c9798076ca2f1f7d1877c4.tar.xz
forums-2e13c45371cedd0060c9798076ca2f1f7d1877c4.zip
thumbnail creation support
git-svn-id: file:///svn/phpbb/trunk@4160 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/functions_posting.php')
-rw-r--r--phpBB/includes/functions_posting.php488
1 files changed, 469 insertions, 19 deletions
diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php
index aa4376a960..b5e5792d44 100644
--- a/phpBB/includes/functions_posting.php
+++ b/phpBB/includes/functions_posting.php
@@ -211,7 +211,7 @@ function update_last_post_information($type, $id)
return;
}
- $sql = "SELECT p.post_id, p.poster_id, p.post_time, u.username, p.post_username " . $sql_select_add . "
+ $sql = "SELECT p.post_id, p.poster_id, p.post_time, u.username, p.post_username " . $sql_select_add . "
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . TOPICS_TABLE . " t " . $sql_table_add . "
WHERE p.post_approved = 1
AND t.topic_approved = 1
@@ -546,7 +546,7 @@ function upload_attachment($filename)
$filedata = array();
$filedata['error'] = array();
- $filedata['post_attach'] = ($filename != '') ? true : false;
+ $filedata['post_attach'] = ($filename != '') ? TRUE : FALSE;
if (!$filedata['post_attach'])
{
@@ -558,9 +558,9 @@ function upload_attachment($filename)
$filedata['mimetype'] = $_FILES['fileupload']['type'];
// Opera add the name to the mime type
- $filedata['mimetype'] = ( strstr($filedata['mimetype'], '; name') ) ? str_replace(strstr($filedata['mimetype'], '; name'), '', $filedata['mimetype']) : $filedata['mimetype'];
- $filedata['extension'] = array_pop(explode('.', strtolower($filename)));
- $filedata['filesize'] = (!@filesize($file)) ? intval($_FILES['size']) : @filesize($file);
+ $filedata['mimetype'] = ( strstr($filedata['mimetype'], '; name') ) ? str_replace(strstr($filedata['mimetype'], '; name'), '', $filedata['mimetype']) : $filedata['mimetype'];
+ $filedata['extension'] = array_pop(explode('.', strtolower($filename)));
+ $filedata['filesize'] = (!@filesize($file)) ? intval($_FILES['size']) : @filesize($file);
$extensions = array();
obtain_attach_extensions($extensions);
@@ -569,7 +569,7 @@ function upload_attachment($filename)
if (!in_array($filedata['extension'], $extensions['_allowed_']))
{
$filedata['error'][] = sprintf($user->lang['DISALLOWED_EXTENSION'], $filedata['extension']);
- $filedata['post_attach'] = false;
+ $filedata['post_attach'] = FALSE;
return $filedata;
}
@@ -580,7 +580,7 @@ function upload_attachment($filename)
if ( preg_match("/[\\/:*?\"<>|]/i", $filename) )
{
$filedata['error'][] = sprintf($user->lang['INVALID_FILENAME'], $filename);
- $filedata['post_attach'] = false;
+ $filedata['post_attach'] = FALSE;
return $filedata;
}
@@ -588,7 +588,7 @@ function upload_attachment($filename)
if ( ($file == 'none') )
{
$filedata['error'][] = (@ini_get('upload_max_filesize') == '') ? $user->lang['ATTACHMENT_PHP_SIZE_NA'] : sprintf($user->lang['ATTACHMENT_PHP_SIZE_OVERRUN'], @ini_get('upload_max_filesize'));
- $filedata['post_attach'] = false;
+ $filedata['post_attach'] = FALSE;
return $filedata;
}
@@ -702,13 +702,11 @@ function upload_attachment($filename)
$filedata['filename'] = str_replace("'", "\'", $filedata['filename']);
-/*
// Do we have to create a thumbnail ?
if ($cat_id == IMAGE_CAT && $config['img_create_thumbnail'])
{
$filedata['thumbnail'] = 1;
}
-*/
// Upload Attachment
if (!$config['use_ftp_upload'])
@@ -801,20 +799,17 @@ function move_uploaded_attachment($upload_mode, $source_filename, &$filedata)
*/
}
- $filedata['thumbnail'] = 0;
-/* if ($filedata['thumbnail'])
+ if ($filedata['thumbnail'])
{
- if ($upload_mode == 'ftp')
+/* if ($upload_mode == 'ftp')
{
$source = $source_filename;
$destination = 'thumbs/t_' . $destination_filename;
}
else
- {
- $source = $config['upload_dir'] . '/' . $destination_filename;
- $destination = phpbb_realpath($config['upload_dir']);
- $destination .= '/thumbs/t_' . $destination_filename;
- }
+ {*/
+ $source = $config['upload_dir'] . '/' . $destination_filename;
+ $destination = $config['upload_dir'] . '/thumbs/t_' . $destination_filename;
if (!create_thumbnail($source, $destination, $filedata['mimetype']))
{
@@ -823,7 +818,7 @@ function move_uploaded_attachment($upload_mode, $source_filename, &$filedata)
$filedata['thumbnail'] = 0;
}
}
- }*/
+ }
return '';
}
@@ -1461,4 +1456,459 @@ function user_notification($mode, $subject, $forum_id, $topic_id, $post_id)
}
}
+// Read DWord (4 Bytes) from File
+function read_dword($fp)
+{
+ $data = fread($fp, 4);
+ $value = ord($data[0]) + (ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);
+ if ($value >= 4294967294)
+ {
+ $value -= 4294967296;
+ }
+ return $value;
+}
+
+// Read Word (2 Bytes) from File - Note: It's an Intel Word
+function read_word($fp)
+{
+ $data = fread($fp, 2);
+ return ord($data[1]) * 256 + ord($data[0]);
+}
+
+// Read Byte
+function read_byte($fp)
+{
+ $data = fread($fp, 1);
+ return ord($data);
+}
+
+
+// Get Image Dimensions... only a test for now, used within create_thumbnail
+function image_getdimension($file)
+{
+ $size = @getimagesize($file);
+
+ if ($size[0] != 0 || $size[1] != 0)
+ {
+ return $size;
+ }
+
+ // Try to get the Dimension manually, depending on the mimetype
+ $fp = @fopen($file, 'rb');
+ if (!$fp)
+ {
+ return $size;
+ }
+
+ $error = FALSE;
+
+ // BMP - IMAGE
+ $tmp_str = fread($fp, 2);
+ if ($tmp_str == 'BM')
+ {
+ $length = read_dword($fp);
+
+ if ($length <= 6)
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ $i = read_dword($fp);
+ if ($i != 0)
+ {
+ $error = TRUE;
+ }
+ }
+
+ if (!$error)
+ {
+ $i = read_dword($fp);
+
+ if ($i != 0x3E && $i != 0x76 && $i != 0x436 && $i != 0x36)
+ {
+ $error = TRUE;
+ }
+ }
+
+ if (!$error)
+ {
+ $tmp_str = fread($fp, 4);
+ $width = read_dword($fp);
+ $height = read_dword($fp);
+
+ if ($width > 3000 || $height > 3000)
+ {
+ $error = TRUE;
+ }
+ }
+ }
+ else
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ fclose($fp);
+ return array(
+ $width,
+ $height,
+ '6'
+ );
+ }
+
+ $error = FALSE;
+ fclose($fp);
+
+ // GIF - IMAGE
+ $fp = @fopen($file, 'rb');
+
+ $tmp_str = fread($fp, 3);
+
+ if ($tmp_str == 'GIF')
+ {
+ $tmp_str = fread($fp, 3);
+ $width = read_word($fp);
+ $height = read_word($fp);
+
+ $info_byte = fread($fp, 1);
+ $info_byte = ord($info_byte);
+ if (($info_byte & 0x80) != 0x80 && ($info_byte & 0x80) != 0)
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ if (($info_byte & 8) != 0)
+ {
+ $error = TRUE;
+ }
+
+ }
+ }
+ else
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ fclose($fp);
+ return array(
+ $width,
+ $height,
+ '1'
+ );
+ }
+
+ $error = FALSE;
+ fclose($fp);
+
+ // JPG - IMAGE
+ $fp = @fopen($file, 'rb');
+
+ $tmp_str = fread($fp, 4);
+ $w1 = read_word($fp);
+ if (intval($w1) < 16)
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ $tmp_str = fread($fp, 4);
+ if ($tmp_str == 'JFIF')
+ {
+ $o_byte = fread($fp, 1);
+ if (intval($o_byte) != 0)
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ $str = fread($fp, 2);
+ $b = read_byte($fp);
+
+ if ($b != 0 && $b != 1 && $b != 2)
+ {
+ $error = TRUE;
+ }
+ }
+
+ if (!$error)
+ {
+ $width = read_word($fp);
+ $height = read_word($fp);
+
+ if ($width <= 0 || $height <= 0)
+ {
+ $error = TRUE;
+ }
+ }
+ }
+ }
+ else
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ fclose($fp);
+ return array(
+ $width,
+ $height,
+ '2'
+ );
+ }
+
+ $error = FALSE;
+ fclose($fp);
+
+ // PCX - IMAGE - I do not think we need this, does browser actually support this imagetype? ;)
+ // But let me have the fun...
+/*
+ $fp = @fopen($file, 'rb');
+
+ $tmp_str = fread($fp, 3);
+
+ if (((ord($tmp_str[0]) == 10)) && ( (ord($tmp_str[1]) == 0) || (ord($tmp_str[1]) == 2) || (ord($tmp_str[1]) == 3) || (ord($tmp_str[1]) == 4) || (ord($tmp_str[1]) == 5) ) && ( (ord($tmp_str[2]) == 1) ) )
+ {
+ $b = fread($fp, 1);
+
+ if (ord($b) != 1 && ord($b) != 2 && ord($b) != 4 && ord($b) != 8 && ord($b) != 24)
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ $xmin = read_word($fp);
+ $ymin = read_word($fp);
+ $xmax = read_word($fp);
+ $ymax = read_word($fp);
+ $tmp_str = fread($fp, 52);
+
+ $b = fread($fp, 1);
+ if ($b != 0)
+ {
+ $error = TRUE;
+ }
+ }
+
+ if (!$error)
+ {
+ $width = $xmax - $xmin + 1;
+ $height = $ymax - $ymin + 1;
+ }
+ }
+ else
+ {
+ $error = TRUE;
+ }
+
+ if (!$error)
+ {
+ fclose($fp);
+ return array(
+ $width,
+ $height,
+ '7'
+ );
+ }
+
+ fclose($fp);
+*/
+ return $size;
+}
+
+// Calculate the needed size for Thumbnail
+// I am sure i had this grabbed from some site... source: unknown
+function get_img_size_format($width, $height)
+{
+ // Change these two values to define the Thumbnail Size
+ $max_width = 300;
+ $max_height = 85;
+
+ if ($height > $max_height)
+ {
+ $new_width = ($max_height / $height) * $width;
+ $new_height = $max_height;
+
+ if ($new_width > $max_width)
+ {
+ $new_height = ($max_width / $new_width) * $new_height;
+ $new_width = $max_width;
+ }
+ }
+ else if ($width > $max_width)
+ {
+ $new_height = ($max_width / $width) * $height;
+ $new_width = $max_width;
+
+ if ($new_height > $max_height)
+ {
+ $new_width = ($max_height / $new_height) * $new_width;
+ $new_height = $max_height;
+ }
+ }
+ else
+ {
+ $new_width = $width;
+ $new_height = $height;
+ }
+
+ return array(
+ round($new_width),
+ round($new_height)
+ );
+}
+
+function get_supported_image_types()
+{
+ $types = array();
+
+ if (@extension_loaded('gd'))
+ {
+ if (@function_exists('imagegif'))
+ {
+ $types[] = '1';
+ }
+ if (@function_exists('imagejpeg'))
+ {
+ $types[] = '2';
+ }
+ if (@function_exists('imagepng'))
+ {
+ $types[] = '3';
+ }
+ }
+ return $types;
+}
+
+// Create Thumbnail
+function create_thumbnail($source, $new_file, $mimetype)
+{
+ global $config;
+
+ $source = realpath($source);
+ $min_filesize = intval($config['img_min_thumb_filesize']);
+
+ $img_filesize = (file_exists($source)) ? @filesize($source) : FALSE;
+
+ if (!$img_filesize || $img_filesize <= $min_filesize)
+ {
+ return FALSE;
+ }
+
+ $size = image_getdimension($source);
+
+ if ($size[0] == 0 && $size[1] == 0)
+ {
+ return FALSE;
+ }
+
+ $new_size = get_img_size_format($size[0], $size[1]);
+
+ $tmp_path = '';
+ $old_file = '';
+
+/*
+ if (intval($config['allow_ftp_upload']))
+ {
+ $old_file = $new_file;
+
+ $tmp_path = explode('/', $source);
+ $tmp_path[count($tmp_path)-1] = '';
+ $tmp_path = implode('/', $tmp_path);
+
+ if ($tmp_path == '')
+ {
+ $tmp_path = '/tmp';
+ }
+
+ $value = trim($tmp_path);
+
+ if ($value[strlen($value)-1] == '/')
+ {
+ $value[strlen($value)-1] = ' ';
+ }
+
+ $new_file = trim($value) . '/t00000';
+ }
+*/
+
+ $used_imagick = FALSE;
+
+ if ($config['img_imagick'] != '')
+ {
+ if (is_array($size) && count($size) > 0)
+ {
+ @exec($config['img_imagick'] . ' -quality 75 -antialias -sample ' . $new_size[0] . 'x' . $new_size[1] . ' ' . $source . ' +profile "*" ' . $new_file);
+ if (file_exists($new_file))
+ {
+ $used_imagick = TRUE;
+ }
+ }
+ }
+
+ if (!$used_imagick)
+ {
+ $type = $size[2];
+ $supported_types = get_supported_image_types();
+
+ if (in_array($type, $supported_types))
+ {
+ switch ($type)
+ {
+ case '1' :
+ $image = imagecreatefromgif($source);
+ $new_image = imagecreate($new_size[0], $new_size[1]);
+ imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);
+ imagegif($new_image, $new_file);
+ break;
+
+ case '2' :
+ $image = imagecreatefromjpeg($source);
+ $new_image = imagecreate($new_size[0], $new_size[1]);
+ imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);
+ imagejpeg($new_image, $new_file, 90);
+ break;
+
+ case '3' :
+ $image = imagecreatefrompng($source);
+ $new_image = imagecreate($new_size[0], $new_size[1]);
+ imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);
+ imagepng($new_image, $new_file);
+ break;
+ }
+ }
+ }
+
+ if (!file_exists($new_file))
+ {
+ return FALSE;
+ }
+
+/* if (intval($config['allow_ftp_upload']))
+ {
+ $result = ftp_file($new_file, $old_file, $this->type, TRUE); // True for disable error-mode
+ if (!$result)
+ {
+ return (FALSE);
+ }
+ }
+ else
+ {*/
+
+ @chmod($new_file, 0666);
+
+ return TRUE;
+}
+
+
?> \ No newline at end of file