diff --git a/include/conversation.php b/include/conversation.php index 996d02d02..f3df8db01 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -585,6 +585,10 @@ function conversation(App $a, array $items, $mode, $update, $preview = false, $o 'template' => $tpl, 'id' => ($preview ? 'P0' : $item['id']), 'guid' => ($preview ? 'Q0' : $item['guid']), + 'commented' => $item['commented'], + 'received' => $item['received'], + 'created_date' => $item['created'], + 'uriid' => $item['uri-id'], 'network' => $item['network'], 'network_name' => ContactSelector::networkToName($item['author-network'], $item['author-link'], $item['network']), 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']), diff --git a/src/Model/Contact.php b/src/Model/Contact.php index f89945ae3..878f683b1 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1286,16 +1286,16 @@ class Contact if ($thread_mode) { $condition = ["(`$contact_field` = ? OR (`causer-id` = ? AND `post-type` = ?)) AND `gravity` = ? AND " . $sql, $cid, $cid, Item::PT_ANNOUNCEMENT, GRAVITY_PARENT, local_user()]; - - $last_received = isset($_GET['last_received']) ? DateTimeFormat::utc($_GET['last_received']) : ''; - if (!empty($last_received)) { - $condition = DBA::mergeConditions($condition, ["`received` < ?", $last_received]); - } } else { $condition = ["`$contact_field` = ? AND `gravity` IN (?, ?) AND " . $sql, $cid, GRAVITY_PARENT, GRAVITY_COMMENT, local_user()]; } + $last_received = isset($_GET['last_received']) ? DateTimeFormat::utc($_GET['last_received']) : ''; + if (!empty($last_received)) { + $condition = DBA::mergeConditions($condition, ["`received` < ?", $last_received]); + } + if (DI::mode()->isMobile()) { $itemsPerPage = DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network', DI::config()->get('system', 'itemspage_network_mobile')); @@ -1309,14 +1309,14 @@ class Contact $params = ['order' => ['received' => true], 'group_by' => ['uri-id'], 'limit' => [$pager->getStart(), $pager->getItemsPerPage()]]; - if ($thread_mode) { - if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { - $tpl = Renderer::getMarkupTemplate('infinite_scroll_head.tpl'); - $o = Renderer::replaceMacros($tpl, ['$reload_uri' => DI::args()->getQueryString()]); - } else { - $o = ''; - } - + if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { + $tpl = Renderer::getMarkupTemplate('infinite_scroll_head.tpl'); + $o = Renderer::replaceMacros($tpl, ['$reload_uri' => DI::args()->getQueryString()]); + } else { + $o = ''; + } + + if ($thread_mode) { $r = Item::selectForUser(local_user(), ['uri', 'gravity', 'parent-uri'], $condition, $params); $items = []; while ($item = DBA::fetch($r)) { @@ -1336,11 +1336,11 @@ class Contact $items = Item::inArray($r); - $o = conversation($a, $items, 'contact-posts', false); + $o .= conversation($a, $items, 'contact-posts', false); } if (!$update) { - if ($thread_mode && DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { + if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { $o .= HTML::scrollLoader(); } else { $o .= $pager->renderMinimal(count($items)); diff --git a/src/Model/ItemContent.php b/src/Model/ItemContent.php index daa2766e2..5268c49e9 100644 --- a/src/Model/ItemContent.php +++ b/src/Model/ItemContent.php @@ -29,10 +29,25 @@ use Friendica\DI; class ItemContent { - public static function getURIIdListBySearch(string $search, int $uid = 0, int $start = 0, int $limit = 100) + /** + * Search posts for given content + * + * @param string $search + * @param integer $uid + * @param integer $start + * @param integer $limit + * @param integer $last_uriid + * @return array + */ + public static function getURIIdListBySearch(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0) { $condition = ["`uri-id` IN (SELECT `uri-id` FROM `item-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE)) AND (NOT `private` OR (`private` AND `uid` = ?))", $search, $uid]; + + if (!empty($last_uriid)) { + $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]); + } + $params = [ 'order' => ['uri-id' => true], 'group_by' => ['uri-id'], diff --git a/src/Model/Tag.php b/src/Model/Tag.php index c661892ed..7e99ae1a3 100644 --- a/src/Model/Tag.php +++ b/src/Model/Tag.php @@ -462,11 +462,17 @@ class Tag * @param integer $uid * @param integer $start * @param integer $limit + * @param integer $last_uriid * @return array with URI-ID */ - public static function getURIIdListByTag(string $search, int $uid = 0, int $start = 0, int $limit = 100) + public static function getURIIdListByTag(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0) { $condition = ["`name` = ? AND (NOT `private` OR (`private` AND `uid` = ?))", $search, $uid]; + + if (!empty($last_uriid)) { + $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]); + } + $params = [ 'order' => ['uri-id' => true], 'group_by' => ['uri-id'], diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php index 7f5c7ab87..82fe5543a 100644 --- a/src/Module/Search/Index.php +++ b/src/Module/Search/Index.php @@ -155,15 +155,17 @@ class Index extends BaseSearch DI::config()->get('system', 'itemspage_network')); } + $last_uriid = isset($_GET['last_uriid']) ? intval($_GET['last_uriid']) : 0; +Logger::info('Blubb', ['uri' => $last_uriid]); $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), $itemsPerPage); if ($tag) { Logger::info('Start tag search.', ['q' => $search]); - $uriids = Tag::getURIIdListByTag($search, local_user(), $pager->getStart(), $pager->getItemsPerPage()); + $uriids = Tag::getURIIdListByTag($search, local_user(), $pager->getStart(), $pager->getItemsPerPage(), $last_uriid); $count = Tag::countByTag($search, local_user()); } else { Logger::info('Start fulltext search.', ['q' => $search]); - $uriids = ItemContent::getURIIdListBySearch($search, local_user(), $pager->getStart(), $pager->getItemsPerPage()); + $uriids = ItemContent::getURIIdListBySearch($search, local_user(), $pager->getStart(), $pager->getItemsPerPage(), $last_uriid); $count = ItemContent::countBySearch($search, local_user()); } @@ -177,6 +179,11 @@ class Index extends BaseSearch return $o; } + if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { + $tpl = Renderer::getMarkupTemplate('infinite_scroll_head.tpl'); + $o .= Renderer::replaceMacros($tpl, ['$reload_uri' => DI::args()->getQueryString()]); + } + if ($tag) { $title = DI::l10n()->t('Items tagged with: %s', $search); } else { @@ -191,7 +198,12 @@ class Index extends BaseSearch $o .= conversation(DI::app(), $items, 'search', false, false, 'commented', local_user()); - $o .= $pager->renderMinimal($count); + if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { + $o .= HTML::scrollLoader(); + } else { + $o .= $pager->renderMinimal($count); + } + return $o; } diff --git a/view/templates/search_item.tpl b/view/templates/search_item.tpl index 4c6dcb722..ebf1c7caf 100644 --- a/view/templates/search_item.tpl +++ b/view/templates/search_item.tpl @@ -1,5 +1,9 @@ + + + +