X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Ffeed.php;h=e0fef50dbbc6f7ed832e11451bf6bed47df3c9f6;hb=4812f4c0f93915c20e4b3a9727fe0535a9d72721;hp=5adb2294db0248e92b4b9ac3e81a9288c3866f11;hpb=2e9d233367068fceac8005126d14a2002539c772;p=friendica.git diff --git a/include/feed.php b/include/feed.php index 5adb2294db..e0fef50dbb 100644 --- a/include/feed.php +++ b/include/feed.php @@ -177,18 +177,6 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { foreach (array_reverse($entrylist) AS $entry) { $item = array_merge($header, $author); - $item["title"] = $xpath->evaluate('atom:title/text()', $entry)->item(0)->nodeValue; - - if ($item["title"] == "") - $item["title"] = $xpath->evaluate('title/text()', $entry)->item(0)->nodeValue; - - if ($item["title"] == "") - $item["title"] = $xpath->evaluate('rss:title/text()', $entry)->item(0)->nodeValue; - - $alternate = $xpath->query("atom:link[@rel='alternate']", $entry)->item(0)->attributes; - if (!is_object($alternate)) - $alternate = $xpath->query("atom:link", $entry)->item(0)->attributes; - if (is_object($alternate)) foreach($alternate AS $attributes) if ($attributes->name == "href") @@ -212,6 +200,27 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { $item["parent-uri"] = $item["uri"]; + if (!$simulate) { + $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')", + intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN)); + if ($r) { + logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG); + continue; + } + } + + $item["title"] = $xpath->evaluate('atom:title/text()', $entry)->item(0)->nodeValue; + + if ($item["title"] == "") + $item["title"] = $xpath->evaluate('title/text()', $entry)->item(0)->nodeValue; + + if ($item["title"] == "") + $item["title"] = $xpath->evaluate('rss:title/text()', $entry)->item(0)->nodeValue; + + $alternate = $xpath->query("atom:link[@rel='alternate']", $entry)->item(0)->attributes; + if (!is_object($alternate)) + $alternate = $xpath->query("atom:link", $entry)->item(0)->attributes; + $published = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue; if ($published == "") @@ -250,15 +259,6 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { if ($creator != "") $item["author-name"] = $creator; - if (!$simulate) { - $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')", - intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN)); - if ($r) { - logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG); - continue; - } - } - /// @TODO ? // Ausland // @@ -325,6 +325,14 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) { logger("Stored feed: ".print_r($item, true), LOGGER_DEBUG); $notify = item_is_remote_self($contact, $item); + + // Distributed items should have a well formatted URI. + // Additionally we have to avoid conflicts with identical URI between imported feeds and these items. + if ($notify) { + unset($item['uri']); + unset($item['parent-uri']); + } + $id = item_store($item, false, $notify); logger("Feed for contact ".$contact["url"]." stored under id ".$id);