namespace Friendica\Model;
use Friendica\App\BaseURL;
+use Friendica\Contact\Introduction\Exception\IntroductionNotFoundException;
use Friendica\Content\Pager;
use Friendica\Content\Text\HTML;
use Friendica\Core\Hook;
const DEFAULT_AVATAR_THUMB = '/images/person-80.jpg';
const DEFAULT_AVATAR_MICRO = '/images/person-48.jpg';
- /**
- * @deprecated since version 2019.03
- * @see User::PAGE_FLAGS_NORMAL
- */
- const PAGE_NORMAL = User::PAGE_FLAGS_NORMAL;
- /**
- * @deprecated since version 2019.03
- * @see User::PAGE_FLAGS_SOAPBOX
- */
- const PAGE_SOAPBOX = User::PAGE_FLAGS_SOAPBOX;
- /**
- * @deprecated since version 2019.03
- * @see User::PAGE_FLAGS_COMMUNITY
- */
- const PAGE_COMMUNITY = User::PAGE_FLAGS_COMMUNITY;
- /**
- * @deprecated since version 2019.03
- * @see User::PAGE_FLAGS_FREELOVE
- */
- const PAGE_FREELOVE = User::PAGE_FLAGS_FREELOVE;
- /**
- * @deprecated since version 2019.03
- * @see User::PAGE_FLAGS_BLOG
- */
- const PAGE_BLOG = User::PAGE_FLAGS_BLOG;
- /**
- * @deprecated since version 2019.03
- * @see User::PAGE_FLAGS_PRVGROUP
- */
- const PAGE_PRVGROUP = User::PAGE_FLAGS_PRVGROUP;
/**
* @}
*/
];
if (!empty($contact['pending'])) {
- $intro = DBA::selectFirst('intro', ['id'], ['contact-id' => $contact['id']]);
- if (DBA::isResult($intro)) {
- $menu['follow'] = [DI::l10n()->t('Approve'), 'notifications/intros/' . $intro['id'], true];
+ try {
+ $intro = DI::intro()->selectForContact($contact['id']);
+ $menu['follow'] = [DI::l10n()->t('Approve'), 'notifications/intros/' . $intro->id, true];
+ } catch (IntroductionNotFoundException $exception) {
+ DI::logger()->error('Pending contact doesn\'t have an introduction.', ['exception' => $exception]);
}
}
}
*/
public static function checkAvatarCache(int $cid)
{
- $contact = DBA::selectFirst('contact', ['url', 'avatar', 'photo', 'thumb', 'micro'], ['id' => $cid, 'uid' => 0, 'self' => false]);
+ $contact = DBA::selectFirst('contact', ['url', 'network', 'avatar', 'photo', 'thumb', 'micro'], ['id' => $cid, 'uid' => 0, 'self' => false]);
if (!DBA::isResult($contact)) {
return;
}
- if (empty($contact['avatar']) || (!empty($contact['photo']) && !empty($contact['thumb']) && !empty($contact['micro']))) {
+ if (in_array($contact['network'], [Protocol::FEED, Protocol::MAIL]) || DI::config()->get('system', 'cache_contact_avatar')) {
+ if (!empty($contact['avatar']) && (empty($contact['photo']) || empty($contact['thumb']) || empty($contact['micro']))) {
+ Logger::info('Adding avatar cache', ['id' => $cid, 'contact' => $contact]);
+ self::updateAvatar($cid, $contact['avatar'], true);
+ return;
+ }
+ } elseif (!empty($contact['photo']) || !empty($contact['thumb']) || !empty($contact['micro'])) {
+ Logger::info('Removing avatar cache', ['id' => $cid, 'contact' => $contact]);
+ self::updateAvatar($cid, $contact['avatar'], true);
return;
}
-
- Logger::info('Adding avatar cache', ['id' => $cid, 'contact' => $contact]);
-
- self::updateAvatar($cid, $contact['avatar'], true);
}
/**
$avatar = self::getDefaultAvatar($contact, Proxy::SIZE_SMALL);
}
- if ($default_avatar && Proxy::isLocalImage($avatar)) {
- $fields = ['avatar' => $avatar, 'avatar-date' => DateTimeFormat::utcNow(),
- 'photo' => $avatar,
- 'thumb' => self::getDefaultAvatar($contact, Proxy::SIZE_THUMB),
- 'micro' => self::getDefaultAvatar($contact, Proxy::SIZE_MICRO)];
- Logger::debug('Use default avatar', ['id' => $cid, 'uid' => $uid]);
- }
+ if (in_array($contact['network'], [Protocol::FEED, Protocol::MAIL]) || DI::config()->get('system', 'cache_contact_avatar')) {
+ if ($default_avatar && Proxy::isLocalImage($avatar)) {
+ $fields = ['avatar' => $avatar, 'avatar-date' => DateTimeFormat::utcNow(),
+ 'photo' => $avatar,
+ 'thumb' => self::getDefaultAvatar($contact, Proxy::SIZE_THUMB),
+ 'micro' => self::getDefaultAvatar($contact, Proxy::SIZE_MICRO)];
+ Logger::debug('Use default avatar', ['id' => $cid, 'uid' => $uid]);
+ }
- // Use the data from the self account
- if (empty($fields)) {
- $local_uid = User::getIdForURL($contact['url']);
- if (!empty($local_uid)) {
- $fields = self::selectFirst(['avatar', 'avatar-date', 'photo', 'thumb', 'micro'], ['self' => true, 'uid' => $local_uid]);
- Logger::debug('Use owner data', ['id' => $cid, 'uid' => $uid, 'owner-uid' => $local_uid]);
+ // Use the data from the self account
+ if (empty($fields)) {
+ $local_uid = User::getIdForURL($contact['url']);
+ if (!empty($local_uid)) {
+ $fields = self::selectFirst(['avatar', 'avatar-date', 'photo', 'thumb', 'micro'], ['self' => true, 'uid' => $local_uid]);
+ Logger::debug('Use owner data', ['id' => $cid, 'uid' => $uid, 'owner-uid' => $local_uid]);
+ }
}
- }
- if (empty($fields)) {
- $update = ($contact['avatar'] != $avatar) || $force;
-
- if (!$update) {
- $data = [
- $contact['photo'] ?? '',
- $contact['thumb'] ?? '',
- $contact['micro'] ?? '',
- ];
-
- foreach ($data as $image_uri) {
- $image_rid = Photo::ridFromURI($image_uri);
- if ($image_rid && !Photo::exists(['resource-id' => $image_rid, 'uid' => $uid])) {
- Logger::debug('Regenerating avatar', ['contact uid' => $uid, 'cid' => $cid, 'missing photo' => $image_rid, 'avatar' => $contact['avatar']]);
- $update = true;
+ if (empty($fields)) {
+ $update = ($contact['avatar'] != $avatar) || $force;
+
+ if (!$update) {
+ $data = [
+ $contact['photo'] ?? '',
+ $contact['thumb'] ?? '',
+ $contact['micro'] ?? '',
+ ];
+
+ foreach ($data as $image_uri) {
+ $image_rid = Photo::ridFromURI($image_uri);
+ if ($image_rid && !Photo::exists(['resource-id' => $image_rid, 'uid' => $uid])) {
+ Logger::debug('Regenerating avatar', ['contact uid' => $uid, 'cid' => $cid, 'missing photo' => $image_rid, 'avatar' => $contact['avatar']]);
+ $update = true;
+ }
}
}
- }
- if ($update) {
- $photos = Photo::importProfilePhoto($avatar, $uid, $cid, true);
- if ($photos) {
- $fields = ['avatar' => $avatar, 'photo' => $photos[0], 'thumb' => $photos[1], 'micro' => $photos[2], 'avatar-date' => DateTimeFormat::utcNow()];
- $update = !empty($fields);
- Logger::debug('Created new cached avatars', ['id' => $cid, 'uid' => $uid, 'owner-uid' => $local_uid]);
- } else {
- $update = false;
+ if ($update) {
+ $photos = Photo::importProfilePhoto($avatar, $uid, $cid, true);
+ if ($photos) {
+ $fields = ['avatar' => $avatar, 'photo' => $photos[0], 'thumb' => $photos[1], 'micro' => $photos[2], 'avatar-date' => DateTimeFormat::utcNow()];
+ $update = !empty($fields);
+ Logger::debug('Created new cached avatars', ['id' => $cid, 'uid' => $uid, 'owner-uid' => $local_uid]);
+ } else {
+ $update = false;
+ }
}
+ } else {
+ $update = ($fields['photo'] . $fields['thumb'] . $fields['micro'] != $contact['photo'] . $contact['thumb'] . $contact['micro']) || $force;
}
} else {
- $update = ($fields['photo'] . $fields['thumb'] . $fields['micro'] != $contact['photo'] . $contact['thumb'] . $contact['micro']) || $force;
+ Photo::delete(['uid' => $uid, 'contact-id' => $cid, 'photo-type' => Photo::CONTACT_AVATAR]);
+ $fields = ['avatar' => $avatar, 'avatar-date' => DateTimeFormat::utcNow(),
+ 'photo' => '', 'thumb' => '', 'micro' => ''];
+ $update = ($avatar != $contact['avatar'] . $contact['photo'] . $contact['thumb'] . $contact['micro']) || $force;
}
if (!$update) {
}
if (($network != '') && ($ret['network'] != $network)) {
- Logger::log('Expected network ' . $network . ' does not match actual network ' . $ret['network']);
+ Logger::notice('Expected network ' . $network . ' does not match actual network ' . $ret['network']);
return $result;
}
if (DBA::isResult($contact)) {
// update contact
- $new_relation = (($contact['rel'] == self::FOLLOWER) ? self::FRIEND : self::SHARING);
+ $new_relation = (in_array($contact['rel'], [self::FOLLOWER, self::FRIEND]) ? self::FRIEND : self::SHARING);
$fields = ['rel' => $new_relation, 'subhub' => $subhub, 'readonly' => false];
self::update($fields, ['id' => $contact['id']]);
}
} elseif ($protocol == Protocol::DIASPORA) {
$ret = Diaspora::sendShare($owner, $contact);
- Logger::log('share returns: ' . $ret);
+ Logger::notice('share returns: ' . $ret);
} elseif ($protocol == Protocol::ACTIVITYPUB) {
$activity_id = ActivityPub\Transmitter::activityIDFromContact($contact_id);
if (empty($activity_id)) {
}
$ret = ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $uid, $activity_id);
- Logger::log('Follow returns: ' . $ret);
+ Logger::notice('Follow returns: ' . $ret);
}
}
} else {
// send email notification to owner?
if (DBA::exists('contact', ['nurl' => Strings::normaliseLink($url), 'uid' => $importer['uid'], 'pending' => true])) {
- Logger::log('ignoring duplicated connection request from pending contact ' . $url);
+ Logger::notice('ignoring duplicated connection request from pending contact ' . $url);
return null;
}
$user = DBA::selectFirst('user', $fields, ['uid' => $importer['uid']]);
if (DBA::isResult($user) && !in_array($user['page-flags'], [User::PAGE_FLAGS_SOAPBOX, User::PAGE_FLAGS_FREELOVE, User::PAGE_FLAGS_COMMUNITY])) {
// create notification
- $hash = Strings::getRandomHex();
-
if (is_array($contact_record)) {
- DBA::insert('intro', ['uid' => $importer['uid'], 'contact-id' => $contact_record['id'],
- 'blocked' => false, 'knowyou' => false, 'note' => $note,
- 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow()]);
+ $intro = DI::introFactory()->createNew(
+ $importer['uid'],
+ $contact_record['id'],
+ $note
+ );
+ DI::intro()->save($intro);
}
Group::addMember(User::getDefaultGroup($importer['uid'], $contact_record["network"]), $contact_record['id']);
$contacts = DBA::select('contact', ['id', 'uid', 'name', 'url', 'bd'], $condition);
while ($contact = DBA::fetch($contacts)) {
- Logger::log('update_contact_birthday: ' . $contact['bd']);
+ Logger::notice('update_contact_birthday: ' . $contact['bd']);
$nextbd = DateTimeFormat::utcNow('Y') . substr($contact['bd'], 4);