+ if ($item_id) {
+ Logger::info('Item insertion successful', ['user' => $item['uid'], 'item_id' => $item_id]);
+ } else {
+ Logger::notice('Item insertion aborted', ['user' => $item['uid']]);
+ }
+
+ if ($item['uid'] == 0) {
+ $stored = $item_id;
+ }
+ }
+
+ // Store send a follow request for every reshare - but only when the item had been stored
+ if ($stored && !$item['private'] && ($item['gravity'] == GRAVITY_PARENT) && ($item['author-link'] != $item['owner-link'])) {
+ $author = APContact::getByURL($item['owner-link'], false);
+ // We send automatic follow requests for reshared messages. (We don't need though for forum posts)
+ if ($author['type'] != 'Group') {
+ Logger::log('Send follow request for ' . $item['uri'] . ' (' . $stored . ') to ' . $item['author-link'], Logger::DEBUG);
+ ActivityPub\Transmitter::sendFollowObject($item['uri'], $item['author-link']);
+ }
+ }
+ }
+
+ /**
+ * Creates an mail post
+ *
+ * @param array $activity Activity data
+ * @param array $item item array
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
+ */
+ private static function postMail($activity, $item)
+ {
+ if (($item['gravity'] != GRAVITY_PARENT) && !DBA::exists('mail', ['uri' => $item['thr-parent'], 'uid' => $item['uid']])) {
+ Logger::info('Parent not found, mail will be discarded.', ['uid' => $item['uid'], 'uri' => $item['thr-parent']]);
+ return false;
+ }
+
+ Logger::info('Direct Message', $item);
+
+ $msg = [];
+ $msg['uid'] = $item['uid'];
+
+ $msg['contact-id'] = $item['contact-id'];
+
+ $contact = Contact::getById($item['contact-id'], ['name', 'url', 'photo']);
+ $msg['from-name'] = $contact['name'];
+ $msg['from-url'] = $contact['url'];
+ $msg['from-photo'] = $contact['photo'];
+
+ $msg['uri'] = $item['uri'];
+ $msg['created'] = $item['created'];
+
+ $parent = DBA::selectFirst('mail', ['parent-uri', 'title'], ['uri' => $item['thr-parent']]);
+ if (DBA::isResult($parent)) {
+ $msg['parent-uri'] = $parent['parent-uri'];
+ $msg['title'] = $parent['title'];
+ } else {
+ $msg['parent-uri'] = $item['thr-parent'];
+
+ if (!empty($item['title'])) {
+ $msg['title'] = $item['title'];
+ } elseif (!empty($item['content-warning'])) {
+ $msg['title'] = $item['content-warning'];
+ } else {
+ // Trying to generate a title out of the body
+ $title = $item['body'];
+
+ while (preg_match('#^(@\[url=([^\]]+)].*?\[\/url]\s)(.*)#is', $title, $matches)) {
+ $title = $matches[3];
+ }
+
+ $title = trim(HTML::toPlaintext(BBCode::convert($title, false, 2, true), 0));
+
+ if (strlen($title) > 20) {
+ $title = substr($title, 0, 20) . '...';
+ }
+
+ $msg['title'] = $title;
+ }