<feed xmlns='http://www.w3.org/2005/Atom'>
<title>FreshRSS (Customized)/app/Models/FeedDAO.php, branch custom</title>
<subtitle>Customized version of FreshRSS, a self-hosted RSS feed aggregator</subtitle>
<id>https://git.rdnlsmith.com/fresh-rss-custom/atom?h=custom</id>
<link rel='self' href='https://git.rdnlsmith.com/fresh-rss-custom/atom?h=custom'/>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/'/>
<updated>2026-05-10T14:47:24+00:00</updated>
<entry>
<title>More feed info: last received date, publication date (#8799)</title>
<updated>2026-05-10T14:47:24+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2026-05-10T14:47:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=cb04c6cfaac01c9d7982428be969762cd6509fd5'/>
<id>urn:sha1:cb04c6cfaac01c9d7982428be969762cd6509fd5</id>
<content type='text'>
* More feed info: last received date, publication date
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/8670

* Fix &lt;br /&gt;

* Change i18n English</content>
</entry>
<entry>
<title>Show time since when a feed has problems + new timeago() method and i18n plurals (#8670)</title>
<updated>2026-04-07T20:56:02+00:00</updated>
<author>
<name>Christian Weiske</name>
<email>cweiske@cweiske.de</email>
</author>
<published>2026-04-07T20:56:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=1acc6462220c0783ca78c8584f0a128f0d791aad'/>
<id>urn:sha1:1acc6462220c0783ca78c8584f0a128f0d791aad</id>
<content type='text'>
Closes https://github.com/FreshRSS/FreshRSS/issues/8508

Changes proposed in this pull request:

- Use an integer for `Feed::error` everywhere (follow up to #8646)
- Extract `Entry::machineReadableDate()` into function for use in HTML templates
- Add `timeago()` function that converts a unix timestamp into a "4 weeks ago" string
- Show the last successful feed update, and the last erroneous update

How to test the feature manually:

1. Update a feed
2. Modify the feed URL in the database and set it to a non-existing URL
3. Update the feed again
4. Open the "Manage feed" and see the expanded error message:

&gt;  Blast! This feed has encountered a problem. If this situation persists, please verify that it is still reachable.
&gt; Last successful update 3 hours ago, last erroneous update 1 hour ago. 

You can hover the relative dates to see the timestamp.

* Make Feed::error an int everywhere

Related: https://github.com/FreshRSS/FreshRSS/pull/8646

* Extract timestamptomachinedate()

.. for later usage in the feed error time display.

* Show time since when a feed has problems

We add our own "timeago" function that converts a unix timestamp
into a "4 weeks ago" string.

Resolves: https://github.com/FreshRSS/FreshRSS/issues/8508

* Add new translation keys

* i18n fr, en-US

* Minor XHTML preference

* Slightly shorter rewrite, also hopefully easier to read

* Rewrite to allow (simple) plural
I also moved some functions around for hopefully a more generic and better structure.
I made some changes for the sake of speed (e.g. second-based logic instead of datetime intervals).
Note: I used automatic translation as I was worried it would be too complicated to explain to translators... I proofread the few languages I have some familiarity with.

* Add reference to CLDR

* Slightly more compact syntax

* Always show last update, fix case of unknown error date

* Remove forgotten span

* No need for multi-lines anymore

* Fix error date thresshold

* plurals forms

* Extract gettext formula conversion script to cli

* Simplify a bit

* Escort excess parentheses to the door

* Simplify

* Avoid being too clever in localization

* Fix German

* Fix plural TODO parsing

* Ignore en-US translation

* make fix-all

* git update-index --chmod=+x cli/compile.plurals.php

* Heredoc indent PHP 7.3+

* compileAll: Continue on error

* PHP strict comparisons

* Light logical simplification

* Cache plural_message_families

* Avoid case of empty value

* A bit of documentation

---------

Co-authored-by: Alexandre Alapetite &lt;alexandre@alapetite.fr&gt;
Co-authored-by: Frans de Jonge &lt;frans@clevercast.com&gt;
Co-authored-by: Frans de Jonge &lt;fransdejonge@gmail.com&gt;</content>
</entry>
<entry>
<title>Fix entry-&gt;lastSeen in case of feed errors (#8646)</title>
<updated>2026-04-02T10:30:51+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2026-04-02T10:30:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=3fac1bdf201f0831db083ece6bf4c8c56a0ad91a'/>
<id>urn:sha1:3fac1bdf201f0831db083ece6bf4c8c56a0ad91a</id>
<content type='text'>
* Fix entry-&gt;lastSeen in case of feed errors
Fix https://github.com/FreshRSS/FreshRSS/issues/8643
Fix lastSeen and feed's lastUpdate going out of sync

Previous related PRs:
* https://github.com/FreshRSS/FreshRSS/pull/5404
* https://github.com/FreshRSS/FreshRSS/pull/5382
* https://github.com/FreshRSS/FreshRSS/pull/5315

* Minor uneeded change</content>
</entry>
<entry>
<title>SQL improve PHP syntax uniformity (#8604)</title>
<updated>2026-03-15T13:44:39+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2026-03-15T13:44:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=aeb55693e4b44b59cb25168032e1411f0c7a7f9c'/>
<id>urn:sha1:aeb55693e4b44b59cb25168032e1411f0c7a7f9c</id>
<content type='text'>
* New SQL wrapper function `fetchInt()`
* Favour use of `fetchAssoc()`, `fetchInt()`, `fetchColumn()`
* Favour Nowdoc / Heredoc syntax for SQL
    * Update indenting to PHP 8.1+ convention
* Favour `bindValue()` instead of position `?` when possible
* Favour `bindValue()` over `bindParam()`
* More uniform and robust syntax when using `bindValue()`, checking return code</content>
</entry>
<entry>
<title>Handle null in base64_encode (#8321)</title>
<updated>2025-12-16T17:53:00+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-12-16T17:53:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=6952a13958417e8441645d0777597db679d0e28d'/>
<id>urn:sha1:6952a13958417e8441645d0777597db679d0e28d</id>
<content type='text'>
* Handle null in base64_encode
https://github.com/FreshRSS/FreshRSS/discussions/8314#discussioncomment-15269370

* PHPDoc</content>
</entry>
<entry>
<title>Fix MariaDB updateCachedValues (#8255)</title>
<updated>2025-11-26T22:47:29+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-26T22:47:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=5e0093aa00a6b52df88f526a5b6f737eff057e0b'/>
<id>urn:sha1:5e0093aa00a6b52df88f526a5b6f737eff057e0b</id>
<content type='text'>
Changed syntax for an even wider compatibility.
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/8254
Regression from https://github.com/FreshRSS/FreshRSS/pull/6957
MariaDB images on Docker Hub go back to 10.6, so changed documentation to indicate support from that version, as I cannot easily test even older versions.</content>
</entry>
<entry>
<title>Fix MariaDB for updates (#8254)</title>
<updated>2025-11-26T15:47:40+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-26T15:47:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=b3cfc387b8f0583eb652a9d61691dbc6119771ea'/>
<id>urn:sha1:b3cfc387b8f0583eb652a9d61691dbc6119771ea</id>
<content type='text'>
fix https://github.com/FreshRSS/FreshRSS/issues/8252
regression from https://github.com/FreshRSS/FreshRSS/pull/6957
The current code works with MySQL 8+ (as well as PostgreSQL and SQLite), but not with MariaDB, because MariaDB does not support CTE (Common Table Expression) fully (which I was not aware of)...
</content>
</entry>
<entry>
<title>Change SQL update query (#6957)</title>
<updated>2025-11-17T12:48:48+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-17T12:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=deb7633c4932d1838cb0a67aebdab5e37aae7206'/>
<id>urn:sha1:deb7633c4932d1838cb0a67aebdab5e37aae7206</id>
<content type='text'>
* Change SQL update query for MariaDB / MySQL
fix https://github.com/FreshRSS/FreshRSS/issues/5707

* No change for SQLite

* Fix merge error

* Update MySQL version on the model of PostgreSQL
Performance to be tested

* Fix LEFT JOIN, also for PostgreSQL / SQLite

* Fix alias

* Reduce MySQL deadlock

* Fix compatibility with SQLite

* Back to identical SQL for all databases</content>
</entry>
<entry>
<title>SQL: Optimise speed of updateCachedValues() (#8207)</title>
<updated>2025-11-15T19:11:25+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-15T19:11:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=45471871ddc4bae6c1c36f2daa9091b85e458e8c'/>
<id>urn:sha1:45471871ddc4bae6c1c36f2daa9091b85e458e8c</id>
<content type='text'>
For PostgreSQL and SQLite
fix https://github.com/FreshRSS/FreshRSS/issues/8206
</content>
</entry>
<entry>
<title>Housekeeping lib_rss.php (#8193)</title>
<updated>2025-11-11T07:17:12+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-11-11T07:17:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=a18c35046daee15e7ac5f85db290d54541a03e3c'/>
<id>urn:sha1:a18c35046daee15e7ac5f85db290d54541a03e3c</id>
<content type='text'>
* Housekeeping lib_rss.php
`lib_rss.php` had become much too large, especially after https://github.com/FreshRSS/FreshRSS/pull/7924
Moved most functions to other places.
Mostly no change of code otherwise (see comments).

* Extension: composer run-script phpstan-third-party</content>
</entry>
</feed>
