X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FFeed.php;h=35e2cd5778487d8611de09b4f389da0e86d1898d;hb=cc8491223ec17bd12b7f37d5b2cc16b58184291e;hp=cbd50a0976332b5c434740da3fc89b0b62367223;hpb=85dc9bb96b30819fcf544c9aa1013a8f380d6981;p=friendica.git diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index cbd50a0976..35e2cd5778 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -29,6 +29,7 @@ use Friendica\Core\Protocol; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Item; +use Friendica\Model\Tag; use Friendica\Util\Network; use Friendica\Util\ParseUrl; use Friendica\Util\XML; @@ -220,7 +221,7 @@ class Feed { $header["wall"] = 0; $header["origin"] = 0; $header["gravity"] = GRAVITY_PARENT; - $header["private"] = 2; + $header["private"] = Item::PUBLIC; $header["verb"] = Activity::POST; $header["object-type"] = Activity\ObjectType::NOTE; @@ -232,8 +233,16 @@ class Feed { } $items = []; + + // Limit the number of items that are about to be fetched + $total_items = ($entries->length - 1); + $max_items = DI::config()->get('system', 'max_feed_items'); + if (($max_items > 0) && ($total_items > $max_items)) { + $total_items = $max_items; + } + // Importing older entries first - for ($i = $entries->length - 1; $i >= 0; --$i) { + for ($i = $total_items; $i >= 0; --$i) { $entry = $entries->item($i); $item = array_merge($header, $author); @@ -376,16 +385,10 @@ class Feed { $item["attach"] .= '[attach]href="' . $href . '" length="' . $length . '" type="' . $type . '"[/attach]'; } - $tags = ''; + $taglist = []; $categories = $xpath->query("category", $entry); foreach ($categories AS $category) { - $hashtag = $category->nodeValue; - if ($tags != '') { - $tags .= ', '; - } - - $taglink = "#[url=" . DI::baseUrl() . "/search?tag=" . $hashtag . "]" . $hashtag . "[/url]"; - $tags .= $taglink; + $taglist[] = $category->nodeValue; } $body = trim(XML::getFirstNodeValue($xpath, 'atom:content/text()', $entry)); @@ -466,7 +469,7 @@ class Feed { // We always strip the title since it will be added in the page information $item["title"] = ""; $item["body"] = $item["body"] . add_page_info($item["plink"], false, $preview, ($contact["fetch_further_information"] == 2), $contact["ffi_keyword_blacklist"]); - $item["tag"] = add_page_keywords($item["plink"], $preview, ($contact["fetch_further_information"] == 2), $contact["ffi_keyword_blacklist"]); + $taglist = get_page_keywords($item["plink"], $preview, ($contact["fetch_further_information"] == 2), $contact["ffi_keyword_blacklist"]); $item["object-type"] = Activity\ObjectType::BOOKMARK; unset($item["attach"]); } else { @@ -475,13 +478,12 @@ class Feed { } if (!empty($contact["fetch_further_information"]) && ($contact["fetch_further_information"] == 3)) { - if (!empty($tags)) { - $item["tag"] = $tags; - } else { - // @todo $preview is never set in this case, is it intended? - @MrPetovan 2018-02-13 - $item["tag"] = add_page_keywords($item["plink"], $preview, true, $contact["ffi_keyword_blacklist"]); + if (empty($taglist)) { + $taglist = get_page_keywords($item["plink"], $preview, true, $contact["ffi_keyword_blacklist"]); } - $item["body"] .= "\n" . $item['tag']; + $item["body"] .= "\n" . self::tagToString($taglist); + } else { + $taglist = []; } // Add the link to the original feed entry if not present in feed @@ -509,15 +511,43 @@ class Feed { $notify = PRIORITY_MEDIUM; } - $id = Item::insert($item, false, $notify); + $id = Item::insert($item, $notify); Logger::info("Feed for contact " . $contact["url"] . " stored under id " . $id); + + if (!empty($id) && !empty($taglist)) { + $feeditem = Item::selectFirst(['uri-id'], ['id' => $id]); + foreach ($taglist as $tag) { + Tag::store($feeditem['uri-id'], Tag::HASHTAG, $tag); + } + } } } return ["header" => $author, "items" => $items]; } + /** + * Convert a tag array to a tag string + * + * @param array $tags + * @return string tag string + */ + private static function tagToString(array $tags) + { + $tagstr = ''; + + foreach ($tags as $tag) { + if ($tagstr != "") { + $tagstr .= ", "; + } + + $tagstr .= "#[url=" . DI::baseUrl() . "/search?tag=" . urlencode($tag) . "]" . $tag . "[/url]"; + } + + return $tagstr; + } + private static function titleIsBody($title, $body) { $title = strip_tags($title);