Merge pull request #8938 from annando/get-avatar

Fetch photo fields, ensuring that they are filled
This commit is contained in:
Hypolite Petovan 2020-07-28 11:41:48 -04:00 committed by GitHub
commit 418c2edb50
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 82 additions and 33 deletions

View file

@ -26,8 +26,8 @@ use Friendica\Core\Renderer;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Model\Contact;
use Friendica\Module; use Friendica\Module;
use Friendica\Util\Proxy as ProxyUtils;
use Friendica\Util\Strings; use Friendica\Util\Strings;
function common_content(App $a) function common_content(App $a)
@ -136,7 +136,7 @@ function common_content(App $a)
'url' => Model\Contact::magicLink($common_friend['url']), 'url' => Model\Contact::magicLink($common_friend['url']),
'itemurl' => ($contact_details['addr'] ?? '') ?: $common_friend['url'], 'itemurl' => ($contact_details['addr'] ?? '') ?: $common_friend['url'],
'name' => $contact_details['name'], 'name' => $contact_details['name'],
'thumb' => ProxyUtils::proxifyUrl($contact_details['thumb'], false, ProxyUtils::SIZE_THUMB), 'thumb' => Contact::getThumb($contact_details),
'img_hover' => $contact_details['name'], 'img_hover' => $contact_details['name'],
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],

View file

@ -27,7 +27,6 @@ use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Util\Proxy as ProxyUtils;
/** /**
* Controller for /match. * Controller for /match.
@ -111,7 +110,7 @@ function match_content(App $a)
'tags' => $contact_details['keywords'] ?? '', 'tags' => $contact_details['keywords'] ?? '',
'about' => $contact_details['about'] ?? '', 'about' => $contact_details['about'] ?? '',
'account_type' => Contact::getAccountType($contact_details), 'account_type' => Contact::getAccountType($contact_details),
'thumb' => ProxyUtils::proxifyUrl($profile->photo, false, ProxyUtils::SIZE_THUMB), 'thumb' => Contact::getThumb($contact_details, $profile->photo),
'conntxt' => DI::l10n()->t('Connect'), 'conntxt' => DI::l10n()->t('Connect'),
'connlnk' => $connlnk, 'connlnk' => $connlnk,
'img_hover' => $profile->tags, 'img_hover' => $profile->tags,

View file

@ -20,7 +20,6 @@
*/ */
use Friendica\App; use Friendica\App;
use Friendica\Content\Feature;
use Friendica\Content\ForumManager; use Friendica\Content\ForumManager;
use Friendica\Content\Nav; use Friendica\Content\Nav;
use Friendica\Content\Pager; use Friendica\Content\Pager;
@ -29,9 +28,7 @@ use Friendica\Content\Text\HTML;
use Friendica\Core\ACL; use Friendica\Core\ACL;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
@ -41,7 +38,6 @@ use Friendica\Model\Post\Category;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Module\Security\Login; use Friendica\Module\Security\Login;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Proxy as ProxyUtils;
use Friendica\Util\Strings; use Friendica\Util\Strings;
function network_init(App $a) function network_init(App $a)
@ -587,7 +583,7 @@ function networkThreadedView(App $a, $update, $parent)
'id' => 'network', 'id' => 'network',
'name' => $contact['name'], 'name' => $contact['name'],
'itemurl' => ($contact['addr'] ?? '') ?: $contact['nurl'], 'itemurl' => ($contact['addr'] ?? '') ?: $contact['nurl'],
'thumb' => ProxyUtils::proxifyUrl($contact['thumb'], false, ProxyUtils::SIZE_THUMB), 'thumb' => Contact::getThumb($contact),
'details' => $contact['location'], 'details' => $contact['location'],
]; ];

View file

