X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FPhoto.php;h=e669de8a3dcc04dd5059db288a2460e5d9a4b306;hb=aed5e4cc960797a25f184d24d7c81265e05d4ee6;hp=d6f58e610f882d3c988936d84de81f274118a971;hpb=d2b32a151eda05785d22bb8336fda06c6d9db7af;p=friendica.git diff --git a/src/Module/Photo.php b/src/Module/Photo.php index d6f58e610f..e669de8a3d 100644 --- a/src/Module/Photo.php +++ b/src/Module/Photo.php @@ -28,10 +28,13 @@ use Friendica\DI; use Friendica\Model\Contact; use Friendica\Model\Photo as MPhoto; use Friendica\Model\Post; +use Friendica\Model\Profile; use Friendica\Model\Storage\ExternalResource; +use Friendica\Model\Storage\SystemResource; use Friendica\Util\Proxy; use Friendica\Object\Image; use Friendica\Util\Images; +use Friendica\Util\Network; /** * Photo Module @@ -64,6 +67,8 @@ class Photo extends BaseModule exit; } + Profile::addVisitorCookieForHTTPSigner(); + $customsize = 0; $square_resize = true; $photo = false; @@ -102,8 +107,8 @@ class Photo extends BaseModule $stamp = microtime(true); $imgdata = MPhoto::getImageDataForPhoto($photo); - // The mimetype for an external resources can only be known after it had been fetched - if ($photo['backend-class'] == ExternalResource::NAME) { + // The mimetype for an external or system resource can only be known reliably after it had been fetched + if (in_array($photo['backend-class'], [ExternalResource::NAME, SystemResource::NAME])) { $mimetype = Images::getMimeTypeByData($imgdata); if (!empty($mimetype)) { $photo['type'] = $mimetype; @@ -171,7 +176,7 @@ class Photo extends BaseModule { switch($type) { case "preview": - $media = DBA::selectFirst('post-media', ['preview', 'url', 'type', 'uri-id'], ['id' => $uid]); + $media = DBA::selectFirst('post-media', ['preview', 'url', 'mimetype', 'type', 'uri-id'], ['id' => $uid]); if (empty($media)) { return false; } @@ -185,14 +190,29 @@ class Photo extends BaseModule return false; } - return MPhoto::createPhotoForExternalResource($url, (int)local_user()); + if (Network::isLocalLink($url) && preg_match('|.*?/photo/(.*[a-fA-F0-9])\-(.*[0-9])\..*[\w]|', $url, $matches)) { + return MPhoto::getPhoto($matches[1], $matches[2]); + } + + return MPhoto::createPhotoForExternalResource($url, (int)local_user(), $media['mimetype']); case "media": - $media = DBA::selectFirst('post-media', ['url', 'uri-id'], ['id' => $uid, 'type' => Post\Media::IMAGE]); + $media = DBA::selectFirst('post-media', ['url', 'mimetype', 'uri-id'], ['id' => $uid, 'type' => Post\Media::IMAGE]); if (empty($media)) { return false; } - return MPhoto::createPhotoForExternalResource($media['url'], (int)local_user()); + if (Network::isLocalLink($media['url']) && preg_match('|.*?/photo/(.*[a-fA-F0-9])\-(.*[0-9])\..*[\w]|', $media['url'], $matches)) { + return MPhoto::getPhoto($matches[1], $matches[2]); + } + + return MPhoto::createPhotoForExternalResource($media['url'], (int)local_user(), $media['mimetype']); + case "link": + $link = DBA::selectFirst('post-link', ['url', 'mimetype'], ['id' => $uid]); + if (empty($link)) { + return false; + } + + return MPhoto::createPhotoForExternalResource($link['url'], (int)local_user(), $link['mimetype']); case "contact": $contact = Contact::getById($uid, ['uid', 'url', 'avatar', 'photo', 'xmpp', 'addr']); if (empty($contact)) { @@ -201,7 +221,7 @@ class Photo extends BaseModule If (($contact['uid'] != 0) && empty($contact['photo']) && empty($contact['avatar'])) { $contact = Contact::getByURL($contact['url'], false, ['avatar', 'photo', 'xmpp', 'addr']); } - if (!empty($contact['photo'])) { + if (!empty($contact['photo']) && !empty($contact['avatar'])) { // Fetch photo directly $resourceid = MPhoto::ridFromURI($contact['photo']); if (!empty($resourceid)) { @@ -210,7 +230,8 @@ class Photo extends BaseModule return $photo; } } - $url = $contact['photo']; + // We continue with the avatar link when the photo link is invalid + $url = $contact['avatar']; } elseif (!empty($contact['avatar'])) { $url = $contact['avatar']; } elseif ($customsize <= Proxy::PIXEL_MICRO) {