<feed xmlns='http://www.w3.org/2005/Atom'>
<title>FreshRSS (Customized)/app/Models/View.php, branch 1.28.1-custom</title>
<subtitle>Customized version of FreshRSS, a self-hosted RSS feed aggregator</subtitle>
<id>https://git.rdnlsmith.com/fresh-rss-custom/atom?h=1.28.1-custom</id>
<link rel='self' href='https://git.rdnlsmith.com/fresh-rss-custom/atom?h=1.28.1-custom'/>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/'/>
<updated>2025-12-21T18:26:08+00:00</updated>
<entry>
<title>Improve configuration checks (#8334)</title>
<updated>2025-12-21T18:26:08+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-12-21T18:26:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=1a3912f25a27c8d78aacbbee98f6056f4ad47f1a'/>
<id>urn:sha1:1a3912f25a27c8d78aacbbee98f6056f4ad47f1a</id>
<content type='text'>
Add a distinction between recommended and required extensions.
Add check for recommended php-intl extension as follow-up of https://github.com/FreshRSS/FreshRSS/pull/8329#issuecomment-3677686581
Improve related checks such as ZIP.
Reduce duplicated translations and tests.</content>
</entry>
<entry>
<title>Scaling of user statistics (#8277)</title>
<updated>2025-12-04T18:11:31+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-12-04T18:11:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=78e40c6fe3afe7f815ef9d32646610e2d5436ba3'/>
<id>urn:sha1:78e40c6fe3afe7f815ef9d32646610e2d5436ba3</id>
<content type='text'>
Fix https://github.com/FreshRSS/FreshRSS/issues/8268
To better support user management on FreshRSS instance with many users.

SQL speed improved. On a reduced test with 5 users, including some large accounts (PostgreSQL on a very tiny and slow server), improving from ~2.3s to ~1.8s, which gives ~20% speed improvement.

Then tested with 1000 users, with only the default feed (on my old desktop computer):

```sh
for i in {1..1000}; do ./cli/create-user.php --user=freshrss$i --password=freshrss; done
app/actualize_script.php
cli/access-permissions.sh
```

SQLite:

```console
$ time cli/user-info.php | wc -l
1001

real    0m1.366s
user    0m0.908s
sys     0m0.475s
```

PostgreSQL:

```console
$ time cli/user-info.php | wc -l
1001

real    0m28.498s
user    0m12.137s
sys     0m2.217s
```

MariaDB:

```console
# time ./cli/user-info.php | wc -l
1001

real    0m49.485s
user    0m1.276s
sys     0m2.258s
```

Yes, SQLite is much faster - not a surprise for such use-cases, where the TCP connection is not re-used.

I have added some CLI options to disable some statistics:

```sh
cli/user-info.php --no-db-size --no-db-counts
```

For the Web UI, I have disabled detailed user statistics if it takes too long, and retrieve missing user statistics asynchronously via JavaScript. Lazy loading of the user details based on IntersectionObserver, with maximum 10 requests in parallel.
Web UI tested on 1000 users as well. Checked with SeaMonkey.
</content>
</entry>
<entry>
<title>[sqlite export] add username and timestamp (#8169)</title>
<updated>2025-11-02T19:39:41+00:00</updated>
<author>
<name>scollovati</name>
<email>20740642+scollovati@users.noreply.github.com</email>
</author>
<published>2025-11-02T19:39:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=04c55fa1b84b75445642de9ec0e2532d10e72dc0'/>
<id>urn:sha1:04c55fa1b84b75445642de9ec0e2532d10e72dc0</id>
<content type='text'>
* [sqlite export] add username and timestamp
add username and timestamp to sqlite user export, similar to the ZIP export. Useful for archiving purposes.

* Fix case of backups and other DB types
https://github.com/FreshRSS/FreshRSS/pull/8169#issuecomment-3476079108

---------

Co-authored-by: Alexandre Alapetite &lt;alexandre@alapetite.fr&gt;</content>
</entry>
<entry>
<title>Add support for extension compatibility (#8081)</title>
<updated>2025-10-21T21:49:06+00:00</updated>
<author>
<name>Alexis Degrugillier</name>
<email>aledeg@users.noreply.github.com</email>
</author>
<published>2025-10-21T21:49:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=eee8b8c03f93b82ed762137e386659d9da3adbf3'/>
<id>urn:sha1:eee8b8c03f93b82ed762137e386659d9da3adbf3</id>
<content type='text'>
The compatibility does support only a minimum version of FreshRSS. If we need
something a bit more clever in the future, it is possible to handle a rule
with a bit more complexity.

See https://github.com/FreshRSS/FreshRSS/issues/5903

* Update app/Controllers/extensionController.php

Co-authored-by: Alexandre Alapetite &lt;alexandre@alapetite.fr&gt;

* Update app/i18n/pl/admin.php

Co-authored-by: Inverle &lt;inverle@proton.me&gt;

* Minor move phpstan-type

---------

Co-authored-by: Alexandre Alapetite &lt;alexandre@alapetite.fr&gt;
Co-authored-by: Inverle &lt;inverle@proton.me&gt;</content>
</entry>
<entry>
<title>Implement search form (#8103)</title>
<updated>2025-10-14T22:08:40+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-10-14T22:08:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=e070c3ed2bec4ea4a6c2a216a5c836d1e02ab381'/>
<id>urn:sha1:e070c3ed2bec4ea4a6c2a216a5c836d1e02ab381</id>
<content type='text'>
* Add UI for advanced search
To help users with the seach operators.
Obviously not as powerful as a manually-written search query.
Lack in particular negation and logical *and* for now, but I might try to do something about it.

&lt;img width="939" height="1438" alt="image" src="https://github.com/user-attachments/assets/0bcad39b-eff3-4f44-876b-a2552af2af00" /&gt;

* Consistency: allow multiple user queries like S:1,2

* Fix user query and add tests
</content>
</entry>
<entry>
<title>Option to show user labels instead of tags in RSS share (#8112)</title>
<updated>2025-10-14T13:43:43+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-10-14T13:43:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=b7bd18148e65bbdd6be442036a295eb43ca1501e'/>
<id>urn:sha1:b7bd18148e65bbdd6be442036a295eb43ca1501e</id>
<content type='text'>
* Option to show user labels instead of tags in RSS share
fix https://github.com/FreshRSS/FreshRSS/discussions/8108#discussioncomment-14668813

&lt;img width="711" height="182" alt="image" src="https://github.com/user-attachments/assets/8effb2cd-fffb-4f00-b628-54e963e8b2dc" /&gt;
</content>
</entry>
<entry>
<title>Exposed the reading modes for extensions through Minz (#7668)</title>
<updated>2025-06-21T22:36:32+00:00</updated>
<author>
<name>Stefan</name>
<email>11146296+tryallthethings@users.noreply.github.com</email>
</author>
<published>2025-06-21T22:36:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=51298cd6bc100b1cc6508abb602a59c01a9e2c04'/>
<id>urn:sha1:51298cd6bc100b1cc6508abb602a59c01a9e2c04</id>
<content type='text'>
* + Exposed the reading modes for extensions through Minz. Now extensions can add a custom view mode. Graceful fallback to normal view in case the extension was disabled without resetting the view_mode through the uninstall method. In that case the user will be informed via Minz_Request::setBadNotification that the view has been reset to normal.
+ Added translation strings for de, en and en-us for the notification

* + Added missing, generated translations

* Simplify indexAction, performance

* Minor settings htmlspecialchars

* i18n: fr

* Minor wording

* Doc

* Fix i18n

---------

Co-authored-by: Alexandre Alapetite &lt;alexandre@alapetite.fr&gt;</content>
</entry>
<entry>
<title>Reduce undeeded use of elvis operator ?: (#7204)</title>
<updated>2025-01-10T07:13:09+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2025-01-10T07:13:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=5368f38753a3e655ed3d7d7dfc7af2cc22de7980'/>
<id>urn:sha1:5368f38753a3e655ed3d7d7dfc7af2cc22de7980</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix regressions on some array structures (#7155)</title>
<updated>2024-12-28T22:58:00+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2024-12-28T22:58:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=c29cbb7b8be95fee249ed1a21dce98a4772d92e2'/>
<id>urn:sha1:c29cbb7b8be95fee249ed1a21dce98a4772d92e2</id>
<content type='text'>
regressions from https://github.com/FreshRSS/FreshRSS/pull/7131
fix https://github.com/FreshRSS/FreshRSS/issues/7154</content>
</entry>
<entry>
<title>PHPStan 2.0 (#7131)</title>
<updated>2024-12-27T11:12:49+00:00</updated>
<author>
<name>Alexandre Alapetite</name>
<email>alexandre@alapetite.fr</email>
</author>
<published>2024-12-27T11:12:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rdnlsmith.com/fresh-rss-custom/commit/?id=b1d24fbdb7d1cc948c946295035dad6df550fb7e'/>
<id>urn:sha1:b1d24fbdb7d1cc948c946295035dad6df550fb7e</id>
<content type='text'>
* PHPStan 2.0
fix https://github.com/FreshRSS/FreshRSS/issues/6989
https://github.com/phpstan/phpstan/releases/tag/2.0.0
https://github.com/phpstan/phpstan/blob/2.0.x/UPGRADING.md

* More

* More

* Done

* fix i18n CLI

* Restore a PHPStan Next test
For work towards PHPStan Level 10

* 4 more on Level 10

* fix getTagsForEntry

* API at Level 10

* More Level 10

* Finish Minz at Level 10

* Finish CLI at Level 10

* Finish Controllers at Level 10

* More Level 10

* More

* Pass bleedingEdge

* Clean PHPStan options and add TODOs

* Level 10 for main config

* More

* Consitency array vs. list

* Sanitize themes get_infos

* Simplify TagDAO-&gt;getTagsForEntries()

* Finish reportAnyTypeWideningInVarTag

* Prepare checkBenevolentUnionTypes and checkImplicitMixed

* Fixes

* Refix

* Another fix

* Casing of __METHOD__ constant</content>
</entry>
</feed>
