diff options
Diffstat (limited to 'include/photos.php')
-rw-r--r-- | include/photos.php | 79 |
1 files changed, 48 insertions, 31 deletions
diff --git a/include/photos.php b/include/photos.php index 9819c7ef2..060a0671d 100644 --- a/include/photos.php +++ b/include/photos.php @@ -5,7 +5,7 @@ require_once('include/items.php'); require_once('include/photo/photo_driver.php'); -function photo_upload($channel, $observer, $args) { +function photo_upload($channel, $observer, $args, $local = null) { $ret = array('success' => false); $channel_id = $channel['channel_id']; @@ -61,47 +61,64 @@ function photo_upload($channel, $observer, $args) { $str_group_deny = perms2str(((is_array($args['group_deny'])) ? $args['group_deny'] : explode(',',$args['group_deny']))); $str_contact_deny = perms2str(((is_array($args['contact_deny'])) ? $args['contact_deny'] : explode(',',$args['contact_deny']))); - $f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); - call_hooks('photo_upload_file',$f); + if($local) { - if(x($f,'src') && x($f,'filesize')) { - $src = $f['src']; - $filename = $f['filename']; - $filesize = $f['filesize']; - $type = $f['type']; + // allow an import from a binary string representing the image. + // This bypasses the upload step and max size limit checking + + $imagedata = $local; + $filename = $args['filename']; + $filesize = strlen($imagedata); + // this is going to be deleted if it exists + $src = '/tmp/deletemenow'; + $filetype = $args['filetype']; } else { - $src = $_FILES['userfile']['tmp_name']; - $filename = basename($_FILES['userfile']['name']); - $filesize = intval($_FILES['userfile']['size']); - $type = $_FILES['userfile']['type']; - } + $f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); - if (! $type) - $type=guess_image_type($filename); + call_hooks('photo_upload_file',$f); - logger('photo_upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG); + if(x($f,'src') && x($f,'filesize')) { + $src = $f['src']; + $filename = $f['filename']; + $filesize = $f['filesize']; + $type = $f['type']; + } + else { + $src = $_FILES['userfile']['tmp_name']; + $filename = basename($_FILES['userfile']['name']); + $filesize = intval($_FILES['userfile']['size']); + $type = $_FILES['userfile']['type']; + } - $maximagesize = get_config('system','maximagesize'); + if (! $type) + $type=guess_image_type($filename); - if(($maximagesize) && ($filesize > $maximagesize)) { - $ret['message'] = sprintf ( t('Image exceeds website size limit of %lu bytes'), $maximagesize); - @unlink($src); - call_hooks('photo_upload_end',$ret); - return $ret; - } + logger('photo_upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG); - if(! $filesize) { - $ret['message'] = t('Image file is empty.'); - @unlink($src); - call_hooks('photo_post_end',$ret); - return $ret; - } + + $maximagesize = get_config('system','maximagesize'); + + if(($maximagesize) && ($filesize > $maximagesize)) { + $ret['message'] = sprintf ( t('Image exceeds website size limit of %lu bytes'), $maximagesize); + @unlink($src); + call_hooks('photo_upload_end',$ret); + return $ret; + } - logger('photo_upload: loading the contents of ' . $src , LOGGER_DEBUG); + if(! $filesize) { + $ret['message'] = t('Image file is empty.'); + @unlink($src); + call_hooks('photo_post_end',$ret); + return $ret; + } + + logger('photo_upload: loading the contents of ' . $src , LOGGER_DEBUG); + + $imagedata = @file_get_contents($src); + } - $imagedata = @file_get_contents($src); $r = q("select sum(size) as total from photo where aid = %d and scale = 0 ", intval($account_id) |