X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FProtocol%2FActivityPub%2FTransmitter.php;h=0b80e978637092848a0e6aa5789633bf22977895;hb=7b7132971a64a92a685a5fd860fe4709dce1765a;hp=dbfd67cb0dc2474b868a4a7f878ccb995009f35c;hpb=4dacd5db44532032b8572dac02bdc7a6c1133b88;p=friendica.git diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index dbfd67cb0d..0b80e97863 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1,14 +1,30 @@ . + * */ + namespace Friendica\Protocol\ActivityPub; use Friendica\Content\Feature; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Plaintext; -use Friendica\Core\Cache\Cache; -use Friendica\Core\Config; +use Friendica\Core\Cache\Duration; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\System; @@ -37,10 +53,10 @@ require_once 'include/api.php'; require_once 'mod/share.php'; /** - * @brief ActivityPub Transmitter Protocol class + * ActivityPub Transmitter Protocol class * * To-Do: - * - Undo Announce + * @todo Undo Announce */ class Transmitter { @@ -157,7 +173,7 @@ class Transmitter $public_contact = Contact::getIdForURL($owner['url'], 0, true); $condition = ['uid' => 0, 'contact-id' => $public_contact, 'author-id' => $public_contact, - 'private' => false, 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT], + 'private' => [Item::PUBLIC, Item::UNLISTED], 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT], 'deleted' => false, 'visible' => true, 'moderated' => false]; $count = DBA::count('item', $condition); @@ -225,7 +241,7 @@ class Transmitter } $fields = ['locality', 'region', 'country-name']; - $profile = DBA::selectFirst('profile', $fields, ['uid' => $uid, 'is-default' => true]); + $profile = DBA::selectFirst('profile', $fields, ['uid' => $uid]); if (!DBA::isResult($profile)) { return []; } @@ -248,7 +264,7 @@ class Transmitter $data['name'] = $contact['name']; $data['vcard:hasAddress'] = ['@type' => 'vcard:Home', 'vcard:country-name' => $profile['country-name'], 'vcard:region' => $profile['region'], 'vcard:locality' => $profile['locality']]; - $data['summary'] = $contact['about']; + $data['summary'] = BBCode::convert($contact['about'], false); $data['url'] = $contact['url']; $data['manuallyApprovesFollowers'] = in_array($user['page-flags'], [User::PAGE_FLAGS_NORMAL, User::PAGE_FLAGS_PRVGROUP]); $data['publicKey'] = ['id' => $contact['url'] . '#main-key', @@ -363,11 +379,11 @@ class Transmitter } } - if (Config::get('system', 'ap_always_bcc')) { + if (DI::config()->get('system', 'ap_always_bcc')) { $always_bcc = true; } - if (self::isAnnounce($item) || Config::get('debug', 'total_ap_delivery')) { + if (self::isAnnounce($item) || DI::config()->get('debug', 'total_ap_delivery')) { // Will be activated in a later step $networks = Protocol::FEDERATED; } else { @@ -385,7 +401,7 @@ class Transmitter $terms = Term::tagArrayFromItemId($item['id'], [Term::MENTION, Term::IMPLICIT_MENTION]); - if (!$item['private']) { + if ($item['private'] != Item::PRIVATE) { // Directly mention the original author upon a quoted reshare. // Else just ensure that the original author receives the reshare. $announce = self::getAnnounceArray($item); @@ -397,7 +413,12 @@ class Transmitter $data = array_merge($data, self::fetchPermissionBlockFromConversation($item)); - $data['to'][] = ActivityPub::PUBLIC_COLLECTION; + // Check if the item is completely public or unlisted + if ($item['private'] == Item::PUBLIC) { + $data['to'][] = ActivityPub::PUBLIC_COLLECTION; + } else { + $data['cc'][] = ActivityPub::PUBLIC_COLLECTION; + } foreach ($terms as $term) { $profile = APContact::getByURL($term['url'], false); @@ -451,13 +472,13 @@ class Transmitter $data['to'][] = $profile['url']; } else { $data['cc'][] = $profile['url']; - if (!$item['private'] && !empty($actor_profile['followers'])) { + if (($item['private'] != Item::PRIVATE) && $item['private'] && !empty($actor_profile['followers'])) { $data['cc'][] = $actor_profile['followers']; } } } else { // Public thread parent post always are directed to the followers - if (!$item['private'] && !$forum_mode) { + if (($item['private'] != Item::PRIVATE) && !$forum_mode) { $data['cc'][] = $actor_profile['followers']; } } @@ -548,7 +569,7 @@ class Transmitter { $inboxes = []; - if (Config::get('debug', 'total_ap_delivery')) { + if (DI::config()->get('debug', 'total_ap_delivery')) { // Will be activated in a later step $networks = Protocol::FEDERATED; } else { @@ -827,7 +848,7 @@ class Transmitter $data = ActivityPub\Transmitter::createActivityFromItem($item_id); - DI::cache()->set($cachekey, $data, Cache::QUARTER_HOUR); + DI::cache()->set($cachekey, $data, Duration::QUARTER_HOUR); return $data; } @@ -1107,7 +1128,7 @@ class Transmitter } /** - * @brief Callback function to replace a Friendica style mention in a mention that is used on AP + * Callback function to replace a Friendica style mention in a mention that is used on AP * * @param array $match Matching values for the callback * @return string Replaced mention @@ -1364,7 +1385,7 @@ class Transmitter } // And finally just use the system language - return Config::get('system', 'language'); + return DI::config()->get('system', 'language'); } /** @@ -1511,14 +1532,14 @@ class Transmitter { $owner = User::getOwnerDataById($uid); - $suggestion = DBA::selectFirst('fsuggest', ['url', 'note', 'created'], ['id' => $suggestion_id]); + $suggestion = DI::fsuggest()->getById($suggestion_id); $data = ['@context' => ActivityPub::CONTEXT, 'id' => DI::baseUrl() . '/activity/' . System::createGUID(), 'type' => 'Announce', 'actor' => $owner['url'], - 'object' => $suggestion['url'], - 'content' => $suggestion['note'], + 'object' => $suggestion->url, + 'content' => $suggestion->note, 'instrument' => self::getService(), 'to' => [ActivityPub::PUBLIC_COLLECTION], 'cc' => []]; @@ -1689,7 +1710,7 @@ class Transmitter if (empty($uid)) { // Fetch the list of administrators - $admin_mail = explode(',', str_replace(' ', '', Config::get('config', 'admin_email'))); + $admin_mail = explode(',', str_replace(' ', '', DI::config()->get('config', 'admin_email'))); // We need to use some user as a sender. It doesn't care who it will send. We will use an administrator account. $condition = ['verified' => true, 'blocked' => false, 'account_removed' => false, 'account_expired' => false, 'email' => $admin_mail]; @@ -1837,7 +1858,7 @@ class Transmitter private static function prependMentions($body, array $permission_block) { - if (Config::get('system', 'disable_implicit_mentions')) { + if (DI::config()->get('system', 'disable_implicit_mentions')) { return $body; }