aboutsummaryrefslogtreecommitdiff
path: root/docs/en/developers
AgeCommit message (Collapse)Author
2025-07-30`before_login_btn` hook + system conf attributes (#7761)Gravatar Inverle
* `before_login_btn` hook + system conf attributes * phpstan fix * Refactoring --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2025-06-30Implement custom feed favicons (#7646)Gravatar Inverle
Closes #3789, #6503 Icon setting when no custom icon is set yet: ![image](https://github.com/user-attachments/assets/28b07dd0-7dac-4c76-b1d7-77035f91a87a) - `Change...` button opens a file dialog, and after selecting a file shows the chosen icon in the preview on the left. `Submit` must be clicked after selecting the icon. - `Reset to default` changes the preview icon to the default one, and also requires `Submit` to be clicked to apply the changes. Full list of changes: - CSP now includes `blob:` in `img-src` for - `indexAction()` and `feedAction()` in `subscriptionController.php` - all of the view actions in `indexController.php` - Introduce new attribute `customFavicon (boolean)` for feeds that indicates if the feed has a custom favicon - `hashFavicon()` in `Feed.php` is dependent on this attribute - `hashFavicon()` has a new parameter called `skipCache (boolean)` that allows the reset of the favicon hash for the Feed object - `resetFaviconHash()` just calls `hashFavicon(skipCache: true)` - `f.php` URLs now have the format of `/f.php?h=XXXXX&t=cachebuster`, where the `t` parameter is only used for serving custom favicons - if `t` parameter is set, `f.php` returns a `Cache-Control: immutable` header - `stripos` and `strpos` were changed to `str_contains` in various places (refactor) - JS for handling the custom favicon configuration logic is in `extra.js` inside `init_update_feed()` which is called when feed configuration is opened from the aside or when the subscription management page with the feed is loaded - Server-side code for uploading the icon in `subscriptionController.php` under `feedAction()` - Errors that may occur during the setting of a custom favicon: - Unsupported image file type (handled only server-side with `isImgMime()`) - When the file is bigger than 1 MiB (default), handled both client-side and server-side - Standard feed error when `updateFeed()` fails - JS vars `javascript_vars.phtml` are no longer escaped with `htmlspecialchars()`, instead with json encoding, - CSS for disabled buttons was added - Max favicon file size is configurable with the `max_favicon_upload_size` option in `config.php` (not exposed via UI) - Custom favicons are currently deleted only when they are either reset to the default icon, or the feed gets deleted. They do not get deleted when the user deletes their account without removing their feeds first. - ` faviconPrepare()` and `faviconRebuild()` are not allowed to be called when the `customFavicon` attribute is `true` - New i18n strings: - `'sub.feed.icon' => 'Icon'` - `'sub.feed.change_favicon' => 'Change…'` - `'sub.feed.reset_favicon' => 'Reset to default'` - `'sub.feed.favicon_changed_by_ext' => 'The icon has been set by the <b>%s</b> extension.'` - `'feedback.sub.feed.favicon.too_large' => 'Uploaded icon is too large. The maximum file size is <em>%s</em>.'` - `'feedback.sub.feed.favicon.unsupported_format' => 'Unsupported image file format!'` - Extension hook `custom_favicon_hash` - `setCustomFavicon()` method - `resetCustomFavicon()` method - `customFaviconExt` and `customFaviconDisallowDel` attributes - example of usage: https://github.com/FreshRSS/Extensions/pull/337 - Extension hook `custom_favicon_btn_url` - Allows extensions to implement a button for setting a custom favicon for individual feeds by providing an URL. The URL will be sent a POST request with the `extAction` field set to either `query_icon_info` or `update_icon`, along with an `id` field which describes the feed's ID.
2025-06-22Exposed the reading modes for extensions through Minz (#7668)Gravatar Stefan
* + 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 <alexandre@alapetite.fr>
2025-06-03Add API endpoint for extensions (#7576)Gravatar Alexandre Alapetite
* Add API endpoint for extensions Useful for https://github.com/FreshRSS/FreshRSS/issues/7572 * Support PATH_INFO Now also support being invoked like `/api/misc.php/Extension%20Name/` * More documentation
2025-06-01Bump markdownlint-cli from 0.44.0 to 0.45.0 (#7632)Gravatar dependabot[bot]
* Bump markdownlint-cli from 0.44.0 to 0.45.0 Bumps [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) from 0.44.0 to 0.45.0. - [Release notes](https://github.com/igorshubovych/markdownlint-cli/releases) - [Commits](https://github.com/igorshubovych/markdownlint-cli/compare/v0.44.0...v0.45.0) --- updated-dependencies: - dependency-name: markdownlint-cli dependency-version: 0.45.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Fix Markdown --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2025-04-07Secure serving of user files from extensions (#7495)Gravatar Alexandre Alapetite
* Secure serving of user files from extensions fix https://github.com/FreshRSS/FreshRSS/issues/4930 * More fixes * Typo
2025-03-25JavaScript: new event to detect context loaded (#7452)Gravatar hkcomori
* Add JavaScript event: freshrss:globalContextLoaded * Update docs * Update docs: fix typo
2025-03-04docs: add link to freshrss_python_api (#7401)Gravatar Olicorne
as suggested here: https://github.com/FreshRSS/FreshRSS/discussions/7395 Signed-off-by: thiswillbeyourgithub <26625900+thiswillbeyourgithub@users.noreply.github.com>
2025-02-24Update Reader Link Documentation (#7362)Gravatar Elanna Grossman
* docs(docs): update Reeder link to point to Reeder Classic * docs(CREDITS): add name to credits
2025-02-06API documentation link to more tips (#7305)Gravatar Alexandre Alapetite
https://github.com/jocmp/capyreader/discussions/533#discussioncomment-11341808 While waiting for https://github.com/FreshRSS/FreshRSS/issues/7304 We should then consolidate the API synchronisation recommendations in our documentation
2024-12-10OPML export/import for cssFullContentConditions (#7082)Gravatar Alexandre Alapetite
Follow-up of https://github.com/FreshRSS/FreshRSS/commit/33fd07f6f26310d4806077cc87bcdf9b8b940e35, which should have been a PR.
2024-11-28Upgrade code to php 8.1 (#6748)Gravatar Luc SANCHEZ
* revert Fix code indentation Fix code Upgrade code to php 8.1 * fix remarques * code review * code review * code review * Apply suggestions from code review * code review * Fixes * Many remainging updates of array syntax * Lost case 'reading-list' * Uneeded PHPDoc --------- Co-authored-by: Luc Sanchez <l.sanchez-prestataire@alptis.fr> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2024-11-21Add extension hook simplepie_after_init (#7007)Gravatar Alexandre Alapetite
* Add extension hook simplepie_after_init fix https://github.com/FreshRSS/FreshRSS/issues/7006 * Add documentation note * fix doc get_headers * Syntax void * Forgotten code
2024-10-13New feed mode: HTML + XPath + JSON dot notation (JSON in HTML) (#6888)Gravatar Alexandre Alapetite
* New feed mode: HTML + XPath + JSON dot notation (JSON in HTML) Same as `JSON+DotNotation` but first extracting the JSON string from an HTML document thanks to an XPath expression. Example: `//script[@type='application/json']` fix https://github.com/FreshRSS/FreshRSS/discussions/6876 * JavaScript UI to show/hide new field * Casing xPathToJson * Slight renaming
2024-09-06Regex search (#6706)Gravatar Alexandre Alapetite
* Regex search fix https://github.com/FreshRSS/FreshRSS/issues/3549 * Fix PHPStan * Fix escape * Fix ungreedy * Initial support for regex search in PostgreSQL and MySQL * Improvements, support MySQL * Fix multiline * Add support for SQLite * A few tests * Added author: and inurl: support, documentation * author example * Remove \b for now * Disable regex sanitization for now * Fix getInurlRegex * getNotInurlRegex * Quotes for inurl: * Fix test * Fix quoted tags + regex for tags https://github.com/FreshRSS/FreshRSS/issues/6761 * Fix wrong regex detection * Add MariaDB * Fix logic * Increase requirements for MySQL and MariaDB Check support for multiline mode in MySQL * Remove sanitizeRegexes() * Allow searching HTML code Allow searching for instance `/<pre>/` Fix https://github.com/FreshRSS/FreshRSS/issues/6775#issuecomment-2331769883 * Doc regex search HTML * Fix Doctype
2024-08-14Update about running tests (#6709)Gravatar Alexandre Alapetite
2024-06-05Add core extensions: UserCSS, UserJS (#6267)Gravatar hkcomori
* Copy CustomCSS and CustomJS Original: FreshRSS/Extensions@9f21984 * Rename CustomCSS -> UserCSS * Rename CustomJS -> UserJS * Change metadata The name is used for the directory where the configuration is stored and should not contain spaces. Since the name was changed, I reset the version number and changed to semantic versioning. * Change data directory Changed the location of the configuration file to the user data directory, because it is not `static`. That way, the user's configurations are gathered in the user directory, which makes it easier to backup them. * Edit documentations Remove procedures to install the extension because it is no longer necessary. * Fix wrong variables in the configuration page Remove permission error indication because the storage location is now in the user data directory managed by the application. * Remove the `xExtension-` prefix for core extensions * Set version to 1.0.0 for UserCSS, UserJS * Refactoring * Remove unused variables * Remove version 0.0.1 in Changelog Version 0.0.1 will not be merged, so only version 1.0.0 will remain. * public getFileUrl * Revert more protected * Use entrypoint for extension user path instead of name * Add space to extension name * Add `#[\Override]` * Add explains of User CSS and User JS to docs * Remove README of User CSS and User JS * Add migration code for extension user path --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2024-05-15Correct casing for GitHub (#6460)Gravatar Alexandre Alapetite
2024-04-25Refactoring: Rename dotpath into dotnotation (#6369)Gravatar maTh
* KIND_JSON_DOTPATH -> KIND_JSON_DOTNOTATION * TYPE_JSON_DOTPATH => TYPE_JSON_DOTNOTATION * json_dotpath => json_dotnotation * dotPathsForStandardJsonFeed => dotNotationForStandardJsonFeed * TYPE_JSON_DOTNOTATION = 'JSON+DotPath' => 'JSON+DotNotation' * documentation: OPML.md * convertJsonToRss() * $dotpaths => $dotnotations * FreshRSS_Feed_Exception * comment * Compatibility TYPE_JSON_DOTPATH --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2024-04-10PHP 8.3 #[\Override] (#6273)Gravatar Alexandre Alapetite
* PHP 8.3 #[\Override] https://php.watch/versions/8.3/override-attr With PHPStan `checkMissingOverrideMethodAttribute` https://phpstan.org/config-reference#checkmissingoverridemethodattribute And modified the call to phpstan-next on the model of https://github.com/FreshRSS/Extensions/pull/228 (more robust than the find method, which gave some strange errors) * Update extension example accordingly
2024-03-30Add a way to modify CSP rules within an extension (#6246)Gravatar Alexis Degrugillier
This will allow to change CSP rules to authorize the use of external scripts. We might need to add some safeguard since it will be virtually possible to load any script even malicious one.
2024-01-21Add Read You (#4633)Gravatar th0mcat
* Add Read You * Update README.fr.md * Add Read You * Add Read You * Add Read You * Add Read You * Beta version ready https://github.com/Ashinch/ReadYou/pull/536 https://github.com/Ashinch/ReadYou/discussions/478 https://github.com/Ashinch/ReadYou/discussions/542 --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2024-01-10JSONFeeds, JSON scraping, and POST requests for feeds (#5662)Gravatar eta-orionis
* allow POST requests for feeds * added json dotpath and jsonfeed subscriptions. No translation strings yet * debug and fix jsonfeed parser * bugfix params saved when editing feed * added translations for JSON features * Update docs for web scraping * make fix-all and revert unrelated changes, plus a few manual fixes, but there are still several type errors * Fix some i18n * refactor json parsing for both feed types * cleanup unnecessary comment * refactored generation of SimplePie for XPath and JSON feeds * Fix merge error * Update to newer FreshRSS code * A bit of refactoring * doc, whitespace * JSON Feed is in two words * Add support for array syntax * Whitespace * Add OPML export/import * Work on i18n * Accept application/feed+json * Rework POST * Fix update * OPML for cURL options * Fix types * Fix Typos --------- Co-authored-by: Erion Elmasllari <elmasllari@factorsixty.com> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2023-12-23API add unsubscribe example (#5965)Gravatar Alexandre Alapetite
2023-11-25ChangelogGravatar Alexandre Alapetite
2023-11-12Docs: How to contribute new theme (#5863)Gravatar maTh
* Update 05_Configuration.md * Update 11_Themes.md * Update contributing.md * Update 02_Design.md * fix --------- Co-authored-by: math-gh <>
2023-11-05add multi arch docker build (#5808)Gravatar Benjamin Reich
* Add multi arch container build Co-authored-by: EdJoPaTo <rfc-conform-git-commit-email@funny-long-domain-label-everyone-hates-as-it-is-too-long.edjopato.de> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> * using label from github action * dont remove static labels and split docker readme in seperate action * pin 3rd party action to a commit * enable pushing to dockerhub * Update .github/workflows/build-images.yml Co-authored-by: EdJoPaTo <github@edjopato.de> * remove not needed checkout * set github token permissions * Update .github/workflows/push-dockerhub-readme.yml * update docker readme to match new tags * Apply suggestions from code review * fix suffix for alpine image * fix suffix for alpine image * push images only at upstream repo * push images only at upstream repo * push images only at upstream repo * tag latest-alpine as alpine * tag latest-alpine as alpine * remove no needed falvor * keep falvor for build * Clean more things * Rename action To use same default name than https://github.com/actions/starter-workflows/blob/main/ci/docker-publish.yml * Rename readme action To use same default name than https://github.com/peter-evans/dockerhub-description/blob/main/.github/workflows/dockerhub-description.yml * Use default name for dockerhub-description https://github.com/peter-evans/dockerhub-description/blob/main/.github/workflows/dockerhub-description.yml Plus minor wording * Experiment with build-args * Debug * Add checkout back * Revert back to metadata-action * Remove quotes in version * Try to fix variables * Experiment with automatic label values again * Delete last Docker Hub hooks * Use only git SHA for org.opencontainers.image.revision https://specs.opencontainers.org/image-spec/annotations/#pre-defined-annotation-keys * Comment out semver for now Might be enabled later if desired * Enable major semver --------- Co-authored-by: EdJoPaTo <rfc-conform-git-commit-email@funny-long-domain-label-everyone-hates-as-it-is-too-long.edjopato.de> Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr> Co-authored-by: EdJoPaTo <github@edjopato.de>
2023-07-05New extension hook entry_auto_read (#5505)Gravatar Alexandre Alapetite
* New extension hook entry_auto_read For extensions to be notified of articles being automatically marked as read for various reasons * Documentation + entry_auto_unread
2023-06-18Update dev dependencies (#5478)Gravatar Alexandre Alapetite
2023-05-11Docs: delete 04_Changing_source_code.md (#5391)Gravatar maTh
* delete 04_Changing_source_code.md * make pot --------- Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2023-04-07Use typed access to request parameters (#5267)Gravatar Alexandre Alapetite
* Use typed access to request parameters This was a big source of mixed datatypes in many places * Fix notifications * Fix bookmarkAction
2023-02-23docs: Minz Framwork (#5102)Gravatar maTh
* done * Update docs/fr/developers/Minz/index.md Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2023-02-23Corrected `frss:xPathItemTitle` definition (#5140)Gravatar mincerafter42
2023-02-09XML+XPath (#5076)Gravatar Alexandre Alapetite
* XML+XPath #fix https://github.com/FreshRSS/FreshRSS/issues/5075 Implementation allowing to take an XML document as input using an XML parser (instead of an HTML parser for HTML+XPath) * Remove noise from another PR * Better MIME for XML * And add glob *.xml for cache cleaning * Minor syntax * Add glob json for clean cache
2023-01-09Update dev dependencies (#4993)Gravatar Alexandre Alapetite
Related to https://github.com/FreshRSS/FreshRSS/pull/4991 Required a few changes in code to pass the tests
2022-10-23GReader API doc and improvements (#4763)Gravatar Alexandre Alapetite
* GReader API doc and improvements #fix https://github.com/FreshRSS/FreshRSS/issues/4762 * Minor slash * HTTPS for web.archive.org
2022-10-16Update NewsFlash app entry (#4650)Gravatar Jan Lukas Gernert
* Update NewsFlash app entry * update fr readme & remove FeedReader * Tested Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-10-09Add support for custom XPath date/time format (#4703)Gravatar Alexandre Alapetite
* 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-03Add documentation to work with feed snapshots (#4598)Gravatar Alexis Degrugillier
2022-09-29Rename template.css (#4644)Gravatar maTh
* Fix conflicts * Update doc * Misses * Update prefix in CSS Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-09-10Add Fluent Reader Lite (#4595)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/issues/3418
2022-08-22lire app (#4523)Gravatar Matt Sephton
* Update README.md Add lire, sort alphabetically * Mix conflict * English * GReader * Duplicate line Reeder Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
2022-08-18XPath ability to define the UID manually (#4507)Gravatar Alexandre Alapetite
* XPath ability to define the UID manually * Fix error in i18n
2022-08-18Easier full-text search possibility (#4505)Gravatar Alexandre Alapetite
* 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-15Article css filtering (#4501)Gravatar papaschloss
* 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-10Composer require php extensions (#4497)Gravatar Alexandre Alapetite
#fix https://github.com/FreshRSS/FreshRSS/discussions/4494
2022-07-04Dynamic OPML (#4407)Gravatar Alexandre Alapetite
* 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-06-19Document fixes & tests (#4418)Gravatar Alexandre Alapetite
* Document fixes & tests #fix https://github.com/FreshRSS/FreshRSS/issues/4213 Help https://github.com/FreshRSS/FreshRSS/pull/4400#issuecomment-1159347683 * Link to tests.yml * sudo * Link to GitHub Actions * Add Fedora and Alpine
2022-05-12Refactor OPML export categories (#4356)Gravatar Alexandre Alapetite
* Refactor OPML export categories Simplify code to comply with types hints. And renamed a property to plural. * Link to OPML namespace
2022-05-12OPML export/import of some proprietary FreshRSS attributes (#4342)Gravatar Alexandre Alapetite
* 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