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;
*/
private static function getAttachment($doc, $root, $item)
{
- $arr = explode('[/attach],', $item['attach']);
- if (count($arr)) {
- foreach ($arr as $r) {
- $matches = false;
- $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|', $r, $matches);
- if ($cnt) {
- $attributes = ["rel" => "enclosure",
- "href" => $matches[1],
- "type" => $matches[3]];
-
- if (intval($matches[2])) {
- $attributes["length"] = intval($matches[2]);
- }
-
- if (trim($matches[4]) != "") {
- $attributes["title"] = trim($matches[4]);
- }
+ foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
+ $attributes = ['rel' => 'enclosure',
+ 'href' => $attachment['url'],
+ 'type' => $attachment['mimetype']];
- XML::addElement($doc, $root, "link", "", $attributes);
- }
+ if (!empty($attachment['size'])) {
+ $attributes['length'] = intval($attachment['size']);
+ }
+ if (!empty($attachment['description'])) {
+ $attributes['title'] = $attachment['description'];
}
+
+ XML::addElement($doc, $root, 'link', '', $attributes);
}
}
$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 {
- if (!$onlyfetch) {
- Logger::debug("Contact ".$author["link"]." wasn't found for user ".$importer["importer_uid"]." XML: ".$xml);
- }
+ Logger::info('Contact not found', ['condition' => $condition]);
$author["contact-unknown"] = true;
$contact = Contact::getByURL($author["link"], null, ["id", "network"]);
*/
private static function processSuggestion($xpath, $suggestion, $importer)
{
- Logger::log('Processing suggestions');
-
- /// @TODO Rewrite this to one statement
- $suggest = [];
- $suggest['uid'] = $importer['importer_uid'];
- $suggest['cid'] = $importer['id'];
- $suggest['url'] = $xpath->query('dfrn:url/text()', $suggestion)->item(0)->nodeValue;
- $suggest['name'] = $xpath->query('dfrn:name/text()', $suggestion)->item(0)->nodeValue;
- $suggest['photo'] = $xpath->query('dfrn:photo/text()', $suggestion)->item(0)->nodeValue;
- $suggest['request'] = $xpath->query('dfrn:request/text()', $suggestion)->item(0)->nodeValue;
- $suggest['body'] = $xpath->query('dfrn:note/text()', $suggestion)->item(0)->nodeValue;
-
- // Does our member already have a friend matching this description?
-
- /*
- * The valid result means the friend we're about to send a friend
- * suggestion already has them in their contact, which means no further
- * action is required.
- *
- * @see https://github.com/friendica/friendica/pull/3254#discussion_r107315246
- */
- $condition = ['nurl' => Strings::normaliseLink($suggest['url']), 'uid' => $suggest['uid']];
- if (DBA::exists('contact', $condition)) {
- return false;
- }
- // Do we already have an fcontact record for this person?
+ Logger::notice('Processing suggestions');
- $fid = 0;
- $fcontact = DBA::selectFirst('fcontact', ['id'], ['url' => $suggest['url']]);
- if (DBA::isResult($fcontact)) {
- $fid = $fcontact['id'];
+ $url = $xpath->evaluate('string(dfrn:url[1]/text())', $suggestion);
+ $cid = Contact::getIdForURL($url);
+ $note = $xpath->evaluate('string(dfrn:note[1]/text())', $suggestion);
- // OK, we do. Do we already have an introduction for this person?
- if (DBA::exists('intro', ['uid' => $suggest['uid'], 'fid' => $fid])) {
- /*
- * The valid result means the friend we're about to send a friend
- * suggestion already has them in their contact, which means no further
- * action is required.
- *
- * @see https://github.com/friendica/friendica/pull/3254#discussion_r107315246
- */
- return false;
- }
- }
-
- if (!$fid) {
- $fields = ['name' => $suggest['name'], 'url' => $suggest['url'],
- 'photo' => $suggest['photo'], 'request' => $suggest['request']];
- DBA::insert('fcontact', $fields);
- $fid = DBA::lastInsertId();
- }
-
- /*
- * If no record in fcontact is found, below INSERT statement will not
- * link an introduction to it.
- */
- if (empty($fid)) {
- // Database record did not get created. Quietly give up.
- exit();
- }
-
- $hash = Strings::getRandomHex();
-
- $fields = ['uid' => $suggest['uid'], 'fid' => $fid, 'contact-id' => $suggest['cid'],
- 'note' => $suggest['body'], 'hash' => $hash, 'datetime' => DateTimeFormat::utcNow(), 'blocked' => false];
- DBA::insert('intro', $fields);
-
- notification(
- [
- 'type' => Type::SUGGEST,
- 'notify_flags' => $importer['notify-flags'],
- 'language' => $importer['language'],
- 'to_name' => $importer['username'],
- 'to_email' => $importer['email'],
- 'uid' => $importer['importer_uid'],
- 'item' => $suggest,
- 'link' => DI::baseUrl().'/notifications/intros',
- 'source_name' => $importer['name'],
- 'source_link' => $importer['url'],
- 'source_photo' => $importer['photo'],
- 'verb' => Activity::REQ_FRIEND,
- 'otype' => 'intro']
- );
-
- return true;
+ return FContact::addSuggestion($importer['importer_uid'], $cid, $importer['id'], $note);
}
/**
{
$rel = "";
$href = "";
- $type = "";
- $length = "0";
- $title = "";
+ $type = null;
+ $length = null;
+ $title = null;
foreach ($links as $link) {
foreach ($link->attributes as $attributes) {
switch ($attributes->name) {
$item["plink"] = $href;
break;
case "enclosure":
- if (!empty($item["attach"])) {
- $item["attach"] .= ",";
- } else {
- $item["attach"] = "";
- }
-
- $item["attach"] .= '[attach]href="' . $href . '" length="' . $length . '" type="' . $type . '" title="' . $title . '"[/attach]';
+ Post\Media::insert(['uri-id' => $item['uri-id'], 'type' => Post\Media::DOCUMENT,
+ 'url' => $href, 'mimetype' => $type, 'size' => $length, 'description' => $title]);
break;
}
}
$taglist = Tag::getByURIId($item['uri-id'], [Tag::HASHTAG]);
$tags = array_column($taglist, 'name');
- return Relay::isSolicitedPost($tags, $item['body'], $item['uri'], Protocol::DFRN);
+ return Relay::isSolicitedPost($tags, $item['body'], $item['author-id'], $item['uri'], Protocol::DFRN);
}
/**