X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FModule%2FConversation%2FCommunity.php;h=18332fe27e4cf1f5c4f20cee45e1aca654e74007;hb=5d61599964e74bb733816a5592eee2aed3bbba4e;hp=f9eeaa6fd944e0bcc40af4d99916865893204083;hpb=e3cf708dd819ffabe53fb299cad5cb76b24aaf5c;p=friendica.git diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php index f9eeaa6fd9..18332fe27e 100644 --- a/src/Module/Conversation/Community.php +++ b/src/Module/Conversation/Community.php @@ -1,6 +1,6 @@ get('system', 'community_no_sharer')) { $path = self::$content; @@ -98,8 +100,8 @@ class Community extends BaseModule } $query_parameters = []; - if (!empty($_GET['since_id'])) { - $query_parameters['since_id'] = $_GET['since_id']; + if (!empty($_GET['min_id'])) { + $query_parameters['min_id'] = $_GET['min_id']; } if (!empty($_GET['max_id'])) { $query_parameters['max_id'] = $_GET['max_id']; @@ -192,7 +194,8 @@ class Community extends BaseModule throw new HTTPException\ForbiddenException(DI::l10n()->t('Access denied.')); } - self::$accounttype = User::getAccountTypeByString($parameters['accounttype'] ?? ''); + self::$accountTypeString = $_GET['accounttype'] ?? $parameters['accounttype'] ?? ''; + self::$accountType = User::getAccountTypeByString(self::$accountTypeString); self::$content = $parameters['content'] ?? ''; if (!self::$content) { @@ -234,20 +237,14 @@ class Community extends BaseModule DI::config()->get('system', 'itemspage_network')); } - // now that we have the user settings, see if the theme forces - // a maximum item number which is lower then the user choice - if ((DI::app()->force_max_items > 0) && (DI::app()->force_max_items < self::$itemsPerPage)) { - self::$itemsPerPage = DI::app()->force_max_items; - } - if (!empty($_GET['item'])) { - $item = Item::selectFirst(['parent'], ['id' => $_GET['item']]); + $item = Post::selectFirst(['parent'], ['id' => $_GET['item']]); self::$item_id = $item['parent'] ?? 0; } else { self::$item_id = 0; } - self::$since_id = $_GET['since_id'] ?? null; + self::$min_id = $_GET['min_id'] ?? null; self::$max_id = $_GET['max_id'] ?? null; self::$max_id = $_GET['last_commented'] ?? self::$max_id; } @@ -263,7 +260,7 @@ class Community extends BaseModule */ protected static function getItems() { - $items = self::selectItems(self::$since_id, self::$max_id, self::$item_id, self::$itemsPerPage); + $items = self::selectItems(self::$min_id, self::$max_id, self::$item_id, self::$itemsPerPage); $maxpostperauthor = (int) DI::config()->get('system', 'max_author_posts_community_page'); if ($maxpostperauthor != 0 && self::$content == 'local') { @@ -288,14 +285,14 @@ class Community extends BaseModule // If we're looking at a "previous page", the lookup continues forward in time because the list is // sorted in chronologically decreasing order - if (isset(self::$since_id)) { - self::$since_id = $items[0]['commented']; + if (isset(self::$min_id)) { + self::$min_id = $items[0]['commented']; } else { // In any other case, the lookup continues backwards in time self::$max_id = $items[count($items) - 1]['commented']; } - $items = self::selectItems(self::$since_id, self::$max_id, self::$item_id, self::$itemsPerPage); + $items = self::selectItems(self::$min_id, self::$max_id, self::$item_id, self::$itemsPerPage); } } else { $selected_items = $items; @@ -307,26 +304,24 @@ class Community extends BaseModule /** * Database query for the comunity page * - * @param $since_id + * @param $min_id * @param $max_id * @param $itemspage * @return array * @throws \Exception * @TODO Move to repository/factory */ - private static function selectItems($since_id, $max_id, $item_id, $itemspage) + private static function selectItems($min_id, $max_id, $item_id, $itemspage) { - $r = false; - if (self::$content == 'local') { - if (!is_null(self::$accounttype)) { - $condition = ["`wall` AND `origin` AND `private` = ? AND `owner`.`contact-type` = ?", Item::PUBLIC, self::$accounttype]; + if (!is_null(self::$accountType)) { + $condition = ["`wall` AND `origin` AND `private` = ? AND `owner-contact-type` = ?", Item::PUBLIC, self::$accountType]; } else { $condition = ["`wall` AND `origin` AND `private` = ?", Item::PUBLIC]; } } elseif (self::$content == 'global') { - if (!is_null(self::$accounttype)) { - $condition = ["`uid` = ? AND `private` = ? AND `owner`.`contact-type` = ?", 0, Item::PUBLIC, self::$accounttype]; + if (!is_null(self::$accountType)) { + $condition = ["`uid` = ? AND `private` = ? AND `owner-contact-type` = ?", 0, Item::PUBLIC, self::$accountType]; } else { $condition = ["`uid` = ? AND `private` = ?", 0, Item::PUBLIC]; } @@ -334,12 +329,14 @@ class Community extends BaseModule return []; } + $params = ['order' => ['commented' => true], 'limit' => $itemspage]; + if (!empty($item_id)) { - $condition[0] .= " AND `iid` = ?"; + $condition[0] .= " AND `id` = ?"; $condition[] = $item_id; } else { if (local_user() && !empty($_REQUEST['no_sharer'])) { - $condition[0] .= " AND NOT EXISTS (SELECT `uri-id` FROM `thread` AS t1 WHERE `t1`.`uri-id` = `thread`.`uri-id` AND `t1`.`uid` = ?)"; + $condition[0] .= " AND NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-thread-user-view`.`uri-id` AND `post-user`.`uid` = ?)"; $condition[] = local_user(); } @@ -348,14 +345,29 @@ class Community extends BaseModule $condition[] = $max_id; } - if (isset($since_id)) { + if (isset($min_id)) { $condition[0] .= " AND `commented` > ?"; - $condition[] = $since_id; + $condition[] = $min_id; + + // Previous page case: we want the items closest to min_id but for that we need to reverse the query order + if (!isset($max_id)) { + $params['order']['commented'] = false; + } } } - $r = Item::selectThreadForUser(0, ['uri', 'commented', 'author-link'], $condition, ['order' => ['commented' => true], 'limit' => $itemspage]); + $r = Post::selectThreadForUser(0, ['uri-id', 'commented', 'author-link'], $condition, $params); + + $items = Post::toArray($r); + if (empty($items)) { + return []; + } + + // Previous page case: once we get the relevant items closest to min_id, we need to restore the expected display order + if (empty($item_id) && isset($min_id) && !isset($max_id)) { + $items = array_reverse($items); + } - return DBA::toArray($r); + return $items; } }