Improved markdownlint (#3918)

* Improved markdownlint
* Relaxed rules slighlty
* `npm run markdownlint` for automatic tests
* `npm run markdownlint_fix` for automatic syntax fixing
* Applied the fixes on all our Markdown files
This commit is contained in:
Alexandre Alapetite 2021-10-23 13:43:24 +02:00 committed by GitHub
parent dd02c79092
commit acbba9adb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
56 changed files with 778 additions and 773 deletions

View File

@ -1,7 +1,5 @@
# http://EditorConfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
@ -12,15 +10,16 @@ trim_trailing_whitespace = true
indent_style = tab
[*.{html,php,phtml}]
indent_size = 4
indent_style = tab
[*.js]
indent_style = tab
[*.md]
indent_size = 4
indent_style = tab
[*.xml]
indent_size = 4
indent_style = tab
[*.yml]

View File

@ -24,13 +24,13 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Environment information (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. Ubuntu 20.04]
- Browser: [e.g. Firefox 86]
- FreshRSS version: [e.g. 1.17.1]
- Database version: [e.g. Mysql 5.7]
- PHP version: [e.g. PHP 7.4]
- Installation type: [e.g. Yunohost]
- Device: [e.g. iPhone6]
- OS: [e.g. Ubuntu 20.04]
- Browser: [e.g. Firefox 86]
- FreshRSS version: [e.g. 1.17.1]
- Database version: [e.g. Mysql 5.7]
- PHP version: [e.g. PHP 7.4]
- Installation type: [e.g. Yunohost]
**Additional context**
Add any other context about the problem here.

View File

@ -1,10 +1,12 @@
{
"default": true,
"blanks-around-fences": false,
"blanks-around-lists": false,
"first-line-heading": false,
"line-length": false,
"no-hard-tabs": false,
"no-inline-html": {
"allowed_elements": [ "kbd" ]
"allowed_elements": ["br", "kbd"]
},
"no-multiple-blanks": {
"maximum": 2

1
.markdownlintignore Normal file
View File

@ -0,0 +1 @@
node_modules/

View File

@ -5,7 +5,7 @@
# Deploy FreshRSS with Docker
* See also https://hub.docker.com/r/freshrss/freshrss/
* See also <https://hub.docker.com/r/freshrss/freshrss/>
## Install Docker
@ -122,7 +122,7 @@ docker run -d --restart unless-stopped --log-opt max-size=10m \
### Complete installation
Browse to your server https://freshrss.example.net/ to complete the installation via the FreshRSS Web interface,
Browse to your server <https://freshrss.example.net/> to complete the installation via the FreshRSS Web interface,
or use the command line described below.
@ -226,7 +226,7 @@ Remember not pass the `CRON_MIN` environment variable to your Docker run, to avo
Example on Debian / Ubuntu: Create `/etc/cron.d/FreshRSS` with:
```
```text
7,37 * * * * root docker exec --user www-data freshrss php ./app/actualize_script.php > /tmp/FreshRSS.log 2>&1
```
@ -305,13 +305,13 @@ Require valid-user
A [docker-compose.yml](docker-compose.yml) file is given as an example, using PostgreSQL. In order to use it, you have to adapt:
- In the `postgresql` service:
* `container_name` directive. Whatever you set this to will be the value you put in the "Host" field during the "Database Configuration" step of installation;
* In the `postgresql` service:
* `container_name` directive. Whatever you set this to will be the value you put in the "Host" field during the "Database Configuration" step of installation;
* the `volumes` section. Be careful to keep the path `/var/lib/postgresql/data` for the container. If the path is wrong, you will not get any error but your db will be gone at the next run;
* the `POSTGRES_PASSWORD` in the `.env` file;
* the `POSTGRES_DB ` in the `.env` file;
* the `POSTGRES_DB` in the `.env` file;
* the `POSTGRES_USER` in the `.env` file;
- In the `freshrss` service:
* In the `freshrss` service:
* the `volumes` section;
* options under the `labels` section are specific to [Træfik](https://traefik.io/), a reverse proxy. If you are not using it, feel free to delete this section. If you are using it, adapt accordingly to your config, especially the `traefik.frontend.rule` option.
* the `environment` section to adapt the strategy to update feeds.
@ -431,11 +431,11 @@ You need a working SSL configuration and the Apache modules `proxy`, `proxy_http
ProxyPreserveHost On
<Location /freshrss/>
ProxyPass http://127.0.0.1:8080/
ProxyPassReverse http://127.0.0.1:8080/
RequestHeader set X-Forwarded-Prefix "/freshrss"
RequestHeader set X-Forwarded-Proto "https"
Require all granted
Options none
ProxyPass http://127.0.0.1:8080/
ProxyPassReverse http://127.0.0.1:8080/
RequestHeader set X-Forwarded-Prefix "/freshrss"
RequestHeader set X-Forwarded-Proto "https"
Require all granted
Options none
</Location>
```

View File

@ -21,8 +21,8 @@ Enfin, il permet lajout d[extensions](#extensions) pour encore plus de per
Les demandes de fonctionnalités, rapports de bugs, et autres contributions sont les bienvenues. Privilégiez pour cela des [demandes sur GitHub](https://github.com/FreshRSS/FreshRSS/issues).
Nous sommes une communauté amicale.
* Site officiel : https://freshrss.org
* Démo : http://demo.freshrss.org/
* Site officiel : <https://freshrss.org>
* Démo : <http://demo.freshrss.org/>
* Licence : [GNU AGPL 3](https://www.gnu.org/licenses/agpl-3.0.fr.html)
![Logo de FreshRSS](docs/img/FreshRSS-logo.png)
@ -141,15 +141,15 @@ Consultez la documentation de Cron de votre système dexploitation ([Debian/U
Cest une bonne idée dutiliser le même utilisateur que votre serveur Web (souvent “www-data”).
Par exemple, pour exécuter le script toutes les heures :
```
```text
8 * * * * php /usr/share/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1
```
### Exemple pour Debian / Ubuntu
## Exemple pour Debian / Ubuntu
Créer `/etc/cron.d/FreshRSS` avec :
```
```text
7,37 * * * * www-data php -f /usr/share/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1
```
@ -162,7 +162,7 @@ Créer `/etc/cron.d/FreshRSS` avec :
* Le répertoire spécial `./data/users/_/` contient la partie des logs partagés par tous les utilisateurs.
# F.A.Q. :
# FAQ
* La date et lheure dans la colonne de droite sont celles déclarées par le flux, pas lheure à laquelle les articles ont été reçus par FreshRSS, et cette colonne nest pas utilisée pour le tri.
* En particulier, lors de limport dun nouveau flux, ses articles sont importés en tête de liste.
@ -172,31 +172,43 @@ Créer `/etc/cron.d/FreshRSS` avec :
* Il faut conserver vos fichiers `./data/config.php` ainsi que `./data/users/*/config.php`
* Vous pouvez exporter votre liste de flux au format OPML soit depuis linterface Web, soit [en ligne de commande](cli/README.md)
* Pour sauvegarder les articles eux-mêmes :
* **Dans le cas où vous utilisez MySQL**
Vous pouvez utiliser [phpMyAdmin](https://www.phpmyadmin.net) ou les outils de MySQL :
```sh
mysqldump --skip-comments --disable-keys --user=<db_user> --password --host <db_host> --result-file=freshrss.dump.sql --databases <freshrss_db>
```
* **Pour toutes les bases supportées**
Vous pouvez utiliser la [ligne de commande](cli/README.md) pour exporter votre base de données vers une base de données au format SQLite :
```
./cli/export-sqlite-for-user.php --user <username> --filename </path/to/db.sqlite>
```
> Il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`. Si ce n'est pas le cas, la commande ne fonctionnera pas correctement.
Vous pouvez encore utiliser la [ligne de commande](cli/README.md) pour importer la base de données au format SQLite dans votre base de données:
```
./cli/import-sqlite-for-user.php --user <username> --filename </path/to/db.sqlite>
```
> Encore une fois, il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`. Si ce n'est pas le cas, la commande ne fonctionnera pas correctement.
Pour sauvegarder les articles eux-mêmes :
Le processus d'import/export à l'aide d'une base de données SQLite est utile quand vous devez :
- exporter complètement les données d'un utilisateur,
- sauvegarder votre service,
- migrer votre service sur un autre serveur,
- changer de type de base de données,
- corriger des erreurs de base de données.
## Dans le cas où vous utilisez MySQL
Vous pouvez utiliser [phpMyAdmin](https://www.phpmyadmin.net) ou les outils de MySQL :
```sh
mysqldump --skip-comments --disable-keys --user=<db_user> --password --host <db_host> --result-file=freshrss.dump.sql --databases <freshrss_db>
```
## Pour toutes les bases supportées
Vous pouvez utiliser la [ligne de commande](cli/README.md) pour exporter votre base de données vers une base de données au format SQLite :
```sh
./cli/export-sqlite-for-user.php --user <username> --filename </path/to/db.sqlite>
```
> Il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`.
Si ce n'est pas le cas, la commande ne fonctionnera pas correctement.
Vous pouvez encore utiliser la [ligne de commande](cli/README.md) pour importer la base de données au format SQLite dans votre base de données:
```sh
./cli/import-sqlite-for-user.php --user <username> --filename </path/to/db.sqlite>
```
> Encore une fois, il est impératif que le nom du fichier contenant la base de données ait une extension `sqlite`. Si ce n'est pas le cas, la commande ne fonctionnera pas correctement.
Le processus d'import/export à l'aide d'une base de données SQLite est utile quand vous devez :
* exporter complètement les données d'un utilisateur,
* sauvegarder votre service,
* migrer votre service sur un autre serveur,
* changer de type de base de données,
* corriger des erreurs de base de données.
# Extensions

View File

@ -21,8 +21,8 @@ Finally, it supports [extensions](#extensions) for further tuning.
Feature requests, bug reports, and other contributions are welcome. The best way to contribute is to [open an issue on GitHub](https://github.com/FreshRSS/FreshRSS/issues).
We are a friendly community.
* Official website: https://freshrss.org
* Demo: https://demo.freshrss.org/
* Official website: <https://freshrss.org>
* Demo: <https://demo.freshrss.org/>
* License: [GNU AGPL 3](https://www.gnu.org/licenses/agpl-3.0.html)
![FreshRSS logo](docs/img/FreshRSS-logo.png)
@ -90,7 +90,7 @@ More detailed information about installation and server configuration can be fou
* The special folder `./data/users/_/` contains the part of the logs that are shared by all users.
# F.A.Q.
# FAQ
* The date and time in the right-hand column is the date declared by the feed, not the time at which the article was received by FreshRSS, and it is not used for sorting.
* In particular, when importing a new feed, all of its articles will appear at the top of the feed list regardless of their declared date.

View File

@ -95,7 +95,7 @@ Some commands display information on standard error; cron will send an email wit
To avoid cron sending email on success:
```sh
```text
@daily /usr/local/bin/my-command > /var/log/cron-freshrss-stdout.log 2>/var/log/cron-freshrss-stderr.log || cat /var/log/cron-freshrss-stderr.log
```

View File

@ -8,12 +8,11 @@ You need to verify that your server can run FreshRSS before installing it. If yo
| ------------- | ----------------------- | ----------------------- |
| Web server | **Apache 2** | Nginx, lighttpd |
| PHP | **PHP 7+** | |
| PHP modules | Required: libxml, cURL, JSON, PDO\_MySQL, PCRE and ctype. <br>Required (32-bit only): GMP <br> Recommended: Zlib, mbstring, iconv, ZipArchive <br> *For the whole modules list see [Dockerfile](https://github.com/FreshRSS/FreshRSS/blob/edge/Docker/Dockerfile-Alpine#L7-L9)* | |
| PHP modules | Required: libxml, cURL, JSON, PDO_MySQL, PCRE and ctype.<br />Required (32-bit only): GMP <br />Recommended: Zlib, mbstring, iconv, ZipArchive<br />*For the whole modules list see [Dockerfile](https://github.com/FreshRSS/FreshRSS/blob/edge/Docker/Dockerfile-Alpine#L7-L9)* | |
| Database | **MySQL 5.5.3+** | SQLite 3.7.4+, PostgreSQL 9.5+ |
| Browser | **Firefox** | Chrome, Opera, Safari, or Edge |
# Getting the appropriate version of FreshRSS
## Getting the appropriate version of FreshRSS
FreshRSS has two different releases. It is better if you spend some time to understand the purpose of each release.

View File

@ -10,7 +10,7 @@ Before you begin, make sure that you've read the [prerequisites](02_Prerequisite
3. Give ownership of the FreshRSS folder to your web server user (often `www-data`). Give group read permissions to all files in `.`[^2], and group write permissions to `./data/`.
4. Install needed PHP modules. A precise and up-to-date list can be found in [the Dockerfile](https://github.com/FreshRSS/FreshRSS/blob/edge/Docker/Dockerfile#L11-L12).
4. Install needed PHP modules. A precise and up-to-date list can be found in [the Dockerfile](https://github.com/FreshRSS/FreshRSS/blob/edge/Docker/Dockerfile#L11-L12).
5. Create a database for FreshRSS to use. Note the username and password for this database, as it will be needed during installation!

View File

@ -24,87 +24,76 @@ You may wish to run the cron task or systemd unit (`freshrss.service`) immediate
**You must have used git to install FreshRSS to use this update method.**
If your local user doesn't have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo `, or switch to an account that does have write access to the folder.
If your local user doesn't have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo`, or switch to an account that does have write access to the folder.
1. Change to your FreshRSS directory
```sh
cd /usr/share/FreshRSS/
```
```sh
cd /usr/share/FreshRSS/
```
2. Fetch the most recent code from GitHub
```sh
git fetch --all
```
```sh
git fetch --all
```
3. Discard manual changes and delete manual additions
```sh
git reset --hard
git clean -f -d
```
```sh
git reset --hard
git clean -f -d
```
Note: If you wish to keep your changes, it's better to [create a pull request](https://github.com/FreshRSS/FreshRSS/compare) or [an extension](../developers/03_Backend/05_Extensions.md).
Note: If you wish to keep your changes, it's better to [create a pull request](https://github.com/FreshRSS/FreshRSS/compare) or [an extension](../developers/03_Backend/05_Extensions.md).
4. Update FreshRSS
```sh
git checkout edge
git pull
git checkout $(git describe --tags --abbrev=0)
```
```sh
git checkout edge
git pull
git checkout $(git describe --tags --abbrev=0)
```
Note: If you want to use the rolling release, the last command is optional.
Note: If you want to use the rolling release, the last command is optional.
5. (optional) Make sure you use the correct version
```sh
git status
```
```sh
git status
```
The command should tell you the tag that you're using. It must be the same as the one associated with [the latest release on GitHub](https://github.com/FreshRSS/FreshRSS/releases/latest). If you use the rolling release, it should tell you that your `edge` branch is up to date with `origin`.
The command should tell you the tag that you're using. It must be the same as the one associated with [the latest release on GitHub](https://github.com/FreshRSS/FreshRSS/releases/latest). If you use the rolling release, it should tell you that your `edge` branch is up to date with `origin`.
6. Re-set correct permissions so that your web server can access the files
```sh
chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/
```
```sh
chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/
```
## Using the Zip archive
If your local user doesn't have write access to the FreshRSS folder, use a sudo shell (`sudo -s`), prefix the following commands with `sudo`, or switch to an account that does have write access to the folder.
1. Change to your FreshRSS directory
```sh
cd /usr/share/FreshRSS/
```
```sh
cd /usr/share/FreshRSS/
```
2. Get the link to the Zip archive for [the latest release](https://github.com/FreshRSS/FreshRSS/releases/latest): [`https://github.com/FreshRSS/FreshRSS/archive/latest.zip`](https://github.com/FreshRSS/FreshRSS/archive/latest.zip). If you want to use the rolling release, the link is [`https://github.com/FreshRSS/FreshRSS/archive/edge.zip`](https://github.com/FreshRSS/FreshRSS/archive/edge.zip).
3. Download and unzip the update file
```sh
wget -O freshrss.zip https://github.com/FreshRSS/FreshRSS/archive/latest.zip
unzip freshrss.zip
```
```sh
wget -O freshrss.zip https://github.com/FreshRSS/FreshRSS/archive/latest.zip
unzip freshrss.zip
```
4. Overwrite all your existing files with the new ones
```sh
cp -R FreshRSS-*/* .
```
3. Overwrite all your existing files with the new ones
5. Re-set permissions
```sh
chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/
```
```sh
cp -R FreshRSS-*/* .
```
4. Re-set permissions
```sh
chown -R :www-data . && chmod -R g+r . && chmod -R g+w ./data/
```
5. Clean up the FreshRSS directory by deleting the downloaded zip, the file forcing the setup wizard and the temporary directory
```sh
rm -f freshrss.zip
rm -rf FreshRSS-*/
```
6. Clean up the FreshRSS directory by deleting the downloaded zip, the file forcing the setup wizard and the temporary directory
```sh
rm -f freshrss.zip
rm -rf FreshRSS-*/
```

View File

@ -7,6 +7,7 @@ FreshRSS is updated by the `./app/actualize_script.php` script. Knowing this, we
**Note:** the following examples assume that FreshRSS is installed to `/usr/share/FreshRSS`. You'll need to modify the FreshRSS path to reflect your own system.
**Note:** If you cannot configure a local Cronjob, [see an alternative using online cron](../users/03_Main_view.md#online-cron).
## Cron as a trigger
You'll need to check the Cron documentation for your specific distribution ([Debian/Ubuntu](https://help.ubuntu.com/community/CronHowto), [Red Hat/Fedora/CentOS](https://fedoraproject.org/wiki/Administration_Guide_Draft/Cron), [Slackware](https://docs.slackware.com/fr:slackbook:process_control?#cron), [Gentoo](https://wiki.gentoo.org/wiki/Cron), [Arch Linux](https://wiki.archlinux.org/index.php/Cron) ...) to make sure you set the Cron job correctly.
@ -14,10 +15,11 @@ You'll need to check the Cron documentation for your specific distribution ([Deb
It's advisable that you run the Cron job as your Web server user (often `www-data`).
### Example on Debian/Ubuntu
To run the updater script every hour, and 10 minutes past the hour:
Run `sudo crontab -e` and copy the following line into the crontab:
```
```text
10 * * * * www-data php -f /usr/share/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1
```
@ -27,7 +29,7 @@ Some systems can't use a Cron job, but they can use systemd. It's easy to config
First you need to add a `freshrss.timer` file in `/etc/systemd/system/` with the following content:
```
```ini
[Unit]
Description=FreshRSS get new content
@ -43,7 +45,7 @@ This timer will start 30 seconds after boot and it will trigger the service ever
Then you need to add a `freshrss.service` file in the same directory. This will be the description of the service triggered by the aforementioned timer.
```
```ini
[Unit]
Description=FreshRSS get new content
Wants=freshrss.timer

View File

@ -4,7 +4,8 @@ FreshRSS offers three methods of Access control: Form Authentication using JavaS
## Form Authentication
Form Authentication requires the use of JavaScript. It will work on any supported version of PHP, but version 5.5 or newer is recommended (see footnote 1 in [prerequisites](02_Prerequisites.md) for the reason why).
Form Authentication requires the use of JavaScript. It will work on any supported version of PHP,
but version 5.5 or newer is recommended (see footnote 1 in [prerequisites](02_Prerequisites.md) for the reason why).
This option requires nothing more than selecting Form Authentication during installation.
@ -22,7 +23,9 @@ When using auto-registration, you can optionally use the `http_auth_auto_registe
variable containing the email address of the authenticated user (e.g. `REMOTE_USER_EMAIL`).
## No Authentication
Not using authentication on your server is dangerous, as anyone with access to your server would be able to make changes as an admin. It is never advisable to not use any form of authentication, but **never** chose this option on a server that is able to be accessed outside of your home network.
Not using authentication on your server is dangerous, as anyone with access to your server would be able to make changes as an admin.
It is never advisable to not use any form of authentication, but **never** chose this option on a server that is able to be accessed outside of your home network.
## Hints

View File

@ -1,9 +1,10 @@
# Apache/Nginx Configuration Files
## Apache configuration
This is an example Apache virtual hosts configuration file. It covers HTTP and HTTPS configuration.
```
```apache
<VirtualHost *:80>
DocumentRoot /var/www/html/
@ -62,7 +63,8 @@ This is an example Apache virtual hosts configuration file. It covers HTTP and H
This is an example nginx configuration file. It covers HTTP, HTTPS, and php-fpm configuration.
You can find simpler config file but they may be incompatible with FreshRSS API.
```
```nginx
server {
listen 80;
listen 443 ssl;

View File

@ -4,14 +4,14 @@
**For small theme changes, the official [CustomCSS extension](https://github.com/FreshRSS/Extensions) is recommended.**
Themes should be installed at `FreshRSS/p/themes/theme-name`. Docker users can use
Themes should be installed at `FreshRSS/p/themes/theme-name`. Docker users can use:
```sh
-v /home/you/my-theme/:/var/www/FreshRSS/p/themes/my-theme/
```
-v /home/you/my-theme/:/var/www/FreshRSS/p/themes/my-theme/
```
or a similar method to add their theme to their FreshRSS instance.
or a similar method to add their theme to their FreshRSS instance.
# Creating themes
## Creating themes
Information on creating themes can be found in [the developer documentation.](../developers/04_Frontend/02_Design.md)

View File

@ -27,4 +27,5 @@ Start by creating your development environment. A guide to setting up FreshRSS's
* [Design (Themes/Theming)](04_Frontend/02_Design.md)
## Minz
Minz is the homemade PHP framework used by FreshRSS. More information can be found [here](Minz/index.md).

View File

@ -208,7 +208,7 @@ Please ensure that your code works with the oldest PHP version officially suppor
## Miscellaneous
### Operators
### Operators on multiple lines
Operators must be at the end of the line if a condition is split over more than one line.
@ -219,7 +219,7 @@ if ($a == 10 ||
}
```
### End of file
### End of PHP file
If the file contains only PHP code, the PHP closing tag must be omitted.

View File

@ -1 +1,3 @@
# Database Schema
# Database Schema
> **TODO**

View File

@ -1,15 +1,17 @@
# Accessing the database
# Changing the source code
**TODO**
## Accessing the database
# Writing an action and its related view
> **TODO**
**TODO**
## Writing an action and its related view
# Authentication
> **TODO**
**TODO**
## Authentication
# Logs
> **TODO**
**TODO**
## Logs
> **TODO**

View File

@ -38,7 +38,8 @@ Minz relies on and imposes an MVC architecture on projects using it. This archit
### Routing
In order to link a URL to a controller, first you have to go through a "routing" phase. In FreshRSS, this is particularly simple because it suffices to specify the name of the controller to load into the URL using a `c` parameter. For example, the address http://exemple.com?c=hello will execute the code contained in the `hello` controller.
In order to link a URL to a controller, first you have to go through a "routing" phase. In FreshRSS, this is particularly simple because it suffices to specify the name of the controller to load into the URL using a `c` parameter.
For example, the address <http://exemple.com?c=hello> will execute the code contained in the `hello` controller.
One concept that has not yet been discussed is the "actions" system. An action is executed *on* a controller. Concretely, a controller is represented by a class and its actions by methods. To execute an action, it is necessary to specify an `a` parameter in the URL.
@ -60,9 +61,10 @@ class FreshRSS_hello_Controller extends Minz_ActionController {
?>
```
When loading the address http://exemple.com?c=hello&a=world, the `world` action is executed on the `hello` controller.
When loading the address <http://exemple.com?c=hello&a=world>, the `world` action is executed on the `hello` controller.
Note: if `c` or `a` is not specified, the default value for each of these variables is `index`. So the address http://exemple.com?c=hello will execute the `index` action of the `hello` controller.
Note: if `c` or `a` is not specified, the default value for each of these variables is `index`.
So the address <http://exemple.com?c=hello> will execute the `index` action of the `hello` controller.
From now on, the `hello/world` naming convention will be used to refer to a controller/action pair.
@ -123,7 +125,7 @@ To take full advantage of the Minz routing system, it is strongly discouraged to
</p>
```
If one day it was decided to use a "url rewriting" system to have addresses in a http://exemple.com/controller/action format, all previous addresses would become ineffective!
If one day it was decided to use a "url rewriting" system to have addresses in a <http://exemple.com/controller/action> format, all previous addresses would become ineffective!
So use the `Minz_Url` class and its `display()` method instead. `Minz_Url::display()` takes an array of the following form as its argument:
@ -219,7 +221,7 @@ An extension allows you to easily add functionality to FreshRSS without having t
### Make it work in Docker
When working on an extension, it's easier to see it working directly in its environment. With Docker, you can leverage the use of the ```volume``` option when starting the container. Hopefully, you can use it without Docker-related knowledge by using the Makefile rule:
```
```sh
make start extensions="/full/path/to/extension/1 /full/path/to/extension/2"
```
@ -239,13 +241,14 @@ but you should follow our best practice:
If you want to write a `HelloWorld` extension, the directory name should be `xExtension-HelloWorld` and the base class name `HelloWorldExtension`.
In the file `freshrss/extensions/xExtension-HelloWorld/extension.php` you need the structure:
```html
```php
class HelloWorldExtension extends Minz_Extension {
public function init() {
// your code here
}
}
```
There is an example HelloWorld extension that you can download from [our GitHub repo](https://github.com/FreshRSS/xExtension-HelloWorld).
You may also need additional files or subdirectories depending on your needs:
@ -254,9 +257,9 @@ You may also need additional files or subdirectories depending on your needs:
* A `static/` directory containing CSS and JavaScript files that you will need for your extension (note that if you need to write a lot of CSS it may be more interesting to write a complete theme)
* A `Controllers` directory containing additional controllers
* An `i18n` directory containing additional translations
* `layout` and` views` directories to define new views or to overwrite the current views
* `layout` and `views` directories to define new views or to overwrite the current views
In addition, it is good to have a `LICENSE` file indicating the license under which your extension is distributed and a` README` file giving a detailed description of it.
In addition, it is good to have a `LICENSE` file indicating the license under which your extension is distributed and a `README` file giving a detailed description of it.
### The metadata.json file
@ -266,10 +269,11 @@ The `metadata.json` file defines your extension through a number of important el
* `author`: your name, your e-mail address ... but there is no specific format to adopt
* `description`: a description of your extension
* `version`: the current version number of the extension
* `entrypoint`: Indicates the entry point of your extension. It must match the name of the class contained in the file `extension.php` without the suffix` Extension` (so if the entry point is `HelloWorld`, your class will be called` HelloWorldExtension`)
* `type`: Defines the type of your extension. There are two types: `system` and` user`. We will study this difference right after.
* `entrypoint`: Indicates the entry point of your extension. It must match the name of the class contained in the file `extension.php` without the suffix `Extension`
(so if the entry point is `HelloWorld`, your class will be called `HelloWorldExtension`)
* `type`: Defines the type of your extension. There are two types: `system` and `user`. We will study this difference right after.
Only the `name` and` entrypoint` fields are required.
Only the `name` and `entrypoint` fields are required.
### Choosing between `system` and `user`
@ -296,7 +300,7 @@ The `Minz_Extension` abstract class defines a set of methods that can be overrid
The `Minz_Extension` abstract class defines another set of methods that should not be overridden:
* the `getName`, `getEntrypoint`, `getPath`, `getAuthor`, `getDescription`, `getVersion`, and `getType` methods return the extension internal properties. Those properties are extracted from the `metadata.json` file.
* the `getFileUrl` returns the URL of the selected file. The file must exist in the `static` folder of the extension.
* the `registerController` method register an extension controller in FreshRSS. The selected controller must be defined in the extension _Controllers_ folder, its file name must be _<name>Controller.php_, and its class name must be *FreshExtension\_<name>\_Controller*.
* the `registerController` method register an extension controller in FreshRSS. The selected controller must be defined in the extension _Controllers_ folder, its file name must be _\<name\>Controller.php_, and its class name must be *FreshExtension_\<name\>_Controller*.
* the `registerViews` method registers the extension views in FreshRSS.
* the `registerTranslates` method registers the extension translation files in FreshRSS.
* the `registerHook` method registers hook actions in different part of the application.
@ -348,4 +352,4 @@ The following events are available:
When you want to support user configurations for your extension or simply display some information, you have to create the `configure.phtml` file.
**TODO**
> **TODO**

View File

@ -1,15 +1,17 @@
# The .phtml files
# View files
**TODO**
## The .phtml files
# Writing a URL
> **TODO**
**TODO**
## Writing a URL
# Displaying an icon
> **TODO**
**TODO**
## Displaying an icon
# Internationalisation
> **TODO**
**TODO**
## Internationalisation
> **TODO**

View File

@ -19,7 +19,7 @@ RTL (right-to-left) support for languages such as Hebrew and Arabic is handled t
## Overriding icons
To replace the default icons, add an "icons" folder to your theme's folder. Use files with the same name as the default icon to override them.
To replace the default icons, add an "icons" folder to your theme's folder. Use files with the same name as the default icon to override them.
## Template file
@ -27,11 +27,11 @@ To replace the default icons, add an "icons" folder to your theme's folder. Use
```json
{
"name": "Theme name",
"author": "Theme author",
"description": "Theme description",
"version": 0.1,
"files": ["_template.css", "file1.css", "file2.css"]
"name": "Theme name",
"author": "Theme author",
"description": "Theme description",
"version": 0.1,
"files": ["_template.css", "file1.css", "file2.css"]
}
```

View File

@ -1,6 +1,7 @@
# Preparing the release
In order to get as much feedback as possible before a release, it's preferable to announce it on GitHub by creating a dedicated ticket ([see examples] (https://github.com/FreshRSS/FreshRSS/search?utf8=%E2%9C%93&q=Call+for+testing&type=Issues)). This should be done **at least one week in advance**.
In order to get as much feedback as possible before a release, it's preferable to announce it on GitHub by creating a dedicated ticket
([see examples](https://github.com/FreshRSS/FreshRSS/search?utf8=%E2%9C%93&q=Call+for+testing&type=Issues)). This should be done **at least one week in advance**.
It's also recommended to make the announcement on mailing@freshrss.org.
@ -12,7 +13,7 @@ You must also **make sure that the CHANGELOG file is up to date** with the updat
## Git process
```sh
```console
$ git checkout edge
$ git pull
$ vim constants.php
@ -98,7 +99,7 @@ When everything's working, it's time to announce the release to the world!
## Starting the next development version
```sh
```console
$ git checkout edge
$ vim constants.php
# Update the FRESHRSS_VERSION

View File

@ -50,7 +50,7 @@ The following features are not supported:
If this API does not work as expected in your RSS reader, you can test it manually with a tool like [Postman](https://www.getpostman.com/).
Configure a POST request to the URL https://freshrss.example.net/api/fever.php?api which should give you the result:
Configure a POST request to the URL <https://freshrss.example.net/api/fever.php?api> which should give you the result:
```json
{
"api_version": 3,
@ -84,15 +84,15 @@ Perfect, you're now authenticated and you can start testing the more advanced fe
Some basic calls are:
* https://freshrss.example.net/api/fever.php?api&items
* https://freshrss.example.net/api/fever.php?api&feeds
* https://freshrss.example.net/api/fever.php?api&groups
* https://freshrss.example.net/api/fever.php?api&unread_item_ids
* https://freshrss.example.net/api/fever.php?api&saved_item_ids
* https://freshrss.example.net/api/fever.php?api&items&since_id=some_id
* https://freshrss.example.net/api/fever.php?api&items&max_id=some_id
* https://freshrss.example.net/api/fever.php?api&mark=item&as=read&id=some_id
* https://freshrss.example.net/api/fever.php?api&mark=item&as=unread&id=some_id
* <https://freshrss.example.net/api/fever.php?api&items>
* <https://freshrss.example.net/api/fever.php?api&feeds>
* <https://freshrss.example.net/api/fever.php?api&groups>
* <https://freshrss.example.net/api/fever.php?api&unread_item_ids>
* <https://freshrss.example.net/api/fever.php?api&saved_item_ids>
* <https://freshrss.example.net/api/fever.php?api&items&since_id=some_id>
* <https://freshrss.example.net/api/fever.php?api&items&max_id=some_id>
* <https://freshrss.example.net/api/fever.php?api&mark=item&as=read&id=some_id>
* <https://freshrss.example.net/api/fever.php?api&mark=item&as=unread&id=some_id>
Replace `some_id` with a real ID from your `freshrss_username_entry` database.

View File

@ -5,21 +5,21 @@ Additionally [page about our Fever compatible API](06_Fever_API.md) for another
## RSS clients
There are many RSS clients that support the Fever API, but they seem to understand the Fever API a bit differently.
There are many RSS clients that support the Fever API, but they might understand the API a bit differently.
If your favourite client doesn't work properly with this API, please create an issue and we'll have a look.
But we can **only** do that for free clients.
### Usage & Authentication
## Usage & Authentication
Before you can start using this API, you have to enable and setup API access, which is [documented here](../users/06_Mobile_access.md),
and then reset the users API password.
Then point your mobile application to the `greader.php` address (e.g. `https://freshrss.example.net/api/greader.php`).
# Compatible clients
## Compatible clients
6. On the same FreshRSS API page, note the address given under “Your API address”, like `https://freshrss.example.net/api/greader.php`
* Type the API address in a client, together with your FreshRSS username, and the corresponding special API password.
1. On the same FreshRSS API page, note the address given under “Your API address”, like `https://freshrss.example.net/api/greader.php`
2. Type the API address in a client, together with your FreshRSS username, and the corresponding special API password.
| App | Platform | License |
|:----------------------------------------------------------------------------------:|:-------------------:|:--------------------------------------------------------:|
@ -34,7 +34,7 @@ Then point your mobile application to the `greader.php` address (e.g. `https://f
|[Reeder](https://www.reederapp.com/) |MacOS, iOS |Closed Source |
|[FreshRSS-Notify](https://addons.mozilla.org/firefox/addon/freshrss-notify-webextension/) |Firefox |Open Source |
# Google Reader compatible API
## Google Reader compatible API
Examples of basic queries:

View File

@ -8,12 +8,12 @@ If you're convinced that you should be heard, here's how you can go about it.
GitHub is the ideal platform to submit your requests. It allows us to discuss a problem or suggestion with others and it often generates new ideas. Let's not neglect this "social" aspect!
1. [Go to the bug ticket manager](https://github.com/FreshRSS/FreshRSS/issues)
2. Start by checking if a similar request hasn't already been made. If so, please feel free to add your voice to the request.
3. If your request is new, [open a new bug ticket](https://github.com/FreshRSS/FreshRSS/issues/new)
4. Finally, write your request. If you're fluent in English, it's the preferred language because it allows for discussion with the largest number of people.
5. Please follow the tips below to make it easier to let your ticket be heard.
1. [Go to the bug ticket manager](https://github.com/FreshRSS/FreshRSS/issues)
2. Start by checking if a similar request hasn't already been made. If so, please feel free to add your voice to the request.
3. If your request is new, [open a new bug ticket](https://github.com/FreshRSS/FreshRSS/issues/new)
4. Finally, write your request. If you're fluent in English, it's the preferred language because it allows for discussion with the largest number of people.
5. Please follow the tips below to make it easier to let your ticket be heard.
## Informal
Not everyone likes or uses GitHub for a variety of legitimate reasons. That is why you can also contact us in a more informal way.
@ -59,8 +59,8 @@ So that we understand what you consider to be the problem.
Remember to give the following information if you know it:
1. Which browser? Which version?
2. Which server: Apache, Nginx? Which version?
3. Which version of PHP?
4. Which database: SQLite, MySQL, MariaDB, PostgreSQL? Which version?
5. Which distribution runs on the server? And... which version?
1. Which browser? Which version?
2. Which server: Apache, Nginx? Which version?
3. Which version of PHP?
4. Which database: SQLite, MySQL, MariaDB, PostgreSQL? Which version?
5. Which distribution runs on the server? And... which version?

View File

@ -37,4 +37,4 @@ Another chance to try out, but not official supported by FreshRSS: The applicati
## Licence
FreshRSS is licensed under the GNU Affero General Public License v3.0.
FreshRSS is licensed under the GNU Affero General Public License v3.0.

View File

@ -48,8 +48,8 @@ You should not have to write the array by yourself and we provide several comman
If you want to add support for a language which isn't supported by FreshRSS yet, you can run this command:
```console
$ make i18n-add-language lang=[your language code]
```sh
make i18n-add-language lang=[your language code]
```
You must replace `[your language code]` by the language tag of your language. It must follow the [IETF BCP 47 standard](https://en.wikipedia.org/wiki/IETF_language_tag). For instance, English is `en` and French is `fr`. You can target a specific region with a subtag, for instance `pt-br` for Brazilian Portuguese. If you're not sure of the code, Wikipedia might be a good start to find it or you can ask us for help too.
@ -62,24 +62,24 @@ You might have noticed some strings are not yet translated from English even tho
To update a string, you just have to open its file, find the string, and change it (without removing the quotes around it!) You might want to remove the comment at the end of the line, but you should prefer to use the following command:
```console
$ make i18n-format
```sh
make i18n-format
```
It will remove the comments on the lines that you've changed, and will reformat the file correctly. If you've made any mistakes, it will fix them automatically or it will tell you it can't (well… the command will dramatically fail without any damage, don't worry).
The strings to translate can be easily found in the translations files thanks to the tag we spoke about at the end of the previous section. Indeed, it indicates to our tools that the strings are not translated yet. This means you can find them with Git. For instance for the Greek language:
```console
$ git grep TODO app/i18n/he
```sh
git grep TODO app/i18n/he
```
## Acknowledge a false-positive
Our tool detects if a string needs to be translated if it equals to the English version. For instance, the word “version” is the same in English and French. Thus, our tool would mark the French word to be translated. This is, in fact, the case for the `index.about.version` key. This case is considered as a false-positive because the word _is_ actually translated. To aknowledge such translations, you can run:
```console
$ make i18n-ignore-key lang=fr key=index.about.version
```sh
make i18n-ignore-key lang=fr key=index.about.version
```
This command adds an entry in the [`cli/i18n/ignore/fr.php` file](/cli/i18n/ignore/fr.php) so the key can be considered as translated.
@ -88,22 +88,22 @@ This command adds an entry in the [`cli/i18n/ignore/fr.php` file](/cli/i18n/igno
If you're developping a new part of the application, you might want to declare a new translation key. Your first impulse would be to add the key to each file manually: don't do that, it's very painful. We provide another command:
```console
$ make i18n-add-key key=the.key.to.add value='Your string in English'
```sh
make i18n-add-key key=the.key.to.add value='Your string in English'
```
This adds the key to all the files. Itll be in English, waiting for other translators.
Conversely, you may want to remove a key that is no longer used in the application with:
```console
$ make i18n-remove-key key=the.key.to.remove
```sh
make i18n-remove-key key=the.key.to.remove
```
Finally, if the English version of a string needs to be changed, you need to consider two cases. If the change doesn't impact the meaning of the sentence, and therefore other languages don't need to change (e.g. to fix a typo), you should make the change manually in the file. In any other case, you should use the following command:
```console
$ make i18n-update-key key=the.key.to.change value='The new string in English'
```sh
make i18n-update-key key=the.key.to.change value='The new string in English'
```
The key will simply be removed and added back with the new value.
@ -126,7 +126,7 @@ For instance, the English translation for `gen.auth.keep_logged_in` is `Keep me
```php
<label>
<input type="checkbox" name="keep_logged_in" />
<?= _t('gen.auth.keep_logged_in', 30) ?>
<input type="checkbox" name="keep_logged_in" />
<?= _t('gen.auth.keep_logged_in', 30) ?>
</label>
```

View File

@ -2,7 +2,7 @@ FreshRSS has three primary viewing modes: Normal, Global, and Reader view.
# Normal view
Normal view will allow you to view articles in a compressed view. They can be separated by category or individual feed, or viewed in the "main stream" containing all feeds. Clicking a feed in the sidebar (mobile users will need to click the folder icon to open it) will open that feed's view.
Normal view will allow you to view articles in a compressed view. They can be separated by category or individual feed, or viewed in the "main stream" containing all feeds. Clicking a feed in the sidebar (mobile users will need to click the folder icon to open it) will open that feed's view.
## Article List
@ -10,13 +10,13 @@ By default, the normal view includes six items per article. From left to right:
* **Read status:** An envalope icon to show if the article has been read or not. Closed envalopes are unread, open envalopes are read. Clicking on the icon will toggle the read status.
* **Favourite status:** A star icon to show if the article has been favourited or not. Filled stars are favourited, empty stars are not. Clicking on the icon will toggle the favourite status.
* **Feed name:** The name of the feed that the article is from. Clicking the feed name will move to that feed's view in normal view.
* **Article title:** The title of the article. Clicking will open the article for viewing within FreshRSS.
* **Article title:** The title of the article. Clicking will open the article for viewing within FreshRSS.
* **Article date/time:** The time the article was posted.
* **Link to original article:** A globe icon that can be clicked to go to the article on the original website.
## Normal View Sidebar
Clicking the gear icon next to an individual feed will display additional options for that feed.
Clicking the gear icon next to an individual feed will display additional options for that feed.
* **Filter:** Run the defined filter to mark articles as read
* **Statistics:** View statistics about the feed
* **See website:** Open the feed's website in another tab
@ -26,7 +26,7 @@ Clicking the gear icon next to an individual feed will display additional option
# Global view
Global view allows quick views of feed's statuses at once. Feeds and categories are shown with the number of unread articles next to them. Clicking a feed's name will open it in a view similar to normal view.
Global view allows quick views of feed's statuses at once. Feeds and categories are shown with the number of unread articles next to them. Clicking a feed's name will open it in a view similar to normal view.
# Reader view
@ -54,27 +54,28 @@ Here is an example to trigger article update every hour.
Special parameters to configure the script - all parameters can be combined:
- Parameter "force"
https://freshrss.example.net/i/?c=feed&a=actualize&force=1
* Parameter "force"
<https://freshrss.example.net/i/?c=feed&a=actualize&force=1>
If *force* is set to 1 all feeds will be refreshed at once.
- Parameter "ajax"
https://freshrss.example.net/i/?c=feed&a=actualize&ajax=1
* Parameter "ajax"
<https://freshrss.example.net/i/?c=feed&a=actualize&ajax=1>
Only a status site is returned and not a complete website. Example: "OK"
- Parameter "maxFeeds"
https://freshrss.example.net/i/?c=feed&a=actualize&maxFeeds=30
* Parameter "maxFeeds"
<https://freshrss.example.net/i/?c=feed&a=actualize&maxFeeds=30>
If *maxFeeds* is set the configured amount of feeds is refreshed at once. The default setting is "10".
- Parameter "token"
https://freshrss.example.net/i/?c=feed&a=actualize&token=542345872345734
* Parameter "token"
<https://freshrss.example.net/i/?c=feed&a=actualize&token=542345872345734>
Security parameter to prevent unauthorized refreshes. For detailed Documentation see "Form authentication".
### Online cron
If you do not have access to the installation server scheduled task, you can still automate the update process.
To do so, you need to create a scheduled task, which need to call a specific URL: https://freshrss.example.net/i/?c=feed&a=actualize (it could be different depending on your installation). Depending on your application authentication method, you need to adapt the scheduled task.
To do so, you need to create a scheduled task, which need to call a specific URL:
<https://freshrss.example.net/i/?c=feed&a=actualize> (it could be different depending on your installation). Depending on your application authentication method, you need to adapt the scheduled task.
#### No authentication
@ -139,6 +140,7 @@ This update occurs on the selected feed only. To trigger it, simply click on the
# Filtering articles
## Purpose
When the number of articles stored by FreshRSS inevitably grows larger, it's important to use efficient filters to display only a subset of the articles. There are several methods that filter with different criteria. Usually those methods can be combined.
## How-to filter
@ -147,17 +149,17 @@ When the number of articles stored by FreshRSS inevitably grows larger, it's imp
This is the easiest method. You only need to click on the category title in the side panel. There are two special categories at the top of the panel:
* *Main feed* displays only articles from feeds marked as available in that category
* *Favourites* displays only articles marked as favourites
* *Main feed* displays only articles from feeds marked as available in that category
* *Favourites* displays only articles marked as favourites
### By feed
There are several methods to filter articles by feed:
* by clicking the feed title in the side panel
* by clicking the feed title in the article details
* by filtering in the feed options from the side panel
* by filtering in the feed configuration
* by clicking the feed title in the side panel
* by clicking the feed title in the article details
* by filtering in the feed options from the side panel
* by filtering in the feed configuration
![Feed filter](../img/users/feed.filter.1.png)

View File

@ -1,23 +1,23 @@
# Adding a feed
1. To add a feed, copy the URL of its RSS or Atom file (for instance, the Framablog RSS URL is `https://framablog.org/feed/`). FreshRSS is able to automatically find the address of the feed for websites that are declaring it in a standard way.
2. In FreshRSS, click the "**+**" button next to “Subscriptions management”.
3. Paste the URL in the “Feed URL” field.
4. (optional): You can select the category for your feed. By default, it will be in “Uncategorized”.
5. (optional): If the subscription requires credentials, you can enter them in the "HTTP username" and "HTTP password" fields.
6. (optional): You can set a timeout for the feed request if the feed requires it.
7. (optional): You can choose to ignore SSL certificate errors (such as with self-signed certificates) by setting "Verify SSL security" to "No". This is not recommended, and it is better to either add the root certificate to the FreshRSS server or to fix the SSL certificate problems on the feed hosting server.
1. To add a feed, copy the URL of its RSS or Atom file (for instance, the Framablog RSS URL is `https://framablog.org/feed/`). FreshRSS is able to automatically find the address of the feed for websites that are declaring it in a standard way.
2. In FreshRSS, click the "**+**" button next to “Subscriptions management”.
3. Paste the URL in the “Feed URL” field.
4. (optional): You can select the category for your feed. By default, it will be in “Uncategorized”.
5. (optional): If the subscription requires credentials, you can enter them in the "HTTP username" and "HTTP password" fields.
6. (optional): You can set a timeout for the feed request if the feed requires it.
7. (optional): You can choose to ignore SSL certificate errors (such as with self-signed certificates) by setting "Verify SSL security" to "No". This is not recommended, and it is better to either add the root certificate to the FreshRSS server or to fix the SSL certificate problems on the feed hosting server.
## Subscription management
The "Subscription management" submenu allows categories and feeds to be configured. Feeds can be moved between categories by drag-and-drop, or in the individual feed's settings. Hovering over a feed/category will cause a gear icon to appear. Clicking the icon will bring up the settings for that item.
The "Subscription management" submenu allows categories and feeds to be configured. Feeds can be moved between categories by drag-and-drop, or in the individual feed's settings. Hovering over a feed/category will cause a gear icon to appear. Clicking the icon will bring up the settings for that item.
## Category Settings
### Information
* **Title:** Name of category
* **Display position:** Defines the order of categories. Lower numbers get priority, non-numbered items come last, and equally numbered items will sort by alphabetical order.
* **Display position:** Defines the order of categories. Lower numbers get priority, non-numbered items come last, and equally numbered items will sort by alphabetical order.
### Archiving
@ -47,16 +47,19 @@ The "Article CSS selector on original website" corresponds to the "path" consis
##### Example: Rue89
To find this path, you have to go to the address of one of the truncated articles (for example, http://www.rue89.com/2013/10/15/prof-maths-jai-atteint-lextase-dihn-pedagogie-inversee-246635). You look have to look for the "block" of HTML that corresponds to article content (in the source code!).
To find this path, you have to go to the address of one of the truncated articles.
You look have to look for the "block" of HTML that corresponds to article content (in the source code!).
Here we find that the block that encompasses nothing but the content of the article is ```<div class="content clearfix">```. We'll only use the `.content` class here. Nevertheless, as said above, it's best to start the path with an id. If we go back to the parent block, we find ```<div id="article">``` and that's perfect! The path will be ```#article .content```.
##### Add the corresponding classes to the article CSS path on the feed configuration page. Examples:
##### Add the corresponding classes to the article CSS path on the feed configuration page
* Rue89: ```#article .content```
* PCINpact: ```#actu_content```
* Lesnumériques: ```article#body div.text.clearfix```
* Phoronix: ```#main .content```
Examples:
* Rue89: ```#article .content```
* PCINpact: ```#actu_content```
* Lesnumériques: ```article#body div.text.clearfix```
* Phoronix: ```#main .content```
##### Combining CSS Classes
@ -94,20 +97,20 @@ See [SQLite export/import]( https://github.com/FreshRSS/FreshRSS/tree/edge/cli)
## Export
1. To export your list of feeds, go to “Subscriptions management”.
2. Click on “Import / export”
3. You can select for your export:
1. the list of feeds
2. labelled articles
3. favourite articles
4. and finally, you can select feeds you want to export (by default, all feeds are selected)
4. Click on “export”.
1. To export your list of feeds, go to “Subscriptions management”.
2. Click on “Import / export”
3. You can select for your export:
1. the list of feeds
2. labelled articles
3. favourite articles
4. and finally, you can select feeds you want to export (by default, all feeds are selected)
4. Click on “export”.
## Import
1. Go to the page “Import / export”.
2. Click on “Browse” and select your OPML or archive file on your computer.
3. Click on “Import”
1. Go to the page “Import / export”.
2. Click on “Browse” and select your OPML or archive file on your computer.
3. Click on “Import”
> **Important**: you can not import directly a list of feeds from a text file.
> You need to convert it beforehand to _OPML_.
@ -116,11 +119,11 @@ See [SQLite export/import]( https://github.com/FreshRSS/FreshRSS/tree/edge/cli)
> * [Pandoc](https://pandoc.org/) available for most systems,
> * [OPML generator](https://opml-gen.ovh/) available online,
> * [txt2opml](https://alterfiles.com/convert/txt/opml) available online.
## Use bookmarklet
Bookmarklets are little scripts that you can execute to perform various tasks. FreshRSS offers a bookmarklet for subscribing to newsfeeds.
1. Open “Subscriptions management”.
2. Click on “Subscription tools”.
3. Drag the “Subscribe” button to your bookmark toolbar or right click and choose your browsers “Bookmark link” action.
1. Open “Subscriptions management”.
2. Click on “Subscription tools”.
3. Drag the “Subscribe” button to your bookmark toolbar or right click and choose your browsers “Bookmark link” action.

View File

@ -15,14 +15,14 @@ Available languages are: cz, de, en, es, fr, he, it, ko, nl, oc, pt-br, ru, tr,
There's no accounting for tastes, which is why FreshRSS offers eight official themes:
* *Blue Lagoon* by **Mister aiR**
* *Dark* by **AD**
* *Flat design* by **Marien Fressinaud**
* *Origine* by **Marien Fressinaud**
* *Origine-compact* by **Kevin Papst**
* *Pafat* by **Plopoyop**
* *Screwdriver* by **Mister aiR**
* *Swage* by **Patrick Crandol**
* *Blue Lagoon* by **Mister aiR**
* *Dark* by **AD**
* *Flat design* by **Marien Fressinaud**
* *Origine* by **Marien Fressinaud**
* *Origine-compact* by **Kevin Papst**
* *Pafat* by **Plopoyop**
* *Screwdriver* by **Mister aiR**
* *Swage* by **Patrick Crandol**
If you can't find any themes you like, it's always possible to [create your own](../developers/04_Frontend/02_Design.md).
@ -32,10 +32,10 @@ To select a theme, simply scroll through the themes and select one that strikes
Some people prefer short lines of text, while others prefer to maximize the available screen space. To satisfy the maximum number of people, it's possible to customize the width of the displayed content. There are four settings available:
* **Fine** displays content up to a maximum width of 550 pixels
* **Medium** displays content up to a maximum width of 800 pixels
* **Large** displays content up to a maximum width of 1000 pixels
* **No limit** displays the content on 100% of the available space
* **Fine** displays content up to a maximum width of 550 pixels
* **Medium** displays content up to a maximum width of 800 pixels
* **Large** displays content up to a maximum width of 1000 pixels
* **No limit** displays the content on 100% of the available space
## Article icons
@ -68,11 +68,11 @@ If you don't use those buttons because you never browse on mobile or because you
## Number of articles per page
This setting defines the number of articles to display at once before needing to load more. In normal and reading view, more articles are loaded automatically. In global view, a button will appear at the bottom of the list.
This setting defines the number of articles to display at once before needing to load more. In normal and reading view, more articles are loaded automatically. In global view, a button will appear at the bottom of the list.
## Articles to display
The status of articles to display when loading FreshRSS. "Adjust showing" will display only unread articles by default, but will display all articles when there are no unread articles to show.
The status of articles to display when loading FreshRSS. "Adjust showing" will display only unread articles by default, but will display all articles when there are no unread articles to show.
## Use "lazy load" mode to load images
@ -84,9 +84,9 @@ This will set images to load as they are viewed. This can save data, but will ca
These are the global options for fetching and retaining articles from feeds. They can be overwridden by individual feed's settings.
## Maintenance
## Maintenance
This allows for purging/optimizing the current user's articles in the database.
This allows for purging/optimizing the current user's articles in the database.
# Sharing
@ -99,16 +99,15 @@ By default, the sharing list is empty.
To add a new item to the list, please follow the following simple steps:
1. Select the desired sharing method in the drop-down list.
1. Press the ```✚``` button to add it to the list.
1. Configure the method in the list. All names can be modified in the display. Some methods need the sharing URL to be able to work properly (ex: Shaarli).
1. Submit your changes.
1. Select the desired sharing method in the drop-down list.
1. Press the ```✚``` button to add it to the list.
1. Configure the method in the list. All names can be modified in the display. Some methods need the sharing URL to be able to work properly (ex: Shaarli).
1. Submit your changes.
To remove an item from the list, follow those simple steps:
1. Press the ```❌``` button next to the share method you want to remove.
1. Submit your changes.
1. Press the ```❌``` button next to the share method you want to remove.
1. Submit your changes.
# Shortcuts
@ -120,10 +119,10 @@ Of course, if you're not satisfied with the key mapping, you can change you conf
There are 4 types of shortcuts:
1. Views: they allow switching views with ease.
1. Navigation: they allow navigation through articles, feeds, and categories.
1. Article actions: they allow interactions with an article, like sharing or opening it on the original web-site.
1. Other actions: they allow other interactions with the application, like opening the user queries menu or accessing the documentation.
1. Views: they allow switching views with ease.
1. Navigation: they allow navigation through articles, feeds, and categories.
1. Article actions: they allow interactions with an article, like sharing or opening it on the original web-site.
1. Other actions: they allow other interactions with the application, like opening the user queries menu or accessing the documentation.
It's worth noting that the share article action has two levels. Once you press the shortcut, a menu containing all the share options opens.
To choose one share option, you need to select it by its number. When there is only one option, it's selected automatically though.
@ -142,26 +141,26 @@ At the moment, there is no helper to build a user query from here.
# Profile
You can change your email address or password here. The authentication token is required for accessing the aggregated RSS feed for a user. A blank token will disable accessing the RSS feed without being logged in.
You can change your email address or password here. The authentication token is required for accessing the aggregated RSS feed for a user. A blank token will disable accessing the RSS feed without being logged in.
# Extensions
Extensions can be managed from this menu. Note that while extensions can be removed from the web interface, they cannot be added from it.
Extensions can be managed from this menu. Note that while extensions can be removed from the web interface, they cannot be added from it.
# Users
**TODO**
> **TODO**
## Authentication methods
### HTTP Authentication (Apache)
1. User control is based on the `.htaccess` file.
2. It is best practice to place the `.htaccess` file in the `./i/` subdirectory so the API and other third party services can work.
3. If you want to limit all access to registered users only, place the file in the FreshRSS directory itself or in a parent directory. Note that WebSub and API will not work!
4. Example `.htaccess` file for a user "marie":
1. User control is based on the `.htaccess` file.
2. It is best practice to place the `.htaccess` file in the `./i/` subdirectory so the API and other third party services can work.
3. If you want to limit all access to registered users only, place the file in the FreshRSS directory itself or in a parent directory. Note that WebSub and API will not work!
4. Example `.htaccess` file for a user "marie":
```
```apache
AuthUserFile /home/marie/repertoire/.htpasswd
AuthGroupFile /dev/null
AuthName "Chez Marie"

View File

@ -13,8 +13,8 @@ See the [page about the Fever compatible API](../developers/06_Fever_API.md.md)
# Testing
3. Under the section “Profile”, click on the link like `https://rss.example.net/api/` next to the field “API password”.
4. Click on first link “Check full server configuration”:
1. Under the section “Profile”, click on the link like `https://rss.example.net/api/` next to the field “API password”.
2. Click on first link “Check full server configuration”:
* If you get *PASS* then you are done, all is good: you may proceed to step 6.
* If you get *Bad Request!* or *Not Found*, then your server probably does not accept slashes `/` that are escaped `%2F`. Proceed to step 5.
* If you get any other error message, proceed to step 5.
@ -22,7 +22,7 @@ See the [page about the Fever compatible API](../developers/06_Fever_API.md.md)
# Fix server configuration
5. Click on the second link “Check partial server configuration (without `%2F` support)”:
* Click on the second link “Check partial server configuration (without `%2F` support)”:
* If you get `PASS`, then the problem is indeed that your server does not accept slashes `/` that are escaped `%2F`.
* With Apache, remember the directive [`AllowEncodedSlashes On`](http://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes)
* Or use a client that does not escape slashes (such as EasyRSS), in which case proceed to step 6.

View File

@ -13,7 +13,8 @@ Of course, ```/i``` has a purpose! It's used for performance and usability:
To increase security, FreshRSS is hosted in two sections. The first section is public (the `./p` folder) and the second section is private (everything else). Therefore the `robots.txt` file is located in the `./p` sub-folder.
As explained in the [security section](../admins/09_AccessControl.html), it's highly recommended to make only the public section available at the domain level. With that configuration, `./p` is the root folder for http://demo.freshrss.org/, thus making `robots.txt` available at the root of the application.
As explained in the [security section](../admins/09_AccessControl.html), it's highly recommended to make only the public section available at the domain level.
With that configuration, `./p` is the root folder for <https://demo.freshrss.org/>, thus making `robots.txt` available at the root of the application.
The same principle applies to `favicon.ico` and `.htaccess`.

View File

@ -4,11 +4,10 @@ S'il vous manque des informations, n'hésitez pas à fouiller un peu la
documentation ou venir nous poser directement vos questions sur [la mailing
list des développeurs](https://freshrss.org/mailman/listinfo/dev).
* Le premier mailing est destiné à l'information générique, il doit être
adapté aux utilisateurs. [Rejoignez
mailing@freshrss.org](https://freshrss.org/mailman/listinfo/mailing).
* Le deuxième mailing s'adresse principalement aux développeurs. [Rejoignez
dev@freshrss.org](https://freshrss.org/mailman/listinfo/dev)
* Le premier mailing est destiné à l'information générique, il doit être adapté aux utilisateurs.
[Rejoignez mailing@freshrss.org](https://freshrss.org/mailman/listinfo/mailing).
* Le deuxième mailing s'adresse principalement aux développeurs.
[Rejoignez dev@freshrss.org](https://freshrss.org/mailman/listinfo/dev)
## Signaler un bug
@ -16,47 +15,39 @@ Avez-vous trouvé un bogue ? Ne paniquez pas, voici quelques étapes pour le
signaler facilement :
1. Cherche sur [le bug tracker](https://github.com/FreshRSS/FreshRSS/issues)
(n'oubliez pas d'utiliser la barre de recherche).
(n'oubliez pas d'utiliser la barre de recherche).
2. Si vous constatez un bogue similaire, n'hésitez pas à poster un
commentaire pour ajouter de l'importance au ticket correspondant.
3. Si vous ne l'avez pas trouvé, [ouvrez un nouveau
ticket](https://github.com/FreshRSS/FreshRSS/issues/new).
commentaire pour ajouter de l'importance au ticket correspondant.
3. Si vous ne l'avez pas trouvé,
[ouvrez un nouveau ticket](https://github.com/FreshRSS/FreshRSS/issues/new).
Si vous devez créer un nouveau ticket, essayez de garder les conseils
suivants :
* Donnez un titre explicite au ticket pour le retrouver plus facilement plus
tard.
* Soyez aussi exhaustif que possible dans la description : qu'avez-vous fait
? Quel est le bogue ? Quelles sont les étapes pour reproduire le bogue ?
* Donnez un titre explicite au ticket pour le retrouver plus facilement plus tard.
* Soyez aussi exhaustif que possible dans la description : qu'avez-vous fait ?
Quel est le bogue ? Quelles sont les étapes pour reproduire le bogue ?
Nous avons aussi besoin de quelques informations :
* Votre version de FreshRSS (sur la page A propos) ou le fichier
`constants.php`)
* Votre version de FreshRSS (sur la page A propos) ou le fichier `constants.php`)
* Votre configuration de serveur : type d'hébergement, version PHP
* Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle
version ?
* Si possible, les logs associés (logs PHP et logs FreshRSS sous
`data/users/your_user/log.txt`)
* Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle version ?
* Si possible, les logs associés (logs PHP et logs FreshRSS sous `data/users/your_user/log.txt`)
## Corriger un bogue
Voulez-vous corriger un bogue ? Pour maintenir une grande coordination entre
les collaborateurs, vous devrez suivre ces indications :
1. Assurez-vous que le bogue est associé à un ticket et indiquez que vous
allez travailler sur le bogue.
2. [Fork du répertoire de
projet](https://help.github.com/articles/fork-a-repo/).
3. [Créez une nouvelle
branche](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/).
Le nom de la branche doit être clair, et idéalement préfixé par
l'identifiant du ticket correspondant. Par exemple,
`783-contributing-file` pour réparer [ticket
#783](https://github.com/FreshRSS/FreshRSS/issues/783).
4. Ajoutez vos modifications à votre fork et [ouvrez une demande de pull
request](https://help.github.com/articles/using-pull-requests/).
1. Assurez-vous que le bogue est associé à un ticket et indiquez que vous allez travailler sur le bogue.
2. [Fork du répertoire de projet](https://help.github.com/articles/fork-a-repo/).
3. [Créez une nouvelle branche](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/).
Le nom de la branche doit être clair, et idéalement préfixé par l'identifiant du ticket correspondant.
Par exemple, `783-contributing-file` pour réparer
[ticket #783](https://github.com/FreshRSS/FreshRSS/issues/783).
4. Ajoutez vos modifications à votre fork et
[ouvrez une demande de pull request](https://help.github.com/articles/using-pull-requests/).
Si vous devez écrire du code, veuillez suivre [nos recommandations de style
de codage](developers/01_First_steps.md).

View File

@ -1,4 +1,6 @@
# Configurer son environnement (Docker)
# Premier pas
## Configurer son environnement (Docker)
FreshRSS est construit en PHP et utilise le framework Minz. Les
dépendancessont directement incluses dans le code source, donc vous n'avez
@ -27,9 +29,9 @@ Tout d'abord, vous devez installer
Une fois que c'est fait, clonez le dépôt de code de la manière suivante :
```console
$ git clone https://github.com/FreshRSS/FreshRSS.git
$ cd FreshRSS
```sh
git clone https://github.com/FreshRSS/FreshRSS.git
cd FreshRSS
```
Notez que, pour contribuer, vous devrez d'abord « forker » ce dépôt de code
@ -38,8 +40,8 @@ dépôt. Adaptez les commandes en conséquence.
Ensuite, la seule commande que vous devez connaître est la suivante :
```console
$ make start
```sh
make start
```
Cela peut prendre un certain temps pour que Docker télécharge l'image
@ -51,8 +53,8 @@ commande en la préfixant par `sudo`.
Vous pouvez arrêter les conteneurs en tapant <kbd>Control</kbd> + <kbd>c</kbd> ou avec la commande suivante, dans un autre terminal:
```console
$ make stop
```sh
make stop
```
Si la configuration vous intéresse, les commandes `make' sont définies dans
@ -63,8 +65,8 @@ différent (par défaut `alpine`), vous pouvez surcharger de la manière
suivante la variable d'environnement `TAG` au moment de l'exécution de la
commande :
```console
$ TAG=arm make start
```sh
TAG=arm make start
```
Vous pouvez trouver la liste complète des tags disponibles [sur le hub
@ -73,26 +75,26 @@ Docker](https://hub.docker.com/r/freshrss/freshrss/tags).
Si vous voulez construire l'image Docker, vous pouvez lancer la commande
suivante :
```console
$ make build
$ # ou
$ TAG=arm make build
```sh
make build
# ou
TAG=arm make build
```
La valeur de la variable `TAG` peut contenir n'importe quelle valeur (par
exemple `local`). Vous pouvez cibler une architecture spécifique en ajoutant
`-alpine` ou `-arm` à la fin du tag (par exemple `local-arm`).
# Architecture du projet
## Architecture du projet
**À FAIRE**
> **À FAIRE**
# Extensions
## Extensions
Si vous souhaitez créer votre propre extension FreshRSS, consultez la
[documentation de l'extension](03_Backend/05_Extensions.md).
# Style de codage
## Style de codage
Si vous désirez contribuer au code, il est important de respecter le style
de codage suivant. Le code actuel ne le respecte pas entièrement mais il est
@ -101,12 +103,13 @@ de notre devoir à tous de le changer dès que l'occasion se présente.
Aucune nouvelle contribution ne respectant pas ces règles ne sera acceptée
tant que les corrections nécessaires ne sont pas appliquées.
## Espaces, tabulations et autres caractères blancs
### Espaces, tabulations et autres caractères blancs
#### Indentation
### Indentation
L'indentation du code doit être faite impérativement avec des tabulations.
### Alignement
#### Alignement
Une fois l'indentation faite, il peut être nécessaire de faire un alignement
pour simplifier la lecture. Dans ce cas, il faut utiliser les espaces.
@ -116,7 +119,7 @@ $resultat = une_fonction_avec_un_nom_long($param1, $param2,
$param3, $param4);
```
### Fin de ligne
#### Fin de ligne
Le caractère de fin de ligne doit être un saut de ligne (LF) qui est le
caractère de fin de ligne des systèmes *NIX. Ce caractère ne doit pas être
@ -132,15 +135,15 @@ git diff --check
git diff --check --cached
```
### Fin de fichier
#### Fin de fichier
Chaque fichier doit se terminer par une ligne vide.
### Le cas de la virgule, du point et du point-virgule
#### Le cas de la virgule, du point et du point-virgule
Il n'y a pas d'espace avant ces caractères, il y en a un après.
### Le cas des opérateurs
#### Le cas des opérateurs
Chaque opérateur est entouré d'espaces.
@ -152,7 +155,7 @@ if ($a == 10) {
echo $a ? 1 : 0;
```
### Le cas des parenthèses
#### Le cas des parenthèses
Il n'y a pas d'espaces entre des parenthèses. Il n'y a pas d'espaces avant
une parenthèse ouvrante sauf si elle est précédée d'un mot-clé. Il n'y a pas
@ -169,7 +172,7 @@ if ((int)$a == 10) {
}
```
### Le cas des fonctions chainées
#### Le cas des fonctions chainées
Ce cas se présente le plus souvent en Javascript. Quand on a des fonctions
chainées, des fonctions anonymes ainsi que des fonctions de rappels, il est
@ -192,7 +195,7 @@ shortcut.add("shift+" + shortcuts.mark_read, function () {
});
```
## Longueur des lignes
### Longueur des lignes
Les lignes ne doivent pas dépasser 80 caractères. Il est cependant autorisé
exceptionnellement de dépasser cette limite s'il n'est pas possible de la
@ -209,12 +212,12 @@ function ma_fonction($param_1, $param_2,
}
```
## Nommage
### Nommage
L'ensemble des éléments du code (fonctions, classes, méthodes et variables)
doivent être nommés de manière à décrire leur usage de façon concise.
### Fonctions et variables
#### Fonctions et variables
Les fonctions et les variables doivent suivre la convention "snake case".
@ -227,7 +230,7 @@ function nom_de_la_fontion() {
$nom_de_la_variable;
```
### Méthodes
#### Méthodes
Les méthodes doivent suivre la convention "lower camel case".
@ -237,7 +240,7 @@ private function nomDeLaMethode() {
}
```
### Classes
#### Classes
Les classes doivent suivre la convention "upper camel case".
@ -245,18 +248,19 @@ Les classes doivent suivre la convention "upper camel case".
abstract class NomDeLaClasse {}
```
## Encodage
### Encodage
Les fichiers doivent être encodés en UTF-8.
## Compatibilité PHP
### Compatibilité PHP
Assurez-vous que votre code fonctionne avec une version de PHP aussi
ancienne que celle que FreshRSS supporte officiellement.
## Divers
### Divers
#### Le cas des opérateurs sur plusieurs lignes
### Le cas des opérateurs
Les opérateurs doivent être en fin de ligne dans le cas de conditions sur
plusieurs lignes.
@ -267,12 +271,12 @@ if ($a == 10 ||
}
```
### Fin de fichier
#### Fin de fichier PHP
Si le fichier ne contient que du PHP, il ne doit pas comporter de balise
fermante.
### Tableaux
#### Tableaux
Lors de l'écriture de tableaux sur plusieurs lignes, tous les éléments
doivent être suivis d'une virgule (même le dernier).

View File

@ -18,18 +18,18 @@ nous permet de pouvoir discuter à plusieurs sur un problème ou une
suggestion et de faire émerger, souvent, des idées nouvelles. Ne négligeons
pas cet aspect "social" !
1. [Rendez-vous sur le gestionnaire de tickets de
bugs](https://github.com/FreshRSS/FreshRSS/issues)
2. Commencez par rechercher si une demande similaire n'a pas déjà été
faite. Si oui, n'hésitez pas à ajouter votre voix à la demande.
3. Si votre demande est nouvelle, [ouvrez un nouveau ticket de
bug](https://github.com/FreshRSS/FreshRSS/issues/new)
4. Rédigez enfin votre demande. Si vous maitrisez l'anglais, c'est la
langue à privilégier car cela permet d'ouvrir la discussion à un plus
grand nombre de personnes. Sinon, ce n'est pas grave, continuez en
français :)
5. Merci de bien vouloir suivre les quelques conseils donnés plus bas pour
faciliter la prise en compte de votre ticket.
1. [Rendez-vous sur le gestionnaire de tickets de
bugs](https://github.com/FreshRSS/FreshRSS/issues)
2. Commencez par rechercher si une demande similaire n'a pas déjà été
faite. Si oui, n'hésitez pas à ajouter votre voix à la demande.
3. Si votre demande est nouvelle, [ouvrez un nouveau ticket de
bug](https://github.com/FreshRSS/FreshRSS/issues/new)
4. Rédigez enfin votre demande. Si vous maitrisez l'anglais, c'est la
langue à privilégier car cela permet d'ouvrir la discussion à un plus
grand nombre de personnes. Sinon, ce n'est pas grave, continuez en
français :)
5. Merci de bien vouloir suivre les quelques conseils donnés plus bas pour
faciliter la prise en compte de votre ticket.
## De façon informelle
@ -38,9 +38,9 @@ diverses que légitimes. C'est pourquoi vous pouvez aussi nous contacter de
façon plus informelle.
* Sur [notre chat
Mattermost](https://framateam.org/signup_user_complete/?id=e2680d3e3128b9fac8fdb3003b0024ee)
Mattermost](https://framateam.org/signup_user_complete/?id=e2680d3e3128b9fac8fdb3003b0024ee)
* Sur [les listes de
diffusion](https://freshrss.org/announce-of-the-mailing-lists.html)
diffusion](https://freshrss.org/announce-of-the-mailing-lists.html)
* À des évènements / rencontres autour du Logiciel Libre
* Autour d'une bière dans un bar
* Etc.
@ -52,24 +52,24 @@ suggestion :
* **Faites attention à l'orthographe.** même si ce n'est pas toujours
facile, faites votre maximum. ;)
facile, faites votre maximum. ;)
* **Donnez un titre explicite à votre demande**, quitte à ce qu'il soit un
peu long. Cela nous aide non seulement à comprendre votre demande, mais
aussi à retrouver votre ticket plus tard.
peu long. Cela nous aide non seulement à comprendre votre demande, mais
aussi à retrouver votre ticket plus tard.
* **Une demande = un ticket.** Vous pouvez avoir des tas d'idées mais vous
avez peur de spammer le gestionnaire de bugs : ça ne fait rien. Il vaut
mieux avoir un peu trop de tickets que trop de demandes dans un seul. On
s'occupera de fermer et regrouper les demandes qui le peuvent.
avez peur de spammer le gestionnaire de bugs : ça ne fait rien. Il vaut
mieux avoir un peu trop de tickets que trop de demandes dans un seul. On
s'occupera de fermer et regrouper les demandes qui le peuvent.
* Si vous remontez un bug, pensez à nous **fournir les logs de FreshRSS**
(accessibles dans les dossier ''data/log/'' de FreshRSS) **et PHP**
(l'emplacement peut varier selon les distributions, mais pensez à chercher
dans ''/var/log/httpd'' ou ''/var/log/apache'').
(accessibles dans les dossier ''data/log/'' de FreshRSS) **et PHP**
(l'emplacement peut varier selon les distributions, mais pensez à chercher
dans ''/var/log/httpd'' ou ''/var/log/apache'').
* Si vous ne trouvez pas les fichiers de logs, précisez-le dans votre ticket
afin que nous sachions que vous avez déjà cherché.
afin que nous sachions que vous avez déjà cherché.
* Tous les bugs ne nécessitent pas les logs, mais si vous doutez, mieux vaut
nous les fournir. Les logs sont importants et très utiles pour débugguer !
nous les fournir. Les logs sont importants et très utiles pour débugguer !
* Il se peut que les logs puissent révéler des informations plus ou moins
confidentielles, **faites attention à ne rien divulguer de sensible.**
confidentielles, **faites attention à ne rien divulguer de sensible.**
De plus, face à un bug, je ne peux que vous encourager à suivre le format de
message suivant (tiré du [site de Sam &
@ -97,12 +97,11 @@ Afin que nous comprenions bien où est le problème... au moins selon vous :p
Pensez à donner les informations suivantes si vous les connaissez :
1. Quel navigateur ? Quelle version ?
2. Quel serveur : Apache, Nginx ? Quelle version ?
3. Quelle version de PHP ?
4. Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle
version ?
5. Quelle distribution sur le serveur ? Et… quelle version ?
1. Quel navigateur ? Quelle version ?
2. Quel serveur : Apache, Nginx ? Quelle version ?
3. Quelle version de PHP ?
4. Quelle base de données : SQLite, MySQL, MariaDB, PostgreSQL ? Quelle version ?
5. Quelle distribution sur le serveur ? Et… quelle version ?
## Système de branches

View File

@ -1,27 +1,29 @@
# Modèles
# Minz
**À FAIRE**
## Modèles
# Contrôleurs et actions
> **À FAIRE**
**À FAIRE**
## Contrôleurs et actions
# Vues
> **À FAIRE**
**À FAIRE**
## Vues
# Routage
> **À FAIRE**
**À FAIRE**
## Routage
# Écriture des URL
> **À FAIRE**
**À FAIRE**
## Écriture des URL
# Internationalisation
> **À FAIRE**
**À FAIRE**
## Internationalisation
# Comprendres les mécanismes internes
> **À FAIRE**
**À FAIRE**
## Comprendres les mécanismes internes
> **À FAIRE**

View File

@ -1,15 +1,17 @@
# Accès à la base de données
# Éditer le code source
**À FAIRE**
## Accès à la base de données
# Écrire une action et sa vue associée
> **À FAIRE**
**À FAIRE**
## Écrire une action et sa vue associée
# Gestion de l'authentification
> **À FAIRE**
**À FAIRE**
## Gestion de l'authentification
# Gestion des logs
> **À FAIRE**
**À FAIRE**
## Gestion des logs
> **À FAIRE**

View File

@ -14,8 +14,7 @@ FreshRSS est limité dans ses possibilités techniques par différents facteurs
* La disponibilité des développeurs principaux ;
* La volonté d'intégrer certains changements ;
* Le niveau de « hack » nécessaire pour intégrer des fonctionnalités à la
marge.
* Le niveau de « hack » nécessaire pour intégrer des fonctionnalités à la marge.
Si la première limitation peut, en théorie, être levée par la participation
de nouveaux contributeurs au projet, elle est en réalité conditionnée par la
@ -27,11 +26,10 @@ Une autre solution consiste à passer par un système d'extensions. En
permettant à des utilisateurs d'écrire leur propre extension sans avoir à
s'intéresser au cœur même du logiciel de base, on permet :
1. De réduire la quantité de code source à assimiler pour un nouveau
contributeur ;
1. De réduire la quantité de code source à assimiler pour un nouveau contributeur ;
2. De permettre d'intégrer des nouveautés de façon non-officielles ;
3. De se passer des développeurs principaux pour d'éventuelles améliorations
sans passer par la case « fork ».
sans passer par la case « fork ».
Note : il est tout à fait imaginable que les fonctionnalités d'une extension
puissent par la suite être intégrées dans le code initial de FreshRSS de
@ -57,26 +55,26 @@ Minz repose et impose une architecture MVC pour les projets l'utilisant. On
distingue dans cette architecture trois composants principaux :
* Le Modèle : c'est l'objet de base que l'on va manipuler. Dans FreshRSS,
les catégories, les flux et les articles sont des modèles. La partie du
code qui permet de les manipuler en base de données fait aussi partie du
modèle mais est séparée du modèle de base : on parle de DAO (pour « Data
Access Object »). Les modèles sont stockés dans un répertoire `Models`.
les catégories, les flux et les articles sont des modèles. La partie du
code qui permet de les manipuler en base de données fait aussi partie du
modèle mais est séparée du modèle de base : on parle de DAO (pour « Data
Access Object »). Les modèles sont stockés dans un répertoire `Models`.
* La Vue : c'est ce qui représente ce que verra l'utilisateur. La vue est
donc simplement du code HTML que l'on mixe avec du PHP pour afficher les
informations dynamiques. Les vues sont stockées dans un répertoire
`views`.
donc simplement du code HTML que l'on mixe avec du PHP pour afficher les
informations dynamiques. Les vues sont stockées dans un répertoire
`views`.
* Le Contrôleur : c'est ce qui permet de lier modèles et vues entre
eux. Typiquement, un contrôleur va charger des modèles à partir de la base
de données (une liste d'articles par exemple) pour les « passer » à une
vue afin qu'elle les affiche. Les contrôleurs sont stockés dans un
répertoire `Controllers`.
eux. Typiquement, un contrôleur va charger des modèles à partir de la base
de données (une liste d'articles par exemple) pour les « passer » à une
vue afin qu'elle les affiche. Les contrôleurs sont stockés dans un
répertoire `Controllers`.
### Routage
Afin de lier une URL à un contrôleur, on doit passer par une phase dite de «
routage ». Dans FreshRSS, cela est particulièrement simple car il suffit
d'indiquer le nom du contrôleur à charger dans l'URL à l'aide d'un paramètre
`c`. Par exemple, l'adresse http://exemple.com?c=hello va exécuter le code
d'indiquer le nom du contrôleur à charger dans l'URL à l'aide d'un paramètre `c`.
Par exemple, l'adresse <http://exemple.com?c=hello> va exécuter le code
contenu dans le contrôleur `hello`.
Une notion qui n'a pas encore été évoquée est le système d'« actions ». Une
@ -102,11 +100,11 @@ class FreshRSS_hello_Controller extends Minz_ActionController {
?>
```
Si l'on charge l'adresse http://exemple.com?c=hello&a=world, l'action
Si l'on charge l'adresse <http://exemple.com?c=hello&a=world>, l'action
`world` va donc être exécutée sur le contrôleur `hello`.
Note : si `c` ou `a` n'est pas précisée, la valeur par défaut de chacune de
ces variables est `index`. Ainsi l'adresse http://exemple.com?c=hello va
ces variables est `index`. Ainsi l'adresse <http://exemple.com?c=hello> va
exécuter l'action `index` du contrôleur `hello`.
Plus loin, sera utilisée la convention `hello/world` pour évoquer un couple
@ -183,7 +181,7 @@ suivante doit être évitée :
```
Si un jour il est décidé d'utiliser un système d'« url rewriting » pour
avoir des adresses au format http://exemple.com/controller/action, toutes
avoir des adresses au format <http://exemple.com/controller/action>, toutes
les adresses précédentes deviendraient ineffectives !
Préférez donc l'utilisation de la classe `Minz_Url` et de sa méthode
@ -300,12 +298,9 @@ Français sont situés dans `i18n/fr/`. Il existe sept fichiers différents :
* `conf.php` pour l'aspect configuration ;
* `feedback.php` contient les traductions des messages de feedback ;
* `gen.php` stocke ce qui est global à FreshRSS (gen pour « general ») ;
* `index.php` pour la page principale qui liste les flux et la page « À
propos » ;
* `install.php` contient les phrases relatives à l'installation de FreshRSS
;
* `sub.php` pour l'aspect gestion des abonnements (sub pour « subscription
»).
* `index.php` pour la page principale qui liste les flux et la page « À propos » ;
* `install.php` contient les phrases relatives à l'installation de FreshRSS ;
* `sub.php` pour l'aspect gestion des abonnements (sub pour « subscription »).
Cette organisation permet de ne pas avoir un unique énorme fichier de
traduction.
@ -377,7 +372,7 @@ FreshRSS sans avoir à toucher au cœur du projet directement.
### Travailler dans Docker
Quand on travaille sur une extension, c'est toujours plus facile de la travailler directement dans son environnement. Avec Docker, on peut exploiter l'option ```volume``` quand on démarre le conteneur. Heureusement, on peut l'utiliser sans avoir de connaissances particulières de Docker en utilisant la règle du Makefile :
```
```sh
make start extensions="/chemin/complet/de/l/extension/1 /chemin/complet/de/l/extension/2"
```
@ -394,7 +389,7 @@ Le répertoire principal d'une extension doit comporter au moins deux
fichiers **obligatoire** :
* Un fichier `metadata.json` qui contient une description de l'extension. Ce
fichier est écrit en JSON ;
fichier est écrit en JSON ;
* Un fichier `extension.php` contenant le point d'entrée de l'extension.
Please note that there is a not a required link between the directory name
@ -419,17 +414,17 @@ You may also need additional files or subdirectories depending on your
needs:
* `configure.phtml` est le fichier contenant le formulaire pour paramétrer
votre extension
votre extension
* A `static/` directory containing CSS and JavaScript files that you will
need for your extension (note that if you need to write a lot of CSS it
may be more interesting to write a complete theme)
need for your extension (note that if you need to write a lot of CSS it
may be more interesting to write a complete theme)
* A `Controllers` directory containing additional controllers
* An `i18n` directory containing additional translations
* `layout` and` views` directories to define new views or to overwrite the
current views
* `layout` and `views` directories to define new views or to overwrite the
current views
In addition, it is good to have a `LICENSE` file indicating the license
under which your extension is distributed and a` README` file giving a
under which your extension is distributed and a `README` file giving a
detailed description of it.
### The metadata.json file
@ -440,15 +435,15 @@ following entries:
* `name` : le nom de votre extension ;
* `author` : votre nom, éventuellement votre adresse mail mais il n'y a pas
de format spécifique à adopter ;
de format spécifique à adopter ;
* `description` : une description de votre extension ;
* `version` : le numéro de version actuel de l'extension ;
* `entrypoint` : indique le point d'entrée de votre extension. Il doit
correspondre au nom de la classe contenue dans le fichier `extension.php`
sans le suffixe `Extension` (donc si le point d'entrée est `HelloWorld`,
votre classe s'appellera `HelloWorldExtension`) ;
correspondre au nom de la classe contenue dans le fichier `extension.php`
sans le suffixe `Extension` (donc si le point d'entrée est `HelloWorld`,
votre classe s'appellera `HelloWorldExtension`) ;
* `type` : définit le type de votre extension. Il existe deux types :
`system` et `user`. Nous étudierons cette différence juste après.
`system` et `user`. Nous étudierons cette différence juste après.
Seuls les champs `name` et `entrypoint` sont requis.
@ -463,46 +458,45 @@ A __system__ extension in comparison is enabled for every account.
This file is the entry point of your extension. It must contain a specific
class to function. As mentioned above, the name of the class must be your
`entrypoint` suffixed by` Extension` (`HelloWorldExtension` for example).
`entrypoint` suffixed by `Extension` (`HelloWorldExtension` for example).
In addition, this class must be inherited from the `Minz_Extension` class to
benefit from extensions-specific methods.
Your class will benefit from four methods to redefine:
* `install()` is called when a user clicks the button to activate your
extension. It allows, for example, to update the database of a user in
order to make it compatible with the extension. It returns `true` if
everything went well or, if not, a string explaining the problem.
extension. It allows, for example, to update the database of a user in
order to make it compatible with the extension. It returns `true` if
everything went well or, if not, a string explaining the problem.
* `uninstall()` is called when a user clicks the button to disable your
extension. This will allow you to undo the database changes you
potentially made in `install ()`. It returns `true` if everything went
well or, if not, a string explaining the problem.
extension. This will allow you to undo the database changes you
potentially made in `install ()`. It returns `true` if everything went
well or, if not, a string explaining the problem.
* `init()` is called for every page load *if the extension is enabled*. It
will therefore initialize the behavior of the extension. This is the most
important method.
will therefore initialize the behavior of the extension. This is the most
important method.
* `handleConfigureAction()` is called when a user loads the extension
management panel. Specifically, it is called when the
`?c=extension&a=configured&e=name-of-your-extension` URL is loaded. You
should also write here the behavior you want when validating the form in
your `configure.phtml` file.
management panel. Specifically, it is called when the
`?c=extension&a=configured&e=name-of-your-extension` URL is loaded. You
should also write here the behavior you want when validating the form in
your `configure.phtml` file.
In addition, you will have a number of methods directly inherited from
`Minz_Extension` that you should not redefine:
In addition, you will have a number of methods directly inherited from
`Minz_Extension` that you should not redefine:
* The "getters" first: most are explicit enough not to detail them here -
`getName()`, `getEntrypoint()`, `getPath()` (allows you to retrieve the
path to your extension), `getAuthor()`, `getDescription()`,
`getVersion()`, `getType()`.
`getName()`, `getEntrypoint()`, `getPath()` (allows you to retrieve the
path to your extension), `getAuthor()`, `getDescription()`,
`getVersion()`, `getType()`.
* `getFileUrl($filename, $type)` will return the URL to a file in the
`static` directory. The first parameter is the name of the file (without
`static /`), the second is the type of file to be used (`css` or` js`).
`static` directory. The first parameter is the name of the file (without
`static /`), the second is the type of file to be used (`css` or `js`).
* `registerController($base_name)` will tell Minz to take into account the
given controller in the routing system. The controller must be located in
your `Controllers` directory, the name of the file must be`
<base_name>Controller.php` and the name of the
`FreshExtension_<base_name>_Controller` class.
given controller in the routing system. The controller must be located in
your `Controllers` directory, the name of the file must be `<base_name>Controller.php` and the name of the
`FreshExtension_<base_name>_Controller` class.
**À FAIRE**
> **À FAIRE**
* `registerViews()`
* `registerTranslates()`
@ -529,44 +523,44 @@ class HelloWorldExtension extends Minz_Extension
The following events are available:
* `check_url_before_add` (`function($url) -> Url | null`): will be executed
every time a URL is added. The URL itself will be passed as
parameter. This way a website known to have feeds which doesn't advertise
it in the header can still be automatically supported.
every time a URL is added. The URL itself will be passed as
parameter. This way a website known to have feeds which doesn't advertise
it in the header can still be automatically supported.
* `entry_before_display` (`function($entry) -> Entry | null`): will be
executed every time an entry is rendered. The entry itself (instance of
FreshRSS\_Entry) will be passed as parameter.
executed every time an entry is rendered. The entry itself (instance of
FreshRSS\_Entry) will be passed as parameter.
* `entry_before_insert` (`function($entry) -> Entry | null`): will be
executed when a feed is refreshed and new entries will be imported into
the database. The new entry (instance of FreshRSS\_Entry) will be passed
as parameter.
executed when a feed is refreshed and new entries will be imported into
the database. The new entry (instance of FreshRSS\_Entry) will be passed
as parameter.
* `feed_before_actualize` (`function($feed) -> Feed | null`): will be
executed when a feed is updated. The feed (instance of FreshRSS\_Feed)
will be passed as parameter.
executed when a feed is updated. The feed (instance of FreshRSS\_Feed)
will be passed as parameter.
* `feed_before_insert` (`function($feed) -> Feed | null`): will be executed
when a new feed is imported into the database. The new feed (instance of
FreshRSS\_Feed) will be passed as parameter.
when a new feed is imported into the database. The new feed (instance of
FreshRSS\_Feed) will be passed as parameter.
* `freshrss_init` (`function() -> none`): will be executed at the end of the
initialization of FreshRSS, useful to initialize components or to do
additional access checks
initialization of FreshRSS, useful to initialize components or to do
additional access checks
* `menu_admin_entry` (`function() -> string`): add an entry at the end of
the "Administration" menu, the returned string must be valid HTML
(e.g. `<li class="item active"><a href="url">New entry</a></li>`)
the "Administration" menu, the returned string must be valid HTML
(e.g. `<li class="item active"><a href="url">New entry</a></li>`)
* `menu_configuration_entry` (`function() -> string`): add an entry at the
end of the "Configuration" menu, the returned string must be valid HTML
(e.g. `<li class="item active"><a href="url">New entry</a></li>`)
end of the "Configuration" menu, the returned string must be valid HTML
(e.g. `<li class="item active"><a href="url">New entry</a></li>`)
* `menu_other_entry` (`function() -> string`): add an entry at the end of
the header dropdown menu (i.e. after the "About" entry), the returned
string must be valid HTML (e.g. `<li class="item active"><a href="url">New
entry</a></li>`)
the header dropdown menu (i.e. after the "About" entry), the returned
string must be valid HTML (e.g. `<li class="item active"><a href="url">New
entry</a></li>`)
* `nav_reading_modes` (`function($reading_modes) -> array | null`): **TODO**
add documentation
add documentation
* `post_update` (`function(none) -> none`): **TODO** add documentation
* `simplepie_before_init` (`function($simplePie, $feed) -> none`): **TODO**
add documentation
add documentation
### Writing your own configure.phtml
When you want to support user configurations for your extension or simply
display some information, you have to create the `configure.phtml` file.
**À FAIRE**
> **À FAIRE**

View File

@ -1,15 +1,17 @@
# Les fichiers .phtml
# Les vues
**À FAIRE**
## Les fichiers .phtml
# Écrire une URL
> **À FAIRE**
**À FAIRE**
## Écrire une URL
# Afficher une icône
> **À FAIRE**
**À FAIRE**
## Afficher une icône
# Internationalisation
> **À FAIRE**
**À FAIRE**
## Internationalisation
> **À FAIRE**

View File

@ -1,11 +1,13 @@
# Fichier modèle
# Design
**À FAIRE**
## Fichier modèle
# Écrire un nouveau thème
> **À FAIRE**
**À FAIRE**
## Écrire un nouveau thème
# Surcharger les icônes
> **À FAIRE**
**À FAIRE**
## Surcharger les icônes
> **À FAIRE**

View File

@ -19,7 +19,7 @@ mises à jour de la version à sortir.
## Processus Git
```sh
```console
$ git checkout edge
$ git pull
$ vim constants.php
@ -57,21 +57,21 @@ package FreshRSS (`PACKAGE_URL`). L'URL est de la forme
Il existe ensuite 5 fonctions à remplir :
* `apply_update()` qui se charge de sauvegarder le répertoire contenant les
données, de vérifier sa structure, de télécharger le package FreshRSS, de
le déployer et de tout nettoyer. Cette fonction est pré-remplie mais des
ajustements peuvent être faits si besoin est (ex. réorganisation de la
structure de `./data`). Elle retourne `true` si aucun problème n'est
survenu ou une chaîne de caractères indiquant un soucis ;
données, de vérifier sa structure, de télécharger le package FreshRSS, de
le déployer et de tout nettoyer. Cette fonction est pré-remplie mais des
ajustements peuvent être faits si besoin est (ex. réorganisation de la
structure de `./data`). Elle retourne `true` si aucun problème n'est
survenu ou une chaîne de caractères indiquant un soucis ;
* `need_info_update()` retourne `true` si l'utilisateur doit intervenir
durant la mise à jour ou `false` sinon ;
durant la mise à jour ou `false` sinon ;
* `ask_info_update()` affiche un formulaire à l'utilisateur si
`need_info_update()` a retourné `true` ;
`need_info_update()` a retourné `true` ;
* `save_info_update()` est chargée de sauvegarder les informations
renseignées par l'utilisateur (issues du formulaire de
`ask_info_update()`) ;
renseignées par l'utilisateur (issues du formulaire de
`ask_info_update()`) ;
* `do_post_update()` est exécutée à la fin de la mise à jour et prend en
compte le code de la nouvelle version (ex. si la nouvelle version modifie
l'objet `Minz_Configuration`, vous bénéficierez de ces améliorations).
compte le code de la nouvelle version (ex. si la nouvelle version modifie
l'objet `Minz_Configuration`, vous bénéficierez de ces améliorations).
## Mise à jour du fichier de versions
@ -101,11 +101,11 @@ Et voici comment fonctionne cette table :
* les versions `x.y.z-dev` sont **toutes** mises à jour vers `edge` ;
* les versions stables sont mises à jour vers des versions stables ;
* il est possible de sauter plusieurs versions d'un coup à condition que les
scripts de mise à jour le prennent en charge ;
scripts de mise à jour le prennent en charge ;
* il est conseillé d'indiquer la correspondance de la version courante vers
sa potentielle future version en précisant que cette version n'existe pas
encore. Tant que le script correspondant n'existera pas, rien ne se
passera.
sa potentielle future version en précisant que cette version n'existe pas
encore. Tant que le script correspondant n'existera pas, rien ne se
passera.
Il est **très fortement** indiqué de garder ce fichier rangé selon les
numéros de versions en séparant les versions stables et de dev.
@ -134,16 +134,16 @@ update.freshrss.org :
Lorsque tout fonctionne, il est temps d'annoncer la sortie au monde entier !
* sur GitHub en créant [une nouvelle
release](https://github.com/FreshRSS/FreshRSS/releases/new) ;
release](https://github.com/FreshRSS/FreshRSS/releases/new) ;
* sur le blog de freshrss.org au minimum pour les versions stables (écrire
l'article sur
[FreshRSS/freshrss.org](https://github.com/FreshRSS/freshrss.org)).
l'article sur
[FreshRSS/freshrss.org](https://github.com/FreshRSS/freshrss.org)).
* sur Twitter (compte [@FreshRSS](https://twitter.com/FreshRSS)) ;
* et sur mailing@freshrss.org ;
## Lancer la prochaine version de développement
```sh
```console
$ git checkout edge
$ vim constants.php
# Mettre à jour le numéro de version de FRESHRSS_VERSION

View File

@ -9,29 +9,27 @@ fonctionnalités :
* Agrégation des flux RSS et Atom.
* Utilisez les favoris pour marquer les articles qui vous ont plu ou que
vous souhaitez lire plus tard.
vous souhaitez lire plus tard.
* Le système de filtrage et de recherche permettent de cibler exactement les
articles que vous souhaitez lire.
articles que vous souhaitez lire.
* Les statistiques permettent de savoir en un coup dœil quels sont les
sites qui publient le plus, ou à linverse, le moins.
sites qui publient le plus, ou à linverse, le moins.
* Importation / exportation des flux au format OPML.
* Multi-thèmes pour changer lhabillage de FreshRSS.
* API Google Reader pour pouvoir y brancher des applications Android.
* « *Responsive design* » : lapplication sadapte aux petits écrans pour
emporter FreshRSS dans votre poche.
emporter FreshRSS dans votre poche.
* Auto-hébergeable : le code source est libre (AGPL3) et vous pouvez donc
lhéberger sur votre propre serveur.
* Multi-utilisateurs pour héberger plusieurs personnes sur une même
installation.
lhéberger sur votre propre serveur.
* Multi-utilisateurs pour héberger plusieurs personnes sur une même installation.
* Et bien dautres !
Cette documentation est divisée en plusieurs parties :
* La [documentation utilisateurs](./users/02_First_steps.md) pour découvrir
les fonctionnalités de FreshRSS.
les fonctionnalités de FreshRSS.
* La [documentation administrateurs](../en/admins/01_Index.html) (en
anglais) pour linstallation et la maintenance de FreshRSS.
anglais) pour linstallation et la maintenance de FreshRSS.
* La [documentation développeurs](./developers/01_First_steps.md) pour
savoir comment contribuer et mieux comprendre le code source de FreshRSS.
* Le [guide de contribution](./contributing.md) pour nous aider à développer
FreshRSS.
savoir comment contribuer et mieux comprendre le code source de FreshRSS.
* Le [guide de contribution](./contributing.md) pour nous aider à développer FreshRSS.

View File

@ -4,13 +4,13 @@ FreshRSS est un logiciel développé en PHP reposant sur le modèle client - ser
Il est toutefois de votre responsabilité de vérifier que votre hébergement permettra de faire tourner FreshRSS avant de nous taper dessus. Dans le cas où les informations listées ci-dessous ne seraient pas à jour, vous pourrez.
| Logiciel | Recommandé | Fonctionne aussi avec |
| -------- | ----------- | --------------------- |
| Serveur web | **Apache 2** | Nginx |
| PHP | **PHP 7+** | |
| Modules PHP | Requis : libxml, cURL, JSON, PDO_MySQL, PCRE et ctype<br />Requis (32 bits seulement) : GMP<br />Recommandé : Zlib, mbstring et iconv, ZipArchive<br />*Pour une liste complète des modules nécessaires voir le [Dockerfile](https://github.com/FreshRSS/FreshRSS/blob/edge/Docker/Dockerfile-Alpine#L7-L9)* | |
| Base de données | **MySQL 5.5.3+** | SQLite 3.7.4+, PostgreSQL 9.5+ |
| Navigateur | **Firefox** | Chrome, Opera, Safari, or Edge |
| Logiciel | Recommandé | Fonctionne aussi avec |
| -------- | ----------- | --------------------- |
| Serveur web | **Apache 2** | Nginx |
| PHP | **PHP 7+** | |
| Modules PHP | Requis : libxml, cURL, JSON, PDO_MySQL, PCRE et ctype<br />Requis (32 bits seulement) : GMP<br />Recommandé : Zlib, mbstring et iconv, ZipArchive<br />*Pour une liste complète des modules nécessaires voir le [Dockerfile](https://github.com/FreshRSS/FreshRSS/blob/edge/Docker/Dockerfile-Alpine#L7-L9)* | |
| Base de données | **MySQL 5.5.3+** | SQLite 3.7.4+, PostgreSQL 9.5+ |
| Navigateur | **Firefox** | Chrome, Opera, Safari, or Edge |
## Choisir la bonne version de FreshRSS
@ -137,4 +137,4 @@ Pour un tutoriel pas à pas, vous pouvez suivre [cet article dédié](http://www
## Conseils de sécurité
**TODO**
> **TODO**

View File

@ -18,11 +18,11 @@ Une fois que vous avez ajouté vos flux à FreshRSS, il est temps de les
lire. Pour cela, trois modes de lecture s'offrent à vous :
1. [La vue normale](03_Main_view.md#la-vue-normale) qui permet de voir et de
lire rapidement les nouveaux articles
lire rapidement les nouveaux articles
2. [La vue globale](03_Main_view.md#la-vue-globale) est destinée à vous
offrir un panorama de l'état de vos flux
offrir un panorama de l'état de vos flux
3. [La vue lecture](03_Main_view.md#la-vue-lecture) est pensée pour vous
offrir un meilleur confort de lecture
offrir un meilleur confort de lecture
Bien, vous maitrisez maintenant la vue que vous préférez ? Il est temps de
vous offrir un peu plus de confort de lecture. FreshRSS est grandement
@ -31,16 +31,16 @@ le plus. Voici tout de même quelques pistes pour améliorer votre quotidien
sur FreshRSS :
* [Rangez vos flux dans des
catégories](04_Subscriptions.md#organisation_des_flux)
catégories](04_Subscriptions.md#organisation_des_flux)
* [Configurez votre page
d'accueil](05_Configuration.md#personnaliser-la-vue)
d'accueil](05_Configuration.md#personnaliser-la-vue)
* [Configurez vos options de
lecture](05_Configuration.md#options-de-lecture)
lecture](05_Configuration.md#options-de-lecture)
* [Mettez à jour vos flux](03_Main_view.md#rafraichir-les-flux)
* [Filtrez les articles](03_Main_view.md#filtrer-les-articles) pour accéder
rapidement à ceux que vous voulez lire en priorité
rapidement à ceux que vous voulez lire en priorité
* [Retrouvez un article](03_Main_view.md#rechercher-des-articles) qui a été
publié il y a quelques jours ou mois
publié il y a quelques jours ou mois
* [Accédez à vos flux même sur mobile](06_Mobile_access.md)
* [Ajoutez quelques extensions](https://github.com/FreshRSS/Extensions)
* [Foire aux questions](07_Frequently_Asked_Questions.md)

View File

@ -1,27 +1,29 @@
# La vue normale
# La page principale
**À FAIRE**
## La vue normale
# La vue globale
> **À FAIRE**
**À FAIRE**
## La vue globale
# La vue lecture
> **À FAIRE**
**À FAIRE**
## La vue lecture
# Rafraîchir les flux
> **À FAIRE**
## Rafraîchir les flux
Pour profiter pleinement de FreshRSS, il faut quil récupère les nouveaux
articles disponibles des flux auxquels vous avez souscrit. Pour cela, il
existe plusieurs méthodes.
## Mise à jour automatique
### Mise à jour automatique
Cest la méthode recommandée car il ny a pas besoin dy penser, elle se
fait toute seule, à la fréquence que vous avez choisi.
### Par le script actualize_script.php
#### Par le script actualize_script.php
Cette méthode nest possible que si vous avez accès aux tâches planifiées de
la machine sur laquelle est installée votre instance de FreshRSS.
@ -43,34 +45,34 @@ toutes les heures.
« Paramètres de configuration du script; Ils sont utilisables simultanément
: »
- Parameter "force"
https://freshrss.example.net/i/?c=feed&a=actualize&force=1 If *force* is set
* Parameter "force"
<https://freshrss.example.net/i/?c=feed&a=actualize&force=1> If *force* is set
to 1 all feeds will be refreshed at once.
- Parameter "ajax" https://freshrss.example.net/i/?c=feed&a=actualize&ajax=1
* Parameter "ajax" <https://freshrss.example.net/i/?c=feed&a=actualize&ajax=1>
Only a status site is returned and not a complete website. Example: "OK"
- Parameter "maxFeeds"
https://freshrss.example.net/i/?c=feed&a=actualize&maxFeeds=30 If *maxFeeds*
* Parameter "maxFeeds"
<https://freshrss.example.net/i/?c=feed&a=actualize&maxFeeds=30> If *maxFeeds*
is set the configured amount of feeds is refreshed at once. The default
setting is "10".
- Parameter "token"
https://freshrss.example.net/i/?c=feed&a=actualize&token=542345872345734
* Parameter "token"
<https://freshrss.example.net/i/?c=feed&a=actualize&token=542345872345734>
Security parameter to prevent unauthorized refreshes. For detailed
Documentation see "Form authentication".
### Online cron
#### Online cron
If you do not have access to the installation server scheduled task, you can
still automate the update process.
To do so, you need to create a scheduled task, which need to call a specific
URL: https://freshrss.example.net/i/?c=feed&a=actualize (it could be
URL: <https://freshrss.example.net/i/?c=feed&a=actualize> (it could be
different depending on your installation). Depending on your application
authentication method, you need to adapt the scheduled task.
#### Aucune authentification
##### Aucune authentification
Cest le cas le plus simple, puisque votre instance est publique, vous
navez rien de particulier à préciser :
@ -79,7 +81,7 @@ navez rien de particulier à préciser :
0 * * * * curl 'https://freshrss.example.net/i/?c=feed&a=actualize'
```
### Authentification par formulaire
##### Authentification par formulaire
Dans ces cas-là, si vous avez autorisé la lecture anonyme des articles, vous
pouvez aussi permettre à nimporte qui de rafraîchir vos flux (« Autoriser
@ -108,7 +110,7 @@ string, with `&user=insert-username`:
0 * * * * curl 'https://freshrss.exemple.net/i/?c=feed&a=actualize&user=quelquun&token=mon-token'
```
### Authentification HTTP
##### Authentification HTTP
Dans ce cas-là, le token et les permissions “anonymes” sont inutilisables et
il vous sera nécessaire dindiquer vos identifiants dans la tâche
@ -119,13 +121,13 @@ implique que vos identifiants seront visibles en clair !**
0 * * * * curl -u alice:motdepasse123 'https://freshrss.exemple.net/i/?c=feed&a=actualize'
```
## Mise à jour manuelle
### Mise à jour manuelle
Si vous ne pouvez pas ou ne voulez pas utiliser la méthode automatique, vous
pouvez le faire de façon manuelle. Il existe deux méthodes qui permettent de
mettre à jour tout ou partie des flux.
### Mise à jour complète
#### Mise à jour complète
Cette mise à jour se fait pour lensemble des flux de linstance. Pour
initier cette mise à jour, il suffit de cliquer sur le lien de mise à jour
@ -138,7 +140,7 @@ sactualise au fur et à mesure de la récupération des articles.
![Barre de progression](../img/users/refresh.5.png)
### Mise à jour partielle
#### Mise à jour partielle
Cette mise à jour se fait pour le flux sélectionné uniquement. Pour initier
cette mise à jour, il suffit de cliquer sur le lien de mise à jour
@ -146,36 +148,36 @@ disponible dans le menu du flux.
![Menu du flux](../img/users/refresh.2.png)
# Filtrer les articles
## Filtrer les articles
Avec le nombre croissant darticles stockés par FreshRSS, il devient
important davoir des filtres efficaces pour nafficher quune partie des
articles. Il existe plusieurs méthodes qui filtrent selon des critères
différents. Ces méthodes peuvent être combinées dans la plus part des cas.
## Par catégorie
### Par catégorie
Cest la méthode la plus simple. Il suffit de cliquer sur le titre dune
catégorie dans le panneau latéral. Il existe deux catégories spéciales qui
sont placées en haut dudit panneau :
* *Flux principal* qui affiche uniquement les articles des flux marqués
comme visible dans cette catégorie
* *Favoris* qui affiche uniquement les articles, tous flux confondus,
marqués comme favoris
* *Flux principal* qui affiche uniquement les articles des flux marqués
comme visible dans cette catégorie
* *Favoris* qui affiche uniquement les articles, tous flux confondus,
marqués comme favoris
## Par flux
### Par flux
Il existe plusieurs méthodes pour filtrer les articles par flux :
* en cliquant sur le titre du flux dans le panneau latéral
* en cliquant sur le titre du flux dans le détail de larticle
* en filtrant dans les options du flux dans le panneau latéral
* en filtrant dans la configuration du flux
* en cliquant sur le titre du flux dans le panneau latéral
* en cliquant sur le titre du flux dans le détail de larticle
* en filtrant dans les options du flux dans le panneau latéral
* en filtrant dans la configuration du flux
![Filtrer par flux](../img/users/feed.filter.1.png)
## Par statut
### Par statut
Chaque article possède deux attributs qui peuvent être combinés. Le premier
attribut indique si larticle a été lu ou non. Le second attribut indique si
@ -197,12 +199,12 @@ as no filter selected.
By default, this filter displays only unread articles
## By content
### By content
It is possible to filter articles by their content by inputting a string in
the search field.
## Grâce au champ de recherche
### Grâce au champ de recherche
Il est possible dutiliser le champ de recherche pour raffiner les résultats
:
@ -261,5 +263,5 @@ Il est également possible de combiner les mots-clefs pour faire un filtrage
encore plus précis, et il est autorisé davoir plusieurs instances de :
`f:`, `author:`, `intitle:`, `inurl:`, `#`, et texte libre.
Combiner plusieurs critères implique un *et* logique, mais le mot clef ` OR`
Combiner plusieurs critères implique un *et* logique, mais le mot clef `OR`
peut être utiliser pour combiner plusieurs critères avec un *ou* logique : `author:Dupont OR author:Dupond`

View File

@ -1,9 +1,9 @@
# Ajouter un flux
1. Pour ajouter un flux, copiez le lien vers le fichier RSS ou Atom qui vous intéresse (par exemple, le lien RSS du Framablog est `https://framablog.org/feed/`).
2. Sur linterface de FreshRSS, cliquez sur « Gestion des abonnements ».
3. Collez lURL du flux dans le champ « Ajouter un flux RSS » juste en dessous du titre.
4. (facultatif) : Vous pouvez descendre jusquà « Catégorie » et sélectionner la catégorie dans laquelle vous souhaitez enregistrer votre flux. Par défaut, le nouveau flux sera dans « Sans catégorie ».
1. Pour ajouter un flux, copiez le lien vers le fichier RSS ou Atom qui vous intéresse (par exemple, le lien RSS du Framablog est `https://framablog.org/feed/`).
2. Sur linterface de FreshRSS, cliquez sur « Gestion des abonnements ».
3. Collez lURL du flux dans le champ « Ajouter un flux RSS » juste en dessous du titre.
4. (facultatif) : Vous pouvez descendre jusquà « Catégorie » et sélectionner la catégorie dans laquelle vous souhaitez enregistrer votre flux. Par défaut, le nouveau flux sera dans « Sans catégorie ».
## Import et export
@ -11,20 +11,20 @@ Voir [export/import SQLite]( https://github.com/FreshRSS/FreshRSS/tree/edge/cli)
## Exportation
1. Pour exporter votre liste dabonnements, allez dans « Gestion des abonnements ».
2. Cliquez ensuite sur « Importer / exporter » dans le menu de gauche.
3. Vous pouvez mettre dans votre export :
1. la liste des flux
2. les articles que vous avez étiquetés
3. les articles que vous avez mis en favoris
4. et enfin, vous pouvez sélectionner les flux que vous voulez exporter (par défaut tous les flux sont sélectionnés)
4. Cliquez sur « Exporter ».
1. Pour exporter votre liste dabonnements, allez dans « Gestion des abonnements ».
2. Cliquez ensuite sur « Importer / exporter » dans le menu de gauche.
3. Vous pouvez mettre dans votre export :
1. la liste des flux
2. les articles que vous avez étiquetés
3. les articles que vous avez mis en favoris
4. et enfin, vous pouvez sélectionner les flux que vous voulez exporter (par défaut tous les flux sont sélectionnés)
4. Cliquez sur « Exporter ».
## Importation
1. Pour importer un fichier dabonnement vers votre compte FreshRSS, allez dans lespace « Importer / exporter » comme ci-dessus
2. Cliquez sur « Parcourir » et sélectionnez votre fichier sur votre ordinateur.
3. Validez en cliquant sur « Importer ».
1. Pour importer un fichier dabonnement vers votre compte FreshRSS, allez dans lespace « Importer / exporter » comme ci-dessus
2. Cliquez sur « Parcourir » et sélectionnez votre fichier sur votre ordinateur.
3. Validez en cliquant sur « Importer ».
> **Important**: vous ne pouvez pas importer directement depuis un fichier texte.
> Vous devez le convertir au format _OPML_ au préalable.
@ -38,18 +38,18 @@ Voir [export/import SQLite]( https://github.com/FreshRSS/FreshRSS/tree/edge/cli)
Les « bookmarklets » sont de petits scripts que vous pouvez exécuter pour effectuer des tâches diverses et variées. FreshRSS offre un signet « bookmark » pour sabonner aux fils de nouvelles.
1. Ouvrez « Gestion des abonnements ».
2. Cliquez sur « Outils dabonnement ».
3. Glissez le bouton « Sabonner » dans la barre doutils des signets ou
cliquez droit et choisissez laction « Lien vers les signets » de votre navigateur.
1. Ouvrez « Gestion des abonnements ».
2. Cliquez sur « Outils dabonnement ».
3. Glissez le bouton « Sabonner » dans la barre doutils des signets ou
cliquez droit et choisissez laction « Lien vers les signets » de votre navigateur.
## Organisation des flux
Vous pouvez trier vos flux dans différentes catégories. Un flux ne peut être que dans une seule catégorie.
1. Ouvrez « Gestion des abonnements ».
2. Vous pouvez ajouter une catégorie dabonnements de cette manière :
1. Tapez le nom de votre catégorie dans le champ « Nouvelle catégorie »
2. Cliquez ensuite sur le bouton « Valider »
3. Ensuite, vous pouvez glisser vos abonnements de catégorie en catégorie
4. (facultatif) : Pour quun flux saffiche dans la catégorie, et non pas dans longlet principal, dans son paramètre « Visibilité », choisissez « Afficher dans sa catégorie ».
1. Ouvrez « Gestion des abonnements ».
2. Vous pouvez ajouter une catégorie dabonnements de cette manière :
1. Tapez le nom de votre catégorie dans le champ « Nouvelle catégorie »
2. Cliquez ensuite sur le bouton « Valider »
3. Ensuite, vous pouvez glisser vos abonnements de catégorie en catégorie
4. (facultatif) : Pour quun flux saffiche dans la catégorie, et non pas dans longlet principal, dans son paramètre « Visibilité », choisissez « Afficher dans sa catégorie ».

View File

@ -23,14 +23,14 @@ pt-br, ru, tr, zh-cn.
Les goûts et les couleurs, ça ne se discute pas. C'est pourquoi FreshRSS
propose huit thèmes officiels :
* *Blue Lagoon* par **Mister aiR**
* *Dark* par **AD**
* *Flat design* par **Marien Fressinaud**
* *Origine* par **Marien Fressinaud**
* *Origine-compact* par **Kevin Papst**
* *Pafat* par **Plopoyop**
* *Screwdriver* par **Mister aiR**
* *Swage* par **Patrick Crandol**
* *Blue Lagoon* par **Mister aiR**
* *Dark* par **AD**
* *Flat design* par **Marien Fressinaud**
* *Origine* par **Marien Fressinaud**
* *Origine-compact* par **Kevin Papst**
* *Pafat* par **Plopoyop**
* *Screwdriver* par **Mister aiR**
* *Swage* par **Patrick Crandol**
Si aucun de ceux proposés ne convient, il est toujours possible de [créer
son propre thème](../developers/04_Frontend/02_Design.md).
@ -46,10 +46,10 @@ maximiser l'espace disponible sur l'écran. Pour satisfaire le maximum de
personne, il est possible de choisir la largeur du contenu affiché. Il y a
quatre réglages disponibles :
* **Fine** qui affiche le contenu jusqu'à 550 pixels
* **Moyenne** qui affiche le contenu jusqu'à 800 pixels
* **Large** qui affiche le contenu jusqu'à 1000 pixels
* **Pas de limite** qui affiche le contenu sur 100% de la place disponible
* **Fine** qui affiche le contenu jusqu'à 550 pixels
* **Moyenne** qui affiche le contenu jusqu'à 800 pixels
* **Large** qui affiche le contenu jusqu'à 1000 pixels
* **Pas de limite** qui affiche le contenu sur 100% de la place disponible
## Icônes d'article
@ -88,11 +88,11 @@ you browse with gestures, you can disable them from the interface.
# Reading
**À FAIRE**
> **À FAIRE**
# Archivage
**À FAIRE**
> **À FAIRE**
# Partage
@ -109,17 +109,17 @@ configuration](../img/users/configuration.sharing.png)
Pour ajouter un nouvel élément à la liste, veuillez suivre les étapes
simples ci-dessous :
1. Select the desired sharing method in the drop-down list.
1. Press the ```✚``` button to add it to the list.
1. Configure the method in the list. All names can be modified in the
display. Some methods need the sharing URL to be able to work properly
(ex: Shaarli).
1. Submit your changes.
1. Select the desired sharing method in the drop-down list.
1. Press the ```✚``` button to add it to the list.
1. Configure the method in the list. All names can be modified in the
display. Some methods need the sharing URL to be able to work properly
(ex: Shaarli).
1. Submit your changes.
To remove an item from the list, follow those simple steps:
1. Press the ```❌``` button next to the share method you want to remove.
1. Submit your changes.
1. Press the ```❌``` button next to the share method you want to remove.
1. Submit your changes.
# Raccourcis
@ -132,13 +132,13 @@ configuration to fit your needs.
There are 4 types of shortcuts:
1. Views: they allow switching views with ease.
1. Navigation: they allow navigation through articles, feeds, and
categories.
1. Article actions: they allow interactions with an article, like sharing
or opening it on the original web-site.
1. Other actions: they allow other interactions with the application, like
opening the user queries menu or accessing the documentation.
1. Views: they allow switching views with ease.
1. Navigation: they allow navigation through articles, feeds, and
categories.
1. Article actions: they allow interactions with an article, like sharing
or opening it on the original web-site.
1. Other actions: they allow other interactions with the application, like
opening the user queries menu or accessing the documentation.
It's worth noting that the share article action has two levels. Once you
press the shortcut, a menu containing all the share options opens. To
@ -161,21 +161,21 @@ At the moment, there is no helper to build a user query from here.
# Users
**À FAIRE**
> **À FAIRE**
## Authentication methods
### HTTP Authentication (Apache)
1. User control is based on the `.htaccess` file.
2. It is best practice to place the `.htaccess` file in the `./i/`
subdirectory so the API and other third party services can work.
3. If you want to limit all access to registered users only, place the file
in the FreshRSS directory itself or in a parent directory. Note that
WebSub and API will not work!
4. Example `.htaccess` file for a user "marie":
1. User control is based on the `.htaccess` file.
2. It is best practice to place the `.htaccess` file in the `./i/`
subdirectory so the API and other third party services can work.
3. If you want to limit all access to registered users only, place the file
in the FreshRSS directory itself or in a parent directory. Note that
WebSub and API will not work!
4. Example `.htaccess` file for a user "marie":
```
```apache
AuthUserFile /home/marie/repertoire/.htpasswd
AuthGroupFile /dev/null
AuthName "Chez Marie"
@ -190,15 +190,15 @@ d'Apache.](http://httpd.apache.org/docs/trunk/howto/auth.html#gettingitworking)
## Informations
**À FAIRE**
> **À FAIRE**
## Archivage
## Archivage des flux
**À FAIRE**
> **À FAIRE**
## Identification
**À FAIRE**
> **À FAIRE**
## Avancé
@ -223,9 +223,7 @@ commence par un id (qui est unique pour la page).
#### Exemple : Rue89
Pour trouver ce chemin, il faut se rendre à l'adresse d'un des articles
tronqués (par exemple
http://www.rue89.com/2013/10/15/prof-maths-jai-atteint-lextase-dihn-pedagogie-inversee-246635).
Pour trouver ce chemin, il faut se rendre à l'adresse d'un des articles tronqués.
Il faut alors chercher le "bloc" HTML correspondant au contenu de l'article
(dans le code source !)
@ -233,10 +231,10 @@ On trouve ici que le bloc qui englobe uniquement le contenu de l'article est ```
#### Liste de correspondances site → chemin css
* Rue89 : ```#article .content```
* PCINpact : ```#actu_content```
* Lesnumériques : ```article#body div.text.clearfix```
* Phoronix : ```#main .content```
* Rue89 : ```#article .content```
* PCINpact : ```#actu_content```
* Lesnumériques : ```article#body div.text.clearfix```
* Phoronix : ```#main .content```
### Récupérer un flux tronqué à l'aide d'outils externes

View File

@ -3,7 +3,7 @@
Voir la page [sur notre API compatible Google Reader](06_Mobile_access.md)
pour une autre possibilité et des généralités sur laccès par API.
## Clients compatibles
## Clients compatibles GReader
De nombreux clients RSS prennent en charge l'API Fever, mais ils semblent
comprendre l'API Fever un peu différemment. Si votre client préféré ne
@ -21,7 +21,7 @@ réinitialisez ensuite le mot de passe API de l'utilisateur.
Connectez ensuite votre application mobile en utilisant l'adresse de l'API
(e.g. `https://freshrss.example.net/api/fever.php`).
## Clients compatibles
## Clients compatibles Fever
| App | Platform | License |
|:----------------------------------------------------------------------------------:|:-------------------:|:--------------------------------------------------------:|
@ -37,8 +37,7 @@ Les fonctionnalités suivantes sont implémentées :
* récupération des catégories
* récupération des flux
* récupération des entrées (new, favorites, unread, by_id, by_feed,
by_category,since)
* récupération des entrées (new, favorites, unread, by_id, by_feed, by_category,since)
* récupération des favicons
* marquage des entrées comme lues
* marquage des entrées comme favoris
@ -49,7 +48,7 @@ Les fonctionnalités suivantes sont implémentées :
Les fonctionnalités suivantes ne sont pas implémentées :
* « Hot Links » car il n'y a encore rien dans FreshRSS qui soit similaire ou
qui puisse être utilisé pour le simuler.
qui puisse être utilisé pour le simuler.
## Tester et déboguer
@ -58,7 +57,7 @@ de la tester manuellement avec un outil tel que
[Postman](https://www.getpostman.com/).
Envoyer une requête POST à l'adresse
https://freshrss.example.net/api/fever.php?api devrait vous renvoyer le
<https://freshrss.example.net/api/fever.php?api> devrait vous renvoyer le
résultat suivant :
```json
{
@ -101,15 +100,15 @@ supportées. Pour plus d'information, veuillez vous référer à la
Voici quelques exemples simples d'appels réalisables :
* https://freshrss.example.net/api/fever.php?api&items
* https://freshrss.example.net/api/fever.php?api&feeds
* https://freshrss.example.net/api/fever.php?api&groups
* https://freshrss.example.net/api/fever.php?api&unread_item_ids
* https://freshrss.example.net/api/fever.php?api&saved_item_ids
* https://freshrss.example.net/api/fever.php?api&items&since_id=some_id
* https://freshrss.example.net/api/fever.php?api&items&max_id=some_id
* https://freshrss.example.net/api/fever.php?api&mark=item&as=read&id=some_id
* https://freshrss.example.net/api/fever.php?api&mark=item&as=unread&id=some_id
* <https://freshrss.example.net/api/fever.php?api&items>
* <https://freshrss.example.net/api/fever.php?api&feeds>
* <https://freshrss.example.net/api/fever.php?api&groups>
* <https://freshrss.example.net/api/fever.php?api&unread_item_ids>
* <https://freshrss.example.net/api/fever.php?api&saved_item_ids>
* <https://freshrss.example.net/api/fever.php?api&items&since_id=some_id>
* <https://freshrss.example.net/api/fever.php?api&items&max_id=some_id>
* <https://freshrss.example.net/api/fever.php?api&mark=item&as=read&id=some_id>
* <https://freshrss.example.net/api/fever.php?api&mark=item&as=unread&id=some_id>
Remplacez `some_id` par un identifiant réel de votre base de données
`freshrss_username_entry`.

View File

@ -4,11 +4,12 @@ serveur](01_Installation.md).
# Activer lAPI dans FreshRSS
1. Dans la section “Authentification”, cocher loption “Autoriser laccès
par API (nécessaire pour les applis mobiles)”.
par API (nécessaire pour les applis mobiles)”.
2. Dans la section “Profil”, remplir le champ “Mot de passe API (ex. : pour applis mobiles)”.
* Chaque utilisateur doit choisir son mot de passe API.
* La raison dêtre dun mot de passe API
différent du mot de passe principal est que le mot de passe API est potentiellement utilisé de manière moins sûre, mais il permet aussi moins de choses.
différent du mot de passe principal est que le mot de passe API est
potentiellement utilisé de manière moins sûre, mais il permet aussi moins de choses.
Le reste de cette page concerne lAPI compatible Google Reader. Voir la
[page sur lAPI compatible Fever](06_Fever_API.md) pour une autre
@ -17,9 +18,9 @@ possibilité.
# Tester
3. Dans la section “Profil”, cliquer sur le lien de la forme
`https://rss.example.net/api/` à côté du champ “Mot de passe API”.
4. Cliquer sur le premier lien “Check full server configuration”:
1. Dans la section “Profil”, cliquer sur le lien de la forme
`https://rss.example.net/api/` à côté du champ “Mot de passe API”.
2. Cliquer sur le premier lien “Check full server configuration”:
* Si vous obtenez `PASS`, tout est bon : passer à létape 6.
* Si vous obtenez *Bad Request!* ou *Not Found*, alors votre serveur ne semble pas accepter les slashs `/` qui sont encodés `%2F`. Passer à létape 5.
* Si vous obtenez un autre message derreur, passer à létape 5.
@ -27,7 +28,7 @@ possibilité.
# Déboguer la configuration du serveur
5. Cliquer sur le second lien “Check partial server configuration (without `%2F` support)”:
* Cliquer sur le second lien “Check partial server configuration (without `%2F` support)”:
* Si vous obtenez `PASS`, alors le problème est bien que votre serveur naccepte pas les slashs `/` qui sont encodés `%2F`.
* Avec Apache, vérifiez la directive [`AllowEncodedSlashes On`](http://httpd.apache.org/docs/trunk/mod/core.html#allowencodedslashes)
* Ou utilisez un client qui nencode pas les slashs (comme EasyRSS), auquel cas passer à létape 6.
@ -48,10 +49,10 @@ possibilité.
# Clients compatibles
6. Sur la même page de l'API FreshRSS, notez l'adresse donnée sous "Votre adresse API", comme `https://freshrss.example.net/api/greader.php`
1. Sur la même page de l'API FreshRSS, notez l'adresse donnée sous "Votre adresse API", comme `https://freshrss.example.net/api/greader.php`
* Saisissez l'adresse de l'API dans le client sélectionné puis votre nom d'utilisateur et votre mot de passe spécialement créé pour l'API.
7. Vous pouvez maintenant tester sur une application mobile:
2. Vous pouvez maintenant tester sur une application mobile:
* Android
* [News+](https://play.google.com/store/apps/details?id=com.noinnion.android.newsplus) avec [News+ Google Reader extension](https://github.com/noinnion/newsplus/blob/master/apk/GoogleReaderCloneExtension_101.apk) (Closed source)
* [FeedMe 3.5.3+](https://play.google.com/store/apps/details?id=com.seazon.feedme) (Propriétaire)

View File

@ -8,18 +8,17 @@ Bien entendu, le ```/i``` n'est pas là pour faire joli ! Il s'agit d'une
question de performances et de praticité :
* Cela permet de servir les icônes, images, styles, scripts sans
cookie. Sans cela, ces fichiers seraient souvent re-téléchargés, en
particulier lorsque le formulaire de connexion est utilisé. De plus, les
requêtes vers ces ressources seraient plus lourdes.
cookie. Sans cela, ces fichiers seraient souvent re-téléchargés, en
particulier lorsque le formulaire de connexion est utilisé. De plus, les
requêtes vers ces ressources seraient plus lourdes.
* La racine publique ```./p/``` peut être servie sans restriction d'accès
HTTP (qui peut avantageusement être mise en place dans ```./p/i/```).
HTTP (qui peut avantageusement être mise en place dans ```./p/i/```).
* Cela permet d'éviter des problèmes pour des fichiers qui doivent être
publics pour bien fonctionner, comme ```favicon.ico```, ```robots.txt```,
etc.
publics pour bien fonctionner, comme ```favicon.ico```, ```robots.txt```, etc.
* Cela permet aussi d'avoir un logo FreshRSS plutôt qu'une page blanche pour
accueillir l'utilisateur par exemple dans le cas de la restriction d'accès
HTTP ou lors de l'attente du chargement plus lourd du reste de
l'interface.
accueillir l'utilisateur par exemple dans le cas de la restriction d'accès
HTTP ou lors de l'attente du chargement plus lourd du reste de
l'interface.
## Pourquoi le ```robots.txt``` se trouve dans un sous-répertoire ?
@ -32,9 +31,9 @@ Comme expliqué dans les [conseils de
sécurité](01_Installation.md#conseils-de-securite), il est recommandé de
faire pointer un nom de domaine vers ce sous-répertoire afin que seule la
partie publique ne soit accessible par un navigateur web. De cette manière
https://demo.freshrss.org/ pointe vers le répertoire ```./p``` et le
<https://demo.freshrss.org/> pointe vers le répertoire ```./p``` et le
```robots.txt``` se trouve bien à la racine du site :
https://demo.freshrss.org/robots.txt.
<https://demo.freshrss.org/robots.txt>
L'explication est la même pour les fichiers ```favicon.ico``` et
```.htaccess```.
@ -48,17 +47,17 @@ dans un premier temps déterminer la cause du problème.Voici la liste des
étapes à suivre pour la déterminer :
1. __Vérifier la validité du flux__ grâce à l'[outil en ligne du
W3C](https://validator.w3.org/feed/ "Validateur en ligne de flux RSS et
Atom"). Si ça ne fonctionne pas, nous ne pouvons rien faire.
W3C](https://validator.w3.org/feed/ "Validateur en ligne de flux RSS et
Atom"). Si ça ne fonctionne pas, nous ne pouvons rien faire.
1. __Vérifier la reconnaissance par SimplePie__ grâce à l'[outil en ligne de
SimplePie](https://simplepie.org/demo/ "Démo officielle de
SimplePie"). Si ça ne fonctionne pas, nous ne pouvons rien faire.
SimplePie](https://simplepie.org/demo/ "Démo officielle de
SimplePie"). Si ça ne fonctionne pas, nous ne pouvons rien faire.
1. __Vérifier l'intégration dans FreshRSS__ grâce à la
[démo](https://demo.freshrss.org "Démo officielle de FreshRSS"). Si ça ne
fonctionne pas, il faut [créer un ticket sur
Github](https://github.com/FreshRSS/FreshRSS/issues/new "Créer un ticket
pour FreshRSS") pour que l'on puisse regarder ce qui se passe. Si ça
fonctionne, il y a probablement un problème avec l'hébergement.
[démo](https://demo.freshrss.org "Démo officielle de FreshRSS"). Si ça ne
fonctionne pas, il faut [créer un ticket sur
Github](https://github.com/FreshRSS/FreshRSS/issues/new "Créer un ticket
pour FreshRSS") pour que l'on puisse regarder ce qui se passe. Si ça
fonctionne, il y a probablement un problème avec l'hébergement.
## Comment changer un mot de passe oublié ?
@ -77,7 +76,6 @@ ligne de commande. Pour cela, il suffit d'ouvrir son terminal et de saisir
la commande suivante :
```sh
./cli/update_user.php --user <username> --password <password>
```
Pour plus d'information à ce sujet, il existe la [documentation
dédiée](../../cli/README.md).
@ -107,8 +105,8 @@ permettre la consultation de la page de configuration « partage ».
Exemples avec _uBlock_ :
- Ajoutez votre instance FreshRSS à la liste blanche de en l'ajoutant dans
_uBlock > Ouvrir le tableau de bord > Liste blanche_.
- Autorisez votre instance FreshRSS à appeler la page de configuration
`sharing` en ajoutant la règle `*sharing,domain=~votredomaine.com` dans
_uBlock > Ouvrir le fichier tableau de bord > Mes filtres_
* Ajoutez votre instance FreshRSS à la liste blanche de en l'ajoutant dans
_uBlock > Ouvrir le tableau de bord > Liste blanche_.
*-* Autorisez votre instance FreshRSS à appeler la page de configuration
`sharing` en ajoutant la règle `*sharing,domain=~votredomaine.com` dans
_uBlock > Ouvrir le fichier tableau de bord > Mes filtres_

View File

@ -5,7 +5,7 @@ En effet, le fonctionnement de base de ces deux derniers implique de vérifier
Cela même si le site concerné na rien publié depuis la dernière synchronisation.
Le [protocole WebSub](https://www.w3.org/TR/websub/) permet déviter des synchronisations inutiles en notifiant en temps réel lagrégateur de la présence de nouveaux articles.
# Fonctionnement de WebSub
## Fonctionnement de WebSub
On va retrouver trois notions dans WebSub : les éditeurs (les sites qui publient du contenu), les abonnés (les agrégateurs de flux RSS) et les hubs.
@ -15,10 +15,8 @@ Ainsi, lorsquun éditeur va publier du contenu, il va notifier le hub qui va
Pour pouvoir être notifié, les abonnés doivent fournir une adresse accessible publiquement sur Internet.
# WebSub et FreshRSS
## WebSub et FreshRSS
Depuis la version 1.1.2-beta, FreshRSS supporte officiellement WebSub.
Vous pouvez donc recevoir en temps réel les articles des sites qui affichent dans leur flux RSS un « hub »,
tels [Mastodon](https://joinmastodon.org), [Friendica](https://friendi.ca), WordPress (WordPress.com ou avec [une extension](https://wordpress.org/plugins/pubsubhubbub/)), Blogger, FeedBurner, Slashdot, etc.
Vous pouvez tester avec http://push-pub.appspot.com.

View File

@ -1,6 +1,6 @@
# Welcome to the FreshRSS documentation!
# Welcome to the FreshRSS documentation
This documentation is still under construction. If you want to contribute, you can [find us on GitHub](https://github.com/FreshRSS/FreshRSS).
If you want to contribute, you can [find us on GitHub](https://github.com/FreshRSS/FreshRSS).
- [English documentation](./en/index.md)
- [Documentation française](./fr/index.md)

View File

@ -3,7 +3,6 @@ Blue Lagoon
**C'est un cocktail (bis)! C'est la version plus "fresh" de [Screwdriver](https://github.com/misterair/Screwdriver). C'est... c'est... un thème pour l'agrégateur de flux RSS [FreshRSS](https://github.com/FreshRSS/FreshRSS/)**
En toute modestie, ce thème tue du Nyan Cat.
![screenshot](https://raw.githubusercontent.com/misterair/BlueLagoon/master/screenshot.png)
@ -11,14 +10,13 @@ En toute modestie, ce thème tue du Nyan Cat.
Installation
-----------------
1. Placez le dossier du thème dans ledossier /FreshRSS/p/themes/Screwdriver de votre FreshRSS;
2. Allez dans les paramètres d'Affichage et changez de thème;
3. Profitez de votre Blue Laggon sans modération!
4. Remontez les problèmes sur Github (*facultatif mais fortement apprécié*)
Blue Lagoon est distribué sous license AlcoholWare:
Blue Lagoon est distribué sous license AlcoholWare
-----------------
« LICENCE ALCOHOLWARE » (Révision 42):
@ -29,10 +27,4 @@ vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
que vous pensez que ce truc vaut le coup, vous pouvez me payer un verre (rempli) en retour.
*Mister aiR*
*Mister aiR*.

View File

@ -1,36 +1,30 @@
Screwdriver
Screwdriver
=======
**C'est un cocktail! C'est chaud mais "fresh" à la fois. C'est... c'est... un thème pour l'agrégateur de flux RSS<a href="https://github.com/FreshRSS/FreshRSS/" target="blank">FreshRSS</a>!!**
**C'est un cocktail! C'est chaud mais "fresh" à la fois. C'est... c'est... un thème pour l'agrégateur de flux RSS [FreshRSS](https://github.com/FreshRSS/FreshRSS/)!!**
En toute modestie, ce thème tue du chaton.
![screenshot](https://github.com/misterair/Screwdriver/blob/master/screenshot.png)
![screenshot](https://raw.githubusercontent.com/misterair/Screwdriver/master/screenshot.png)
Installation
-----------------
------------
1. Placez le dossier du thème dans ledossier /FreshRSS/p/themes/Screwdriver de votre FreshRSS;
2. Allez dans les paramètres d'Affichage et changez de thème;
3. Profitez de votre Screwdriver!
4. Remontez les problèmes sur Github (facultatif mais fortement apprécié)
Screwdriver est distribué sous license BeerWare:
Screwdriver est distribué sous license BeerWare
-----------------
« LICENCE BEERWARE » (Révision 42):
mister.air@gmail.com a créé ce fichier. Tant que vous conservez cet avertissement,
<mister.air@gmail.com> a créé ce fichier. Tant que vous conservez cet avertissement,
vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en retour.
*Mister aiR*
*Mister aiR*.

View File

@ -21,11 +21,13 @@
"scripts": {
"eslint": "eslint --ext .js .",
"eslint_fix": "eslint --fix --ext .js .",
"markdownlint": "markdownlint '**/*.md'",
"markdownlint_fix": "markdownlint --fix '**/*.md'",
"rtlcss": "rtlcss -d p/themes && find . -type f -name '*.rtl.rtl.css' -delete",
"stylelint": "stylelint '**/*.css' && stylelint --syntax scss '**/*.scss'",
"stylelint_fix": "stylelint --fix '**/*.css' && stylelint --fix --syntax scss '**/*.scss'",
"test": "npm run eslint && npm run stylelint",
"fix": "npm run rtlcss && npm run stylelint_fix && npm run eslint_fix"
"test": "npm run eslint && npm run stylelint && npm run markdownlint",
"fix": "npm run rtlcss && npm run stylelint_fix && npm run eslint_fix && npm run markdownlint_fix"
},
"devDependencies": {
"eslint": "^7.32.0",
@ -33,6 +35,7 @@
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.1.0",
"markdownlint-cli": "^0.29.0",
"rtlcss": "^3.4.0",
"stylelint": "^13.13.1",
"stylelint-config-recommended-scss": "^4.3.0",