X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FPhoto.php;h=3d3110fd8b702fa2458c6c1a2ff61fc775b68637;hb=1ae7cac23667a7e43a0ca5e66ad6fd58011542d0;hp=39a8353b5d87f34bf0afb80d00ffbe0164ca9896;hpb=9eba41598dec3f18b402741aa574475956a64d0e;p=friendica.git diff --git a/src/Module/Photo.php b/src/Module/Photo.php index 39a8353b5d..3d3110fd8b 100644 --- a/src/Module/Photo.php +++ b/src/Module/Photo.php @@ -1,6 +1,6 @@ parameters['type'])) { + if (!empty($this->parameters['customsize'])) { + $customsize = intval($this->parameters['customsize']); + $square_resize = !in_array($this->parameters['type'], ['media', 'preview']); } - if (!empty($parameters['nickname_ext'])) { - if (in_array($parameters['type'], ['contact', 'header'])) { - $guid = pathinfo($parameters['nickname_ext'], PATHINFO_FILENAME); - $account = DBA::selectFirst('account-user-view', ['id'], ['guid' => $guid], ['order' => ['uid' => true]]); - if (empty($account)) { - throw new HTTPException\NotFoundException(); - } + if (!empty($this->parameters['guid'])) { + $guid = $this->parameters['guid']; + $account = DBA::selectFirst('account-user-view', ['id'], ['guid' => $guid], ['order' => ['uid' => true]]); + if (empty($account)) { + throw new HTTPException\NotFoundException(); + } - $id = $account['id']; - } else { - $nickname = pathinfo($parameters['nickname_ext'], PATHINFO_FILENAME); - $user = User::getByNickname($nickname, ['uid']); - if (empty($user)) { - throw new HTTPException\NotFoundException(); - } + $id = $account['id']; + } + + // Contact Id Fallback, to remove after version 2021.12 + if (isset($this->parameters['contact_id'])) { + $id = intval($this->parameters['contact_id']); + } - $id = $user['uid']; + if (!empty($this->parameters['nickname_ext'])) { + $nickname = pathinfo($this->parameters['nickname_ext'], PATHINFO_FILENAME); + $user = User::getByNickname($nickname, ['uid']); + if (empty($user)) { + throw new HTTPException\NotFoundException(); } + + $id = $user['uid']; } // User Id Fallback, to remove after version 2021.12 - if (!empty($parameters['uid_ext'])) { - $id = intval(pathinfo($parameters['uid_ext'], PATHINFO_FILENAME)); + if (!empty($this->parameters['uid_ext'])) { + $id = intval(pathinfo($this->parameters['uid_ext'], PATHINFO_FILENAME)); } // Please refactor this for the love of everything that's good - if (isset($parameters['id'])) { - $id = $parameters['id']; + if (isset($this->parameters['id'])) { + $id = $this->parameters['id']; } if (empty($id)) { - Logger::notice('No picture id was detected', ['parameters' => $parameters, 'query' => DI::args()->getQueryString()]); + Logger::notice('No picture id was detected', ['parameters' => $this->parameters, 'query' => DI::args()->getQueryString()]); throw new HTTPException\NotFoundException(DI::l10n()->t('The Photo is not available.')); } - $photo = self::getPhotoByid($id, $parameters['type'], $customsize ?: Proxy::PIXEL_SMALL); + $photo = self::getPhotoByid($id, $this->parameters['type'], $customsize ?: Proxy::PIXEL_SMALL); } else { - $photoid = pathinfo($parameters['name'], PATHINFO_FILENAME); + $photoid = pathinfo($this->parameters['name'], PATHINFO_FILENAME); $scale = 0; if (substr($photoid, -2, 1) == "-") { $scale = intval(substr($photoid, -1, 1)); @@ -259,13 +265,33 @@ class Photo extends BaseModule return MPhoto::createPhotoForExternalResource($link['url'], (int)local_user(), $link['mimetype']); case "contact": - $contact = Contact::getById($id, ['uid', 'url', 'avatar', 'photo', 'xmpp', 'addr']); + $contact = Contact::getById($id, ['uid', 'url', 'nurl', 'avatar', 'photo', 'xmpp', 'addr']); if (empty($contact)) { return false; } - If (($contact['uid'] != 0) && empty($contact['photo']) && empty($contact['avatar'])) { + + // For local users directly use the photo record that is marked as the profile + if (Network::isLocalLink($contact['url'])) { + $contact = Contact::selectFirst(['uid', 'url', 'avatar', 'photo', 'xmpp', 'addr'], ['nurl' => $contact['nurl'], 'self' => true]); + if (!empty($contact)) { + if ($customsize <= Proxy::PIXEL_MICRO) { + $scale = 6; + } elseif ($customsize <= Proxy::PIXEL_THUMB) { + $scale = 5; + } else { + $scale = 4; + } + $photo = MPhoto::selectFirst([], ["scale" => $scale, "uid" => $contact['uid'], "profile" => 1]); + if (!empty($photo)) { + return $photo; + } + } + } + + if (!empty($contact['uid']) && empty($contact['photo']) && empty($contact['avatar'])) { $contact = Contact::getByURL($contact['url'], false, ['avatar', 'photo', 'xmpp', 'addr']); } + if (!empty($contact['photo']) && !empty($contact['avatar'])) { // Fetch photo directly $resourceid = MPhoto::ridFromURI($contact['photo']); @@ -279,28 +305,51 @@ class Photo extends BaseModule $url = $contact['avatar']; } elseif (!empty($contact['avatar'])) { $url = $contact['avatar']; - } elseif ($customsize <= Proxy::PIXEL_MICRO) { - $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO); - } elseif ($customsize <= Proxy::PIXEL_THUMB) { - $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB); - } else { - $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_SMALL); } - return MPhoto::createPhotoForExternalResource($url); + $mimetext = ''; + if (!empty($url)) { + $mime = ParseUrl::getContentType($url); + if (!empty($mime)) { + $mimetext = $mime[0] . '/' . $mime[1]; + } else { + Logger::info('Invalid file', ['url' => $url]); + } + if (!empty($mimetext) && ($mime[0] != 'image') && ($mimetext != 'application/octet-stream')) { + Logger::info('Unexpected Content-Type', ['mime' => $mimetext, 'url' => $url]); + $mimetext = ''; + } + } + if (empty($mimetext)) { + if ($customsize <= Proxy::PIXEL_MICRO) { + $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO); + } elseif ($customsize <= Proxy::PIXEL_THUMB) { + $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB); + } else { + $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_SMALL); + } + } + return MPhoto::createPhotoForExternalResource($url, 0, $mimetext); case "header": - $contact = Contact::getById($id, ['uid', 'url', 'header']); + $fields = ['uid', 'url', 'header', 'network', 'gsid']; + $contact = Contact::getById($id, $fields); if (empty($contact)) { return false; } If (($contact['uid'] != 0) && empty($contact['header'])) { - $contact = Contact::getByURL($contact['url'], false, ['header']); + $contact = Contact::getByURL($contact['url'], false, $fields); } if (!empty($contact['header'])) { $url = $contact['header']; } else { - $url = DI::baseUrl() . '/images/blank.png'; + $url = Contact::getDefaultHeader($contact); } return MPhoto::createPhotoForExternalResource($url); + case "banner": + $photo = MPhoto::selectFirst([], ["scale" => 3, 'uid' => $id, 'photo-type' => MPhoto::USER_BANNER]); + if (!empty($photo)) { + return $photo; + } + return MPhoto::createPhotoForExternalResource(DI::baseUrl() . '/images/friendica-banner.jpg'); case "profile": case "custom": $scale = 4;