From f600f68907fbe77a0541ae409aa1a7f2d91fad3e Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Wed, 23 Nov 2022 06:27:40 +0000
Subject: [PATCH 1/4] No more automated posts via mod/item.php

---
 mod/item.php               | 31 +++++++------------------------
 mod/oexchange.php          |  1 -
 src/Model/Item.php         | 33 +++++++++++++++++++++++++++------
 src/Model/Post/Delayed.php | 34 ----------------------------------
 4 files changed, 34 insertions(+), 65 deletions(-)

diff --git a/mod/item.php b/mod/item.php
index f1224b1f57..924059df81 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -77,8 +77,6 @@ function item_post(App $a) {
 
 	Logger::debug('postvars', ['_REQUEST' => $_REQUEST]);
 
-	$api_source = $_REQUEST['api_source'] ?? false;
-
 	$return_path = $_REQUEST['return'] ?? '';
 	$preview = intval($_REQUEST['preview'] ?? 0);
 
@@ -90,7 +88,7 @@ function item_post(App $a) {
 	if (!$preview && !empty($_REQUEST['post_id_random'])) {
 		if (!empty($_SESSION['post-random']) && $_SESSION['post-random'] == $_REQUEST['post_id_random']) {
 			Logger::warning('duplicate post');
-			item_post_return(DI::baseUrl(), $api_source, $return_path);
+			item_post_return(DI::baseUrl(), $return_path);
 		} else {
 			$_SESSION['post-random'] = $_REQUEST['post_id_random'];
 		}
@@ -106,7 +104,7 @@ function item_post(App $a) {
 	$toplevel_user_id = null;
 
 	$objecttype = null;
-	$profile_uid = ($_REQUEST['profile_uid'] ?? 0) ?: DI::userSession()->getLocalUserId();
+	$profile_uid = DI::userSession()->getLocalUserId();
 	$posttype = ($_REQUEST['post_type'] ?? '') ?: Item::PT_ARTICLE;
 
 	if ($parent_item_id || $thr_parent_uri) {
@@ -177,7 +175,7 @@ function item_post(App $a) {
 
 	// Now check that valid personal details have been provided
 	if (!Security::canWriteToUserWall($profile_uid) && !$allow_comment) {
-		Logger::warning('Permission denied.', ['local' => DI::userSession()->getLocalUserId(), 'profile_uid' => $profile_uid, 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]);
+		Logger::warning('Permission denied.', ['local' => DI::userSession()->getLocalUserId(), 'toplevel_item_id' => $toplevel_item_id, 'network' => $toplevel_item['network']]);
 		DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.'));
 		if ($return_path) {
 			DI::baseUrl()->redirect($return_path);
@@ -322,13 +320,6 @@ function item_post(App $a) {
 
 		$pubmail_enabled = ($_REQUEST['pubmail_enable'] ?? false) && !$private;
 
-		// if using the API, we won't see pubmail_enable - figure out if it should be set
-		if ($api_source && $profile_uid && $profile_uid == DI::userSession()->getLocalUserId() && !$private) {
-			if (function_exists('imap_open') && !DI::config()->get('system', 'imap_disabled')) {
-				$pubmail_enabled = DBA::exists('mailacct', ["`uid` = ? AND `server` != ? AND `pubmail`", DI::userSession()->getLocalUserId(), '']);
-			}
-		}
-
 		if (!strlen($body)) {
 			if ($preview) {
 				System::jsonExit(['preview' => '']);
@@ -579,7 +570,7 @@ function item_post(App $a) {
 		'parent'        => $toplevel_item_id,
 		'self'          => $self,
 		// This triggers posts via API and the mirror functions
-		'api_source'    => $api_source,
+		'api_source'    => false,
 		// This field is for storing the raw conversation data
 		'protocol'      => Conversation::PARCEL_DIRECT,
 		'direction'     => Conversation::PUSH,
@@ -634,7 +625,7 @@ function item_post(App $a) {
 			unset($datarray['api_source']);
 
 			Post\Delayed::add($datarray['uri'], $datarray, Worker::PRIORITY_HIGH, Post\Delayed::PREPARED_NO_HOOK, $scheduled_at);
-			item_post_return(DI::baseUrl(), $api_source, $return_path);
+			item_post_return(DI::baseUrl(), $return_path);
 		}
 	}
 
@@ -755,20 +746,12 @@ function item_post(App $a) {
 
 	Logger::debug('post_complete');
 
-	if ($api_source) {
-		return $post_id;
-	}
-
-	item_post_return(DI::baseUrl(), $api_source, $return_path);
+	item_post_return(DI::baseUrl(), $return_path);
 	// NOTREACHED
 }
 
-function item_post_return($baseurl, $api_source, $return_path)
+function item_post_return($baseurl, $return_path)
 {
-	if ($api_source) {
-		return;
-	}
-
 	if ($return_path) {
 		DI::baseUrl()->redirect($return_path);
 	}
diff --git a/mod/oexchange.php b/mod/oexchange.php
index dd3809bc7d..8ff49797c6 100644
--- a/mod/oexchange.php
+++ b/mod/oexchange.php
@@ -119,7 +119,6 @@ function oexchange_content(App $a)
 
 	$post = [];
 
-	$post['profile_uid'] = DI::userSession()->getLocalUserId();
 	$post['return'] = '/oexchange/done';
 	$post['body'] = HTML::toBBCode($s);
 
diff --git a/src/Model/Item.php b/src/Model/Item.php
index 900bf3a2c4..17493e9a00 100644
--- a/src/Model/Item.php
+++ b/src/Model/Item.php
@@ -815,6 +815,30 @@ class Item
 		return self::GRAVITY_UNKNOWN;   // Should not happen
 	}
 
+	private static function prepareOriginPost(array $item): array
+	{
+		$item['wall'] = 1;
+		$item['origin'] = 1;
+		$item['network'] = Protocol::DFRN;
+		$item['protocol'] = Conversation::PARCEL_DIRECT;
+		$item['direction'] = Conversation::PUSH;
+
+		if (!empty($item['author-link']) && !empty($item['author-id'])) {
+			$owner = User::getOwnerDataById($item['uid']);
+			$item['author-link']   = $owner['url'];
+			$item['author-name']   = $owner['name'];
+			$item['author-avatar'] = $owner['thumb'];
+		}
+
+		if (!empty($item['owner-link']) && !empty($item['owner-id'])) {
+			$item['owner-link']   = $item['author-link'];
+			$item['owner-name']   = $item['author-name'];
+			$item['owner-avatar'] = $item['author-avatar'];
+		}
+
+		return $item;
+	}
+
 	/**
 	 * Inserts item record
 	 *
@@ -831,11 +855,7 @@ class Item
 
 		// If it is a posting where users should get notifications, then define it as wall posting
 		if ($notify) {
-			$item['wall'] = 1;
-			$item['origin'] = 1;
-			$item['network'] = Protocol::DFRN;
-			$item['protocol'] = Conversation::PARCEL_DIRECT;
-			$item['direction'] = Conversation::PUSH;
+			$item = self::prepareOriginPost($item);
 
 			if (is_int($notify) && in_array($notify, Worker::PRIORITIES)) {
 				$priority = $notify;
@@ -993,6 +1013,7 @@ class Item
 			$item['parent-uri']    = $toplevel_parent['uri'];
 			$item['parent-uri-id'] = $toplevel_parent['uri-id'];
 			$item['deleted']       = $toplevel_parent['deleted'];
+			$item['wall']          = $toplevel_parent['wall'];
 
 			// Reshares have to keep their permissions to allow forums to work
 			if (!$item['origin'] || ($item['verb'] != Activity::ANNOUNCE)) {
@@ -2974,7 +2995,7 @@ class Item
 			$quote_uri_id = $shared['post']['uri-id'];
 			$shared_links[] = strtolower($shared['post']['uri']);
 			$item['body'] = BBCode::removeSharedData($item['body']);
-		} elseif (empty($shared_item['uri-id']) && empty($item['quote-uri-id'])) {
+		} elseif (empty($shared_item['uri-id']) && empty($item['quote-uri-id']) && ($item['network'] != Protocol::DIASPORA)) {
 			$media = Post\Media::getByURIId($item['uri-id'], [Post\Media::ACTIVITY]);
 			if (!empty($media)) {
 				$shared_item = Post::selectFirst($fields, ['plink' => $media[0]['url'], 'uid' => [$item['uid'], 0]]);
diff --git a/src/Model/Post/Delayed.php b/src/Model/Post/Delayed.php
index 3f96af6984..ac5a9c20be 100644
--- a/src/Model/Post/Delayed.php
+++ b/src/Model/Post/Delayed.php
@@ -38,12 +38,6 @@ class Delayed
 	 * This is used for automated scheduled posts via feeds or from the API.
 	 */
 	const PREPARED = 0;
-	/**
-	 * The content is posted like a manual post. Means some processing of body will be done.
-	 * Also it is posted with default permissions and default connector settings.
-	 * This is used for mirrored connector posts.
-	 */
-	const UNPREPARED = 1;
 	/**
 	 * Like PREPARED, but additionally the connector settings can differ.
 	 * This is used when manually publishing scheduled posts.
@@ -199,34 +193,6 @@ class Delayed
 			$item['attachments'] = $attachments;
 		}
 
-		if ($preparation_mode == self::UNPREPARED) {
-			$_SESSION['authenticated'] = true;
-			$_SESSION['uid'] = $item['uid'];
-
-			$_REQUEST = $item;
-			$_REQUEST['api_source'] = true;
-			$_REQUEST['profile_uid'] = $item['uid'];
-			$_REQUEST['title'] = $item['title'] ?? '';
-
-			if (!empty($item['app'])) {
-				$_REQUEST['source'] = $item['app'];
-			}
-
-			require_once 'mod/item.php';
-			$id = item_post(DI::app());
-
-			if (empty($uri) && !empty($item['extid'])) {
-				$uri = $item['extid'];
-			}
-
-			Logger::notice('Unprepared post stored', ['id' => $id, 'uid' => $item['uid'], 'uri' => $uri]);
-			if (self::exists($uri, $item['uid'])) {
-				self::delete($uri, $item['uid']);
-			}
-
-			return $id;
-		}
-
 		$id = Item::insert($item, $notify, $preparation_mode == self::PREPARED);
 
 		Logger::notice('Post stored', ['id' => $id, 'uid' => $item['uid'], 'cid' => $item['contact-id']]);

From 352b7a0ac37f4f693a7b4e16f8a95546f9d8b3d9 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Wed, 23 Nov 2022 14:00:34 +0000
Subject: [PATCH 2/4] "MIRROR_FORWARDED" is removed

---
 src/Core/Protocol.php          |  1 +
 src/Model/Contact.php          |  2 +-
 src/Model/Item.php             | 25 ++++++++++++++++++++++---
 src/Module/Contact/Profile.php |  1 -
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/Core/Protocol.php b/src/Core/Protocol.php
index 015612adea..096e12c27b 100644
--- a/src/Core/Protocol.php
+++ b/src/Core/Protocol.php
@@ -205,6 +205,7 @@ class Protocol
 			$slap = OStatus::salmon($item, $user);
 
 			if (empty($contact['notify'])) {
+				return true;
 				throw new \InvalidArgumentException('Missing expected "notify" key in OStatus/DFRN contact');
 			}
 
diff --git a/src/Model/Contact.php b/src/Model/Contact.php
index ce392217dd..e0c3c1682a 100644
--- a/src/Model/Contact.php
+++ b/src/Model/Contact.php
@@ -106,7 +106,7 @@ class Contact
 	 */
 
 	 const MIRROR_DEACTIVATED = 0;
-	 const MIRROR_FORWARDED = 1;
+	 const MIRROR_FORWARDED = 1; // Deprecated, now does the same like MIRROR_OWN_POST
 	 const MIRROR_OWN_POST = 2;
 	 const MIRROR_NATIVE_RESHARE = 3;
 
diff --git a/src/Model/Item.php b/src/Model/Item.php
index 6858baec0e..48c578e85f 100644
--- a/src/Model/Item.php
+++ b/src/Model/Item.php
@@ -823,19 +823,38 @@ class Item
 		$item['protocol'] = Conversation::PARCEL_DIRECT;
 		$item['direction'] = Conversation::PUSH;
 
-		if (!empty($item['author-link']) && !empty($item['author-id'])) {
-			$owner = User::getOwnerDataById($item['uid']);
+		$owner = User::getOwnerDataById($item['uid']);
+
+		if (empty($item['contact-id'])) {
+			$item['contact-id'] = $owner['id'];
+		}
+
+		if (empty($item['author-link']) && empty($item['author-id'])) {
 			$item['author-link']   = $owner['url'];
 			$item['author-name']   = $owner['name'];
 			$item['author-avatar'] = $owner['thumb'];
 		}
 
-		if (!empty($item['owner-link']) && !empty($item['owner-id'])) {
+		if (empty($item['owner-link']) && empty($item['owner-id'])) {
 			$item['owner-link']   = $item['author-link'];
 			$item['owner-name']   = $item['author-name'];
 			$item['owner-avatar'] = $item['author-avatar'];
 		}
 
+		// Setting the object type if not defined before
+		if (empty($item['object-type'])) {
+			$item['object-type'] = Activity\ObjectType::NOTE; // Default value
+			$objectdata = BBCode::getAttachedData($item['body']);
+
+			if ($objectdata['type'] == 'link') {
+				$item['object-type'] = Activity\ObjectType::BOOKMARK;
+			} elseif ($objectdata['type'] == 'video') {
+				$item['object-type'] = Activity\ObjectType::VIDEO;
+			} elseif ($objectdata['type'] == 'photo') {
+				$item['object-type'] = Activity\ObjectType::IMAGE;
+			}
+		}
+
 		return $item;
 	}
 
diff --git a/src/Module/Contact/Profile.php b/src/Module/Contact/Profile.php
index ecb25dd607..b3d0c03733 100644
--- a/src/Module/Contact/Profile.php
+++ b/src/Module/Contact/Profile.php
@@ -285,7 +285,6 @@ class Profile extends BaseModule
 		if ($contact['network'] == Protocol::FEED) {
 			$remote_self_options = [
 				Contact::MIRROR_DEACTIVATED => $this->t('No mirroring'),
-				Contact::MIRROR_FORWARDED   => $this->t('Mirror as forwarded posting'),
 				Contact::MIRROR_OWN_POST    => $this->t('Mirror as my own posting')
 			];
 		} elseif ($contact['network'] == Protocol::ACTIVITYPUB) {

From c4aaa086934a0b5a428d0967932defe13ef091ee Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Wed, 23 Nov 2022 14:16:13 +0000
Subject: [PATCH 3/4] Updated messages.po

---
 view/lang/C/messages.po | 158 ++++++++++++++++++++--------------------
 1 file changed, 77 insertions(+), 81 deletions(-)

diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po
index 90f89211de..8494c627f4 100644
--- a/view/lang/C/messages.po
+++ b/view/lang/C/messages.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 2022.12-dev\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-11-20 17:22-0500\n"
+"POT-Creation-Date: 2022-11-23 14:15+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -41,11 +41,11 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: mod/item.php:131 mod/item.php:135
+#: mod/item.php:129 mod/item.php:133
 msgid "Unable to locate original post."
 msgstr ""
 
-#: mod/item.php:181 mod/item.php:186 mod/item.php:870 mod/message.php:69
+#: mod/item.php:179 mod/item.php:184 mod/item.php:853 mod/message.php:69
 #: mod/message.php:114 mod/notes.php:44 mod/photos.php:159 mod/photos.php:884
 #: src/Module/Attach.php:56 src/Module/BaseApi.php:94
 #: src/Module/BaseNotifications.php:98 src/Module/BaseSettings.php:52
@@ -84,23 +84,23 @@ msgstr ""
 msgid "Permission denied."
 msgstr ""
 
-#: mod/item.php:337 mod/item.php:342
+#: mod/item.php:328 mod/item.php:333
 msgid "Empty post discarded."
 msgstr ""
 
-#: mod/item.php:680
+#: mod/item.php:671
 msgid "Post updated."
 msgstr ""
 
-#: mod/item.php:690 mod/item.php:695
+#: mod/item.php:681 mod/item.php:686
 msgid "Item wasn't stored."
 msgstr ""
 
-#: mod/item.php:706
+#: mod/item.php:697
 msgid "Item couldn't be fetched."
 msgstr ""
 
-#: mod/item.php:846 src/Module/Admin/Themes/Details.php:39
+#: mod/item.php:829 src/Module/Admin/Themes/Details.php:39
 #: src/Module/Admin/Themes/Index.php:59 src/Module/Debug/ItemBody.php:42
 #: src/Module/Debug/ItemBody.php:57 src/Module/Item/Feed.php:80
 msgid "Item not found."
@@ -327,7 +327,7 @@ msgstr ""
 #: mod/photos.php:1018 mod/photos.php:1290 mod/photos.php:1331
 #: mod/photos.php:1387 mod/photos.php:1461
 #: src/Module/Calendar/Event/Form.php:250 src/Module/Contact/Advanced.php:132
-#: src/Module/Contact/Profile.php:328
+#: src/Module/Contact/Profile.php:327
 #: src/Module/Debug/ActivityPubConversion.php:140
 #: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64
 #: src/Module/Debug/Probe.php:54 src/Module/Debug/WebFinger.php:51
@@ -1554,7 +1554,7 @@ msgstr ""
 msgid "show more"
 msgstr ""
 
-#: src/Content/Item.php:294 src/Model/Item.php:2871
+#: src/Content/Item.php:294 src/Model/Item.php:2911
 msgid "event"
 msgstr ""
 
@@ -1563,7 +1563,7 @@ msgstr ""
 msgid "status"
 msgstr ""
 
-#: src/Content/Item.php:303 src/Model/Item.php:2873
+#: src/Content/Item.php:303 src/Model/Item.php:2913
 #: src/Module/Post/Tag/Add.php:123
 msgid "photo"
 msgstr ""
@@ -1606,7 +1606,7 @@ msgid "Send PM"
 msgstr ""
 
 #: src/Content/Item.php:393 src/Module/Contact.php:401
-#: src/Module/Contact/Profile.php:349 src/Module/Contact/Profile.php:468
+#: src/Module/Contact/Profile.php:348 src/Module/Contact/Profile.php:467
 #: src/Module/Moderation/Blocklist/Contact.php:116
 #: src/Module/Moderation/Users/Active.php:137
 #: src/Module/Moderation/Users/Index.php:152
@@ -1614,7 +1614,7 @@ msgid "Block"
 msgstr ""
 
 #: src/Content/Item.php:394 src/Module/Contact.php:402
-#: src/Module/Contact/Profile.php:350 src/Module/Contact/Profile.php:476
+#: src/Module/Contact/Profile.php:349 src/Module/Contact/Profile.php:475
 #: src/Module/Notifications/Introductions.php:134
 #: src/Module/Notifications/Introductions.php:206
 #: src/Module/Notifications/Notification.php:89
@@ -1665,7 +1665,7 @@ msgid "Sign in"
 msgstr ""
 
 #: src/Content/Nav.php:193 src/Module/BaseProfile.php:56
-#: src/Module/Contact.php:436 src/Module/Contact/Profile.php:381
+#: src/Module/Contact.php:436 src/Module/Contact/Profile.php:380
 #: src/Module/Settings/TwoFactor/Index.php:119 view/theme/frio/theme.php:237
 msgid "Status"
 msgstr ""
@@ -1677,7 +1677,7 @@ msgstr ""
 
 #: src/Content/Nav.php:194 src/Module/BaseProfile.php:48
 #: src/Module/BaseSettings.php:100 src/Module/Contact.php:460
-#: src/Module/Contact/Profile.php:383 src/Module/Profile/Profile.php:240
+#: src/Module/Contact/Profile.php:382 src/Module/Profile/Profile.php:240
 #: src/Module/Welcome.php:57 view/theme/frio/theme.php:238
 msgid "Profile"
 msgstr ""
@@ -1953,8 +1953,8 @@ msgid ""
 "<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
 msgstr ""
 
-#: src/Content/Text/BBCode.php:1245 src/Model/Item.php:3493
-#: src/Model/Item.php:3499 src/Model/Item.php:3500
+#: src/Content/Text/BBCode.php:1245 src/Model/Item.php:3533
+#: src/Model/Item.php:3539 src/Model/Item.php:3540
 msgid "Link to source"
 msgstr ""
 
@@ -1987,7 +1987,7 @@ msgid "The end"
 msgstr ""
 
 #: src/Content/Text/HTML.php:882 src/Content/Widget/VCard.php:109
-#: src/Model/Profile.php:459 src/Module/Contact/Profile.php:428
+#: src/Model/Profile.php:459 src/Module/Contact/Profile.php:427
 msgid "Follow"
 msgstr ""
 
@@ -2173,19 +2173,19 @@ msgid "More Trending Tags"
 msgstr ""
 
 #: src/Content/Widget/VCard.php:102 src/Model/Profile.php:378
-#: src/Module/Contact/Profile.php:372 src/Module/Profile/Profile.php:175
+#: src/Module/Contact/Profile.php:371 src/Module/Profile/Profile.php:175
 msgid "XMPP:"
 msgstr ""
 
 #: src/Content/Widget/VCard.php:103 src/Model/Profile.php:379
-#: src/Module/Contact/Profile.php:374 src/Module/Profile/Profile.php:179
+#: src/Module/Contact/Profile.php:373 src/Module/Profile/Profile.php:179
 msgid "Matrix:"
 msgstr ""
 
 #: src/Content/Widget/VCard.php:104 src/Model/Event.php:82
 #: src/Model/Event.php:109 src/Model/Event.php:471 src/Model/Event.php:992
 #: src/Model/Profile.php:373 src/Module/Calendar/Event/Form.php:239
-#: src/Module/Contact/Profile.php:370 src/Module/Directory.php:147
+#: src/Module/Contact/Profile.php:369 src/Module/Directory.php:147
 #: src/Module/Notifications/Introductions.php:187
 #: src/Module/Profile/Profile.php:193
 msgid "Location:"
@@ -2198,7 +2198,7 @@ msgstr ""
 
 #: src/Content/Widget/VCard.php:111 src/Model/Contact.php:1193
 #: src/Model/Contact.php:1204 src/Model/Profile.php:461
-#: src/Module/Contact/Profile.php:420
+#: src/Module/Contact/Profile.php:419
 msgid "Unfollow"
 msgstr ""
 
@@ -3113,66 +3113,66 @@ msgstr ""
 msgid "Edit groups"
 msgstr ""
 
-#: src/Model/Item.php:1983
+#: src/Model/Item.php:2023
 #, php-format
 msgid "Detected languages in this post:\\n%s"
 msgstr ""
 
-#: src/Model/Item.php:2875
+#: src/Model/Item.php:2915
 msgid "activity"
 msgstr ""
 
-#: src/Model/Item.php:2877
+#: src/Model/Item.php:2917
 msgid "comment"
 msgstr ""
 
-#: src/Model/Item.php:2880
+#: src/Model/Item.php:2920
 msgid "post"
 msgstr ""
 
-#: src/Model/Item.php:3021
+#: src/Model/Item.php:3061
 #, php-format
 msgid "Content warning: %s"
 msgstr ""
 
-#: src/Model/Item.php:3405
+#: src/Model/Item.php:3445
 msgid "bytes"
 msgstr ""
 
-#: src/Model/Item.php:3436
+#: src/Model/Item.php:3476
 #, php-format
 msgid "%2$s (%3$d%%, %1$d vote)"
 msgid_plural "%2$s (%3$d%%, %1$d votes)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Model/Item.php:3438
+#: src/Model/Item.php:3478
 #, php-format
 msgid "%2$s (%1$d vote)"
 msgid_plural "%2$s (%1$d votes)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Model/Item.php:3443
+#: src/Model/Item.php:3483
 #, php-format
 msgid "%d voter. Poll end: %s"
 msgid_plural "%d voters. Poll end: %s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Model/Item.php:3445
+#: src/Model/Item.php:3485
 #, php-format
 msgid "%d voter."
 msgid_plural "%d voters."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/Model/Item.php:3447
+#: src/Model/Item.php:3487
 #, php-format
 msgid "Poll end: %s"
 msgstr ""
 
-#: src/Model/Item.php:3481 src/Model/Item.php:3482
+#: src/Model/Item.php:3521 src/Model/Item.php:3522
 msgid "View on separate page"
 msgstr ""
 
@@ -3198,7 +3198,7 @@ msgstr ""
 msgid "Homepage:"
 msgstr ""
 
-#: src/Model/Profile.php:377 src/Module/Contact/Profile.php:376
+#: src/Model/Profile.php:377 src/Module/Contact/Profile.php:375
 #: src/Module/Notifications/Introductions.php:189
 msgid "About:"
 msgstr ""
@@ -5656,16 +5656,16 @@ msgstr ""
 msgid "Update"
 msgstr ""
 
-#: src/Module/Contact.php:401 src/Module/Contact/Profile.php:349
-#: src/Module/Contact/Profile.php:468
+#: src/Module/Contact.php:401 src/Module/Contact/Profile.php:348
+#: src/Module/Contact/Profile.php:467
 #: src/Module/Moderation/Blocklist/Contact.php:117
 #: src/Module/Moderation/Users/Blocked.php:138
 #: src/Module/Moderation/Users/Index.php:154
 msgid "Unblock"
 msgstr ""
 
-#: src/Module/Contact.php:402 src/Module/Contact/Profile.php:350
-#: src/Module/Contact/Profile.php:476
+#: src/Module/Contact.php:402 src/Module/Contact/Profile.php:349
+#: src/Module/Contact/Profile.php:475
 msgid "Unignore"
 msgstr ""
 
@@ -5713,7 +5713,7 @@ msgstr ""
 msgid "Pending incoming contact request"
 msgstr ""
 
-#: src/Module/Contact.php:555 src/Module/Contact/Profile.php:335
+#: src/Module/Contact.php:555 src/Module/Contact/Profile.php:334
 #, php-format
 msgid "Visit %s's profile [%s]"
 msgstr ""
@@ -5866,7 +5866,7 @@ msgstr ""
 msgid "Your Identity Address:"
 msgstr ""
 
-#: src/Module/Contact/Follow.php:170 src/Module/Contact/Profile.php:366
+#: src/Module/Contact/Follow.php:170 src/Module/Contact/Profile.php:365
 #: src/Module/Contact/Unfollow.php:129
 #: src/Module/Moderation/Blocklist/Contact.php:133
 #: src/Module/Notifications/Introductions.php:129
@@ -5874,7 +5874,7 @@ msgstr ""
 msgid "Profile URL"
 msgstr ""
 
-#: src/Module/Contact/Follow.php:171 src/Module/Contact/Profile.php:378
+#: src/Module/Contact/Follow.php:171 src/Module/Contact/Profile.php:377
 #: src/Module/Notifications/Introductions.php:191
 #: src/Module/Profile/Profile.php:206
 msgid "Tags:"
@@ -5960,7 +5960,7 @@ msgstr ""
 msgid "(Update was successful)"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:255 src/Module/Contact/Profile.php:439
+#: src/Module/Contact/Profile.php:255 src/Module/Contact/Profile.php:438
 msgid "Suggest friends"
 msgstr ""
 
@@ -5996,144 +5996,140 @@ msgstr ""
 msgid "Fetch information and keywords"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:287 src/Module/Contact/Profile.php:293
-#: src/Module/Contact/Profile.php:298 src/Module/Contact/Profile.php:304
+#: src/Module/Contact/Profile.php:287 src/Module/Contact/Profile.php:292
+#: src/Module/Contact/Profile.php:297 src/Module/Contact/Profile.php:303
 msgid "No mirroring"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:288
-msgid "Mirror as forwarded posting"
-msgstr ""
-
-#: src/Module/Contact/Profile.php:289 src/Module/Contact/Profile.php:299
-#: src/Module/Contact/Profile.php:305
+#: src/Module/Contact/Profile.php:288 src/Module/Contact/Profile.php:298
+#: src/Module/Contact/Profile.php:304
 msgid "Mirror as my own posting"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:294 src/Module/Contact/Profile.php:300
+#: src/Module/Contact/Profile.php:293 src/Module/Contact/Profile.php:299
 msgid "Native reshare"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:317
+#: src/Module/Contact/Profile.php:316
 msgid "Contact Information / Notes"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:318
+#: src/Module/Contact/Profile.php:317
 msgid "Contact Settings"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:326
+#: src/Module/Contact/Profile.php:325
 msgid "Contact"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:330
+#: src/Module/Contact/Profile.php:329
 msgid "Their personal note"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:332
+#: src/Module/Contact/Profile.php:331
 msgid "Edit contact notes"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:336
+#: src/Module/Contact/Profile.php:335
 msgid "Block/Unblock contact"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:337
+#: src/Module/Contact/Profile.php:336
 msgid "Ignore contact"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:338
+#: src/Module/Contact/Profile.php:337
 msgid "View conversations"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:343
+#: src/Module/Contact/Profile.php:342
 msgid "Last update:"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:345
+#: src/Module/Contact/Profile.php:344
 msgid "Update public posts"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:347 src/Module/Contact/Profile.php:449
+#: src/Module/Contact/Profile.php:346 src/Module/Contact/Profile.php:448
 msgid "Update now"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:354
+#: src/Module/Contact/Profile.php:353
 msgid "Currently blocked"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:355
+#: src/Module/Contact/Profile.php:354
 msgid "Currently ignored"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:356
+#: src/Module/Contact/Profile.php:355
 msgid "Currently archived"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:357
+#: src/Module/Contact/Profile.php:356
 msgid "Awaiting connection acknowledge"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:358
+#: src/Module/Contact/Profile.php:357
 #: src/Module/Notifications/Introductions.php:192
 msgid "Hide this contact from others"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:358
+#: src/Module/Contact/Profile.php:357
 msgid ""
 "Replies/likes to your public posts <strong>may</strong> still be visible"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:359
+#: src/Module/Contact/Profile.php:358
 msgid "Notification for new posts"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:359
+#: src/Module/Contact/Profile.php:358
 msgid "Send a notification of every new post of this contact"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:361
+#: src/Module/Contact/Profile.php:360
 msgid "Keyword Deny List"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:361
+#: src/Module/Contact/Profile.php:360
 msgid ""
 "Comma separated list of keywords that should not be converted to hashtags, "
 "when \"Fetch information and keywords\" is selected"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:379
+#: src/Module/Contact/Profile.php:378
 #: src/Module/Settings/TwoFactor/Index.php:139
 msgid "Actions"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:387
+#: src/Module/Contact/Profile.php:386
 msgid "Mirror postings from this contact"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:389
+#: src/Module/Contact/Profile.php:388
 msgid ""
 "Mark this contact as remote_self, this will cause friendica to repost new "
 "entries from this contact."
 msgstr ""
 
-#: src/Module/Contact/Profile.php:459
+#: src/Module/Contact/Profile.php:458
 msgid "Refetch contact data"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:470
+#: src/Module/Contact/Profile.php:469
 msgid "Toggle Blocked status"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:478
+#: src/Module/Contact/Profile.php:477
 msgid "Toggle Ignored status"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:485 src/Module/Contact/Revoke.php:106
+#: src/Module/Contact/Profile.php:484 src/Module/Contact/Revoke.php:106
 msgid "Revoke Follow"
 msgstr ""
 
-#: src/Module/Contact/Profile.php:487
+#: src/Module/Contact/Profile.php:486
 msgid "Revoke the follow from this contact"
 msgstr ""
 

From 7b563fd3076a53a6bad5f0c47f0ed92043b37ce6 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Wed, 23 Nov 2022 14:17:39 +0000
Subject: [PATCH 4/4] Tempory fix removed

---
 src/Core/Protocol.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/Core/Protocol.php b/src/Core/Protocol.php
index 096e12c27b..015612adea 100644
--- a/src/Core/Protocol.php
+++ b/src/Core/Protocol.php
@@ -205,7 +205,6 @@ class Protocol
 			$slap = OStatus::salmon($item, $user);
 
 			if (empty($contact['notify'])) {
-				return true;
 				throw new \InvalidArgumentException('Missing expected "notify" key in OStatus/DFRN contact');
 			}