use Friendica\Model\Mail;
use Friendica\Model\Notify\Type;
use Friendica\Model\PermissionSet;
+use Friendica\Model\Post;
use Friendica\Model\Post\Category;
use Friendica\Model\Profile;
use Friendica\Model\Tag;
$fields = ['id', 'uid', 'url', 'network', 'avatar-date', 'avatar', 'name-date', 'uri-date', 'addr',
'name', 'nick', 'about', 'location', 'keywords', 'xmpp', 'bdyear', 'bd', 'hidden', 'contact-type'];
- $condition = ["`uid` = ? AND `nurl` = ? AND `network` != ? AND NOT `pending` AND NOT `blocked` AND `rel` IN (?, ?)",
- $importer["importer_uid"], Strings::normaliseLink($author["link"]), Protocol::STATUSNET,
- Contact::SHARING, Contact::FRIEND];
+ $condition = ["`uid` = ? AND `nurl` = ? AND `network` != ? AND NOT `pending` AND NOT `blocked`",
+ $importer["importer_uid"], Strings::normaliseLink($author["link"]), Protocol::STATUSNET];
+
+ if ($importer['account-type'] != User::ACCOUNT_TYPE_COMMUNITY) {
+ $condition = DBA::mergeConditions($condition, ['rel' => [Contact::SHARING, Contact::FRIEND]]);
+ }
+
$contact_old = DBA::selectFirst('contact', $fields, $condition);
if (DBA::isResult($contact_old)) {
$author["contact-id"] = $contact_old["id"];
$author["network"] = $contact_old["network"];
} else {
+ Logger::info('Blubb', ['condition' => $condition]);
if (!$onlyfetch) {
Logger::debug("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml);
}
$item["attach"] = "";
}
- $item["attach"] .= '[attach]href="' . $href . '" length="' . $length . '" type="' . $type . '" title="' . $title . '"[/attach]';
+ $item["attach"] .= Post\Media::getAttachElement($href, $length, $type, $title);
break;
}
}
}
}
+ /**
+ * Checks if an incoming message is wanted
+ *
+ * @param array $item
+ * @return boolean Is the message wanted?
+ */
+ private static function isSolicitedMessage(array $item)
+ {
+ if (DBA::exists('contact', ["`nurl` = ? AND `uid` != ? AND `rel` IN (?, ?)",
+ Strings::normaliseLink($item["author-link"]), 0, Contact::FRIEND, Contact::SHARING])) {
+ Logger::info('Author has got followers - accepted', ['uri' => $item['uri'], 'author' => $item["author-link"]]);
+ return true;
+ }
+
+ $taglist = Tag::getByURIId($item['uri-id'], [Tag::HASHTAG]);
+ $tags = array_column($taglist, 'name');
+ return Relay::isSolicitedPost($tags, $item['body'], $item['author-id'], $item['uri'], Protocol::DFRN);
+ }
+
/**
* Processes the entry elements which contain the items and comments
*
}
}
+ // Check if the message is wanted
+ if (($importer["importer_uid"] == 0) && ($item['uri'] == $item['parent-uri'])) {
+ if (!self::isSolicitedMessage($item)) {
+ DBA::delete('item-uri', ['uri' => $item['uri']]);
+ return 403;
+ }
+ }
+
// Get the type of the item (Top level post, reply or remote reply)
$entrytype = self::getEntryType($importer, $item);