namespace Friendica\Model;
use Friendica\Contact\Avatar;
+use Friendica\Contact\Header;
use Friendica\Contact\Introduction\Exception\IntroductionNotFoundException;
+use Friendica\Contact\LocalRelationship\Entity\LocalRelationship;
use Friendica\Content\Conversation as ConversationContent;
use Friendica\Content\Pager;
use Friendica\Content\Text\HTML;
* @}
*/
- const MIRROR_DEACTIVATED = 0;
- const MIRROR_FORWARDED = 1; // Deprecated, now does the same like MIRROR_OWN_POST
- const MIRROR_OWN_POST = 2;
- const MIRROR_NATIVE_RESHARE = 3;
+ /** @deprecated Use Entity\LocalRelationship::MIRROR_DEACTIVATED instead */
+ const MIRROR_DEACTIVATED = LocalRelationship::MIRROR_DEACTIVATED;
+ /** @deprecated Now does the same as MIRROR_OWN_POST */
+ const MIRROR_FORWARDED = 1;
+ /** @deprecated Use Entity\LocalRelationship::MIRROR_OWN_POST instead */
+ const MIRROR_OWN_POST = LocalRelationship::MIRROR_OWN_POST;
+ /** @deprecated Use Entity\LocalRelationship::MIRROR_NATIVE_RESHARE instead */
+ const MIRROR_NATIVE_RESHARE = LocalRelationship::MIRROR_NATIVE_RESHARE;
/**
* @param array $fields Array of selected fields, empty for all
Contact\User::insertForContactArray($contact);
+ if ((empty($contact['baseurl']) || empty($contact['gsid'])) && Probe::isProbable($contact['network'])) {
+ Logger::debug('Update missing baseurl', ['id' => $contact['id'], 'url' => $contact['url'], 'callstack' => System::callstack(4, 0, true)]);
+ UpdateContact::add(['priority' => Worker::PRIORITY_MEDIUM, 'dont_fork' => true], $contact['id']);
+ }
+
return $contact['id'];
}
return self::isSharing($cid, $uid, $strict);
}
+ /**
+ * Checks if the provided public contact id has got followers on this system
+ *
+ * @param integer $cid
+ * @return boolean
+ */
+ public static function hasFollowers(int $cid): bool
+ {
+ return DBA::exists('account-user-view', ["`pid` = ? AND `uid` != ? AND `rel` IN (?, ?)", $cid, 0, self::SHARING, self::FRIEND]);
+ }
+
/**
* Get the basepath for a given contact link
*
$user = DBA::selectFirst(
'user',
['uid', 'username', 'nickname', 'pubkey', 'prvkey'],
- ['uid' => $uid, 'account_expired' => false]
+ ['uid' => $uid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]
);
if (!DBA::isResult($user)) {
return false;
/**
* Updates the self-contact for the provided user id
*
- * @param int $uid
- * @param bool $update_avatar Force the avatar update
+ * @param int $uid
+ * @param bool $update_avatar Force the avatar update
* @return bool "true" if updated
- * @throws HTTPException\InternalServerErrorException
+ * @throws \Exception
*/
public static function updateSelfFromUserID(int $uid, bool $update_avatar = false): bool
{
return false;
}
- $fields = ['uid', 'nickname', 'page-flags', 'account-type', 'prvkey', 'pubkey'];
- $user = DBA::selectFirst('user', $fields, ['uid' => $uid, 'account_expired' => false]);
+ $fields = ['uid', 'username', 'nickname', 'page-flags', 'account-type', 'prvkey', 'pubkey'];
+ $user = DBA::selectFirst('user', $fields, ['uid' => $uid, 'verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false]);
if (!DBA::isResult($user)) {
return false;
}
$url = DI::baseUrl() . '/profile/' . $user['nickname'];
$fields = [
- 'name' => $profile['name'],
+ 'name' => $user['username'],
'nick' => $user['nickname'],
'avatar-date' => $self['avatar-date'],
'location' => Profile::formatLocation($profile),
'confirm' => DI::baseUrl() . '/dfrn_confirm/' . $user['nickname'],
];
-
$avatar = Photo::selectFirst(['resource-id', 'type'], ['uid' => $uid, 'profile' => true]);
if (DBA::isResult($avatar)) {
if ($update_avatar) {
}
$pm_url = '';
+ $mention_url = '';
$status_link = '';
$photos_link = '';
$pm_url = 'message/new/' . $contact['id'];
}
+ if ($contact['contact-type'] == Contact::TYPE_COMMUNITY) {
+ $mention_label = DI::l10n()->t('Post to group');
+ $mention_url = 'compose/0?body=!' . $contact['addr'];
+ } else {
+ $mention_label = DI::l10n()->t('Mention');
+ $mention_url = 'compose/0?body=@' . $contact['addr'];
+ }
+
$contact_url = 'contact/' . $contact['id'];
- $posts_link = 'contact/' . $contact['id'] . '/conversations';
+
+ if ($contact['contact-type'] == Contact::TYPE_COMMUNITY) {
+ $network_label = DI::l10n()->t('View group');
+ $network_url = 'network/group/' . $contact['id'];
+ } else {
+ $network_label = DI::l10n()->t('Network Posts');
+ $network_url = 'contact/' . $contact['id'] . '/conversations';
+ }
$follow_link = '';
$unfollow_link = '';
* Menu array:
* "name" => [ "Label", "link", (bool)Should the link opened in a new tab? ]
*/
+
+
if (empty($contact['uid'])) {
$menu = [
'profile' => [DI::l10n()->t('View Profile'), $profile_link, true],
- 'network' => [DI::l10n()->t('Network Posts'), $posts_link, false],
+ 'network' => [$network_label, $network_url, false],
'edit' => [DI::l10n()->t('View Contact'), $contact_url, false],
'follow' => [DI::l10n()->t('Connect/Follow'), $follow_link, true],
'unfollow' => [DI::l10n()->t('Unfollow'), $unfollow_link, true],
+ 'mention' => [DI::l10n()->t('Mention'), DI::l10n()->t('Post to group'), $mention_url, false],
+ 'group' => [DI::l10n()->t('View group'), $group_link, $contact['forum'], true],
+ 'self' => [$contact['self'] ?? false, true],
];
} else {
$menu = [
'status' => [DI::l10n()->t('View Status'), $status_link, true],
'profile' => [DI::l10n()->t('View Profile'), $profile_link, true],
'photos' => [DI::l10n()->t('View Photos'), $photos_link, true],
- 'network' => [DI::l10n()->t('Network Posts'), $posts_link, false],
+ 'network' => [$network_label, $network_url, false],
'edit' => [DI::l10n()->t('View Contact'), $contact_url, false],
'pm' => [DI::l10n()->t('Send PM'), $pm_url, false],
'follow' => [DI::l10n()->t('Connect/Follow'), $follow_link, true],
'unfollow' => [DI::l10n()->t('Unfollow'), $unfollow_link, true],
+ 'mention' => [$mention_label, $mention_url, false],
];
if (!empty($contact['pending'])) {
$fields = [
'uid' => $uid,
'url' => $data['url'],
+ 'baseurl' => $data['baseurl'] ?? '',
'nurl' => Strings::normaliseLink($data['url']),
'network' => $data['network'],
'created' => DateTimeFormat::utcNow(),
switch ($platform) {
case 'friendica':
case 'friendika':
- /**
- * Picture credits
- * @author Lostinlight <https://mastodon.xyz/@lightone>
- * @license CC0 https://creativecommons.org/share-your-work/public-domain/cc0/
- * @link https://gitlab.com/lostinlight/per_aspera_ad_astra/-/blob/master/friendica-404/friendica-promo-bubbles.jpg
- */
- $header = DI::baseUrl() . '/images/friendica-banner.jpg';
+ $header = DI::baseUrl() . (new Header(DI::config()))->getMastodonBannerPath();
break;
case 'diaspora':
/**
return false;
}
- $fields = ['id', 'url', 'name', 'nick', 'avatar', 'photo', 'network', 'blocked'];
+ $fields = ['id', 'url', 'name', 'nick', 'avatar', 'photo', 'network', 'blocked', 'baseurl'];
$pub_contact = DBA::selectFirst('contact', $fields, ['id' => $datarray['author-id']]);
if (!DBA::isResult($pub_contact)) {
// Should never happen
'created' => DateTimeFormat::utcNow(),
'url' => $url,
'nurl' => Strings::normaliseLink($url),
+ 'baseurl' => $pub_contact['baseurl'] ?? '',
'name' => $name,
'nick' => $nick,
'network' => $network,