Endless scrolling for searches and contact comments
This commit is contained in:
		
					parent
					
						
							
								0b37f1d56c
							
						
					
				
			
			
				commit
				
					
						88a0e976da
					
				
			
		
					 10 changed files with 77 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -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));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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'],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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'],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue