Merge pull request #9334 from annando/endless-scroll
authorPhilipp <admin+Github@philipp.info>
Thu, 1 Oct 2020 21:04:56 +0000 (23:04 +0200)
committerGitHub <noreply@github.com>
Thu, 1 Oct 2020 21:04:56 +0000 (23:04 +0200)
Endless scrolling for searches and contact comments

include/conversation.php
src/Model/Contact.php
src/Model/ItemContent.php
src/Model/Tag.php
src/Module/Search/Index.php
view/templates/search_item.tpl
view/theme/frio/templates/search_item.tpl
view/theme/quattro/templates/search_item.tpl
view/theme/smoothly/templates/search_item.tpl
view/theme/vier/templates/search_item.tpl

index 996d02d..f3df8db 100644 (file)
@@ -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']),
index f89945a..878f683 100644 (file)
@@ -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));
index daa2766..5268c49 100644 (file)
@@ -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'],
index c661892..7e99ae1 100644 (file)
@@ -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'],
index 7f5c7ab..82fe554 100644 (file)
@@ -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;
        }
index 4c6dcb7..ebf1c7c 100644 (file)
@@ -1,5 +1,9 @@
 
 <a name="{{$item.id}}" ></a>
+<span class="commented" style="display: none;">{{$item.commented}}</span>
+<span class="received" style="display: none;">{{$item.received}}</span>
+<span class="created" style="display: none;">{{$item.created_date}}</span>
+<span class="uriid" style="display: none;">{{$item.uriid}}</span>
 <div class="wall-item-outside-wrapper {{$item.indent}}{{$item.previewing}}" id="wall-item-outside-wrapper-{{$item.id}}" >
        <div class="wall-item-content-wrapper {{$item.indent}}" id="wall-item-content-wrapper-{{$item.id}}" >
                <div class="wall-item-info" id="wall-item-info-{{$item.id}}">
index d7a2292..b516d48 100644 (file)
@@ -7,6 +7,10 @@
 
 
 <div class="panel item-{{$item.id}}" id="item-{{$item.guid}}">
+       <span class="commented" style="display: none;">{{$item.commented}}</span>
+       <span class="received" style="display: none;">{{$item.received}}</span>
+       <span class="created" style="display: none;">{{$item.created_date}}</span>
+       <span class="uriid" style="display: none;">{{$item.uriid}}</span>
        <div class="wall-item-container panel-body{{$item.indent}} {{$item.shiny}} {{$item.previewing}}" >
                <div class="media">
                        {{* Put additional actions in a top-right dropdown menu *}}
index a7e7557..dca5d31 100644 (file)
@@ -1,3 +1,7 @@
+<span class="commented" style="display: none;">{{$item.commented}}</span>
+<span class="received" style="display: none;">{{$item.received}}</span>
+<span class="created" style="display: none;">{{$item.created_date}}</span>
+<span class="uriid" style="display: none;">{{$item.uriid}}</span>
 <div class="wall-item-decor">
        {{if $item.star}}<span class="icon s22 star {{$item.isstarred}}" id="starred-{{$item.id}}" title="{{$item.star.starred}}">{{$item.star.starred}}</span>{{/if}}
        {{if $item.lock}}<span class="icon s22 lock fakelink" onclick="lockview(event, 'item', {{$item.id}});" title="{{$item.lock}}">{{$item.lock}}</span>{{/if}}
index 5d0764d..d2fdb1c 100644 (file)
@@ -1,5 +1,8 @@
-
 <div class="wall-item-outside-wrapper {{$item.indent}} {{$item.shiny}}{{$item.previewing}}" id="wall-item-outside-wrapper-{{$item.id}}" >
+       <span class="commented" style="display: none;">{{$item.commented}}</span>
+       <span class="received" style="display: none;">{{$item.received}}</span>
+       <span class="created" style="display: none;">{{$item.created_date}}</span>
+       <span class="uriid" style="display: none;">{{$item.uriid}}</span>
        <div class="wall-item-content-wrapper {{$item.indent}} {{$item.shiny}}" id="wall-item-content-wrapper-{{$item.id}}" >
                <div class="wall-item-info" id="wall-item-info-{{$item.id}}">
                        <div class="wall-item-photo-wrapper mframe" id="wall-item-photo-wrapper-{{$item.id}}" 
index fd3a0a5..788d0ce 100644 (file)
@@ -1,5 +1,7 @@
-
-
+<span class="commented" style="display: none;">{{$item.commented}}</span>
+<span class="received" style="display: none;">{{$item.received}}</span>
+<span class="created" style="display: none;">{{$item.created_date}}</span>
+<span class="uriid" style="display: none;">{{$item.uriid}}</span>
 <div class="wall-item-decor">
        {{if $item.star}}<span class="icon star {{$item.isstarred}}" id="starred-{{$item.id}}" title="{{$item.star.starred}}">{{$item.star.starred}}</span>{{/if}}
        {{if $item.lock}}<span class="icon lock fakelink" onclick="lockview(event, 'item', {{$item.id}});" title="{{$item.lock}}">{{$item.lock}}</span>{{/if}}