use Friendica\Core\ACL;
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
+use Friendica\Core\Session;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Group;
use Friendica\Model\Item;
+use Friendica\Model\Post;
use Friendica\Model\Profile;
use Friendica\Model\User;
use Friendica\Module\Contact as ModuleContact;
private static $min_id;
/** @var mixed */
private static $max_id;
+ /** @var string */
+ private static $accountTypeString;
/** @var int */
private static $accountType;
/** @var string */
$module = 'network';
- DI::page()['aside'] .= Widget::accounts($module . '/accounttype', self::$accountType);
+ DI::page()['aside'] .= Widget::accounttypes($module, self::$accountTypeString);
DI::page()['aside'] .= Group::sidebarWidget($module, $module . '/group', 'standard', self::$groupId);
DI::page()['aside'] .= ForumManager::widget($module . '/forum', local_user(), self::$forumContactId);
DI::page()['aside'] .= Widget::postedByYear($module . '/archive', local_user(), false);
$pager = new BoundariesPager(
DI::l10n(),
DI::args()->getQueryString(),
- $items[0][self::$order],
- $items[count($items) - 1][self::$order],
+ $items[0][self::$order] ?? null,
+ $items[count($items) - 1][self::$order] ?? null,
self::$itemsPerPage
);
return;
}
- $unseen = Item::exists($condition);
+ $unseen = Post::exists($condition);
if ($unseen) {
+ /// @todo handle huge "unseen" updates in the background to avoid timeout errors
Item::update(['unseen' => false], $condition);
}
}
self::$forumContactId = $parameters['contact_id'] ?? 0;
- self::$selectedTab = DI::pConfig()->get(local_user(), 'network.view', 'selected_tab', '');
+ self::$selectedTab = Session::get('network-tab', DI::pConfig()->get(local_user(), 'network.view', 'selected_tab', ''));
+
+ self::$order = 'commented';
if (!empty($get['star'])) {
self::$selectedTab = 'star';
+ self::$star = true;
+ } else {
+ self::$star = self::$selectedTab == 'star';
}
if (!empty($get['mention'])) {
self::$selectedTab = 'mention';
+ self::$mention = true;
+ } else {
+ self::$mention = self::$selectedTab == 'mention';
}
if (!empty($get['order'])) {
self::$selectedTab = $get['order'];
+ self::$order = $get['order'];
+ self::$star = false;
+ self::$mention = false;
+ } elseif (in_array(self::$selectedTab, ['received', 'star', 'mention'])) {
+ self::$order = 'received';
}
- DI::pConfig()->set(local_user(), 'network.view', 'selected_tab', self::$selectedTab);
+ self::$selectedTab = self::$selectedTab ?? self::$order;
- self::$star = intval($get['star'] ?? 0);
- self::$mention = intval($_GET['mention'] ?? 0);
- self::$order = in_array(self::$selectedTab, ['received', 'commented', 'created', 'uriid']) ? self::$selectedTab : 'commented';
+ // Prohibit combined usage of "star" and "mention"
+ if (self::$selectedTab == 'star') {
+ self::$mention = false;
+ } elseif (self::$selectedTab == 'mention') {
+ self::$star = false;
+ }
- self::$accountType = User::getAccountTypeByString($parameters['accounttype'] ?? '') ?? '';
+ Session::set('network-tab', self::$selectedTab);
+ DI::pConfig()->set(local_user(), 'network.view', 'selected_tab', self::$selectedTab);
+
+ self::$accountTypeString = $get['accounttype'] ?? $parameters['accounttype'] ?? '';
+ self::$accountType = User::getAccountTypeByString(self::$accountTypeString);
self::$network = $get['nets'] ?? '';
DI::config()->get('system', 'itemspage_network'));
}
- self::$min_id = $_GET['min_id'] ?? null;
- self::$max_id = $_GET['max_id'] ?? null;
+ self::$min_id = $get['min_id'] ?? null;
+ self::$max_id = $get['max_id'] ?? null;
- switch (self::$selectedTab) {
+ switch (self::$order) {
case 'received':
- self::$max_id = $_GET['last_received'] ?? self::$max_id;
- break;
- case 'commented':
- self::$max_id = $_GET['last_commented'] ?? self::$max_id;
+ self::$max_id = $get['last_received'] ?? self::$max_id;
break;
case 'created':
- self::$max_id = $_GET['last_created'] ?? self::$max_id;
+ self::$max_id = $get['last_created'] ?? self::$max_id;
break;
case 'uriid':
- self::$max_id = $_GET['last_uriid'] ?? self::$max_id;
+ self::$max_id = $get['last_uriid'] ?? self::$max_id;
break;
+ default:
+ self::$order = 'commented';
+ self::$max_id = $get['last_commented'] ?? self::$max_id;
}
}
$conditionFields['uid'] = local_user();
$conditionStrings = [];
- if (self::$accountType) {
+ if (!is_null(self::$accountType)) {
$conditionFields['contact-type'] = self::$accountType;
}
$items = array_reverse($items);
}
- $parents_str = '';
if (DBA::isResult($items)) {
- $parents_arr = [];
-
- foreach ($items as $item) {
- if (!in_array($item['parent'], $parents_arr) && ($item['parent'] > 0)) {
- $parents_arr[] = $item['parent'];
- }
- }
- $parents_str = implode(', ', $parents_arr);
+ $parents = array_column($items, 'parent-uri-id');
+ } else {
+ $parents = [];
}
// We aren't going to try and figure out at the item, group, and page
// level which items you've seen and which you haven't. If you're looking
// at the top level network page just mark everything seen.
- if (!self::$groupId && !self::$forumContactId && self::$selectedTab != 'star') {
+ if (!self::$groupId && !self::$forumContactId && !self::$star && !self::$mention) {
$condition = ['unseen' => true, 'uid' => local_user()];
self::setItemsSeenByCondition($condition);
- } elseif ($parents_str) {
- $condition = ["`uid` = ? AND `unseen` AND `parent` IN (" . DBA::escape($parents_str) . ")", local_user()];
+ } elseif (!empty($parents)) {
+ $condition = ['unseen' => true, 'uid' => local_user(), 'parent-uri-id' => $parents];
self::setItemsSeenByCondition($condition);
}