Commit Graph
666 Commits
Author SHA1 Message Date
Alexandre AlapetiteandFrans de Jonge 6261dc9cf4 User-defined time zone (#4906)
* User-defined time zone
#fix https://github.com/FreshRSS/FreshRSS/issues/2754

* Update app/i18n/nl/conf.php

Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>

* Timezone when creating a new user

Co-authored-by: Frans de Jonge <fransdejonge@gmail.com>
2022-11-29 15:27:32 +01:00
maTh c05e931d5e Deleted: bookmark.svg (#4897)
* delete bookmark.svg

* optimize Pafat theme
2022-11-26 11:31:30 +01:00
Alexandre Alapetite aa07582419 Better restrict tag search (#4882)
* Better restrict tag search
#fix https://github.com/FreshRSS/FreshRSS/issues/4877
Search only on full tag names and not on parts of tag names

* Better whitespace handling
2022-11-23 22:41:00 +01:00
Alexandre Alapetite 4bf678f8e4 HTML+XPath allow content as HTML (#4878)
* HTML+XPath allow content as HTML
#fix https://github.com/FreshRSS/FreshRSS/issues/4869

* Wrong variable reuse

* Allow both HTML and expressions
2022-11-22 08:15:22 +01:00
Alexis Degrugillier 02b906549e Fix feed ordering (#4841)
Before, the feeds were not ordered every time there was a change in the category
feed list. This behavior was causing discrepancies in the displayed list.
Now, the feeds are ordered every time there is a change in the category feed list.

See #4790
2022-11-20 14:50:27 +01:00
Alexandre Alapetite 42eeb402ad Fix type hints regressions (#4855)
Fix regressions from https://github.com/FreshRSS/FreshRSS/pull/4561

Example:

```
PHP Fatal error:  Uncaught TypeError: Argument 1 passed to checkToken() must be an instance of FreshRSS_UserConfiguration, instance of Minz_Configuration given, called in /var/www/FreshRSS/p/api/greader.php on line 1091 and defined in /var/www/FreshRSS/p/api/greader.php:223
Stack trace:
#0 /var/www/FreshRSS/p/api/greader.php(1091): checkToken()
#1 {main}
  thrown in /var/www/FreshRSS/p/api/greader.php on line 223
```

Improvement of https://github.com/FreshRSS/FreshRSS/pull/4110
2022-11-15 15:42:26 +01:00
Luc SANCHEZandLuc SANCHEZ d9e1c1c2c3 Typing function checkToken (#4561)
* Typing function checkToken

* Typing function and rename

Co-authored-by: Luc SANCHEZ <luc.sanchez@zol.fr>
2022-11-14 15:07:23 +01:00
Luc SANCHEZandAlexandre Alapetite a44e2a0d0c Add visibility (#4232)
* Add visibility

* Tab use

* Update app/Models/Days.php

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-11-14 15:04:16 +01:00
Alexandre Alapetite 2c0f3fad2d Avoid exception in searchById (#4822)
https://github.com/FreshRSS/FreshRSS/issues/4820
Not a root-cause fix though (cannot reproduce so far)
2022-11-07 08:35:33 +01:00
Alexandre Alapetite 5897487f2f Fix path_entries encoding (#4823)
* Fix path_entries encoding
#fix https://github.com/FreshRSS/FreshRSS/issues/4815

* Fix preview
2022-11-07 08:34:12 +01:00
maTh ca6c9345b2 fix: dyn. OPML icon (#4810)
* fix
2022-11-03 22:36:13 +01:00
Alexandre Alapetite e96b6266b5 Fix curlopt options for HTML+XPath (#4759)
Improvement of https://github.com/FreshRSS/FreshRSS/pull/4220
2022-10-21 15:11:52 +02:00
Alexandre Alapetite 648a876d77 Add support for custom XPath date/time format (#4703)
* Add support for custom XPath date/time format
#fix https://github.com/FreshRSS/FreshRSS/issues/4701
Improvement of https://github.com/FreshRSS/FreshRSS/pull/4220

* Format is not XPath

* Remove TODOs in en-GB
2022-10-09 15:43:30 +02:00
Alexandre Alapetite 72265c1eca Fix OPML import special (#4708)
#fix https://github.com/FreshRSS/FreshRSS/issues/4704
From https://github.com/FreshRSS/FreshRSS/pull/4407
2022-10-09 13:37:29 +02:00
Alexandre Alapetite e626fd249e Fix regression 4688 (#4700)
Minor regression from https://github.com/FreshRSS/FreshRSS/pull/4688
2022-10-07 12:59:31 +02:00
Alexandre Alapetite 82c4a54fea Compat PHP 8.1 strip_tags (#4688)
#fix https://github.com/FreshRSS/FreshRSS/issues/4687
2022-10-04 23:07:17 +02:00
Nicolas Pereira 3f49827292 feat: add new icon (#4673) 2022-10-04 09:06:48 +02:00
Alexandre Alapetite 412b60ca83 Fix transaction rollbacks during auto-update (#4622)
#fix https://github.com/FreshRSS/FreshRSS/issues/4600
We first need to commit the SQL transaction before being able to auto-update.
Avoid error such as:
> 25P02: 7 ERROR:  current transaction is aborted, commands ignored until end of transaction block
2022-09-19 11:51:44 +02:00
Alexandre Alapetite 0c472402f2 Workaround invalid OPMLs (#4591)
* Workaround invalid OPMLs
#fix https://github.com/FreshRSS/FreshRSS/issues/4590
Accept OPML files lacking text attributes

* Tolerate missing head element
2022-09-09 22:56:34 +02:00
Alexandre Alapetite 3b81708c1a API protection limit content size (#4583)
* API protection limit content size
We had no limit to the length of an article sent through our GReader API to clients, which was a problem:

The article https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/
from the feed https://devblogs.microsoft.com/dotnet/feed/
is about 700KB long, which makes some clients (tested with News+) fail.

We should try other clients to verify that 500KB is a safe enough limit.

* Light optimisation

* Use class constant
2022-09-05 13:13:07 +02:00
Alexandre Alapetite a8353e4b4c Compat Readrops (#4568)
While waiting for https://github.com/readrops/Readrops/pull/163
#fix https://github.com/FreshRSS/FreshRSS/issues/4567
2022-08-31 13:00:46 +02:00
Alexandre Alapetite 03f5a42640 Fix MariaDB case sensitivity (#4537)
* Fix MariaDB case sensitivity
#fix https://github.com/FreshRSS/FreshRSS/issues/4535
Collation regression from https://github.com/FreshRSS/FreshRSS/pull/4505

* faster

* Minor syntax

* Minor parentheses
2022-08-25 23:16:24 +02:00
maThandAlexandre Alapetite 4214954ea1 Improved: error page (#4465)
* error page: true HTML page

* error page: http500 erorr

* error page: add CSP header

* 'log.txt' replaced by LOG_FILENAME

* use ADMIN_LOG

* log.txt => LOG_FILENAME

* error message: add <title>

* Docs created

* delete: documentation on error message page

* line break added

* added: new line at the end

* typo fixed

* Update lib/lib_rss.php

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* Update lib/lib_rss.php

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* Minz HTTP 500

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-08-21 22:44:03 +02:00
Alexandre Alapetite 0ec3874620 Fix PHP 7.0 warning (#4514)
Regression from https://github.com/FreshRSS/FreshRSS/pull/4202
> Warning: Declaration of FreshRSS_EntryDAOSQLite::markRead($ids, $is_read = true) should be compatible with FreshRSS_EntryDAO::markRead($ids, bool $is_read = true) in /var/www/FreshRSS/app/Models/EntryDAOSQLite.php on line 3
2022-08-20 19:44:25 +02:00
Alexandre Alapetite 1603c10bba XPath ability to define the UID manually (#4507)
* XPath ability to define the UID manually

* Fix error in i18n
2022-08-18 12:10:55 +02:00
Alexandre Alapetite 4f111c5b30 Easier full-text search possibility (#4505)
* Easier full-text search possibility
Contributes to https://github.com/FreshRSS/FreshRSS/issues/1331
Avoid concats in searches to make text indexes easier to build

* Fix tests

* Documentation
2022-08-18 12:06:31 +02:00
Alexandre Alapetite e27eb1ca91 Basic support for negative searches with parentheses (#4503)
* Basic support for negative searches with parentheses
* `!((author:Alice intitle:hello) OR (author:Bob intitle:world))`
* `(author:Alice intitle:hello) !(author:Bob intitle:world)`
* `!(S:1 OR S:2)`

* Minor documentation / comment

* Remove syslog debug line
2022-08-16 10:56:07 +02:00
papaschlossandAlexandre Alapetite 8587efa621 Article css filtering (#4501)
* Update feedController.php

* Update subscriptionController.php

* Update DatabaseDAO.php

* Update Entry.php

* Update Feed.php

* Update FeedDAO.php

* Update install.sql.mysql.php

* Update install.sql.pgsql.php

* Update install.sql.sqlite.php

* Update sub.php

* Update opml.phtml

* Update ImportService.php

* Update update.phtml

* Update feed.js

* Update install.sql.mysql.php

* Update install.sql.pgsql.php

* Update install.sql.sqlite.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update sub.php

* Update FeedDAO.php

* Update feedController.php

* Update subscriptionController.php

* Update Entry.php

* Update Feed.php

* Update feedController.php

* Update subscriptionController.php

* Update ImportService.php

* Update opml.phtml

* Update update.phtml

* Update update.phtml

* Update update.phtml

* Update DatabaseDAO.php

* Update app/Models/Entry.php

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* Update app/i18n/fr/sub.php

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* Update p/scripts/feed.js

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* Update app/Controllers/feedController.php

* make fix-all

* Update documentation

* css_path_filter help message

* i18n en-us ignore

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-08-15 21:01:18 +02:00
Alexandre Alapetite 96e0efa6f0 Get content by parsing: fix base for protocol-relative URLs (#4500)
* Get content by parsing: fix base for protocol-relative URLs

* Guess missing URL scheme for base

* Light refactoring
2022-08-12 13:06:04 +02:00
Alexandre Alapetite 09aeeeb325 Refactor updateContext into its own FreshRSS_Context class (#4496)
So that it is both cleaner and easier to call from other controllers and extensions
2022-08-10 09:37:11 +02:00
Alexandre Alapetite 82ac1d1e67 Refactor entry-to-GReader API format (#4490)
* Refactor entry to GReader API format
Some code was copied in two locations and not completely uniform.
Cleaning of related variables and functions (e.g. better types for entries and categories as objects vs. as IDs).
Usecase: I need to call the same GReader-compatible serialization from an extension

* Fixed some edge cases

* Keep summary instead of content
`summary` and `content` seems to be used interchangeably in the Google Reader API. We have been using `summary` for our client API and  `content` in our export/import, so stick to that.
2022-08-08 12:04:02 +02:00
Alexandre Alapetite 0866fdaee8 Add database field attributes for entries (#4444)
* Add database field attributes for entries
Just like we already have for categories, feeds, etc.
No core use yet, but allows in particular extensions to save per-entry data

* Fix PHPStand

* Fix wrong variable
2022-07-19 15:17:08 +02:00
maThandAlexandre Alapetite b2e46d6215 Improved: Article header (#4101)
* First draft for normal view

* Revert changes on the entry header

* Update normal.phtml

* Update normal.phtml

* RTL CSS

* CSS fixes

* Better tags style

* fix

* Update swage.scss

* fix

* Update swage.scss

* fixed .content header

* font-size in rem

* improved template

* dropdown menu if more than 7 tags

* configuration: show tags in topline

* Simplify loop logic

* Minor space

* config tags via reading (i18n still missed)

* fixed the whitespaces

* optimizations

* optimize header+footer

* Update normal.phtml

* fix css

* new config: show author+date in footer

* config feed name display

* improve HTML

* fix whitespaces

* i18n

* i18n: German translations

* fix i18n German

* fixed: uncouple from bottomline config

* reverted: tobline_tags

* equalities

* fixed: author in footer

* fixed data-leave-validation

* improved max numbers i18n label

* Config works now also in the reader view

* fix: footer border

* reader view: style article-header-topline

* fixed whitespace

* i18n fr

* Minor i18n fr

* Fix mistake i18n fr

* i18n fr more precise expression

* Fix JavaScript

* removed the link icon in the title

* clean CSS

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-07-17 22:54:24 +02:00
Alexandre Alapetite 509c8cae63 Dynamic OPML (#4407)
* Dynamic OPML draft
#fix https://github.com/FreshRSS/FreshRSS/issues/4191

* Export dynamic OPML
http://opml.org/spec2.opml#1629043127000

* Restart with simpler approach

* Minor revert

* Export dynamic OPML also for single feeds

* Special category type for importing dynamic OPML

* Parameter for excludeMutedFeeds

* Details

* More draft

* i18n

* Fix update

* Draft manual import working

* Working manual refresh

* Draft automatic update

* Working Web refresh + fixes

* Import/export dynamic OPML settings

* Annoying numerous lines in SQL logs

* Fix minor JavaScript error

* Fix auto adding new columns

* Add require

* Add missing 🗲

* Missing space

* Disable adding new feeds to dynamic categories

* Link from import

* i18n typo

* Improve theme icon function

* Fix pink-dark
2022-07-04 09:53:26 +02:00
Alexandre Alapetite d785ddde2a New option to automatically mark as read gone articles (#4426)
* New option to automatically mark as read gone articles
Option to automatically and immediately mark as read entries / articles that are no longer provided in their upstream RSS / ATOM / XPath feed

* Reduce SQL queries
Optimisation: Perform cache update only once
2022-06-25 11:15:51 +02:00
Alexandre Alapetite 07a52137a9 Fix last update & archive logic (#4422)
#fix https://github.com/FreshRSS/FreshRSS/issues/4401
2022-06-25 11:11:23 +02:00
Alexandre Alapetite 2a0b47a8a4 No XPath error on empty list (#4425)
Set feed error state to true if the *list* of items cannot be find by XPath, but do not set the error state to true if that list happens to be empty (the resulting feed will be with an *empty* state instead of *error* state)
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/4220
2022-06-23 13:26:22 +02:00
Alexandre Alapetite dcc77ee343 Initial support for PHP 8.2 (#4421)
* Initial support for PHP 8.2
Using dev image `freshrss/freshrss:latest` https://github.com/FreshRSS/FreshRSS/pull/4420

* Deprecated string interpolation
2022-06-19 20:10:13 +02:00
Alexandre Alapetite f365a9aeb4 Update all test dependencies (#4419)
* Update all test dependencies

* Remove old false-positive

* Minor update lock files

* Increase PHPStan memory for Fedora
https://github.com/FreshRSS/FreshRSS/pull/4400#issuecomment-1159514197

* Require PHP8+ for tests
Due to small changes of signature in `ob_implicit_flush` and `simplexml_load_string`, cf. https://github.com/FreshRSS/FreshRSS/pull/4123

* Missing lint in CSS files
2022-06-19 20:08:42 +02:00
Alexandre Alapetite ec11da4e84 Safer htmlspecialchars_utf8 (#4411)
* Safer htmlspecialchars_utf8
#fix https://github.com/FreshRSS/FreshRSS/issues/4410

* Undefined variable
2022-06-11 22:14:46 +02:00
Alexandre Alapetite f85c510ed4 New search engine (#4378)
* New possibility to invoke user queries from a search expression
From the search field: `S:"My query"`.
Can be combined with other filters such as `S:"My query" date:P3d` as long as the user queries do not contain `OR`.
A use-case is to have an RSS filter with a stable address or an external API call with the ability to update the user query.

* Draft of parenthesis logic

* More draft

* Working parenthesis (a OR b) (c OR d)

* Working (A) OR (B)

* Support nested parentheses + unit tests + documentation

* search:MySearch and S:3
2022-06-02 08:41:08 +02:00
Alexandre Alapetite 15cdb60ba0 Fix warning with icons (#4390)
Fix warning in cases when the user context is not yet available, for instance during install
Fix regression from https://github.com/FreshRSS/FreshRSS/pull/4353
2022-05-30 10:34:39 +02:00
Alexandre Alapetite f89819bd64 Custom logo HTML (#4369)
* Custom logo HTML
Add option for custom HTML logo/title in the main Web UI view.
Can potentially be different per user.
#fix https://github.com/FreshRSS/FreshRSS/pull/3830/files#r850472247

* logo_html in main config
With new `./data/config.custom.php` to provide custom values before install

* Docker documentation

* whitespace

* Auto relax CSP to allow images for HTML logo

* Documentation
2022-05-23 14:03:19 +02:00
Alexandre Alapetite ffd1061850 User query automatic reconstruct of URL (#4360)
* User query automatic reconstruct of URL
(Invisible through the Web UI, only when working with configuration files manually)
Avoid the requirement of storing user queries with duplicated information (parsed parameters AND the resulting URL):

Before:
```
[
	'name' => 'Hello',
	'search' => 'Hello OR World',
	'state' => '3',
	'url' => './?search=Hello+OR+World&amp;state=3',
]
```

After:

```
[
	'name' => 'Hello',
	'search' => 'Hello OR World',
	'state' => '3',
]
```

* Fix test
2022-05-15 21:53:13 +02:00
Alexandre Alapetite 0cde4e898f Automatic simplification of layout for many feeds (#4357)
* Refactor OPML export categories
Simplify code to comply with types hints.
And renamed a property to plural.

* Automatic simplification of layout for many feeds
New advanced property to automatically simplify the layout when there are many (1k+)  feeds so that FreshRSS works out of the box with 20k+ feeds scenarios https://github.com/FreshRSS/FreshRSS/pull/4347

Merge https://github.com/FreshRSS/FreshRSS/pull/4356 first.
2022-05-15 13:47:31 +02:00
Alexandre Alapetite 7f0c378482 Fix favicons update (#4358)
Better update the favicons when the URL changes
2022-05-13 23:14:09 +02:00
Alexandre Alapetite da0a333b94 Refactor OPML export categories (#4356)
* Refactor OPML export categories
Simplify code to comply with types hints.
And renamed a property to plural.

* Link to OPML namespace
2022-05-12 22:31:31 +02:00
Alexandre Alapetite 4a87206f28 OPML export/import of some proprietary FreshRSS attributes (#4342)
* OPML export/import of some proprietary FreshRSS attributes
#fix https://github.com/FreshRSS/FreshRSS/issues/4077
And one of the TODOs of https://github.com/FreshRSS/FreshRSS/pull/4220
XPath options, CSS Selector, and action filters

* Bump library patch version

* OPML namespace + documentation

* Add example
2022-05-12 22:15:10 +02:00
Alexandre Alapetite 80a228e9a6 Option icons-as-emojis for performance (#4353)
New mode to use only emojis instead of icons.
Considerably improves performances.
Needed for 20k+ feeds scenario https://github.com/FreshRSS/FreshRSS/pull/4347
2022-05-09 12:54:54 +02:00
drosoCodeandAlexandre Alapetite 2aba861bc9 Add HTTP_REMOTE_USER header for auth (#4063)
* add HTTP_REMOTE_USER header for auth

* add ip whitelist for HTTP_REMOTE_USER header

* add IPv6 support for header auth

* fix formatting

* A few fixes

* Add some default trusted sources

* Fix IPv6 doc

* More standard header names

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-04-02 21:40:30 +02:00