diff options
Diffstat (limited to 'app/Controllers')
| -rw-r--r-- | app/Controllers/categoryController.php | 16 | ||||
| -rw-r--r-- | app/Controllers/configureController.php | 32 | ||||
| -rw-r--r-- | app/Controllers/indexController.php | 20 | ||||
| -rw-r--r-- | app/Controllers/subscriptionController.php | 16 |
4 files changed, 77 insertions, 7 deletions
diff --git a/app/Controllers/categoryController.php b/app/Controllers/categoryController.php index 9bea88a1f..ffd6e68b8 100644 --- a/app/Controllers/categoryController.php +++ b/app/Controllers/categoryController.php @@ -150,6 +150,22 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController { $category->_attribute('opml_url', null); } + $defaultSortOrder = Minz_Request::paramString('defaultSortOrder', plaintext: true); + if (str_ends_with($defaultSortOrder, '_asc')) { + $category->_attribute('defaultOrder', 'ASC'); + $defaultSortOrder = substr($defaultSortOrder, 0, -strlen('_asc')); + } elseif (str_ends_with($defaultSortOrder, '_desc')) { + $category->_attribute('defaultOrder', 'DESC'); + $defaultSortOrder = substr($defaultSortOrder, 0, -strlen('_desc')); + } else { + $category->_attribute('defaultOrder'); + } + if (in_array($defaultSortOrder, ['id', 'date', 'link', 'title', 'length', 'f.name', 'rand'], true)) { + $category->_attribute('defaultSort', $defaultSortOrder); + } else { + $category->_attribute('defaultSort'); + } + $values = [ 'kind' => $category->kind(), 'name' => Minz_Request::paramString('name'), diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 3153cb8c8..00a27f0e7 100644 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -149,11 +149,39 @@ class FreshRSS_configure_Controller extends FreshRSS_ActionController { FreshRSS_Context::userConf()->reading_confirm = Minz_Request::paramBoolean('reading_confirm'); FreshRSS_Context::userConf()->auto_remove_article = Minz_Request::paramBoolean('auto_remove_article'); FreshRSS_Context::userConf()->mark_updated_article_unread = Minz_Request::paramBoolean('mark_updated_article_unread'); - if (in_array(Minz_Request::paramString('sort_order'), ['ASC', 'DESC'], true)) { - FreshRSS_Context::userConf()->sort_order = Minz_Request::paramString('sort_order'); + + $sorting = Minz_Request::paramString('primary_sort', plaintext: true); + if (str_ends_with($sorting, '_asc')) { + FreshRSS_Context::userConf()->sort_order = 'ASC'; + $sorting = substr($sorting, 0, -strlen('_asc')); + } elseif (str_ends_with($sorting, '_desc')) { + FreshRSS_Context::userConf()->sort_order = 'DESC'; + $sorting = substr($sorting, 0, -strlen('_desc')); } else { FreshRSS_Context::userConf()->sort_order = 'DESC'; } + if (in_array($sorting, ['id', 'c.name', 'date', 'f.name', 'length', 'link', 'title', 'rand'], true)) { + FreshRSS_Context::userConf()->sort = $sorting; + } else { + FreshRSS_Context::userConf()->sort = 'id'; + } + + $sorting = Minz_Request::paramString('secondary_sort', plaintext: true); + if (str_ends_with($sorting, '_asc')) { + FreshRSS_Context::userConf()->secondary_sort_order = 'ASC'; + $sorting = substr($sorting, 0, -strlen('_asc')); + } elseif (str_ends_with($sorting, '_desc')) { + FreshRSS_Context::userConf()->secondary_sort_order = 'DESC'; + $sorting = substr($sorting, 0, -strlen('_desc')); + } else { + FreshRSS_Context::userConf()->secondary_sort_order = 'DESC'; + } + if (in_array($sorting, ['id', 'date', 'link', 'title'], true)) { + FreshRSS_Context::userConf()->secondary_sort = $sorting; + } else { + FreshRSS_Context::userConf()->secondary_sort = 'id'; + } + FreshRSS_Context::userConf()->mark_when = [ 'article' => Minz_Request::paramBoolean('mark_open_article'), 'gone' => Minz_Request::paramBoolean('read_upon_gone'), diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 17975fa86..7fe1e43a0 100644 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -367,15 +367,24 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController { 'c.name' => $pagingEntry->feed()?->categoryId() === FreshRSS_CategoryDAO::DEFAULTCATEGORYID ? FreshRSS_CategoryDAO::DEFAULT_CATEGORY_NAME : $pagingEntry->feed()?->category()?->name() ?? '', 'date' => $pagingEntry->date(raw: true), - 'f.name' => $pagingEntry->feed()?->name() ?? '', + 'f.name' => $pagingEntry->feed()?->name(raw: true) ?? '', 'link' => $pagingEntry->link(raw: true), 'title' => $pagingEntry->title(), 'lastUserModified' => $pagingEntry->lastUserModified(), 'length' => $pagingEntry->sqlContentLength() ?? 0, }; - if ($pagingEntry !== null && FreshRSS_Context::$sort === 'c.name') { - // Secondary sort criterion - $continuation_values[] = $pagingEntry->feed()?->name() ?? ''; + if (FreshRSS_Context::$sort === 'c.name') { + // Internal secondary sort criterion for category name + $continuation_values[] = $pagingEntry?->feed()?->name(raw: true) ?? ''; + } + if (in_array(FreshRSS_Context::$sort, ['c.name', 'f.name'], true)) { + // User secondary sort criterion + $continuation_values[] = $pagingEntry === null ? 0 : match (FreshRSS_Context::$secondary_sort) { + 'id' => $pagingEntry->id(), + 'date' => $pagingEntry->date(raw: true), + 'link' => $pagingEntry->link(raw: true), + 'title' => $pagingEntry->title(), + }; } } elseif (FreshRSS_Context::$sort === 'rand') { FreshRSS_Context::$continuation_id = '0'; @@ -386,7 +395,8 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController { $type, $id, FreshRSS_Context::$state, FreshRSS_Context::$search, id_min: $id_min, id_max: FreshRSS_Context::$id_max, sort: FreshRSS_Context::$sort, order: FreshRSS_Context::$order, continuation_id: FreshRSS_Context::$continuation_id, continuation_values: $continuation_values, - limit: $postsPerPage ?? FreshRSS_Context::$number, offset: FreshRSS_Context::$offset) as $entry) { + limit: $postsPerPage ?? FreshRSS_Context::$number, offset: FreshRSS_Context::$offset, + secondary_sort: FreshRSS_Context::$secondary_sort, secondary_sort_order: FreshRSS_Context::$secondary_sort_order) as $entry) { yield $entry; } } diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index eb9fbf58f..be2dc5f70 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -334,6 +334,22 @@ class FreshRSS_subscription_Controller extends FreshRSS_ActionController { $feed->resetCustomFavicon(); } + $defaultSortOrder = Minz_Request::paramString('defaultSortOrder', plaintext: true); + if (str_ends_with($defaultSortOrder, '_asc')) { + $feed->_attribute('defaultOrder', 'ASC'); + $defaultSortOrder = substr($defaultSortOrder, 0, -strlen('_asc')); + } elseif (str_ends_with($defaultSortOrder, '_desc')) { + $feed->_attribute('defaultOrder', 'DESC'); + $defaultSortOrder = substr($defaultSortOrder, 0, -strlen('_desc')); + } else { + $feed->_attribute('defaultOrder'); + } + if (in_array($defaultSortOrder, ['id', 'date', 'link', 'title', 'length', 'rand'], true)) { + $feed->_attribute('defaultSort', $defaultSortOrder); + } else { + $feed->_attribute('defaultSort'); + } + $values = [ 'name' => Minz_Request::paramString('name'), 'kind' => $feed->kind(), |
