summaryrefslogtreecommitdiff
path: root/app/Models/EntryDAO.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2025-10-15 00:12:19 +0200
committerGravatar GitHub <noreply@github.com> 2025-10-15 00:12:19 +0200
commit7e72033859f60f529d4d985da1e9cac0a691b2dc (patch)
treea37d63b30afaf78e259c065a367ed8ddeee22755 /app/Models/EntryDAO.php
parente070c3ed2bec4ea4a6c2a216a5c836d1e02ab381 (diff)
Filter on last user modified (#8093)
Example: `userdate:PT1H` to select only articles modified by user during the last hour Fix https://github.com/FreshRSS/FreshRSS/issues/4280#issuecomment-3393078024 Useful for instance to bulk mark as unread recently marked articles by error: 1. Click on the toggle button to show the read articles (making sure the toggle for the unread articles is off) 2. Sort by *User modified 9→1* 3. Filter by *user modified date*, for instance to the last 3 hours by typing `userdate:PT3H` 4. Click in the drop-down menu *Mark selection as unread* P.S.: I have added at the same time a bunch of unit tests for date-related logic
Diffstat (limited to 'app/Models/EntryDAO.php')
-rw-r--r--app/Models/EntryDAO.php23
1 files changed, 23 insertions, 0 deletions
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index 6eefd684c..c9fae7923 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -906,6 +906,14 @@ SQL;
$sub_search .= 'AND ' . $alias . 'date <= ? ';
$values[] = $filter->getMaxPubdate();
}
+ if ($filter->getMinUserdate() !== null) {
+ $sub_search .= 'AND ' . $alias . '`lastUserModified` >= ? ';
+ $values[] = $filter->getMinUserdate();
+ }
+ if ($filter->getMaxUserdate() !== null) {
+ $sub_search .= 'AND ' . $alias . '`lastUserModified` <= ? ';
+ $values[] = $filter->getMaxUserdate();
+ }
//Negation of date intervals must be combined by OR
if ($filter->getNotMinDate() !== null || $filter->getNotMaxDate() !== null) {
@@ -938,6 +946,21 @@ SQL;
}
$sub_search .= ') ';
}
+ if ($filter->getNotMinUserdate() !== null || $filter->getNotMaxUserdate() !== null) {
+ $sub_search .= 'AND (';
+ if ($filter->getNotMinUserdate() !== null) {
+ $sub_search .= $alias . '`lastUserModified` < ?';
+ $values[] = $filter->getNotMinUserdate();
+ if ($filter->getNotMaxUserdate()) {
+ $sub_search .= ' OR ';
+ }
+ }
+ if ($filter->getNotMaxUserdate() !== null) {
+ $sub_search .= $alias . '`lastUserModified` > ?';
+ $values[] = $filter->getNotMaxUserdate();
+ }
+ $sub_search .= ') ';
+ }
if ($filter->getFeedIds() !== null) {
$sub_search .= 'AND ' . $alias . 'id_feed IN (';