From 3fc3e67b706cf79e661b3a19def622faca1e5756 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Thu, 7 Dec 2017 08:56:11 -0500 Subject: [PATCH] Separate Object\Photo into Model\Photo and Object\Image - Renamed a bunch of functions to shorter or clearer names --- include/api.php | 55 ++--- include/items.php | 12 +- include/network.php | 18 +- include/plaintext.php | 6 +- include/uimport.php | 8 +- mod/fbrowser.php | 4 +- mod/install.php | 4 +- mod/photo.php | 18 +- mod/photos.php | 61 +++--- mod/profile_photo.php | 57 ++--- mod/proxy.php | 31 +-- mod/wall_upload.php | 37 ++-- src/Model/Photo.php | 174 +++++++++++++++ src/Model/User.php | 21 +- src/Object/{Photo.php => Image.php} | 328 +++++++++------------------- src/ParseUrl.php | 6 +- src/Protocol/DFRN.php | 6 +- src/Protocol/OStatus.php | 6 +- src/Protocol/PortableContact.php | 1 - update.php | 11 +- view/theme/frio/theme.php | 4 +- view/theme/frost/theme.php | 4 +- 22 files changed, 464 insertions(+), 408 deletions(-) create mode 100644 src/Model/Photo.php rename src/Object/{Photo.php => Image.php} (77%) diff --git a/include/api.php b/include/api.php index b5799d4786..37cf1eba05 100644 --- a/include/api.php +++ b/include/api.php @@ -12,6 +12,7 @@ use Friendica\Core\Config; use Friendica\Core\NotificationsManager; use Friendica\Core\Worker; use Friendica\Database\DBM; +use Friendica\Model\Photo; use Friendica\Model\User; use Friendica\Network\FKOAuth1; use Friendica\Network\HTTPException; @@ -24,7 +25,7 @@ use Friendica\Network\HTTPException\NotImplementedException; use Friendica\Network\HTTPException\UnauthorizedException; use Friendica\Network\HTTPException\TooManyRequestsException; use Friendica\Object\Contact; -use Friendica\Object\Photo; +use Friendica\Object\Image; use Friendica\Protocol\Diaspora; use Friendica\Util\XML; @@ -1192,7 +1193,7 @@ function api_statuses_update($type) api_user() ); if (DBM::is_result($r)) { - $phototypes = Photo::supportedTypes(); + $phototypes = Image::supportedTypes(); $ext = $phototypes[$r[0]['type']]; $_REQUEST['body'] .= "\n\n" . '[url=' . System::baseUrl() . '/photos/' . $r[0]['nickname'] . '/image/' . $r[0]['resource-id'] . ']'; $_REQUEST['body'] .= '[img]' . System::baseUrl() . '/photo/' . $r[0]['resource-id'] . '-' . $r[0]['scale'] . '.' . $ext . '[/img][/url]'; @@ -2377,7 +2378,7 @@ function api_get_attachments(&$body) $attachments = array(); foreach ($images[1] as $image) { - $imagedata = Photo::getInfoFromURL($image); + $imagedata = Image::getInfoFromURL($image); if ($imagedata) { $attachments[] = array("url" => $image, "mimetype" => $imagedata["mime"], "size" => $imagedata["size"]); @@ -2509,7 +2510,7 @@ function api_get_entitities(&$text, $bbcode) $start = iconv_strpos($text, $url, $offset, "UTF-8"); if (!($start === false)) { - $image = Photo::getInfoFromURL($url); + $image = Image::getInfoFromURL($url); if ($image) { // If image cache is activated, then use the following sizes: // thumb (150), small (340), medium (600) and large (1024) @@ -2517,19 +2518,19 @@ function api_get_entitities(&$text, $bbcode) $media_url = proxy_url($url); $sizes = array(); - $scale = Photo::scaleImageTo($image[0], $image[1], 150); + $scale = Image::getScalingDimensions($image[0], $image[1], 150); $sizes["thumb"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); if (($image[0] > 150) || ($image[1] > 150)) { - $scale = Photo::scaleImageTo($image[0], $image[1], 340); + $scale = Image::getScalingDimensions($image[0], $image[1], 340); $sizes["small"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); } - $scale = Photo::scaleImageTo($image[0], $image[1], 600); + $scale = Image::getScalingDimensions($image[0], $image[1], 600); $sizes["medium"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); if (($image[0] > 600) || ($image[1] > 600)) { - $scale = Photo::scaleImageTo($image[0], $image[1], 1024); + $scale = Image::getScalingDimensions($image[0], $image[1], 1024); $sizes["large"] = array("w" => $scale["width"], "h" => $scale["height"], "resize" => "fit"); } } else { @@ -3946,7 +3947,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ } if ($filetype == "") { - $filetype=Photo::guessImageType($filename); + $filetype=Image::guessType($filename); } $imagedata = getimagesize($src); if ($imagedata) { @@ -3970,13 +3971,13 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ // create Photo instance with the data of the image $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata, $filetype); - if (! $ph->isValid()) { + $Image = new Image($imagedata, $filetype); + if (! $Image->isValid()) { throw new InternalServerErrorException("unable to process image data"); } // check orientation of image - $ph->orient($src); + $Image->orient($src); @unlink($src); // check max length of images on server @@ -3985,11 +3986,11 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ $max_length = MAX_IMAGE_LENGTH; } if ($max_length > 0) { - $ph->scaleImage($max_length); + $Image->scaleDown($max_length); logger("File upload: Scaling picture to new size " . $max_length, LOGGER_DEBUG); } - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $width = $Image->getWidth(); + $height = $Image->getHeight(); // create a new resource-id if not already provided $hash = ($photo_id == null) ? photo_new_resource() : $photo_id; @@ -3998,21 +3999,21 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ // upload normal image (scales 0, 1, 2) logger("photo upload: starting new photo upload", LOGGER_DEBUG); - $r =$ph->store(local_user(), $visitor, $hash, $filename, $album, 0, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, local_user(), $visitor, $hash, $filename, $album, 0, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (! $r) { logger("photo upload: image upload with scale 0 (original size) failed"); } if ($width > 640 || $height > 640) { - $ph->scaleImage(640); - $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 1, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $Image->scaleDown(640); + $r = Photo::store($Image, local_user(), $visitor, $hash, $filename, $album, 1, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (! $r) { logger("photo upload: image upload with scale 1 (640x640) failed"); } } if ($width > 320 || $height > 320) { - $ph->scaleImage(320); - $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 2, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $Image->scaleDown(320); + $r = Photo::store($Image, local_user(), $visitor, $hash, $filename, $album, 2, 0, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (! $r) { logger("photo upload: image upload with scale 2 (320x320) failed"); } @@ -4023,29 +4024,29 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ logger("photo upload: starting new profile image upload", LOGGER_DEBUG); if ($width > 175 || $height > 175) { - $ph->scaleImage(175); - $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 4, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $Image->scaleDown(175); + $r = Photo::store($Image, local_user(), $visitor, $hash, $filename, $album, 4, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (! $r) { logger("photo upload: profile image upload with scale 4 (175x175) failed"); } } if ($width > 80 || $height > 80) { - $ph->scaleImage(80); - $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 5, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $Image->scaleDown(80); + $r = Photo::store($Image, local_user(), $visitor, $hash, $filename, $album, 5, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (! $r) { logger("photo upload: profile image upload with scale 5 (80x80) failed"); } } if ($width > 48 || $height > 48) { - $ph->scaleImage(48); - $r = $ph->store(local_user(), $visitor, $hash, $filename, $album, 6, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $Image->scaleDown(48); + $r = Photo::store($Image, local_user(), $visitor, $hash, $filename, $album, 6, $profile, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (! $r) { logger("photo upload: profile image upload with scale 6 (48x48) failed"); } } - $ph->__destruct(); + $Image->__destruct(); logger("photo upload: new profile image upload ended", LOGGER_DEBUG); } diff --git a/include/items.php b/include/items.php index 61a9c7a1fa..c32b4a0ba5 100644 --- a/include/items.php +++ b/include/items.php @@ -12,9 +12,9 @@ use Friendica\Core\System; use Friendica\Database\DBM; use Friendica\Model\GlobalContact; use Friendica\Object\Contact; +use Friendica\Object\Image; use Friendica\Protocol\DFRN; use Friendica\Protocol\OStatus; -use Friendica\Util\Lock; require_once 'include/bbcode.php'; require_once 'include/oembed.php'; @@ -1887,11 +1887,11 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) { $width = intval($match[1]); $height = intval($match[2]); - $ph = new Photo($data, $type); - if ($ph->isValid()) { - $ph->scaleImage(max($width, $height)); - $data = $ph->imageString(); - $type = $ph->getType(); + $Image = new Image($data, $type); + if ($Image->isValid()) { + $Image->scaleDown(max($width, $height)); + $data = $Image->asString(); + $type = $Image->getType(); } } diff --git a/include/network.php b/include/network.php index 45f5d4e79a..16c8185e1a 100644 --- a/include/network.php +++ b/include/network.php @@ -6,7 +6,7 @@ use Friendica\App; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Network\Probe; -use Friendica\Object\Photo; +use Friendica\Object\Image; use Friendica\Util\XML; /** @@ -710,18 +710,18 @@ function scale_external_images($srctext, $include_link = true, $scale_replace = } // guess mimetype from headers or filename - $type = Photo::guessImageType($mtch[1], true); + $type = Image::guessType($mtch[1], true); if ($i) { - $ph = new Photo($i, $type); - if ($ph->isValid()) { - $orig_width = $ph->getWidth(); - $orig_height = $ph->getHeight(); + $Image = new Image($i, $type); + if ($Image->isValid()) { + $orig_width = $Image->getWidth(); + $orig_height = $Image->getHeight(); if ($orig_width > 640 || $orig_height > 640) { - $ph->scaleImage(640); - $new_width = $ph->getWidth(); - $new_height = $ph->getHeight(); + $Image->scaleDown(640); + $new_width = $Image->getWidth(); + $new_height = $Image->getHeight(); logger('scale_external_images: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG); $s = str_replace( $mtch[0], diff --git a/include/plaintext.php b/include/plaintext.php index 221d1471b1..39dcc9ecdb 100644 --- a/include/plaintext.php +++ b/include/plaintext.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\ParseUrl; use Friendica\Core\PConfig; -use Friendica\Object\Photo; +use Friendica\Object\Image; require_once "include/bbcode.php"; require_once "include/html2plain.php"; @@ -51,7 +51,7 @@ function get_old_attachment_data($body) { if (preg_match("/\[img\]([$URLSearchString]*)\[\/img\]/ism", $attacheddata, $matches)) { - $picturedata = Photo::getInfoFromURL($matches[1]); + $picturedata = Image::getInfoFromURL($matches[1]); if (($picturedata[0] >= 500) && ($picturedata[0] >= $picturedata[1])) $post["image"] = $matches[1]; @@ -221,7 +221,7 @@ function get_attached_data($body, $item = array()) { $post["preview"] = $pictures[0][2]; $post["text"] = str_replace($pictures[0][0], "", $body); } else { - $imgdata = Photo::getInfoFromURL($pictures[0][1]); + $imgdata = Image::getInfoFromURL($pictures[0][1]); if (substr($imgdata["mime"], 0, 6) == "image/") { $post["type"] = "photo"; $post["image"] = $pictures[0][1]; diff --git a/include/uimport.php b/include/uimport.php index 7effcd62dd..e3c2f4e6c1 100644 --- a/include/uimport.php +++ b/include/uimport.php @@ -7,7 +7,8 @@ use Friendica\Core\System; use Friendica\Core\PConfig; use Friendica\Core\Worker; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Model\Photo; +use Friendica\Object\Image; define("IMPORT_DEBUG", False); @@ -260,8 +261,9 @@ function import_account(App $a, $file) { $photo['uid'] = $newuid; $photo['data'] = hex2bin($photo['data']); - $p = new Photo($photo['data'], $photo['type']); - $r = $p->store( + $Image = new Image($photo['data'], $photo['type']); + $r = Photo::store( + $Image, $photo['uid'], $photo['contact-id'], //0 $photo['resource-id'], $photo['filename'], $photo['album'], $photo['scale'], $photo['profile'], //1 $photo['allow_cid'], $photo['allow_gid'], $photo['deny_cid'], $photo['deny_gid'] diff --git a/mod/fbrowser.php b/mod/fbrowser.php index 516be52987..3297dd918b 100644 --- a/mod/fbrowser.php +++ b/mod/fbrowser.php @@ -7,7 +7,7 @@ use Friendica\App; use Friendica\Core\System; -use Friendica\Object\Photo; +use Friendica\Object\Image; /** * @param App $a @@ -66,7 +66,7 @@ function fbrowser_content(App $a) { function _map_files1($rr){ $a = get_app(); - $types = Photo::supportedTypes(); + $types = Image::supportedTypes(); $ext = $types[$rr['type']]; $filename_e = $rr['filename']; diff --git a/mod/install.php b/mod/install.php index 0da8ec040f..8df5d09352 100644 --- a/mod/install.php +++ b/mod/install.php @@ -5,7 +5,7 @@ use Friendica\App; use Friendica\Core\System; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Object\Image; $install_wizard_pass = 1; @@ -503,7 +503,7 @@ function check_imagik(&$checks) { if (class_exists('Imagick')) { $imagick = true; - $supported = Photo::supportedTypes(); + $supported = Image::supportedTypes(); if (array_key_exists('image/gif', $supported)) { $gif = true; } diff --git a/mod/photo.php b/mod/photo.php index 8368b99a6b..243dfda029 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -4,7 +4,7 @@ */ use Friendica\App; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Object\Image; require_once 'include/security.php'; @@ -75,7 +75,7 @@ function photo_init(App $a) { $uid = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $person); - foreach (Photo::supportedTypes() AS $m => $e) { + foreach (Image::supportedTypes() AS $m => $e) { $uid = str_replace('.'.$e, '', $uid); } @@ -100,7 +100,7 @@ function photo_init(App $a) { $resolution = 0; $photo = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $photo); - foreach (Photo::supportedTypes() AS $m => $e) { + foreach (Image::supportedTypes() AS $m => $e) { $photo = str_replace('.'.$e, '', $photo); } @@ -167,14 +167,14 @@ function photo_init(App $a) { } // Resize only if its not a GIF and it is supported by the library - if (($mimetype != "image/gif") && in_array($mimetype, Photo::supportedTypes())) { - $ph = new Photo($data, $mimetype); - if ($ph->isValid()) { + if (($mimetype != "image/gif") && in_array($mimetype, Image::supportedTypes())) { + $Image = new Image($data, $mimetype); + if ($Image->isValid()) { if (isset($customres) && $customres > 0 && $customres < 500) { - $ph->scaleImageSquare($customres); + $Image->scaleToSquare($customres); } - $data = $ph->imageString(); - $mimetype = $ph->getType(); + $data = $Image->asString(); + $mimetype = $Image->getType(); } } diff --git a/mod/photos.php b/mod/photos.php index 3e2c44e3cd..36a7d925d2 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -8,9 +8,10 @@ use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Core\Worker; use Friendica\Database\DBM; +use Friendica\Model\Photo; use Friendica\Network\Probe; use Friendica\Object\Contact; -use Friendica\Object\Photo; +use Friendica\Object\Image; require_once 'include/photos.php'; require_once 'include/items.php'; @@ -136,7 +137,7 @@ function photos_post(App $a) { logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA); logger('mod_photos: FILES ' . print_r($_FILES,true), LOGGER_DATA); - $phototypes = Photo::supportedTypes(); + $phototypes = Image::supportedTypes(); $can_post = false; $visitor = 0; @@ -424,16 +425,16 @@ function photos_post(App $a) { intval($page_owner_uid) ); if (DBM::is_result($r)) { - $ph = new Photo($r[0]['data'], $r[0]['type']); - if ($ph->isValid()) { + $Image = new Image($r[0]['data'], $r[0]['type']); + if ($Image->isValid()) { $rotate_deg = ( (intval($_POST['rotate']) == 1) ? 270 : 90 ); - $ph->rotate($rotate_deg); + $Image->rotate($rotate_deg); - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $width = $Image->getWidth(); + $height = $Image->getHeight(); $x = q("UPDATE `photo` SET `data` = '%s', `height` = %d, `width` = %d WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 0", - dbesc($ph->imageString()), + dbesc($Image->asString()), intval($height), intval($width), dbesc($resource_id), @@ -441,12 +442,12 @@ function photos_post(App $a) { ); if ($width > 640 || $height > 640) { - $ph->scaleImage(640); - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $Image->scaleDown(640); + $width = $Image->getWidth(); + $height = $Image->getHeight(); $x = q("UPDATE `photo` SET `data` = '%s', `height` = %d, `width` = %d WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 1", - dbesc($ph->imageString()), + dbesc($Image->asString()), intval($height), intval($width), dbesc($resource_id), @@ -455,12 +456,12 @@ function photos_post(App $a) { } if ($width > 320 || $height > 320) { - $ph->scaleImage(320); - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $Image->scaleDown(320); + $width = $Image->getWidth(); + $height = $Image->getHeight(); $x = q("UPDATE `photo` SET `data` = '%s', `height` = %d, `width` = %d WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 2", - dbesc($ph->imageString()), + dbesc($Image->asString()), intval($height), intval($width), dbesc($resource_id), @@ -811,7 +812,7 @@ function photos_post(App $a) { $type = $_FILES['userfile']['type']; } if ($type == "") { - $type = Photo::guessImageType($filename); + $type = Image::guessType($filename); } logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG); @@ -838,9 +839,9 @@ function photos_post(App $a) { $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata, $type); + $Image = new Image($imagedata, $type); - if (! $ph->isValid()) { + if (! $Image->isValid()) { logger('mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG); notice( t('Unable to process image.') . EOL ); @unlink($src); @@ -849,7 +850,7 @@ function photos_post(App $a) { killme(); } - $exif = $ph->orient($src); + $exif = $Image->orient($src); @unlink($src); $max_length = Config::get('system', 'max_image_length'); @@ -857,17 +858,17 @@ function photos_post(App $a) { $max_length = MAX_IMAGE_LENGTH; } if ($max_length > 0) { - $ph->scaleImage($max_length); + $Image->scaleDown($max_length); } - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $width = $Image->getWidth(); + $height = $Image->getHeight(); $smallest = 0; $photo_hash = photo_new_resource(); - $r = $ph->store($page_owner_uid, $visitor, $photo_hash, $filename, $album, 0 , 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); + $r = Photo::store($Image, $page_owner_uid, $visitor, $photo_hash, $filename, $album, 0 , 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); if (! $r) { logger('mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG); @@ -876,14 +877,14 @@ function photos_post(App $a) { } if ($width > 640 || $height > 640) { - $ph->scaleImage(640); - $ph->store($page_owner_uid, $visitor, $photo_hash, $filename, $album, 1, 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); + $Image->scaleDown(640); + Photo::store($Image, $page_owner_uid, $visitor, $photo_hash, $filename, $album, 1, 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); $smallest = 1; } if ($width > 320 || $height > 320) { - $ph->scaleImage(320); - $ph->store($page_owner_uid, $visitor, $photo_hash, $filename, $album, 2, 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); + $Image->scaleDown(320); + Photo::store($Image, $page_owner_uid, $visitor, $photo_hash, $filename, $album, 2, 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny); $smallest = 2; } @@ -932,7 +933,7 @@ function photos_post(App $a) { $arr['origin'] = 1; $arr['body'] = '[url=' . System::baseUrl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo_hash . ']' - . '[img]' . System::baseUrl() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/img]' + . '[img]' . System::baseUrl() . "/photo/{$photo_hash}-{$smallest}.".$Image->getExt() . '[/img]' . '[/url]'; $item_id = item_store($arr); @@ -980,7 +981,7 @@ function photos_content(App $a) { return; } - $phototypes = Photo::supportedTypes(); + $phototypes = Image::supportedTypes(); $_SESSION['photo_return'] = $a->cmd; diff --git a/mod/profile_photo.php b/mod/profile_photo.php index f667359b51..e12c6e5c64 100644 --- a/mod/profile_photo.php +++ b/mod/profile_photo.php @@ -7,7 +7,8 @@ use Friendica\Core\Config; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Model\Photo; +use Friendica\Object\Image; function profile_photo_init(App $a) { @@ -72,27 +73,27 @@ function profile_photo_post(App $a) { $base_image = $r[0]; - $im = new Photo($base_image['data'], $base_image['type']); - if ($im->isValid()) { - $im->cropImage(175,$srcX,$srcY,$srcW,$srcH); + $Image = new Image($base_image['data'], $base_image['type']); + if ($Image->isValid()) { + $Image->crop(175,$srcX,$srcY,$srcW,$srcH); - $r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 4, $is_default_profile); + $r = Photo::store($Image, local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 4, $is_default_profile); if ($r === false) { notice ( sprintf(t('Image size reduction [%s] failed.'),"175") . EOL ); } - $im->scaleImage(80); + $Image->scaleDown(80); - $r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 5, $is_default_profile); + $r = Photo::store($Image, local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 5, $is_default_profile); if ($r === false) { notice( sprintf(t('Image size reduction [%s] failed.'),"80") . EOL ); } - $im->scaleImage(48); + $Image->scaleDown(48); - $r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 6, $is_default_profile); + $r = Photo::store($Image, local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 6, $is_default_profile); if ($r === false) { notice( sprintf(t('Image size reduction [%s] failed.'),"48") . EOL ); @@ -107,15 +108,15 @@ function profile_photo_post(App $a) { ); $r = q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s' WHERE `self` AND `uid` = %d", - dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-4.' . $im->getExt()), - dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-5.' . $im->getExt()), - dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-6.' . $im->getExt()), + dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-4.' . $Image->getExt()), + dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-5.' . $Image->getExt()), + dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-6.' . $Image->getExt()), intval(local_user()) ); } else { $r = q("update profile set photo = '%s', thumb = '%s' where id = %d and uid = %d", - dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-4.' . $im->getExt()), - dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-5.' . $im->getExt()), + dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-4.' . $Image->getExt()), + dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-5.' . $Image->getExt()), intval($_REQUEST['profile']), intval(local_user()) ); @@ -151,7 +152,7 @@ function profile_photo_post(App $a) { $filesize = intval($_FILES['userfile']['size']); $filetype = $_FILES['userfile']['type']; if ($filetype == "") { - $filetype = Photo::guessImageType($filename); + $filetype = Image::guessType($filename); } $maximagesize = Config::get('system', 'maximagesize'); @@ -163,7 +164,7 @@ function profile_photo_post(App $a) { } $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata, $filetype); + $ph = new Image($imagedata, $filetype); if (! $ph->isValid()) { notice(t('Unable to process image.') . EOL); @@ -239,7 +240,7 @@ function profile_photo_content(App $a) { goaway(System::baseUrl() . '/profiles'); return; // NOTREACHED } - $ph = new Photo($r[0]['data'], $r[0]['type']); + $ph = new Image($r[0]['data'], $r[0]['type']); profile_photo_crop_ui_head($a, $ph); // go ahead as we have jus uploaded a new photo to crop } @@ -288,22 +289,22 @@ function profile_photo_content(App $a) { if(! function_exists('profile_photo_crop_ui_head')) { -function profile_photo_crop_ui_head(App $a, $ph) { +function profile_photo_crop_ui_head(App $a, Image $Image) { $max_length = Config::get('system','max_image_length'); if (! $max_length) { $max_length = MAX_IMAGE_LENGTH; } if ($max_length > 0) { - $ph->scaleImage($max_length); + $Image->scaleDown($max_length); } - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $width = $Image->getWidth(); + $height = $Image->getHeight(); if ($width < 175 || $height < 175) { - $ph->scaleImageUp(200); - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $Image->scaleUp(200); + $width = $Image->getWidth(); + $height = $Image->getHeight(); } $hash = photo_new_resource(); @@ -311,7 +312,7 @@ function profile_photo_crop_ui_head(App $a, $ph) { $smallest = 0; - $r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 0 ); + $r = Photo::store($Image, local_user(), 0 , $hash, $filename, t('Profile Photos'), 0 ); if ($r) { info( t('Image uploaded successfully.') . EOL ); @@ -320,8 +321,8 @@ function profile_photo_crop_ui_head(App $a, $ph) { } if ($width > 640 || $height > 640) { - $ph->scaleImage(640); - $r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 1 ); + $Image->scaleDown(640); + $r = Photo::store($Image, local_user(), 0 , $hash, $filename, t('Profile Photos'), 1 ); if ($r === false) { notice( sprintf(t('Image size reduction [%s] failed.'),"640") . EOL ); @@ -332,7 +333,7 @@ function profile_photo_crop_ui_head(App $a, $ph) { $a->config['imagecrop'] = $hash; $a->config['imagecrop_resolution'] = $smallest; - $a->config['imagecrop_ext'] = $ph->getExt(); + $a->config['imagecrop_ext'] = $Image->getExt(); $a->page['htmlhead'] .= replace_macros(get_markup_template("crophead.tpl"), array()); $a->page['end'] .= replace_macros(get_markup_template("cropend.tpl"), array()); return; diff --git a/mod/proxy.php b/mod/proxy.php index 790309c627..e134565ce0 100644 --- a/mod/proxy.php +++ b/mod/proxy.php @@ -8,7 +8,8 @@ use Friendica\App; use Friendica\Core\Config; use Friendica\Core\System; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Model\Photo; +use Friendica\Object\Image; define('PROXY_DEFAULT_TIME', 86400); // 1 Day @@ -130,9 +131,9 @@ function proxy_init(App $a) { // reduce quality - if it isn't a GIF if ($mime != 'image/gif') { - $img = new Photo($img_str, $mime); - if ($img->isValid()) { - $img_str = $img->imageString(); + $Image = new Image($img_str, $mime); + if ($Image->isValid()) { + $img_str = $Image->asString(); } } @@ -174,10 +175,10 @@ function proxy_init(App $a) { $mime = 'image/png'; $cachefile = ''; // Clear the cachefile so that the dummy isn't stored $valid = false; - $img = new Photo($img_str, 'image/png'); - if ($img->isValid()) { - $img->scaleImage(10); - $img_str = $img->imageString(); + $Image = new Image($img_str, 'image/png'); + if ($Image->isValid()) { + $Image->scaleDown(10); + $img_str = $Image->asString(); } } elseif ($mime != 'image/jpeg' && !$direct_cache && $cachefile == '') { $image = @imagecreatefromstring($img_str); @@ -192,9 +193,9 @@ function proxy_init(App $a) { 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '', 'desc' => $mime); dba::insert('photo', $fields); } else { - $img = new Photo($img_str, $mime); - if ($img->isValid() && !$direct_cache && ($cachefile == '')) { - $img->store(0, 0, $urlhash, $_REQUEST['url'], '', 100); + $Image = new Image($img_str, $mime); + if ($Image->isValid() && !$direct_cache && ($cachefile == '')) { + Photo::store($Image, 0, 0, $urlhash, $_REQUEST['url'], '', 100); } } } @@ -203,10 +204,10 @@ function proxy_init(App $a) { // reduce quality - if it isn't a GIF if ($mime != 'image/gif') { - $img = new Photo($img_str, $mime); - if ($img->isValid()) { - $img->scaleImage($size); - $img_str = $img->imageString(); + $Image = new Image($img_str, $mime); + if ($Image->isValid()) { + $Image->scaleDown($size); + $img_str = $Image->asString(); } } diff --git a/mod/wall_upload.php b/mod/wall_upload.php index ce73f85151..a608743d07 100644 --- a/mod/wall_upload.php +++ b/mod/wall_upload.php @@ -13,7 +13,8 @@ use Friendica\App; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Model\Photo; +use Friendica\Object\Image; function wall_upload_post(App $a, $desktopmode = true) { @@ -161,8 +162,8 @@ function wall_upload_post(App $a, $desktopmode = true) { $filetype = ""; } - if ($filetype=="") { - $filetype=Photo::guessImageType($filename); + if ($filetype == "") { + $filetype = Image::guessType($filename); } // If there is a temp name, then do a manual check @@ -190,9 +191,9 @@ function wall_upload_post(App $a, $desktopmode = true) { } $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata, $filetype); + $Image = new Image($imagedata, $filetype); - if (! $ph->isValid()) { + if (! $Image->isValid()) { $msg = t('Unable to process image.'); if ($r_json) { echo json_encode(array('error'=>$msg)); @@ -203,7 +204,7 @@ function wall_upload_post(App $a, $desktopmode = true) { killme(); } - $ph->orient($src); + $Image->orient($src); @unlink($src); $max_length = Config::get('system', 'max_image_length'); @@ -211,12 +212,12 @@ function wall_upload_post(App $a, $desktopmode = true) { $max_length = MAX_IMAGE_LENGTH; } if ($max_length > 0) { - $ph->scaleImage($max_length); + $Image->scaleDown($max_length); logger("File upload: Scaling picture to new size " . $max_length, LOGGER_DEBUG); } - $width = $ph->getWidth(); - $height = $ph->getHeight(); + $width = $Image->getWidth(); + $height = $Image->getHeight(); $hash = photo_new_resource(); @@ -229,7 +230,7 @@ function wall_upload_post(App $a, $desktopmode = true) { $defperm = '<' . $default_cid . '>'; - $r = $ph->store($page_owner_uid, $visitor, $hash, $filename, $album, 0, 0, $defperm); + $r = Photo::store($Image, $page_owner_uid, $visitor, $hash, $filename, $album, 0, 0, $defperm); if (! $r) { $msg = t('Image upload failed.'); @@ -242,16 +243,16 @@ function wall_upload_post(App $a, $desktopmode = true) { } if ($width > 640 || $height > 640) { - $ph->scaleImage(640); - $r = $ph->store($page_owner_uid, $visitor, $hash, $filename, $album, 1, 0, $defperm); + $Image->scaleDown(640); + $r = Photo::store($Image, $page_owner_uid, $visitor, $hash, $filename, $album, 1, 0, $defperm); if ($r) { $smallest = 1; } } if ($width > 320 || $height > 320) { - $ph->scaleImage(320); - $r = $ph->store($page_owner_uid, $visitor, $hash, $filename, $album, 2, 0, $defperm); + $Image->scaleDown(320); + $r = Photo::store($Image, $page_owner_uid, $visitor, $hash, $filename, $album, 2, 0, $defperm); if ($r && ($smallest == 0)) { $smallest = 2; } @@ -280,8 +281,8 @@ function wall_upload_post(App $a, $desktopmode = true) { $picture["height"] = $r[0]["height"]; $picture["type"] = $r[0]["type"]; $picture["albumpage"] = System::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $hash; - $picture["picture"] = System::baseUrl() . "/photo/{$hash}-0." . $ph->getExt(); - $picture["preview"] = System::baseUrl() . "/photo/{$hash}-{$smallest}." . $ph->getExt(); + $picture["picture"] = System::baseUrl() . "/photo/{$hash}-0." . $Image->getExt(); + $picture["preview"] = System::baseUrl() . "/photo/{$hash}-{$smallest}." . $Image->getExt(); if ($r_json) { echo json_encode(array('picture'=>$picture)); @@ -299,9 +300,9 @@ function wall_upload_post(App $a, $desktopmode = true) { /* mod Waitman Gobble NO WARRANTY */ // if we get the signal then return the image url info in BBCODE if ($_REQUEST['hush']!='yeah') { - echo "\n\n" . '[url=' . System::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . System::baseUrl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]\n\n"; + echo "\n\n" . '[url=' . System::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . System::baseUrl() . "/photo/{$hash}-{$smallest}.".$Image->getExt()."[/img][/url]\n\n"; } else { - $m = '[url='.System::baseUrl().'/photos/'.$page_owner_nick.'/image/'.$hash.'][img]'.System::baseUrl()."/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]"; + $m = '[url='.System::baseUrl().'/photos/'.$page_owner_nick.'/image/'.$hash.'][img]'.System::baseUrl()."/photo/{$hash}-{$smallest}.".$Image->getExt()."[/img][/url]"; return($m); } /* mod Waitman Gobble NO WARRANTY */ diff --git a/src/Model/Photo.php b/src/Model/Photo.php new file mode 100644 index 0000000000..229f221077 --- /dev/null +++ b/src/Model/Photo.php @@ -0,0 +1,174 @@ + 1)); + if (DBM::is_result($r)) { + $guid = $r['guid']; + } else { + $guid = get_guid(); + } + + $x = dba::select('photo', array('id'), array('resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale), array('limit' => 1)); + + $fields = array( + 'uid' => $uid, + 'contact-id' => $cid, + 'guid' => $guid, + 'resource-id' => $rid, + 'created' => datetime_convert(), + 'edited' => datetime_convert(), + 'filename' => basename($filename), + 'type' => $Image->getType(), + 'album' => $album, + 'height' => $Image->getHeight(), + 'width' => $Image->getWidth(), + 'datasize' => strlen($Image->asString()), + 'data' => $Image->asString(), + 'scale' => $scale, + 'profile' => $profile, + 'allow_cid' => $allow_cid, + 'allow_gid' => $allow_gid, + 'deny_cid' => $deny_cid, + 'deny_gid' => $deny_gid, + 'desc' => $desc + ); + + if (DBM::is_result($x)) { + $r = dba::update('photo', $fields, array('id' => $x['id'])); + } else { + $r = dba::insert('photo', $fields); + } + + return $r; + } + + /** + * @param string $photo photo + * @param integer $uid user id + * @param integer $cid contact id + * @param boolean $quit_on_error optional, default false + * @return array + */ + public static function importProfilePhoto($photo, $uid, $cid, $quit_on_error = false) + { + $r = dba::select( + 'photo', array('resource-id'), array('uid' => $uid, 'contact-id' => $cid, 'scale' => 4, 'album' => 'Contact Photos'), array('limit' => 1) + ); + + if (DBM::is_result($r) && strlen($r['resource-id'])) { + $hash = $r['resource-id']; + } else { + $hash = photo_new_resource(); + } + + $photo_failure = false; + + $filename = basename($photo); + $img_str = fetch_url($photo, true); + + if ($quit_on_error && ($img_str == "")) { + return false; + } + + $type = Image::guessType($photo, true); + $Image = new Image($img_str, $type); + if ($Image->isValid()) { + $Image->scaleToSquare(175); + + $r = self::store($Image, $uid, $cid, $hash, $filename, 'Contact Photos', 4); + + if ($r === false) { + $photo_failure = true; + } + + $Image->scaleDown(80); + + $r = self::store($Image, $uid, $cid, $hash, $filename, 'Contact Photos', 5); + + if ($r === false) { + $photo_failure = true; + } + + $Image->scaleDown(48); + + $r = self::store($Image, $uid, $cid, $hash, $filename, 'Contact Photos', 6); + + if ($r === false) { + $photo_failure = true; + } + + $suffix = '?ts=' . time(); + + $photo = System::baseUrl() . '/photo/' . $hash . '-4.' . $Image->getExt() . $suffix; + $thumb = System::baseUrl() . '/photo/' . $hash . '-5.' . $Image->getExt() . $suffix; + $micro = System::baseUrl() . '/photo/' . $hash . '-6.' . $Image->getExt() . $suffix; + + // Remove the cached photo + $a = get_app(); + $basepath = $a->get_basepath(); + + if (is_dir($basepath . "/photo")) { + $filename = $basepath . '/photo/' . $hash . '-4.' . $Image->getExt(); + if (file_exists($filename)) { + unlink($filename); + } + $filename = $basepath . '/photo/' . $hash . '-5.' . $Image->getExt(); + if (file_exists($filename)) { + unlink($filename); + } + $filename = $basepath . '/photo/' . $hash . '-6.' . $Image->getExt(); + if (file_exists($filename)) { + unlink($filename); + } + } + } else { + $photo_failure = true; + } + + if ($photo_failure && $quit_on_error) { + return false; + } + + if ($photo_failure) { + $photo = System::baseUrl() . '/images/person-175.jpg'; + $thumb = System::baseUrl() . '/images/person-80.jpg'; + $micro = System::baseUrl() . '/images/person-48.jpg'; + } + + return array($photo, $thumb, $micro); + } +} diff --git a/src/Model/User.php b/src/Model/User.php index 72e3aea939..1f70bfb158 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -11,8 +11,9 @@ use Friendica\Core\Config; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; +use Friendica\Model\Photo; use Friendica\Object\Contact; -use Friendica\Object\Photo; +use Friendica\Object\Image; use dba; require_once 'boot.php'; @@ -381,32 +382,32 @@ class User $filename = basename($photo); $img_str = fetch_url($photo, true); // guess mimetype from headers or filename - $type = Photo::guessImageType($photo, true); + $type = Image::guessType($photo, true); - $img = new Photo($img_str, $type); - if ($img->isValid()) { - $img->scaleImageSquare(175); + $Image = new Image($img_str, $type); + if ($Image->isValid()) { + $Image->scaleToSquare(175); $hash = photo_new_resource(); - $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 4); + $r = Photo::store($Image, $newuid, 0, $hash, $filename, t('Profile Photos'), 4); if ($r === false) { $photo_failure = true; } - $img->scaleImage(80); + $Image->scaleDown(80); - $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 5); + $r = Photo::store($Image, $newuid, 0, $hash, $filename, t('Profile Photos'), 5); if ($r === false) { $photo_failure = true; } - $img->scaleImage(48); + $Image->scaleDown(48); - $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 6); + $r = Photo::store($Image, $newuid, 0, $hash, $filename, t('Profile Photos'), 6); if ($r === false) { $photo_failure = true; diff --git a/src/Object/Photo.php b/src/Object/Image.php similarity index 77% rename from src/Object/Photo.php rename to src/Object/Image.php index a8bb3b4ada..79fbf3a990 100644 --- a/src/Object/Photo.php +++ b/src/Object/Image.php @@ -1,7 +1,7 @@ isValid()) { return false; @@ -350,7 +350,7 @@ class Photo // FIXME - implement horizantal bias for scaling as in followin GD functions // to allow very tall images to be constrained only horizontally. - $this->image->scaleImage($dest_width, $dest_height); + $this->image->scaleDown($dest_width, $dest_height); } while ($this->image->nextImage()); // These may not be necessary any more @@ -524,7 +524,7 @@ class Photo * @param integer $min minimum dimension * @return mixed */ - public function scaleImageUp($min) + public function scaleUp($min) { if (!$this->isValid()) { return false; @@ -563,7 +563,7 @@ class Photo } if ($this->isImagick()) { - return $this->scaleImage($dest_width, $dest_height); + return $this->scaleDown($dest_width, $dest_height); } $dest = imagecreatetruecolor($dest_width, $dest_height); @@ -585,7 +585,7 @@ class Photo * @param integer $dim dimension * @return mixed */ - public function scaleImageSquare($dim) + public function scaleToSquare($dim) { if (!$this->isValid()) { return false; @@ -594,7 +594,7 @@ class Photo if ($this->isImagick()) { $this->image->setFirstIterator(); do { - $this->image->scaleImage($dim, $dim); + $this->image->scaleDown($dim, $dim); } while ($this->image->nextImage()); return; } @@ -622,7 +622,7 @@ class Photo * @param integer $h height * @return mixed */ - public function cropImage($max, $x, $y, $w, $h) + public function crop($max, $x, $y, $w, $h) { if (!$this->isValid()) { return false; @@ -639,7 +639,7 @@ class Photo */ $this->image->setImagePage(0, 0, 0, 0); } while ($this->image->nextImage()); - return $this->scaleImage($max); + return $this->scaleDown($max); } $dest = imagecreatetruecolor($max, $max); @@ -661,13 +661,13 @@ class Photo * @param string $path file path * @return mixed */ - public function saveImage($path) + public function saveToFilePath($path) { if (!$this->isValid()) { return false; } - $string = $this->imageString(); + $string = $this->asString(); $a = get_app(); @@ -676,10 +676,23 @@ class Photo $a->save_timestamp($stamp1, "file"); } + /** + * @brief Magic method allowing string casting of an Image object + * + * Ex: $data = $Image->asString(); + * can be replaced by + * $data = (string) $Image; + * + * @return string + */ + public function __toString() { + return $this->asString(); + } + /** * @return mixed */ - public function imageString() + public function asString() { if (!$this->isValid()) { return false; @@ -720,46 +733,6 @@ class Photo return $string; } - /** - * @param integer $uid uid - * @param integer $cid cid - * @param integer $rid rid - * @param string $filename filename - * @param string $album album name - * @param integer $scale scale - * @param integer $profile optional, default = 0 - * @param string $allow_cid optional, default = '' - * @param string $allow_gid optional, default = '' - * @param string $deny_cid optional, default = '' - * @param string $deny_gid optional, default = '' - * @param string $desc optional, default = '' - * @return object - */ - public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '', $desc = '') - { - $r = dba::select('photo', array('guid'), array("`resource-id` = ? AND `guid` != ?", $rid, ''), array('limit' => 1)); - if (DBM::is_result($r)) { - $guid = $r['guid']; - } else { - $guid = get_guid(); - } - - $x = dba::select('photo', array('id'), array('resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale), array('limit' => 1)); - - $fields = array('uid' => $uid, 'contact-id' => $cid, 'guid' => $guid, 'resource-id' => $rid, 'created' => datetime_convert(), 'edited' => datetime_convert(), - 'filename' => basename($filename), 'type' => $this->getType(), 'album' => $album, 'height' => $this->getHeight(), 'width' => $this->getWidth(), - 'datasize' => strlen($this->imageString()), 'data' => $this->imageString(), 'scale' => $scale, 'profile' => $profile, - 'allow_cid' => $allow_cid, 'allow_gid' => $allow_gid, 'deny_cid' => $deny_cid, 'deny_gid' => $deny_gid, 'desc' => $desc); - - if (DBM::is_result($x)) { - $r = dba::update('photo', $fields, array('id' => $x['id'])); - } else { - $r = dba::insert('photo', $fields); - } - - return $r; - } - /** * Guess image mimetype from filename or from Content-Type header * @@ -768,9 +741,9 @@ class Photo * * @return object */ - public static function guessImageType($filename, $fromcurl = false) + public static function guessType($filename, $fromcurl = false) { - logger('Photo: guessImageType: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG); + logger('Image: guessType: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG); $type = null; if ($fromcurl) { $a = get_app(); @@ -805,109 +778,10 @@ class Photo } } } - logger('Photo: guessImageType: type='.$type, LOGGER_DEBUG); + logger('Image: guessType: type='.$type, LOGGER_DEBUG); return $type; } - /** - * @param string $photo photo - * @param integer $uid user id - * @param integer $cid contact id - * @param boolean $quit_on_error optional, default false - * @return array - */ - public static function importProfilePhoto($photo, $uid, $cid, $quit_on_error = false) - { - $r = dba::select( - 'photo', - array('resource-id'), - array('uid' => $uid, 'contact-id' => $cid, 'scale' => 4, 'album' => 'Contact Photos'), - array('limit' => 1) - ); - - if (DBM::is_result($r) && strlen($r['resource-id'])) { - $hash = $r['resource-id']; - } else { - $hash = photo_new_resource(); - } - - $photo_failure = false; - - $filename = basename($photo); - $img_str = fetch_url($photo, true); - - if ($quit_on_error && ($img_str == "")) { - return false; - } - - $type = self::guessImageType($photo, true); - $img = new Photo($img_str, $type); - if ($img->isValid()) { - $img->scaleImageSquare(175); - - $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 4); - - if ($r === false) { - $photo_failure = true; - } - - $img->scaleImage(80); - - $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 5); - - if ($r === false) { - $photo_failure = true; - } - - $img->scaleImage(48); - - $r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 6); - - if ($r === false) { - $photo_failure = true; - } - - $suffix = '?ts='.time(); - - $photo = System::baseUrl() . '/photo/' . $hash . '-4.' . $img->getExt() . $suffix; - $thumb = System::baseUrl() . '/photo/' . $hash . '-5.' . $img->getExt() . $suffix; - $micro = System::baseUrl() . '/photo/' . $hash . '-6.' . $img->getExt() . $suffix; - - // Remove the cached photo - $a = get_app(); - $basepath = $a->get_basepath(); - - if (is_dir($basepath."/photo")) { - $filename = $basepath.'/photo/'.$hash.'-4.'.$img->getExt(); - if (file_exists($filename)) { - unlink($filename); - } - $filename = $basepath.'/photo/'.$hash.'-5.'.$img->getExt(); - if (file_exists($filename)) { - unlink($filename); - } - $filename = $basepath.'/photo/'.$hash.'-6.'.$img->getExt(); - if (file_exists($filename)) { - unlink($filename); - } - } - } else { - $photo_failure = true; - } - - if ($photo_failure && $quit_on_error) { - return false; - } - - if ($photo_failure) { - $photo = System::baseUrl() . '/images/person-175.jpg'; - $thumb = System::baseUrl() . '/images/person-80.jpg'; - $micro = System::baseUrl() . '/images/person-48.jpg'; - } - - return array($photo, $thumb, $micro); - } - /** * @param string $url url * @return object @@ -915,34 +789,34 @@ class Photo public static function getInfoFromURL($url) { $data = array(); - + $data = Cache::get($url); - + if (is_null($data) || !$data || !is_array($data)) { $img_str = fetch_url($url, true, $redirects, 4); $filesize = strlen($img_str); - + if (function_exists("getimagesizefromstring")) { $data = getimagesizefromstring($img_str); } else { $tempfile = tempnam(get_temppath(), "cache"); - + $a = get_app(); $stamp1 = microtime(true); file_put_contents($tempfile, $img_str); $a->save_timestamp($stamp1, "file"); - + $data = getimagesize($tempfile); unlink($tempfile); } - + if ($data) { $data["size"] = $filesize; } - + Cache::set($url, $data); } - + return $data; } @@ -952,18 +826,18 @@ class Photo * @param integer $max max * @return array */ - public static function scaleImageTo($width, $height, $max) + public static function getScalingDimensions($width, $height, $max) { $dest_width = $dest_height = 0; - + if ((!$width) || (!$height)) { return false; } - + if ($width > $max && $height > $max) { // very tall image (greater than 16:9) // constrain the width - let the height float. - + if ((($height * 9) / 16) > $width) { $dest_width = $max; $dest_height = intval(($height * $max) / $width); @@ -983,7 +857,7 @@ class Photo if ($height > $max) { // very tall image (greater than 16:9) // but width is OK - don't do anything - + if ((($height * 9) / 16) > $width) { $dest_width = $width; $dest_height = $height; @@ -1015,152 +889,152 @@ class Photo WHERE `user`.`uid` = %d AND `user`.`blocked` = 0 AND `contact`.`self` = 1 LIMIT 1", intval($uid) ); - + if (!DBM::is_result($r)) { logger("Can't detect user data for uid ".$uid, LOGGER_DEBUG); return(array()); } - + $page_owner_nick = $r[0]['nickname']; - + /// @TODO /// $default_cid = $r[0]['id']; /// $community_page = (($r[0]['page-flags'] == PAGE_COMMUNITY) ? true : false); - + if ((strlen($imagedata) == 0) && ($url == "")) { logger("No image data and no url provided", LOGGER_DEBUG); return(array()); } elseif (strlen($imagedata) == 0) { logger("Uploading picture from ".$url, LOGGER_DEBUG); - + $stamp1 = microtime(true); $imagedata = @file_get_contents($url); $a->save_timestamp($stamp1, "file"); } - + $maximagesize = Config::get('system', 'maximagesize'); - + if (($maximagesize) && (strlen($imagedata) > $maximagesize)) { logger("Image exceeds size limit of ".$maximagesize, LOGGER_DEBUG); return(array()); } - + $tempfile = tempnam(get_temppath(), "cache"); - + $stamp1 = microtime(true); file_put_contents($tempfile, $imagedata); $a->save_timestamp($stamp1, "file"); - + $data = getimagesize($tempfile); - + if (!isset($data["mime"])) { unlink($tempfile); logger("File is no picture", LOGGER_DEBUG); return(array()); } - - $ph = new Photo($imagedata, $data["mime"]); - - if (!$ph->isValid()) { + + $Image = new Image($imagedata, $data["mime"]); + + if (!$Image->isValid()) { unlink($tempfile); logger("Picture is no valid picture", LOGGER_DEBUG); return(array()); } - - $ph->orient($tempfile); + + $Image->orient($tempfile); unlink($tempfile); - + $max_length = Config::get('system', 'max_image_length'); if (! $max_length) { $max_length = MAX_IMAGE_LENGTH; } if ($max_length > 0) { - $ph->scaleImage($max_length); + $Image->scaleDown($max_length); } - - $width = $ph->getWidth(); - $height = $ph->getHeight(); - + + $width = $Image->getWidth(); + $height = $Image->getHeight(); + $hash = photo_new_resource(); - + $smallest = 0; - + // Pictures are always public by now //$defperm = '<'.$default_cid.'>'; $defperm = ""; $visitor = 0; - - $r = $ph->store($uid, $visitor, $hash, $tempfile, t('Wall Photos'), 0, 0, $defperm); - + + $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 0, 0, $defperm); + if (!$r) { logger("Picture couldn't be stored", LOGGER_DEBUG); return(array()); } - + $image = array("page" => System::baseUrl().'/photos/'.$page_owner_nick.'/image/'.$hash, - "full" => System::baseUrl()."/photo/{$hash}-0.".$ph->getExt()); - + "full" => System::baseUrl()."/photo/{$hash}-0.".$Image->getExt()); + if ($width > 800 || $height > 800) { - $image["large"] = System::baseUrl()."/photo/{$hash}-0.".$ph->getExt(); + $image["large"] = System::baseUrl()."/photo/{$hash}-0.".$Image->getExt(); } - + if ($width > 640 || $height > 640) { - $ph->scaleImage(640); - $r = $ph->store($uid, $visitor, $hash, $tempfile, t('Wall Photos'), 1, 0, $defperm); + $Image->scaleDown(640); + $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 1, 0, $defperm); if ($r) { - $image["medium"] = System::baseUrl()."/photo/{$hash}-1.".$ph->getExt(); + $image["medium"] = System::baseUrl()."/photo/{$hash}-1.".$Image->getExt(); } } - + if ($width > 320 || $height > 320) { - $ph->scaleImage(320); - $r = $ph->store($uid, $visitor, $hash, $tempfile, t('Wall Photos'), 2, 0, $defperm); + $Image->scaleDown(320); + $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 2, 0, $defperm); if ($r) { - $image["small"] = System::baseUrl()."/photo/{$hash}-2.".$ph->getExt(); + $image["small"] = System::baseUrl()."/photo/{$hash}-2.".$Image->getExt(); } } - + if ($width > 160 && $height > 160) { $x = 0; $y = 0; - - $min = $ph->getWidth(); + + $min = $Image->getWidth(); if ($min > 160) { $x = ($min - 160) / 2; } - - if ($ph->getHeight() < $min) { - $min = $ph->getHeight(); + + if ($Image->getHeight() < $min) { + $min = $Image->getHeight(); if ($min > 160) { $y = ($min - 160) / 2; } } - + $min = 160; - $ph->cropImage(160, $x, $y, $min, $min); - - $r = $ph->store($uid, $visitor, $hash, $tempfile, t('Wall Photos'), 3, 0, $defperm); + $Image->crop(160, $x, $y, $min, $min); + + $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 3, 0, $defperm); if ($r) { - $image["thumb"] = System::baseUrl()."/photo/{$hash}-3.".$ph->getExt(); + $image["thumb"] = System::baseUrl()."/photo/{$hash}-3.".$Image->getExt(); } } - + // Set the full image as preview image. This will be overwritten, if the picture is larger than 640. $image["preview"] = $image["full"]; - + // Deactivated, since that would result in a cropped preview, if the picture wasn't larger than 320 //if (isset($image["thumb"])) // $image["preview"] = $image["thumb"]; - + // Unsure, if this should be activated or deactivated //if (isset($image["small"])) // $image["preview"] = $image["small"]; - + if (isset($image["medium"])) { $image["preview"] = $image["medium"]; } - + return($image); } } diff --git a/src/ParseUrl.php b/src/ParseUrl.php index 2183a9c1e0..35557067d7 100644 --- a/src/ParseUrl.php +++ b/src/ParseUrl.php @@ -6,7 +6,7 @@ namespace Friendica; use Friendica\Core\Config; -use Friendica\Object\Photo; +use Friendica\Object\Image; use Friendica\Util\XML; use dba; @@ -353,7 +353,7 @@ class ParseUrl } $src = self::completeUrl($attr["src"], $url); - $photodata = Photo::getInfoFromURL($src); + $photodata = Image::getInfoFromURL($src); if (($photodata) && ($photodata[0] > 150) && ($photodata[1] > 150)) { if ($photodata[0] > 300) { @@ -374,7 +374,7 @@ class ParseUrl unset($siteinfo["image"]); - $photodata = Photo::getInfoFromURL($src); + $photodata = Image::getInfoFromURL($src); if (($photodata) && ($photodata[0] > 10) && ($photodata[1] > 10)) { $siteinfo["images"][] = array("src" => $src, diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 5af082905d..c1956c4571 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -14,9 +14,9 @@ use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\GlobalContact; +use Friendica\Model\Profile; use Friendica\Object\Contact; -use Friendica\Object\Photo; -use Friendica\Object\Profile; +use Friendica\Object\Image; use Friendica\Protocol\OStatus; use Friendica\Util\XML; @@ -476,7 +476,7 @@ class DFRN $uid ); $photos = array(); - $ext = Photo::supportedTypes(); + $ext = Image::supportedTypes(); foreach ($rp as $p) { $photos[$p['scale']] = System::baseUrl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']]; diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 9a2eaeb5b7..0f14c77c39 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -12,7 +12,7 @@ use Friendica\Database\DBM; use Friendica\Model\GlobalContact; use Friendica\Network\Probe; use Friendica\Object\Contact; -use Friendica\Object\Photo; +use Friendica\Object\Image; use Friendica\Util\Lock; use Friendica\Util\XML; use dba; @@ -1323,7 +1323,7 @@ class OStatus switch ($siteinfo["type"]) { case 'photo': - $imgdata = Photo::getInfoFromURL($siteinfo["image"]); + $imgdata = Image::getInfoFromURL($siteinfo["image"]); $attributes = array("rel" => "enclosure", "href" => $siteinfo["image"], "type" => $imgdata["mime"], @@ -1343,7 +1343,7 @@ class OStatus } if (!Config::get('system', 'ostatus_not_attach_preview') && ($siteinfo["type"] != "photo") && isset($siteinfo["image"])) { - $imgdata = Photo::getInfoFromURL($siteinfo["image"]); + $imgdata = Image::getInfoFromURL($siteinfo["image"]); $attributes = array("rel" => "enclosure", "href" => $siteinfo["image"], "type" => $imgdata["mime"], diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 84bfd4c4f1..1cc43f718d 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -14,7 +14,6 @@ use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\GlobalContact; use Friendica\Network\Probe; -use Friendica\Object\Photo; use Friendica\Object\Profile; use dba; use DOMDocument; diff --git a/update.php b/update.php index 12a04995c9..751e15b587 100644 --- a/update.php +++ b/update.php @@ -6,7 +6,8 @@ use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\Worker; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Model\Photo; +use Friendica\Object\Image; /** * @@ -153,10 +154,10 @@ function update_1014() $r = q("SELECT * FROM `photo` WHERE `scale` = 4"); if (DBM::is_result($r)) { foreach ($r as $rr) { - $ph = new Photo($rr['data']); - if ($ph->isValid()) { - $ph->scaleImage(48); - $ph->store($rr['uid'],$rr['contact-id'],$rr['resource-id'],$rr['filename'],$rr['album'],6,(($rr['profile']) ? 1 : 0)); + $Image = new Image($rr['data']); + if ($Image->isValid()) { + $Image->scaleDown(48); + Photo::store($Image, $rr['uid'],$rr['contact-id'],$rr['resource-id'],$rr['filename'],$rr['album'],6,(($rr['profile']) ? 1 : 0)); } } } diff --git a/view/theme/frio/theme.php b/view/theme/frio/theme.php index 0a6b48e4eb..8b17130269 100644 --- a/view/theme/frio/theme.php +++ b/view/theme/frio/theme.php @@ -12,7 +12,7 @@ use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Database\DBM; -use Friendica\Object\Photo; +use Friendica\Object\Image; $frio = "view/theme/frio"; @@ -82,7 +82,7 @@ function frio_uninstall() { */ function frio_item_photo_links(App $a, &$body_info) { - $phototypes = Photo::supportedTypes(); + $phototypes = Image::supportedTypes(); $occurence = 1; $p = bb_find_open_close($body_info['html'], ""); diff --git a/view/theme/frost/theme.php b/view/theme/frost/theme.php index 5d5162cd32..f661546b39 100644 --- a/view/theme/frost/theme.php +++ b/view/theme/frost/theme.php @@ -11,7 +11,7 @@ use Friendica\App; use Friendica\Core\System; -use Friendica\Object\Photo; +use Friendica\Object\Image; function frost_init(App $a) { $a->videowidth = 400; @@ -48,7 +48,7 @@ function frost_uninstall() { function frost_item_photo_links(App $a, &$body_info) { - $phototypes = Photo::supportedTypes(); + $phototypes = Image::supportedTypes(); $occurence = 1; $p = bb_find_open_close($body_info['html'], "");