]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Conversation/Network.php
Merge pull request #9823 from MrPetovan/task/9677-2fa-remember-device
[friendica.git] / src / Module / Conversation / Network.php
index f21b3816a6848cf5111824816331a251a3fd59e0..f3a60b48f8417432c1a26250b13054a9288f981e 100644 (file)
@@ -11,11 +11,13 @@ use Friendica\Content\Text\HTML;
 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;
@@ -191,8 +193,8 @@ class Network extends BaseModule
                        $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
                        );
 
@@ -214,9 +216,10 @@ class Network extends BaseModule
                        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);
                }
        }
@@ -282,27 +285,37 @@ class Network extends BaseModule
 
                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'];
+               } 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';
+               Session::set('network-tab', self::$selectedTab);
+               DI::pConfig()->set(local_user(), 'network.view', 'selected_tab', self::$selectedTab);
 
-               self::$accountTypeString = $_GET['accounttype'] ?? $parameters['accounttype'] ?? '';
+               self::$accountTypeString = $get['accounttype'] ?? $parameters['accounttype'] ?? '';
                self::$accountType = User::getAccountTypeByString(self::$accountTypeString);
 
                self::$network = $get['nets'] ?? '';
@@ -318,22 +331,22 @@ class Network extends BaseModule
                                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;
                }
        }
 
@@ -420,26 +433,20 @@ class Network extends BaseModule
                        $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');
+               } 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' => $parents];
                        self::setItemsSeenByCondition($condition);
                }