]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/Feed.php
Merge pull request #8948 from annando/remove-gcontact
[friendica.git] / src / Protocol / Feed.php
index 1899f93beec0fbc5cebd299033c1b4e9f9cc1785..9aab4f52c6b92aa864d86f8c07a2aae590f88f47 100644 (file)
@@ -35,6 +35,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Item;
 use Friendica\Model\Tag;
 use Friendica\Model\User;
+use Friendica\Network\HTTPRequest;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
 use Friendica\Util\ParseUrl;
@@ -350,7 +351,7 @@ class Feed
 
                        $orig_plink = $item["plink"];
 
-                       $item["plink"] = Network::finalUrl($item["plink"]);
+                       $item["plink"] = DI::httpRequest()->finalUrl($item["plink"]);
 
                        $item["parent-uri"] = $item["uri"];
 
@@ -645,7 +646,7 @@ class Feed
                return ($title == $body);
        }
 
-               /**
+       /**
         * Creates the Atom feed for a given nickname
         *
         * Supported filters:
@@ -870,11 +871,7 @@ class Feed
                        return false;
                }
 
-               $contact = Contact::getByURL($repeated_item['author-link']) ?: $owner;
-
-               $title = $owner["nick"]." repeated a notice by ".$contact["nick"];
-
-               self::entryContent($doc, $entry, $item, $owner, $title, Activity::SHARE, false);
+               self::entryContent($doc, $entry, $item, self::getTitle($repeated_item), Activity::SHARE, false);
 
                self::entryFooter($doc, $entry, $item, $owner);
 
@@ -899,15 +896,9 @@ class Feed
                        Logger::info('Feed entry author does not match feed owner', ['owner' => $owner["url"], 'author' => $item["author-link"]]);
                }
 
-               if (!empty($item['title'])) {
-                       $title = BBCode::convert($item['title'], false, BBCode::OSTATUS);
-               } else {
-                       $title = sprintf("New note by %s", $owner["nick"]);
-               }
-
                $entry = OStatus::entryHeader($doc, $owner, $item, false);
 
-               self::entryContent($doc, $entry, $item, $title, '', true);
+               self::entryContent($doc, $entry, $item, self::getTitle($item), '', true);
 
                self::entryFooter($doc, $entry, $item, $owner);
 
@@ -1007,4 +998,37 @@ class Feed
 
                OStatus::getAttachment($doc, $entry, $item);
        }
+
+       /**
+        * Fetch or create title for feed entry
+        *
+        * @param array $item
+        * @return string title
+        */
+       private static function getTitle(array $item)
+       {
+               if ($item['title'] != '') {
+                       return BBCode::convert($item['title'], false, BBCode::OSTATUS);
+               }
+
+               // Fetch information about the post
+               $siteinfo = BBCode::getAttachedData($item["body"]);
+               if (isset($siteinfo["title"])) {
+                       return $siteinfo["title"];
+               }
+
+               // If no bookmark is found then take the first line
+               // Remove the share element before fetching the first line
+               $title = trim(preg_replace("/\[share.*?\](.*?)\[\/share\]/ism","\n$1\n",$item['body']));
+
+               $title = HTML::toPlaintext(BBCode::convert($title, false), 0, true)."\n";
+               $pos = strpos($title, "\n");
+               $trailer = "";
+               if (($pos == 0) || ($pos > 100)) {
+                       $pos = 100;
+                       $trailer = "...";
+               }
+
+               return substr($title, 0, $pos) . $trailer;
+       }
 }