aboutsummaryrefslogtreecommitdiff
path: root/app/Models
diff options
context:
space:
mode:
authorGravatar Alexis Degrugillier <aledeg@users.noreply.github.com> 2019-10-26 13:16:15 +0200
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2019-10-26 13:16:15 +0200
commitf6e10579f2e78dc6403141351e41e2db9a2b6e97 (patch)
tree0dd0421974262942e76c3bf4ce404a31aa2d7f2a /app/Models
parent3c49986ec895595edc632da0f14419199ce47667 (diff)
Add category order (#2592)
* Add category order Each category has a new 'priority' attribute. It is used to sort categories in views. Categories with the same priority are sorted alphabetically. Categories with no priority are displayed after those with one. For example, if we have the following categories: - A (priority: 2) - B (no priority) - C (priority: 1) - D (priority: 2) - E (no priority) - F (priority: 1) They will be displayed in the following order: - C - F - A - D - B - E See #190 * Shorten help text It took too much room and will not be so necessary once we have drag & drop
Diffstat (limited to 'app/Models')
-rw-r--r--app/Models/Category.php4
-rw-r--r--app/Models/CategoryDAO.php25
2 files changed, 27 insertions, 2 deletions
diff --git a/app/Models/Category.php b/app/Models/Category.php
index a0ee1ddaa..a195c88b3 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -98,14 +98,14 @@ class FreshRSS_Category extends Minz_Model {
}
public function _attributes($key, $value) {
- if ($key == '') {
+ if ('' == $key) {
if (is_string($value)) {
$value = json_decode($value, true);
}
if (is_array($value)) {
$this->attributes = $value;
}
- } elseif ($value === null) {
+ } elseif (null === $value) {
unset($this->attributes[$key]);
} else {
$this->attributes[$key] = $value;
diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php
index 210830640..a0eda89e7 100644
--- a/app/Models/CategoryDAO.php
+++ b/app/Models/CategoryDAO.php
@@ -201,6 +201,29 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
}
}
+ public function listSortedCategories($prePopulateFeeds = true, $details = false) {
+ $categories = $this->listCategories($prePopulateFeeds, $details);
+
+ if (!is_array($categories)) {
+ return $categories;
+ }
+
+ usort($categories, function ($a, $b) {
+ $aPosition = $a->attributes('position');
+ $bPosition = $b->attributes('position');
+ if ($aPosition === $bPosition) {
+ return ($a->name() < $b->name()) ? -1 : 1;
+ } elseif (null === $aPosition) {
+ return 1;
+ } elseif (null === $bPosition) {
+ return -1;
+ }
+ return ($aPosition < $bPosition) ? -1 : 1;
+ });
+
+ return $categories;
+ }
+
public function listCategories($prePopulateFeeds = true, $details = false) {
if ($prePopulateFeeds) {
$sql = 'SELECT c.id AS c_id, c.name AS c_name, c.attributes AS c_attributes, '
@@ -343,6 +366,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
$feedDao->daoToFeed($feedsDao, $previousLine['c_id'])
);
$cat->_id($previousLine['c_id']);
+ $cat->_attributes('', $previousLine['c_attributes']);
$list[$previousLine['c_id']] = $cat;
$feedsDao = array(); //Prepare for next category
@@ -359,6 +383,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
$feedDao->daoToFeed($feedsDao, $previousLine['c_id'])
);
$cat->_id($previousLine['c_id']);
+ $cat->_attributes('', $previousLine['c_attributes']);
$list[$previousLine['c_id']] = $cat;
}