From 81aaacc67dad3216400f089a21fc33fcabe61b97 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 29 Jul 2022 14:17:53 +0000 Subject: [PATCH 1/7] Improvements for the "post-reason" --- mod/item.php | 2 +- src/Content/Conversation.php | 21 ++++++++++++--- src/Model/Item.php | 27 +++++++++---------- src/Module/Api/Mastodon/Statuses/Bookmark.php | 2 +- .../Api/Mastodon/Statuses/Unbookmark.php | 2 +- src/Module/Item/Star.php | 2 +- src/Protocol/ActivityPub/Delivery.php | 5 +--- src/Protocol/ActivityPub/Transmitter.php | 26 +++++++----------- src/Worker/Notifier.php | 2 +- 9 files changed, 46 insertions(+), 43 deletions(-) diff --git a/mod/item.php b/mod/item.php index ce4cd45ca..26dcef91c 100644 --- a/mod/item.php +++ b/mod/item.php @@ -138,7 +138,7 @@ function item_post(App $a) { // When commenting on a public post then store the post for the current user // This enables interaction like starring and saving into folders if ($toplevel_item['uid'] == 0) { - $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user()); + $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user(), ['post-reason' => Item::PR_ACTIVITY]); Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $uid, 'stored' => $stored]); if ($stored) { $toplevel_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $stored]); diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 5bb47b23b..36fd38915 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -857,7 +857,7 @@ class Conversation $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('You are following %s.', $row['author-name'])]; break; case ItemModel::PR_TAG: - $row['direction'] = ['direction' => 4, 'title' => $this->l10n->t('Tagged')]; + $row['direction'] = ['direction' => 4, 'title' => $this->l10n->t('You subscribed to one or more tags in this post.')]; break; case ItemModel::PR_ANNOUNCEMENT: if (!empty($row['causer-id']) && $this->pConfig->get(local_user(), 'system', 'display_resharer')) { @@ -878,17 +878,30 @@ class Conversation $row['direction'] = ['direction' => 5, 'title' => $this->l10n->t('%s is participating in this thread.', $row['author-name'])]; break; case ItemModel::PR_STORED: - $row['direction'] = ['direction' => 8, 'title' => $this->l10n->t('Stored')]; + $row['direction'] = ['direction' => 8, 'title' => $this->l10n->t('Stored for general reasons')]; break; case ItemModel::PR_GLOBAL: - $row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global')]; + $row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global post')]; break; case ItemModel::PR_RELAY: - $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Relayed') : $this->l10n->t('Relayed by %s <%s>', $row['causer-name'], $row['causer-link']))]; + $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Send via an relay server') : $this->l10n->t('Send via the relay server %s <%s>', $row['causer-name'], $row['causer-link']))]; break; case ItemModel::PR_FETCHED: $row['direction'] = ['direction' => 2, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Fetched') : $this->l10n->t('Fetched because of %s <%s>', $row['causer-name'], $row['causer-link']))]; break; + case ItemModel::PR_COMPLETION: + $row['direction'] = ['direction' => 2, 'title' => $this->l10n->t('Stored because of a child post to complete this thread.')]; + break; + case ItemModel::PR_DIRECT: + $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Local delivery')]; + break; + case ItemModel::PR_ACTIVITY: + $row['direction'] = ['direction' => 2, 'title' => $this->l10n->t('Stored because of your activity (like, comment, star, ...)')]; + break; + case ItemModel::PR_DISTRIBUTE: + $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Distributed')]; + break; + } $row['thr-parent-row'] = $thr_parent; diff --git a/src/Model/Item.php b/src/Model/Item.php index 55022519a..a465e8c93 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -44,6 +44,7 @@ use Friendica\Util\Proxy; use Friendica\Util\Strings; use Friendica\Util\Temporal; use Friendica\Worker\Delivery; +use GuzzleHttp\Psr7\Uri; use LanguageDetection\Language; class Item @@ -74,6 +75,10 @@ class Item const PR_GLOBAL = 73; const PR_RELAY = 74; const PR_FETCHED = 75; + const PR_COMPLETION = 76; + const PR_DIRECT = 77; + const PR_ACTIVITY = 78; + const PR_DISTRIBUTE = 79; // system.accept_only_sharer setting values const COMPLETION_NONE = 1; @@ -688,9 +693,9 @@ class Item $parent = Post::selectFirst($fields, $condition, $params); if (!DBA::isResult($parent) && Post::exists(['uri-id' => [$item['thr-parent-id'], $item['parent-uri-id']], 'uid' => 0])) { - $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid']); + $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]); if (!$stored && ($item['thr-parent-id'] != $item['parent-uri-id'])) { - $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']); + $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]); } if ($stored) { Logger::info('Stored thread parent item for user', ['uri-id' => $item['thr-parent-id'], 'uid' => $item['uid'], 'stored' => $stored]); @@ -714,7 +719,7 @@ class Item $toplevel_parent = Post::selectFirst($fields, $condition, $params); if (!DBA::isResult($toplevel_parent) && $item['origin']) { - $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']); + $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]); Logger::info('Stored parent item for user', ['uri-id' => $item['parent-uri-id'], 'uid' => $item['uid'], 'stored' => $stored]); $toplevel_parent = Post::selectFirst($fields, $condition, $params); } @@ -1355,14 +1360,8 @@ class Item $uids = Tag::getUIDListByURIId($item['uri-id']); foreach ($uids as $uid) { - if (Contact::isSharing($item['author-id'], $uid)) { - $fields = []; - } else { - $fields = ['post-reason' => self::PR_TAG]; - } - - $stored = self::storeForUserByUriId($item['uri-id'], $uid, $fields); - Logger::info('Stored item for users', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'fields' => $fields, 'stored' => $stored]); + $stored = self::storeForUserByUriId($item['uri-id'], $uid, ['post-reason' => self::PR_TAG]); + Logger::info('Stored item for users', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'stored' => $stored]); } } @@ -1454,6 +1453,7 @@ class Item if ($origin_uid == $uid) { $item['diaspora_signed_text'] = $signed_text; } + $item['post-reason'] = self::PR_DISTRIBUTE; self::storeForUser($item, $uid); } } @@ -1605,7 +1605,6 @@ class Item unset($item['event-id']); unset($item['hidden']); unset($item['notification-type']); - unset($item['post-reason']); // Data from the "post-delivery-data" table unset($item['postopts']); @@ -2488,7 +2487,7 @@ class Item } if (!Post::exists(['uri-id' => $item['parent-uri-id'], 'uid' => $uid])) { - $stored = self::storeForUserByUriId($item['parent-uri-id'], $uid); + $stored = self::storeForUserByUriId($item['parent-uri-id'], $uid, ['post-reason' => Item::PR_ACTIVITY]); if (($item['parent-uri-id'] == $item['uri-id']) && !empty($stored)) { $item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $stored]); if (!DBA::isResult($item)) { @@ -2948,7 +2947,7 @@ class Item $urlparts = parse_url($url); unset($urlparts['query']); unset($urlparts['fragment']); - $url = Network::unparseURL($urlparts); + $url = Uri::fromParts($urlparts); // Remove media links to only search in embedded content // @todo Check images for image link, audio for audio links, ... diff --git a/src/Module/Api/Mastodon/Statuses/Bookmark.php b/src/Module/Api/Mastodon/Statuses/Bookmark.php index 95a072889..cebb06192 100644 --- a/src/Module/Api/Mastodon/Statuses/Bookmark.php +++ b/src/Module/Api/Mastodon/Statuses/Bookmark.php @@ -52,7 +52,7 @@ class Bookmark extends BaseApi } if ($item['uid'] == 0) { - $stored = Item::storeForUserByUriId($this->parameters['id'], $uid); + $stored = Item::storeForUserByUriId($this->parameters['id'], $uid, ['post-reason' => Item::PR_ACTIVITY]); if (!empty($stored)) { $item = Post::selectFirst(['id', 'gravity'], ['id' => $stored]); if (!DBA::isResult($item)) { diff --git a/src/Module/Api/Mastodon/Statuses/Unbookmark.php b/src/Module/Api/Mastodon/Statuses/Unbookmark.php index 103fac04a..f90916176 100644 --- a/src/Module/Api/Mastodon/Statuses/Unbookmark.php +++ b/src/Module/Api/Mastodon/Statuses/Unbookmark.php @@ -52,7 +52,7 @@ class Unbookmark extends BaseApi } if ($item['uid'] == 0) { - $stored = Item::storeForUserByUriId($this->parameters['id'], $uid); + $stored = Item::storeForUserByUriId($this->parameters['id'], $uid, ['post-reason' => Item::PR_ACTIVITY]); if (!empty($stored)) { $item = Post::selectFirst(['id', 'gravity'], ['id' => $stored]); if (!DBA::isResult($item)) { diff --git a/src/Module/Item/Star.php b/src/Module/Item/Star.php index 8f444d54e..660095103 100644 --- a/src/Module/Item/Star.php +++ b/src/Module/Item/Star.php @@ -56,7 +56,7 @@ class Star extends BaseModule } if ($item['uid'] == 0) { - $stored = Item::storeForUserByUriId($item['uri-id'], local_user()); + $stored = Item::storeForUserByUriId($item['uri-id'], local_user(), ['post-reason' => Item::PR_ACTIVITY]); if (!empty($stored)) { $item = Post::selectFirst(['starred'], ['id' => $stored]); if (!DBA::isResult($item)) { diff --git a/src/Protocol/ActivityPub/Delivery.php b/src/Protocol/ActivityPub/Delivery.php index fac8536d6..6e97b0b92 100644 --- a/src/Protocol/ActivityPub/Delivery.php +++ b/src/Protocol/ActivityPub/Delivery.php @@ -110,10 +110,7 @@ class Delivery } elseif ($cmd == WorkerDelivery::PROFILEUPDATE) { $success = ActivityPub\Transmitter::sendProfileUpdate($uid, $inbox); } else { - $data = Post\Activity::getByURIId($uri_id); - if (empty($data)) { - $data = ActivityPub\Transmitter::createCachedActivityFromItem($item_id); - } + $data = ActivityPub\Transmitter::createCachedActivityFromItem($item_id); if (!empty($data)) { $timestamp = microtime(true); $response = HTTPSignature::post($data, $inbox, $uid); diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index ddf495794..ecd184318 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1233,26 +1233,20 @@ class Transmitter if (!$item['deleted']) { $data = Post\Activity::getByURIId($item['uri-id']); if (!$item['origin'] && !empty($data)) { - if (!empty($data['type'])) { - if (in_array($data['type'], ['Create', 'Update'])) { - if ($object_mode) { - unset($data['@context']); - unset($data['signature']); - } - Logger::info('Return stored conversation', ['item' => $item_id]); - return $data; - } elseif (in_array('as:' . $data['type'], Receiver::CONTENT_TYPES)) { - if (!empty($data['@context'])) { - $context = $data['@context']; - unset($data['@context']); - } - unset($data['actor']); - $object = $data; - } + if ($object_mode) { + unset($data['@context']); + unset($data['signature']); } + Logger::info('Return stored conversation', ['item' => $item_id]); + return $data; } } + if (!$item['origin'] && empty($object)) { + Logger::debug('Post is not ours and is not stored', ['id' => $item_id, 'uri-id' => $item['uri-id']]); + return false; + } + $type = self::getTypeOfItem($item); if (!$object_mode) { diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 8655d2662..36d1a76b7 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -506,7 +506,7 @@ class Notifier // Direct delivery of local contacts if (!in_array($cmd, [Delivery::RELOCATION, Delivery::SUGGESTION, Delivery::DELETION, Delivery::MAIL]) && $target_uid = User::getIdForURL($contact['url'])) { Logger::info('Direct delivery', ['uri-id' => $target_item['uri-id'], 'target' => $target_uid]); - $fields = ['protocol' => Conversation::PARCEL_LOCAL_DFRN, 'direction' => Conversation::PUSH]; + $fields = ['protocol' => Conversation::PARCEL_LOCAL_DFRN, 'direction' => Conversation::PUSH, 'post-reason' => Item::PR_DIRECT]; Item::storeForUserByUriId($target_item['uri-id'], $target_uid, $fields, $target_item['uid']); continue; } From 80592f6365157593faecd0812b4cea99e4cd28e5 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 29 Jul 2022 14:54:25 +0000 Subject: [PATCH 2/7] Updated messages.po --- view/lang/C/messages.po | 78 +++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index be5ecdca5..a5a72de7e 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2022.09-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-27 22:28-0400\n" +"POT-Creation-Date: 2022-07-29 14:53+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1411,7 +1411,7 @@ msgstr "" msgid "Friend Suggestions" msgstr "" -#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2749 +#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2748 msgid "photo" msgstr "" @@ -2111,7 +2111,7 @@ msgid "You are following %s." msgstr "" #: src/Content/Conversation.php:860 -msgid "Tagged" +msgid "You subscribed to one or more tags in this post." msgstr "" #: src/Content/Conversation.php:875 @@ -2129,20 +2129,20 @@ msgid "%s is participating in this thread." msgstr "" #: src/Content/Conversation.php:881 -msgid "Stored" +msgid "Stored for general reasons" msgstr "" #: src/Content/Conversation.php:884 -msgid "Global" +msgid "Global post" msgstr "" #: src/Content/Conversation.php:887 -msgid "Relayed" +msgid "Send via an relay server" msgstr "" #: src/Content/Conversation.php:887 #, php-format -msgid "Relayed by %s <%s>" +msgid "Send via the relay server %s <%s>" msgstr "" #: src/Content/Conversation.php:890 @@ -2154,6 +2154,22 @@ msgstr "" msgid "Fetched because of %s <%s>" msgstr "" +#: src/Content/Conversation.php:893 +msgid "Stored because of a child post to complete this thread." +msgstr "" + +#: src/Content/Conversation.php:896 +msgid "Local delivery" +msgstr "" + +#: src/Content/Conversation.php:899 +msgid "Stored because of your activity (like, comment, star, ...)" +msgstr "" + +#: src/Content/Conversation.php:902 +msgid "Distributed" +msgstr "" + #: src/Content/Feature.php:96 msgid "General Features" msgstr "" @@ -2275,7 +2291,7 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" -#: src/Content/Item.php:345 src/Model/Item.php:2747 +#: src/Content/Item.php:345 src/Model/Item.php:2746 msgid "event" msgstr "" @@ -2626,8 +2642,8 @@ msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3322 -#: src/Model/Item.php:3328 src/Model/Item.php:3329 +#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3321 +#: src/Model/Item.php:3327 src/Model/Item.php:3328 msgid "Link to source" msgstr "" @@ -3812,58 +3828,58 @@ msgstr "" msgid "Edit groups" msgstr "" -#: src/Model/Item.php:1845 +#: src/Model/Item.php:1844 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2751 +#: src/Model/Item.php:2750 msgid "activity" msgstr "" -#: src/Model/Item.php:2753 +#: src/Model/Item.php:2752 msgid "comment" msgstr "" -#: src/Model/Item.php:2756 +#: src/Model/Item.php:2755 msgid "post" msgstr "" -#: src/Model/Item.php:2872 +#: src/Model/Item.php:2871 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3231 +#: src/Model/Item.php:3230 msgid "bytes" msgstr "" -#: src/Model/Item.php:3265 +#: src/Model/Item.php:3264 #, php-format msgid "%s (%d%s, %d votes)" msgstr "" -#: src/Model/Item.php:3267 +#: src/Model/Item.php:3266 #, php-format msgid "%s (%d votes)" msgstr "" -#: src/Model/Item.php:3272 +#: src/Model/Item.php:3271 #, php-format msgid "%d voters. Poll end: %s" msgstr "" -#: src/Model/Item.php:3274 +#: src/Model/Item.php:3273 #, php-format msgid "%d voters." msgstr "" -#: src/Model/Item.php:3276 +#: src/Model/Item.php:3275 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3310 src/Model/Item.php:3311 +#: src/Model/Item.php:3309 src/Model/Item.php:3310 msgid "View on separate page" msgstr "" @@ -4265,12 +4281,12 @@ msgid "" "\t\t\tThank you and welcome to %2$s." msgstr "" -#: src/Moderation/DomainPatternBlocklist.php:144 +#: src/Moderation/DomainPatternBlocklist.php:218 #, php-format msgid "[%s] Notice of remote server domain pattern block list update" msgstr "" -#: src/Moderation/DomainPatternBlocklist.php:146 +#: src/Moderation/DomainPatternBlocklist.php:220 #, php-format msgid "" "Dear %s,\n" @@ -8424,19 +8440,19 @@ msgstr "" #: src/Module/Profile/Profile.php:326 src/Module/Profile/Profile.php:329 #: src/Module/Profile/Status.php:66 src/Module/Profile/Status.php:69 -#: src/Protocol/Feed.php:1018 src/Protocol/OStatus.php:1045 +#: src/Protocol/Feed.php:1018 src/Protocol/OStatus.php:1046 #, php-format msgid "%s's timeline" msgstr "" #: src/Module/Profile/Profile.php:327 src/Module/Profile/Status.php:67 -#: src/Protocol/Feed.php:1022 src/Protocol/OStatus.php:1050 +#: src/Protocol/Feed.php:1022 src/Protocol/OStatus.php:1051 #, php-format msgid "%s's posts" msgstr "" #: src/Module/Profile/Profile.php:328 src/Module/Profile/Status.php:68 -#: src/Protocol/Feed.php:1025 src/Protocol/OStatus.php:1054 +#: src/Protocol/Feed.php:1025 src/Protocol/OStatus.php:1055 #, php-format msgid "%s's comments" msgstr "" @@ -10946,21 +10962,21 @@ msgstr "" msgid "Show fewer" msgstr "" -#: src/Protocol/OStatus.php:1474 +#: src/Protocol/OStatus.php:1475 #, php-format msgid "%s is now following %s." msgstr "" -#: src/Protocol/OStatus.php:1475 +#: src/Protocol/OStatus.php:1476 msgid "following" msgstr "" -#: src/Protocol/OStatus.php:1478 +#: src/Protocol/OStatus.php:1479 #, php-format msgid "%s stopped following %s." msgstr "" -#: src/Protocol/OStatus.php:1479 +#: src/Protocol/OStatus.php:1480 msgid "stopped following" msgstr "" From 2c32429d8d42995711728c7a6ee2967dc4989f70 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 29 Jul 2022 14:56:40 +0000 Subject: [PATCH 3/7] Fix test --- src/Model/Item.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index a465e8c93..e0ca50717 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -2945,9 +2945,13 @@ class Item { // Make sure that for example site parameters aren't used when testing if the link is contained in the body $urlparts = parse_url($url); - unset($urlparts['query']); - unset($urlparts['fragment']); - $url = Uri::fromParts($urlparts); + if (!empty($urlparts)) { + unset($urlparts['query']); + unset($urlparts['fragment']); + $url = Uri::fromParts($urlparts); + } else { + return false; + } // Remove media links to only search in embedded content // @todo Check images for image link, audio for audio links, ... From 0971bcf165dae452901f5cec210b7f39342eee88 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 29 Jul 2022 16:05:04 +0000 Subject: [PATCH 4/7] Make the tests happy --- src/Model/APContact.php | 4 ++-- src/Model/Item.php | 2 +- src/Protocol/DFRN.php | 2 +- src/Protocol/Diaspora.php | 2 +- src/Util/Network.php | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index bb6f12e10..38ec423e8 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -383,11 +383,11 @@ class APContact if (strlen($apcontact['photo']) > 255) { $parts = parse_url($apcontact['photo']); unset($parts['fragment']); - $apcontact['photo'] = Uri::fromParts($parts); + $apcontact['photo'] = (string)Uri::fromParts($parts); if (strlen($apcontact['photo']) > 255) { unset($parts['query']); - $apcontact['photo'] = Uri::fromParts($parts); + $apcontact['photo'] = (string)Uri::fromParts($parts); } if (strlen($apcontact['photo']) > 255) { diff --git a/src/Model/Item.php b/src/Model/Item.php index e0ca50717..73a6e65c5 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -2948,7 +2948,7 @@ class Item if (!empty($urlparts)) { unset($urlparts['query']); unset($urlparts['fragment']); - $url = Uri::fromParts($urlparts); + $url = (string)Uri::fromParts($urlparts); } else { return false; } diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 7593711e5..89ffca153 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -998,7 +998,7 @@ class DFRN $path_parts = explode('/', $parts['path']); array_pop($path_parts); $parts['path'] = implode('/', $path_parts); - $contact['batch'] = Uri::fromParts($parts); + $contact['batch'] = (string)Uri::fromParts($parts); } $dest_url = ($public_batch ? $contact['batch'] : $contact['notify']); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index cc0293669..c5ad51215 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1419,7 +1419,7 @@ class Diaspora $parts = parse_url($person['url']); unset($parts['path']); - $host_url = Uri::fromParts($parts); + $host_url = (string)Uri::fromParts($parts); return $host_url . '/objects/' . $guid; } diff --git a/src/Util/Network.php b/src/Util/Network.php index 23def7e57..63cc67f4c 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -497,7 +497,7 @@ class Network $parts = parse_url($uri); if (!empty($parts['scheme']) && !empty($parts['host'])) { $parts['host'] = idn_to_ascii($parts['host']); - $uri = Uri::fromParts($parts); + $uri = (string)Uri::fromParts($parts); } else { $parts = explode('@', $uri); if (count($parts) == 2) { From fa3c5d6c5e17e62ff3cef1a9a4a197cd9cc3757c Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 29 Jul 2022 21:59:53 +0200 Subject: [PATCH 5/7] Update src/Content/Conversation.php Co-authored-by: Hypolite Petovan --- src/Content/Conversation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 36fd38915..b0f8d4037 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -884,7 +884,7 @@ class Conversation $row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global post')]; break; case ItemModel::PR_RELAY: - $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Send via an relay server') : $this->l10n->t('Send via the relay server %s <%s>', $row['causer-name'], $row['causer-link']))]; + $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Sent via an relay server') : $this->l10n->t('Sent via the relay server %s <%s>', $row['causer-name'], $row['causer-link']))]; break; case ItemModel::PR_FETCHED: $row['direction'] = ['direction' => 2, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Fetched') : $this->l10n->t('Fetched because of %s <%s>', $row['causer-name'], $row['causer-link']))]; From 699152e15e109f694c69f7ea3426e4aa381950b0 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 29 Jul 2022 21:28:22 +0000 Subject: [PATCH 6/7] Add more post reasons --- src/Content/Conversation.php | 4 +++- src/Model/Item.php | 6 ++++++ src/Protocol/ActivityPub/Processor.php | 8 +++++--- src/Protocol/ActivityPub/Receiver.php | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 36fd38915..cf62636fc 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -901,7 +901,9 @@ class Conversation case ItemModel::PR_DISTRIBUTE: $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Distributed')]; break; - + case ItemModel::PR_PUSHED: + $row['direction'] = ['direction' => 1, 'title' => $this->l10n->t('Pushed to us')]; + break; } $row['thr-parent-row'] = $thr_parent; diff --git a/src/Model/Item.php b/src/Model/Item.php index 73a6e65c5..6772a85fa 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -79,6 +79,8 @@ class Item const PR_DIRECT = 77; const PR_ACTIVITY = 78; const PR_DISTRIBUTE = 79; + const PR_PUSHED = 80; + const PR_LOCAL = 81; // system.accept_only_sharer setting values const COMPLETION_NONE = 1; @@ -908,6 +910,10 @@ class Item $item['post-reason'] = self::PR_FOLLOWER; } + if ($item['origin'] && empty($item['post-reason'])) { + $item['post-reason'] = self::PR_LOCAL; + } + // Ensure that there is an avatar cache Contact::checkAvatarCache($item['author-id']); Contact::checkAvatarCache($item['owner-id']); diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 60dd42cb4..2438c68c6 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -363,10 +363,10 @@ class Processor if (!empty($activity['raw'])) { $item['source'] = $activity['raw']; $item['protocol'] = Conversation::PARCEL_ACTIVITYPUB; + } - if (isset($activity['push'])) { - $item['direction'] = $activity['push'] ? Conversation::PUSH : Conversation::PULL; - } + if (isset($activity['push'])) { + $item['direction'] = $activity['push'] ? Conversation::PUSH : Conversation::PULL; } if (!empty($activity['from-relay'])) { @@ -900,6 +900,8 @@ class Processor $item['post-reason'] = Item::PR_RELAY; } elseif (!empty($activity['thread-completion'])) { $item['post-reason'] = Item::PR_FETCHED; + } elseif (in_array($item['post-reason'], [Item::PR_GLOBAL, Item::PR_NONE]) && !empty($activity['push'])) { + $item['post-reason'] = Item::PR_PUSHED; } if ($item['isForum'] ?? false) { diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 600fe3152..2231d0acb 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -986,7 +986,7 @@ class Receiver } if (!empty($reply)) { - $parents = Post::select(['uid'], ['uri' => $reply]); + $parents = Post::select(['uid'], DBA::mergeConditions(['uri' => $reply], ["`uid` != ?", 0])); while ($parent = Post::fetch($parents)) { $receivers[$parent['uid']] = ['uid' => $parent['uid'], 'type' => self::TARGET_ANSWER]; } From 13cd6259ec48927fe715914f562b6c8523eac7e4 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 29 Jul 2022 21:32:58 +0000 Subject: [PATCH 7/7] Updates messages.po --- view/lang/C/messages.po | 42 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index a5a72de7e..16f708122 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2022.09-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-29 14:53+0000\n" +"POT-Creation-Date: 2022-07-29 21:32+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1411,7 +1411,7 @@ msgstr "" msgid "Friend Suggestions" msgstr "" -#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2748 +#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2754 msgid "photo" msgstr "" @@ -2137,12 +2137,12 @@ msgid "Global post" msgstr "" #: src/Content/Conversation.php:887 -msgid "Send via an relay server" +msgid "Sent via an relay server" msgstr "" #: src/Content/Conversation.php:887 #, php-format -msgid "Send via the relay server %s <%s>" +msgid "Sent via the relay server %s <%s>" msgstr "" #: src/Content/Conversation.php:890 @@ -2170,6 +2170,10 @@ msgstr "" msgid "Distributed" msgstr "" +#: src/Content/Conversation.php:905 +msgid "Pushed to us" +msgstr "" + #: src/Content/Feature.php:96 msgid "General Features" msgstr "" @@ -2291,7 +2295,7 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" -#: src/Content/Item.php:345 src/Model/Item.php:2746 +#: src/Content/Item.php:345 src/Model/Item.php:2752 msgid "event" msgstr "" @@ -2642,8 +2646,8 @@ msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3321 -#: src/Model/Item.php:3327 src/Model/Item.php:3328 +#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3331 +#: src/Model/Item.php:3337 src/Model/Item.php:3338 msgid "Link to source" msgstr "" @@ -3828,58 +3832,58 @@ msgstr "" msgid "Edit groups" msgstr "" -#: src/Model/Item.php:1844 +#: src/Model/Item.php:1850 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2750 +#: src/Model/Item.php:2756 msgid "activity" msgstr "" -#: src/Model/Item.php:2752 +#: src/Model/Item.php:2758 msgid "comment" msgstr "" -#: src/Model/Item.php:2755 +#: src/Model/Item.php:2761 msgid "post" msgstr "" -#: src/Model/Item.php:2871 +#: src/Model/Item.php:2877 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3230 +#: src/Model/Item.php:3240 msgid "bytes" msgstr "" -#: src/Model/Item.php:3264 +#: src/Model/Item.php:3274 #, php-format msgid "%s (%d%s, %d votes)" msgstr "" -#: src/Model/Item.php:3266 +#: src/Model/Item.php:3276 #, php-format msgid "%s (%d votes)" msgstr "" -#: src/Model/Item.php:3271 +#: src/Model/Item.php:3281 #, php-format msgid "%d voters. Poll end: %s" msgstr "" -#: src/Model/Item.php:3273 +#: src/Model/Item.php:3283 #, php-format msgid "%d voters." msgstr "" -#: src/Model/Item.php:3275 +#: src/Model/Item.php:3285 #, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3309 src/Model/Item.php:3310 +#: src/Model/Item.php:3319 src/Model/Item.php:3320 msgid "View on separate page" msgstr ""