@ -34,7 +34,6 @@ use Friendica\Model\Verb;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Temporal; use Friendica\Util\Temporal;
use Friendica\Util\Proxy as ProxyUtils;
use Friendica\Util\XML; use Friendica\Util\XML;
/** /**
@ -329,11 +328,7 @@ function ping_init(App $a)
if (DBA::isResult($notifs)) { if (DBA::isResult($notifs)) {
foreach ($notifs as $notif) { foreach ($notifs as $notif) {
$contact = Contact::getByURL($notif['url'], false, ['micro']); $contact = Contact::getByURL($notif['url'], false, ['micro']);
if (isset($contact['micro'])) { $notif['photo'] = Contact::getMicro($contact, $notif['photo']);
$notif['photo'] = ProxyUtils::proxifyUrl($contact['micro'], false, ProxyUtils::SIZE_MICRO);
} else {
$notif['photo'] = ProxyUtils::proxifyUrl($notif['photo'], false, ProxyUtils::SIZE_MICRO);
}
$local_time = DateTimeFormat::local($notif['date']); $local_time = DateTimeFormat::local($notif['date']);

View file

@ -43,6 +43,7 @@ use Friendica\Protocol\Salmon;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Images; use Friendica\Util\Images;
use Friendica\Util\Network; use Friendica\Util\Network;
use Friendica\Util\Proxy;
use Friendica\Util\Strings; use Friendica\Util\Strings;
/** /**
@ -1787,13 +1788,79 @@ class Contact
self::updateAvatar($cid, $contact['avatar'], true); self::updateAvatar($cid, $contact['avatar'], true);
} }
/**
* Return the photo path for a given contact array in the given size
*
* @param array $contact contact array
* @param string $field Fieldname of the photo in the contact array
* @param string $default Default path when no picture had been found
* @param string $size Size of the avatar picture
* @param string $avatar Avatar path that is displayed when no photo had been found
* @return string photo path
*/
private static function getAvatarPath(array $contact, string $field, string $default, string $size, string $avatar)
{
if (!empty($contact)) {
$contact = self::checkAvatarCacheByArray($contact);
if (!empty($contact[$field])) {
$avatar = $contact[$field];
}
}
if (empty($avatar)) {
return $default;
}
if (Proxy::isLocalImage($avatar)) {
return $avatar;
} else {
return Proxy::proxifyUrl($avatar, false, $size);
}
}
/**
* Return the photo path for a given contact array
*
* @param array $contact Contact array
* @param string $avatar Avatar path that is displayed when no photo had been found
* @return string photo path
*/
public static function getPhoto(array $contact, string $avatar = '')
{
return self::getAvatarPath($contact, 'photo', DI::baseUrl() . '/images/person-300.jpg', Proxy::SIZE_SMALL, $avatar);
}
/**
* Return the photo path (thumb size) for a given contact array
*
* @param array $contact Contact array
* @param string $avatar Avatar path that is displayed when no photo had been found
* @return string photo path
*/
public static function getThumb(array $contact, string $avatar = '')
{
return self::getAvatarPath($contact, 'thumb', DI::baseUrl() . '/images/person-80.jpg', Proxy::SIZE_THUMB, $avatar);
}
/**
* Return the photo path (micro size) for a given contact array
*
* @param array $contact Contact array
* @param string $avatar Avatar path that is displayed when no photo had been found
* @return string photo path
*/
public static function getMicro(array $contact, string $avatar = '')
{
return self::getAvatarPath($contact, 'micro', DI::baseUrl() . '/images/person-48.jpg', Proxy::SIZE_MICRO, $avatar);
}
/** /**
* Check the given contact array for avatar cache fields * Check the given contact array for avatar cache fields
* *
* @param array $contact * @param array $contact
* @return array contact array with avatar cache fields * @return array contact array with avatar cache fields
*/ */
public static function checkAvatarCacheByArray(array $contact) private static function checkAvatarCacheByArray(array $contact)
{ {
$update = false; $update = false;
$contact_fields = []; $contact_fields = [];

View file

@ -28,7 +28,6 @@ use Friendica\Core\Renderer;
use Friendica\DI; use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Util\Proxy as ProxyUtils;
/** /**
* This module shows all public friends of the selected contact * This module shows all public friends of the selected contact
@ -99,7 +98,7 @@ class AllFriends extends BaseModule
'url' => Model\Contact::magicLinkbyId($friend['id'], $friend['url']), 'url' => Model\Contact::magicLinkbyId($friend['id'], $friend['url']),
'itemurl' => ($contactDetails['addr'] ?? '') ?: $friend['url'], 'itemurl' => ($contactDetails['addr'] ?? '') ?: $friend['url'],
'name' => $contactDetails['name'], 'name' => $contactDetails['name'],
'thumb' => ProxyUtils::proxifyUrl($contactDetails['thumb'], false, ProxyUtils::SIZE_THUMB), 'thumb' => Model\Contact::getThumb($contactDetails),
'img_hover' => $contactDetails['name'], 'img_hover' => $contactDetails['name'],
'details' => $contactDetails['location'], 'details' => $contactDetails['location'],
'tags' => $contactDetails['keywords'], 'tags' => $contactDetails['keywords'],

View file

@ -36,7 +36,6 @@ use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model; use Friendica\Model;
use Friendica\Model\Contact as ModelContact;
use Friendica\Module\Security\Login; use Friendica\Module\Security\Login;
use Friendica\Network\HTTPException\BadRequestException; use Friendica\Network\HTTPException\BadRequestException;
use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotFoundException;
@ -279,8 +278,6 @@ class Contact extends BaseModule
if ($contact['network'] == Protocol::PHANTOM) { if ($contact['network'] == Protocol::PHANTOM) {
$contact = false; $contact = false;
} }
$contact = ModelContact::checkAvatarCacheByArray($contact);
} }
if (DBA::isResult($contact)) { if (DBA::isResult($contact)) {
@ -318,7 +315,7 @@ class Contact extends BaseModule
$vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/vcard.tpl'), [ $vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/vcard.tpl'), [
'$name' => $contact['name'], '$name' => $contact['name'],
'$photo' => $contact['photo'], '$photo' => Model\Contact::getPhoto($contact),
'$url' => Model\Contact::magicLinkByContact($contact, $contact['url']), '$url' => Model\Contact::magicLinkByContact($contact, $contact['url']),
'$addr' => $contact['addr'] ?? '', '$addr' => $contact['addr'] ?? '',
'$network_link' => $network_link, '$network_link' => $network_link,
@ -614,7 +611,7 @@ class Contact extends BaseModule
'$notify' => ['notify', DI::l10n()->t('Notification for new posts'), ($contact['notify_new_posts'] == 1), DI::l10n()->t('Send a notification of every new post of this contact')], '$notify' => ['notify', DI::l10n()->t('Notification for new posts'), ($contact['notify_new_posts'] == 1), DI::l10n()->t('Send a notification of every new post of this contact')],
'$fetch_further_information' => $fetch_further_information, '$fetch_further_information' => $fetch_further_information,
'$ffi_keyword_denylist' => ['ffi_keyword_denylist', DI::l10n()->t('Keyword Deny List'), $contact['ffi_keyword_denylist'], DI::l10n()->t('Comma separated list of keywords that should not be converted to hashtags, when "Fetch information and keywords" is selected')], '$ffi_keyword_denylist' => ['ffi_keyword_denylist', DI::l10n()->t('Keyword Deny List'), $contact['ffi_keyword_denylist'], DI::l10n()->t('Comma separated list of keywords that should not be converted to hashtags, when "Fetch information and keywords" is selected')],
'$photo' => $contact['photo'], '$photo' => Model\Contact::getPhoto($contact),
'$name' => $contact['name'], '$name' => $contact['name'],
'$dir_icon' => $dir_icon, '$dir_icon' => $dir_icon,
'$sparkle' => $sparkle, '$sparkle' => $sparkle,

View file

@ -27,10 +27,8 @@ use Friendica\Core\Session;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\GContact;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Util\Strings; use Friendica\Util\Strings;
use Friendica\Util\Proxy;
/** /**
* Asynchronous HTML fragment provider for frio contact hovercards * Asynchronous HTML fragment provider for frio contact hovercards
@ -88,7 +86,7 @@ class Hovercard extends BaseModule
'name' => $contact['name'], 'name' => $contact['name'],
'nick' => $contact['nick'], 'nick' => $contact['nick'],
'addr' => $contact['addr'] ?: $contact['url'], 'addr' => $contact['addr'] ?: $contact['url'],
'thumb' => Proxy::proxifyUrl($contact['thumb'], false, Proxy::SIZE_THUMB), 'thumb' => Contact::getThumb($contact),
'url' => Contact::magicLink($contact['url']), 'url' => Contact::magicLink($contact['url']),
'nurl' => $contact['nurl'], 'nurl' => $contact['nurl'],
'location' => $contact['location'], 'location' => $contact['location'],

View file

@ -32,7 +32,6 @@ use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Util\Proxy as ProxyUtils;
use Friendica\Util\Strings; use Friendica\Util\Strings;
/** /**
@ -168,7 +167,7 @@ class Directory extends BaseModule
'id' => $contact['id'], 'id' => $contact['id'],
'url' => Contact::magicLink($profile_link), 'url' => Contact::magicLink($profile_link),
'itemurl' => $itemurl, 'itemurl' => $itemurl,
'thumb' => ProxyUtils::proxifyUrl($contact[$photo_size], false, ProxyUtils::SIZE_THUMB), 'thumb' => Contact::getThumb($contact),
'img_hover' => $contact['name'], 'img_hover' => $contact['name'],
'name' => $contact['name'], 'name' => $contact['name'],
'details' => $details, 'details' => $details,

View file

@ -32,7 +32,6 @@ use Friendica\DI;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Profile; use Friendica\Model\Profile;
use Friendica\Module\BaseProfile; use Friendica\Module\BaseProfile;
use Friendica\Util\Proxy as ProxyUtils;
class Contacts extends BaseProfile class Contacts extends BaseProfile
{ {
@ -109,7 +108,7 @@ class Contacts extends BaseProfile
'id' => $contact['id'], 'id' => $contact['id'],
'img_hover' => DI::l10n()->t('Visit %s\'s profile [%s]', $contact_details['name'], $contact['url']), 'img_hover' => DI::l10n()->t('Visit %s\'s profile [%s]', $contact_details['name'], $contact['url']),
'photo_menu' => Contact::photoMenu($contact), 'photo_menu' => Contact::photoMenu($contact),
'thumb' => ProxyUtils::proxifyUrl($contact_details['thumb'], false, ProxyUtils::SIZE_THUMB), 'thumb' => Contact::getThumb($contact_details),
'name' => substr($contact_details['name'], 0, 20), 'name' => substr($contact_details['name'], 0, 20),
'username' => $contact_details['name'], 'username' => $contact_details['name'],
'details' => $contact_details['location'], 'details' => $contact_details['location'],

View file

@ -294,7 +294,7 @@ class Acl extends BaseModule
foreach ($r as $g) { foreach ($r as $g) {
$entry = [ $entry = [
'type' => 'c', 'type' => 'c',
'photo' => ProxyUtils::proxifyUrl($g['micro'], false, ProxyUtils::SIZE_MICRO), 'photo' => Contact::getMicro($g),
'name' => htmlspecialchars($g['name']), 'name' => htmlspecialchars($g['name']),
'id' => intval($g['id']), 'id' => intval($g['id']),
'network' => $g['network'], 'network' => $g['network'],
@ -355,7 +355,7 @@ class Acl extends BaseModule
if (count($contact) > 0) { if (count($contact) > 0) {
$unknown_contacts[] = [ $unknown_contacts[] = [
'type' => 'c', 'type' => 'c',
'photo' => ProxyUtils::proxifyUrl($contact['micro'], false, ProxyUtils::SIZE_MICRO), 'photo' => Contact::getMicro($contact),
'name' => htmlspecialchars($contact['name']), 'name' => htmlspecialchars($contact['name']),
'id' => intval($contact['cid']), 'id' => intval($contact['cid']),
'network' => $contact['network'], 'network' => $contact['network'],

View file

@ -170,7 +170,7 @@ class Proxy
* @return boolean * @return boolean
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
private static function isLocalImage($url) public static function isLocalImage($url)
{ {
if (substr($url, 0, 1) == '/') { if (substr($url, 0, 1) == '/') {
return true; return true;