aboutsummaryrefslogtreecommitdiff
path: root/app/Controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controllers')
-rw-r--r--app/Controllers/categoryController.php16
-rw-r--r--app/Controllers/configureController.php32
-rw-r--r--app/Controllers/indexController.php20
-rw-r--r--app/Controllers/subscriptionController.php16
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(),