*/
public static function getContacts($owner, $rel, $module, $page = null)
{
- $condition = ['rel' => $rel, 'network' => Protocol::FEDERATED, 'uid' => $owner['uid'],
- 'self' => false, 'deleted' => false, 'hidden' => false, 'archive' => false, 'pending' => false];
- $count = DBA::count('contact', $condition);
+ $parameters = [
+ 'rel' => $rel,
+ 'uid' => $owner['uid'],
+ 'self' => false,
+ 'deleted' => false,
+ 'hidden' => false,
+ 'archive' => false,
+ 'pending' => false
+ ];
+ $condition = DBA::buildCondition($parameters);
+
+ $sql = "SELECT COUNT(*) as `count`
+ FROM `contact`
+ JOIN `apcontact` ON `apcontact`.`url` = `contact`.`url`
+ " . $condition;
+
+ $contacts = DBA::fetchFirst($sql, ...$parameters);
$modulePath = '/' . $module . '/';
$data = ['@context' => ActivityPub::CONTEXT];
$data['id'] = DI::baseUrl() . $modulePath . $owner['nickname'];
$data['type'] = 'OrderedCollection';
- $data['totalItems'] = $count;
+ $data['totalItems'] = $contacts['count'];
// When we hide our friends we will only show the pure number but don't allow more.
$profile = Profile::getByUID($owner['uid']);
$data['type'] = 'OrderedCollectionPage';
$list = [];
- $contacts = DBA::select('contact', ['url'], $condition, ['limit' => [($page - 1) * 100, 100]]);
+ $sql = "SELECT `contact`.`url`
+ FROM `contact`
+ JOIN `apcontact` ON `apcontact`.`url` = `contact`.`url`
+ " . $condition . "
+ LIMIT ?, ?";
+
+ $parameters[] = ($page - 1) * 100;
+ $parameters[] = 100;
+
+ $contacts = DBA::p($sql, ...$parameters);
while ($contact = DBA::fetch($contacts)) {
$list[] = $contact['url'];
}
continue;
}
- if ($receiver == $item_profile['followers']) {
+ if ($item_profile && $receiver == $item_profile['followers']) {
$inboxes = array_merge($inboxes, self::fetchTargetInboxesforUser($uid, $personal));
} else {
if (Contact::isLocal($receiver)) {
$data = [];
}
- $data['id'] = $mail['uri'] . '#Create';
+ $data['id'] = $mail['uri'] . '/Create';
$data['type'] = 'Create';
$data['actor'] = $mail['author-link'];
$data['published'] = DateTimeFormat::utc($mail['created'] . '+00:00', DateTimeFormat::ATOM);
$data = [];
}
- $data['id'] = $item['uri'] . '#' . $type;
+ $data['id'] = $item['uri'] . '/' . $type;
$data['type'] = $type;
if (Item::isForumPost($item) && ($type != 'Announce')) {
{
$event = [];
$event['name'] = $item['event-summary'];
- $event['content'] = BBCode::convert($item['event-desc'], false, 9);
+ $event['content'] = BBCode::convert($item['event-desc'], false, BBCode::ACTIVITYPUB);
$event['startTime'] = DateTimeFormat::utc($item['event-start'] . '+00:00', DateTimeFormat::ATOM);
if (!$item['event-nofinish']) {
$body = $item['body'];
if (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) {
- $body = self::prependMentions($body, $permission_block);
+ $body = self::prependMentions($body, $item['uri-id']);
}
if ($type == 'Note') {
$regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
$body = preg_replace_callback($regexp, ['self', 'mentionCallback'], $body);
- $data['content'] = BBCode::convert($body, false, 9);
+ $data['content'] = BBCode::convert($body, false, BBCode::ACTIVITYPUB);
}
// The regular "content" field does contain a minimized HTML. This is done since systems like
HTTPSignature::transmit($signed, $profile['inbox'], $uid);
}
- private static function prependMentions($body, array $permission_block)
+ private static function prependMentions($body, int $uriid)
{
- if (DI::config()->get('system', 'disable_implicit_mentions')) {
- return $body;
- }
-
$mentions = [];
- foreach ($permission_block['to'] as $profile_url) {
- $profile = Contact::getDetailsByURL($profile_url);
+ foreach (Tag::getByURIId($uriid, [Tag::IMPLICIT_MENTION]) as $tag) {
+ $profile = Contact::getDetailsByURL($tag['url']);
if (!empty($profile['addr'])
&& $profile['contact-type'] != Contact::TYPE_COMMUNITY
&& !strstr($body, $profile['addr'])
- && !strstr($body, $profile_url)
+ && !strstr($body, $tag['url'])
) {
- $mentions[] = '@[url=' . $profile_url . ']' . $profile['nick'] . '[/url]';
+ $mentions[] = '@[url=' . $tag['url'] . ']' . $profile['nick'] . '[/url]';
}
}