diff options
| author | 2025-10-15 00:12:19 +0200 | |
|---|---|---|
| committer | 2025-10-15 00:12:19 +0200 | |
| commit | 7e72033859f60f529d4d985da1e9cac0a691b2dc (patch) | |
| tree | a37d63b30afaf78e259c065a367ed8ddeee22755 /app/Models/EntryDAO.php | |
| parent | e070c3ed2bec4ea4a6c2a216a5c836d1e02ab381 (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.php | 23 |
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 ('; |
