aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.github/CONTRIBUTING.md17
-rw-r--r--app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml14
-rw-r--r--docs/en/user/android.rst20
-rw-r--r--docs/en/user/faq.rst29
-rw-r--r--docs/en/user/installation.rst68
-rw-r--r--docs/fr/developer/api.rst1
-rw-r--r--docs/img/user/android_configuration_connection_test.en.pngbin0 -> 80965 bytes
-rw-r--r--docs/img/user/android_configuration_connection_test_success.en.pngbin0 -> 82290 bytes
-rw-r--r--docs/img/user/android_configuration_feed_credentials_automatically_filled_in.en.pngbin0 -> 106816 bytes
-rw-r--r--docs/img/user/android_configuration_filled_in.en.pngbin0 -> 98558 bytes
-rw-r--r--docs/img/user/android_configuration_get_feed_credentials.en.pngbin0 -> 81325 bytes
-rw-r--r--docs/img/user/android_configuration_saved_feed_update.en.pngbin0 -> 53196 bytes
-rw-r--r--docs/img/user/android_configuration_screen.en.pngbin0 -> 93709 bytes
-rw-r--r--docs/img/user/android_configuration_scroll_bottom.en.pngbin0 -> 98160 bytes
-rw-r--r--docs/img/user/android_unread_feed_synced.en.pngbin0 -> 89415 bytes
-rw-r--r--docs/img/user/android_welcome_screen.en.pngbin0 -> 51580 bytes
-rw-r--r--src/Wallabag/ApiBundle/Controller/WallabagRestController.php8
-rw-r--r--src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php87
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.en.yml22
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig2
22 files changed, 205 insertions, 67 deletions
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 0b92775a..920f1905 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -3,22 +3,11 @@
3## You found a bug 3## You found a bug
4Please [open a new issue](https://github.com/wallabag/wallabag/issues/new). 4Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
5 5
6To fix the bug quickly, we need some infos: 6To fix the bug quickly, we need some infos: please answer to the questions in the issue form.
7* your wallabag version (in `app/config/config.yml`, see `wallabag_core.version`)
8* your webserver installation :
9 * type of hosting (shared or dedicated)
10 * in case of a dedicated server, the server and OS used
11 * the php version used, eventually `phpinfo()`
12* which storage system you choose at install (SQLite, MySQL/MariaDB or PostgreSQL)
13* any particular details which could be related
14 7
15If relevant : 8If you have the skills, look for errors into php, server and application (see `var/logs`) logs.
16* the link you want to save and which causes problem
17* the file you want to import into wallabag, or just an extract
18
19If you have the skills, look for errors into php, server and application (see `var/logs`) logs
20 9
21Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like. 10Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
22 11
23## You want to fix a bug or to add a feature 12## You want to fix a bug or to add a feature
24Please fork wallabag and work with **the v2 branch** only. **Do not work on master branch**. 13Please fork wallabag and work with **the master branch**.
diff --git a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml
index ec302901..e4417139 100644
--- a/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml
+++ b/app/Resources/CraueConfigBundle/translations/CraueConfigBundle.it.yml
@@ -1,5 +1,5 @@
1download_pictures: Scarica le immagini sul tuo server 1download_pictures: Scarica le immagini sul tuo server
2carrot: Abilita la condivisione su Carrot 2carrot: Abilita la condivisione con Carrot
3diaspora_url: Diaspora URL, se il servizio è abilitato 3diaspora_url: Diaspora URL, se il servizio è abilitato
4export_epub: Abilita esportazione ePub 4export_epub: Abilita esportazione ePub
5export_mobi: Abilita esportazione .mobi 5export_mobi: Abilita esportazione .mobi
@@ -9,15 +9,15 @@ export_json: Abilita esportazione JSON
9export_txt: Abilita esportazione TXT 9export_txt: Abilita esportazione TXT
10export_xml: Abilita esportazione XML 10export_xml: Abilita esportazione XML
11pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication) 11pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication)
12shaarli_url: Shaarli URL, if the service is enabled 12shaarli_url: Shaarli URL, se il servizio è abilitato
13share_diaspora: Abilita la condivisione su Diaspora 13share_diaspora: Abilita la condivisione con Diaspora
14share_mail: Abilita la condivisione per email 14share_mail: Abilita la condivisione per email
15share_shaarli: Abilita la condivisione su Shaarli 15share_shaarli: Abilita la condivisione con Shaarli
16share_twitter: Abilita la condivisione su Twitter 16share_twitter: Abilita la condivisione con Twitter
17show_printlink: Mostra un collegamento per stampare il contenuto 17show_printlink: Mostra un collegamento per stampare il contenuto
18wallabag_support_url: URL di supporto per wallabag 18wallabag_support_url: URL di supporto per wallabag
19wallabag_url: URL della *tua* installazione di wallabag 19wallabag_url: URL della *tua* installazione di wallabag
20entry: "articolo" 20entry: "contenuto"
21export: "esporta" 21export: "esporta"
22import: "importa" 22import: "importa"
23misc: "misc" 23misc: "misc"
@@ -25,5 +25,5 @@ modify_settings: "applica"
25piwik_host: Host del tuo sito in Piwik 25piwik_host: Host del tuo sito in Piwik
26piwik_site_id: ID del tuo sito in Piwik 26piwik_site_id: ID del tuo sito in Piwik
27piwik_enabled: Abilita Piwik 27piwik_enabled: Abilita Piwik
28demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)" 28demo_mode_enabled: "Abilita modalità demo ? (usato solo per la demo pubblica di wallabag)"
29demo_mode_username: "Utente Demo" 29demo_mode_username: "Utente Demo"
diff --git a/docs/en/user/android.rst b/docs/en/user/android.rst
index c13cf031..4271f037 100644
--- a/docs/en/user/android.rst
+++ b/docs/en/user/android.rst
@@ -13,61 +13,61 @@ Steps to configure your app
13 13
14When you first start the app, you see the welcome screen, where you are adviced to configure the app for your wallabag instance at first. 14When you first start the app, you see the welcome screen, where you are adviced to configure the app for your wallabag instance at first.
15 15
16.. image:: ../../img/user/android_welcome_screen.de.png 16.. image:: ../../img/user/android_welcome_screen.en.png
17 :alt: Welcome screen 17 :alt: Welcome screen
18 :align: center 18 :align: center
19 19
20Just confirm that message and you get redirected to the settings screen. 20Just confirm that message and you get redirected to the settings screen.
21 21
22.. image:: ../../img/user/android_configuration_screen.de.png 22.. image:: ../../img/user/android_configuration_screen.en.png
23 :alt: Settings screen 23 :alt: Settings screen
24 :align: center 24 :align: center
25 25
26Fill in your wallabag data. You need to enter your wallabag address. It is important that this URL does not end with a slash. Also add your wallabag credentials to the user name and password field. 26Fill in your wallabag data. You need to enter your wallabag address. It is important that this URL does not end with a slash. Also add your wallabag credentials to the user name and password field.
27 27
28.. image:: ../../img/user/android_configuration_filled_in.de.png 28.. image:: ../../img/user/android_configuration_filled_in.en.png
29 :alt: Filled in settings 29 :alt: Filled in settings
30 :align: center 30 :align: center
31 31
32After you have filled in your data, push the button Connection test and wait for the test to finish. 32After you have filled in your data, push the button Connection test and wait for the test to finish.
33 33
34.. image:: ../../img/user/android_configuration_connection_test.de.png 34.. image:: ../../img/user/android_configuration_connection_test.en.png
35 :alt: Connection test with your wallabag data 35 :alt: Connection test with your wallabag data
36 :align: center 36 :align: center
37 37
38The connection test shall finish with success. If not, you need to fix this first until you proceed. 38The connection test shall finish with success. If not, you need to fix this first until you proceed.
39 39
40.. image:: ../../img/user/android_configuration_connection_test_success.de.png 40.. image:: ../../img/user/android_configuration_connection_test_success.en.png
41 :alt: Connection test successful 41 :alt: Connection test successful
42 :align: center 42 :align: center
43 43
44After the connection test was successful, you can push the button to get your feed credentials. The app now tries to login to your wallabag instance and get the user id and the corresponding token for the feeds. 44After the connection test was successful, you can push the button to get your feed credentials. The app now tries to login to your wallabag instance and get the user id and the corresponding token for the feeds.
45 45
46.. image:: ../../img/user/android_configuration_get_feed_credentials.de.png 46.. image:: ../../img/user/android_configuration_get_feed_credentials.en.png
47 :alt: Getting the feed credentials 47 :alt: Getting the feed credentials
48 :align: center 48 :align: center
49 49
50When the process of getting your feed credentials finishes with success you see a toast message that the user id and the token were automatically filled in to the form. 50When the process of getting your feed credentials finishes with success you see a toast message that the user id and the token were automatically filled in to the form.
51 51
52.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.de.png 52.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.en.png
53 :alt: Getting feed credentials successful 53 :alt: Getting feed credentials successful
54 :align: center 54 :align: center
55 55
56Now you need to scroll to the bottom of the settings menu. Of course you can adjust the given settings to your needs. Finish the configuration of your app with pushing the save button. 56Now you need to scroll to the bottom of the settings menu. Of course you can adjust the given settings to your needs. Finish the configuration of your app with pushing the save button.
57 57
58.. image:: ../../img/user/android_configuration_scroll_bottom.de.png 58.. image:: ../../img/user/android_configuration_scroll_bottom.en.png
59 :alt: Bottom of the settings screen 59 :alt: Bottom of the settings screen
60 :align: center 60 :align: center
61 61
62After hitting the save button, you get the following screen. The app proposes to initiate a syncronisation process to update your feeds of articles. It is recommended to acknowledge this action and press Yes. 62After hitting the save button, you get the following screen. The app proposes to initiate a syncronisation process to update your feeds of articles. It is recommended to acknowledge this action and press Yes.
63 63
64.. image:: ../../img/user/android_configuration_saved_feed_update.de.png 64.. image:: ../../img/user/android_configuration_saved_feed_update.en.png
65 :alt: Settings saved the first time 65 :alt: Settings saved the first time
66 :align: center 66 :align: center
67 67
68Finally after the syncronisation finished successfully, you are presented the list of unread articles. 68Finally after the syncronisation finished successfully, you are presented the list of unread articles.
69 69
70.. image:: ../../img/user/android_unread_feed_synced.de.png 70.. image:: ../../img/user/android_unread_feed_synced.en.png
71 :alt: Filled article list cause feeds successfully syncronized 71 :alt: Filled article list cause feeds successfully syncronized
72 :align: center 72 :align: center
73 73
diff --git a/docs/en/user/faq.rst b/docs/en/user/faq.rst
index 1e36dc26..61303604 100644
--- a/docs/en/user/faq.rst
+++ b/docs/en/user/faq.rst
@@ -1,26 +1,39 @@
1Frequently Asked Questions 1Frequently Asked Questions
2========================== 2==========================
3 3
4During the installation, I've got this error ``Error Output: sh: 1: @post-cmd: not found`` 4During the installation, I got the error ``Error Output: sh: 1: @post-cmd: not found``
5------------------------------------------------------------------------------------------ 5--------------------------------------------------------------------------------------
6 6
7It seems you have a problem with your ``composer`` installation. Try to uninstall and reinstall it. 7It seems you have a problem with your ``composer`` installation. Try to uninstall and reinstall it.
8 8
9`Read the documentation about composer to know how to install it 9`Read the documentation about composer to know how to install it
10<https://getcomposer.org/doc/00-intro.md>`__. 10<https://getcomposer.org/doc/00-intro.md>`__.
11 11
12I can't valid the registration form 12I can't validate the registration form
13----------------------------------- 13--------------------------------------
14 14
15Make sure that all fields are well filled: 15Ensure that all fields are properly filled:
16 16
17* valid email address 17* valid email address
18* same passwords in two fields 18* same passwords in two fields
19 19
20I don't receive my activation email 20I'm not receiving my activation email
21----------------------------------- 21-------------------------------------
22 22
23Are you sure your email address was correct? Did you check your spams folder? 23Are you sure your email address was correct? Did you check your spam folder?
24
25If you still don't see the activation email, please ensure that you have
26installed and properly configured a mail transfer agent. Be sure to include a
27firewall rule for SMTP. E.g., if using firewalld:
28
29::
30
31 firewall-cmd --permanent --add-service=smtp
32 firewall-cmd --reload
33
34Lastly, if you have SELinux enabled, set the following rule:
35
36``setsebool -P httpd_can_sendmail 1``
24 37
25When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``. 38When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
26---------------------------------------------------------------------------------------------------------------------------------- 39----------------------------------------------------------------------------------------------------------------------------------
diff --git a/docs/en/user/installation.rst b/docs/en/user/installation.rst
index 484e66cb..41542c45 100644
--- a/docs/en/user/installation.rst
+++ b/docs/en/user/installation.rst
@@ -23,13 +23,13 @@ You'll need the following extensions for wallabag to work. Some of these may alr
23- php-gettext 23- php-gettext
24- php-tokenizer 24- php-tokenizer
25 25
26wallabag uses PDO to connect to database, so you'll need one of: 26wallabag uses PDO to connect to the database, so you'll need one of the following:
27 27
28- pdo_mysql 28- pdo_mysql
29- pdo_sqlite 29- pdo_sqlite
30- pdo_pgsql 30- pdo_pgsql
31 31
32and it's corresponding database server. 32and its corresponding database server.
33 33
34Installation 34Installation
35------------ 35------------
@@ -37,7 +37,7 @@ Installation
37On a dedicated web server (recommended way) 37On a dedicated web server (recommended way)
38~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 39
40wallabag uses a big number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you don't already have. 40wallabag uses a large number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so.
41 41
42Install Composer: 42Install Composer:
43 43
@@ -47,7 +47,7 @@ Install Composer:
47 47
48You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__: 48You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__:
49 49
50To install wallabag itself, you must run these two commands: 50To install wallabag itself, you must run the following commands:
51 51
52:: 52::
53 53
@@ -67,17 +67,17 @@ And access wallabag at http://yourserverip:8000
67 67
68.. tip:: 68.. tip::
69 69
70 To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look to the `Symfony documentation <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__. 70 To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look at `Symfony documentation <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__.
71 71
72On a shared hosting 72On a shared hosting
73~~~~~~~~~~~~~~~~~~~ 73~~~~~~~~~~~~~~~~~~~
74 74
75We provide you a package with all dependancies inside. 75We provide a package with all dependencies inside.
76The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``. 76The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``.
77 77
78We already created a user: login and password are ``wallabag``. 78We already created a user: login and password are ``wallabag``.
79 79
80.. caution:: With this package, wallabag don't check mandatory extensions used in the application (theses checks are made during ``composer install`` when you have a dedicated web server, see above). 80.. caution:: With this package, wallabag doesn't check for mandatory extensions used in the application (theses checks are made during ``composer install`` when you have a dedicated web server, see above).
81 81
82Execute this command to download and extract the latest package: 82Execute this command to download and extract the latest package:
83 83
@@ -85,7 +85,7 @@ Execute this command to download and extract the latest package:
85 85
86 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package 86 wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
87 87
88Now, read the following documentation to create your virtual host, then access to your wallabag. 88Now, read the following documentation to create your virtual host, then access your wallabag.
89If you changed the database configuration to use MySQL or PostgreSQL, you need to create a user via this command ``php bin/console wallabag:install --env=prod``. 89If you changed the database configuration to use MySQL or PostgreSQL, you need to create a user via this command ``php bin/console wallabag:install --env=prod``.
90 90
91Installation with Docker 91Installation with Docker
@@ -151,7 +151,7 @@ After reloading or restarting Apache, you should now be able to access wallabag
151Configuration on Nginx 151Configuration on Nginx
152~~~~~~~~~~~~~~~~~~~~~~ 152~~~~~~~~~~~~~~~~~~~~~~
153 153
154Assuming you install wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag : 154Assuming you installed wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag :
155 155
156:: 156::
157 157
@@ -258,6 +258,7 @@ It has to be the same for the following folders
258* /var/www/wallabag/bin/ 258* /var/www/wallabag/bin/
259* /var/www/wallabag/app/config/ 259* /var/www/wallabag/app/config/
260* /var/www/wallabag/vendor/ 260* /var/www/wallabag/vendor/
261* /var/www/wallabag/data/
261 262
262by entering 263by entering
263 264
@@ -266,11 +267,58 @@ by entering
266 chown -R www-data:www-data /var/www/wallabag/bin 267 chown -R www-data:www-data /var/www/wallabag/bin
267 chown -R www-data:www-data /var/www/wallabag/app/config 268 chown -R www-data:www-data /var/www/wallabag/app/config
268 chown -R www-data:www-data /var/www/wallabag/vendor 269 chown -R www-data:www-data /var/www/wallabag/vendor
270 chown -R www-data:www-data /var/www/wallabag/data/
269 271
270otherwise, sooner or later you will meet this error messages 272otherwise, sooner or later you will see these error messages:
271 273
272.. code-block:: bash 274.. code-block:: bash
273 275
274 Unable to write to the "bin" directory. 276 Unable to write to the "bin" directory.
275 file_put_contents(app/config/parameters.yml): failed to open stream: Permission denied 277 file_put_contents(app/config/parameters.yml): failed to open stream: Permission denied
276 file_put_contents(/.../wallabag/vendor/autoload.php): failed to open stream: Permission denied 278 file_put_contents(/.../wallabag/vendor/autoload.php): failed to open stream: Permission denied
279
280Additional rules for SELinux
281~~~~~~~~~~~~~~~~~~~~~~~~~~~~
282
283If SELinux is enabled on your system, you will need to configure additional contexts in order for wallabag to function properly. To check if SELinux is enabled, simply enter the following:
284
285``getenforce``
286
287This will return ``Enforcing`` if SELinux is enabled. Creating a new context involves the following syntax:
288
289``semanage fcontext -a -t <context type> <full path>``
290
291For example:
292
293``semanage fcontext -a -t httpd_sys_content_t "/var/www/wallabag(/.*)?"``
294
295This will recursively apply the httpd_sys_content_t context to the wallabag directory and all underlying files and folders. The following rules are needed:
296
297+-----------------------------------+----------------------------+
298| Full path | Context |
299+===================================+============================+
300| /var/www/wallabag(/.*)? | ``httpd_sys_content_t`` |
301+-----------------------------------+----------------------------+
302| /var/www/wallabag/data(/.*)? | ``httpd_sys_rw_content_t`` |
303+-----------------------------------+----------------------------+
304| /var/www/wallabag/var/logs(/.*)? | ``httpd_log_t`` |
305+-----------------------------------+----------------------------+
306| /var/www/wallabag/var/cache(/.*)? | ``httpd_cache_t`` |
307+-----------------------------------+----------------------------+
308
309After creating these contexts, enter the following in order to apply your rules:
310
311``restorecon -R -v /var/www/wallabag``
312
313You can check contexts in a directory by typing ``ls -lZ`` and you can see all of your current rules with ``semanage fcontext -l -C``.
314
315If you're installing the preconfigured latest-v2-package, then an additional rule is needed during the initial setup:
316
317``semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wallabag/var"``
318
319After you successfully access your wallabag and complete the initial setup, this context can be removed:
320
321::
322
323 semanage fcontext -d -t httpd_sys_rw_content_t "/var/www/wallabag/var"
324 retorecon -R -v /var/www/wallabag/var
diff --git a/docs/fr/developer/api.rst b/docs/fr/developer/api.rst
index af38d3ec..a0710a96 100644
--- a/docs/fr/developer/api.rst
+++ b/docs/fr/developer/api.rst
@@ -266,3 +266,4 @@ Certaines applications ou bibliothèques utilisent notre API. En voici une liste
266- `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ par Strubbl. 266- `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ par Strubbl.
267- `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ par Julian Oster. 267- `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ par Julian Oster.
268- `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ par FoxMaSk, pour son projet `Trigger Happy <https://blog.trigger-happy.eu/>`_. 268- `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ par FoxMaSk, pour son projet `Trigger Happy <https://blog.trigger-happy.eu/>`_.
269- `Un plugin <https://github.com/joshp23/ttrss-to-wallabag-v2>`_ conçu pour `Tiny Tiny RSS <https://tt-rss.org/gitlab/fox/tt-rss/wikis/home>`_ qui utilise l'API wallabag v2. Par Josh Panter.
diff --git a/docs/img/user/android_configuration_connection_test.en.png b/docs/img/user/android_configuration_connection_test.en.png
new file mode 100644
index 00000000..479cd09a
--- /dev/null
+++ b/docs/img/user/android_configuration_connection_test.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_connection_test_success.en.png b/docs/img/user/android_configuration_connection_test_success.en.png
new file mode 100644
index 00000000..840f00cd
--- /dev/null
+++ b/docs/img/user/android_configuration_connection_test_success.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_feed_credentials_automatically_filled_in.en.png b/docs/img/user/android_configuration_feed_credentials_automatically_filled_in.en.png
new file mode 100644
index 00000000..df071b8b
--- /dev/null
+++ b/docs/img/user/android_configuration_feed_credentials_automatically_filled_in.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_filled_in.en.png b/docs/img/user/android_configuration_filled_in.en.png
new file mode 100644
index 00000000..368ac515
--- /dev/null
+++ b/docs/img/user/android_configuration_filled_in.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_get_feed_credentials.en.png b/docs/img/user/android_configuration_get_feed_credentials.en.png
new file mode 100644
index 00000000..2a8958ff
--- /dev/null
+++ b/docs/img/user/android_configuration_get_feed_credentials.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_saved_feed_update.en.png b/docs/img/user/android_configuration_saved_feed_update.en.png
new file mode 100644
index 00000000..f1c06f17
--- /dev/null
+++ b/docs/img/user/android_configuration_saved_feed_update.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_screen.en.png b/docs/img/user/android_configuration_screen.en.png
new file mode 100644
index 00000000..945fd7c8
--- /dev/null
+++ b/docs/img/user/android_configuration_screen.en.png
Binary files differ
diff --git a/docs/img/user/android_configuration_scroll_bottom.en.png b/docs/img/user/android_configuration_scroll_bottom.en.png
new file mode 100644
index 00000000..11a6fc5a
--- /dev/null
+++ b/docs/img/user/android_configuration_scroll_bottom.en.png
Binary files differ
diff --git a/docs/img/user/android_unread_feed_synced.en.png b/docs/img/user/android_unread_feed_synced.en.png
new file mode 100644
index 00000000..8451557e
--- /dev/null
+++ b/docs/img/user/android_unread_feed_synced.en.png
Binary files differ
diff --git a/docs/img/user/android_welcome_screen.en.png b/docs/img/user/android_welcome_screen.en.png
new file mode 100644
index 00000000..a3741d50
--- /dev/null
+++ b/docs/img/user/android_welcome_screen.en.png
Binary files differ
diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
index 5202c524..af24e498 100644
--- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
@@ -110,8 +110,8 @@ class WallabagRestController extends FOSRestController
110 110
111 $url = $request->request->get('url'); 111 $url = $request->request->get('url');
112 $title = $request->request->get('title'); 112 $title = $request->request->get('title');
113 $isArchived = (int) $request->request->get('archive'); 113 $isArchived = $request->request->get('archive');
114 $isStarred = (int) $request->request->get('starred'); 114 $isStarred = $request->request->get('starred');
115 115
116 $entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId()); 116 $entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId());
117 117
@@ -172,8 +172,8 @@ class WallabagRestController extends FOSRestController
172 $this->validateUserAccess($entry->getUser()->getId()); 172 $this->validateUserAccess($entry->getUser()->getId());
173 173
174 $title = $request->request->get('title'); 174 $title = $request->request->get('title');
175 $isArchived = (int) $request->request->get('archive'); 175 $isArchived = $request->request->get('archive');
176 $isStarred = (int) $request->request->get('starred'); 176 $isStarred = $request->request->get('starred');
177 177
178 if (!is_null($title)) { 178 if (!is_null($title)) {
179 $entry->setTitle($title); 179 $entry->setTitle($title);
diff --git a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php
index 2f2d92ee..c50e4d02 100644
--- a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php
+++ b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php
@@ -423,4 +423,91 @@ class WallabagRestControllerTest extends WallabagApiTestCase
423 423
424 $this->assertEquals($this->client->getContainer()->getParameter('wallabag_core.version'), $content); 424 $this->assertEquals($this->client->getContainer()->getParameter('wallabag_core.version'), $content);
425 } 425 }
426
427 public function testSaveIsArchivedAfterPost()
428 {
429 $entry = $this->client->getContainer()
430 ->get('doctrine.orm.entity_manager')
431 ->getRepository('WallabagCoreBundle:Entry')
432 ->findOneBy(['user' => 1, 'isArchived' => true]);
433
434 if (!$entry) {
435 $this->markTestSkipped('No content found in db.');
436 }
437
438 $this->client->request('POST', '/api/entries.json', [
439 'url' => $entry->getUrl(),
440 ]);
441
442 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
443
444 $content = json_decode($this->client->getResponse()->getContent(), true);
445
446 $this->assertEquals(true, $content['is_archived']);
447 }
448
449 public function testSaveIsStarredAfterPost()
450 {
451 $entry = $this->client->getContainer()
452 ->get('doctrine.orm.entity_manager')
453 ->getRepository('WallabagCoreBundle:Entry')
454 ->findOneBy(['user' => 1, 'isStarred' => true]);
455
456 if (!$entry) {
457 $this->markTestSkipped('No content found in db.');
458 }
459
460 $this->client->request('POST', '/api/entries.json', [
461 'url' => $entry->getUrl(),
462 ]);
463
464 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
465
466 $content = json_decode($this->client->getResponse()->getContent(), true);
467
468 $this->assertEquals(true, $content['is_starred']);
469 }
470
471 public function testSaveIsArchivedAfterPatch()
472 {
473 $entry = $this->client->getContainer()
474 ->get('doctrine.orm.entity_manager')
475 ->getRepository('WallabagCoreBundle:Entry')
476 ->findOneBy(['user' => 1, 'isArchived' => true]);
477
478 if (!$entry) {
479 $this->markTestSkipped('No content found in db.');
480 }
481
482 $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
483 'title' => $entry->getTitle().'++',
484 ]);
485
486 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
487
488 $content = json_decode($this->client->getResponse()->getContent(), true);
489
490 $this->assertEquals(true, $content['is_archived']);
491 }
492
493 public function testSaveIsStarredAfterPatch()
494 {
495 $entry = $this->client->getContainer()
496 ->get('doctrine.orm.entity_manager')
497 ->getRepository('WallabagCoreBundle:Entry')
498 ->findOneBy(['user' => 1, 'isStarred' => true]);
499
500 if (!$entry) {
501 $this->markTestSkipped('No content found in db.');
502 }
503 $this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
504 'title' => $entry->getTitle().'++',
505 ]);
506
507 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
508
509 $content = json_decode($this->client->getResponse()->getContent(), true);
510
511 $this->assertEquals(true, $content['is_starred']);
512 }
426} 513}
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
index 6658baa9..ae03f809 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
@@ -81,7 +81,7 @@ config:
81 archive: 'archived' 81 archive: 'archived'
82 rss_limit: 'Number of items in the feed' 82 rss_limit: 'Number of items in the feed'
83 form_user: 83 form_user:
84 two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion" 84 two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connection."
85 name_label: 'Name' 85 name_label: 'Name'
86 email_label: 'Email' 86 email_label: 'Email'
87 twoFactorAuthentication_label: 'Two factor authentication' 87 twoFactorAuthentication_label: 'Two factor authentication'
@@ -98,9 +98,9 @@ config:
98 faq: 98 faq:
99 title: 'FAQ' 99 title: 'FAQ'
100 tagging_rules_definition_title: 'What does « tagging rules » mean?' 100 tagging_rules_definition_title: 'What does « tagging rules » mean?'
101 tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.' 101 tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble of manually classifying your entries.'
102 how_to_use_them_title: 'How do I use them?' 102 how_to_use_them_title: 'How do I use them?'
103 how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' 103 how_to_use_them_description: 'Let us assume you want to tag new entries as « <i>short reading</i> » when the reading time is under 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them with a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 variables_available_title: 'Which variables and operators can I use to write rules?' 104 variables_available_title: 'Which variables and operators can I use to write rules?'
105 variables_available_description: 'The following variables and operators can be used to create tagging rules:' 105 variables_available_description: 'The following variables and operators can be used to create tagging rules:'
106 meaning: 'Meaning' 106 meaning: 'Meaning'
@@ -140,7 +140,7 @@ entry:
140 archived: 'Archived entries' 140 archived: 'Archived entries'
141 filtered: 'Filtered entries' 141 filtered: 'Filtered entries'
142 list: 142 list:
143 number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' 143 number_on_the_page: '{0} There are no entries.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'estimated reading time' 144 reading_time: 'estimated reading time'
145 reading_time_minutes: 'estimated reading time: %readingTime% min' 145 reading_time_minutes: 'estimated reading time: %readingTime% min'
146 reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min' 146 reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min'
@@ -223,14 +223,14 @@ about:
223 bug_reports: 'Bug reports' 223 bug_reports: 'Bug reports'
224 support: '<a href="https://support.wallabag.org">On our support website</a> or <a href="https://github.com/wallabag/wallabag/issues">on GitHub</a>' 224 support: '<a href="https://support.wallabag.org">On our support website</a> or <a href="https://github.com/wallabag/wallabag/issues">on GitHub</a>'
225 helping: 225 helping:
226 description: 'wallabag is free and opensource. You can help us:' 226 description: 'wallabag is free and open source. You can help us:'
227 by_contributing: 'by contributing to the project:' 227 by_contributing: 'by contributing to the project:'
228 by_contributing_2: 'an issue lists all our needs' 228 by_contributing_2: 'an issue lists all our needs'
229 by_paypal: 'via Paypal' 229 by_paypal: 'via Paypal'
230 contributors: 230 contributors:
231 description: 'Thank you to contributors on wallabag web application' 231 description: 'Thank you to contributors on wallabag web application'
232 third_party: 232 third_party:
233 description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' 233 description: 'Here is the list of third-party libraries used in wallabag (with their licenses):'
234 package: 'Package' 234 package: 'Package'
235 license: 'License' 235 license: 'License'
236 236
@@ -259,7 +259,7 @@ quickstart:
259 page_title: 'Quickstart' 259 page_title: 'Quickstart'
260 intro: 260 intro:
261 title: 'Welcome to wallabag!' 261 title: 'Welcome to wallabag!'
262 paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." 262 paragraph_1: "We'll accompany you on your visit to wallabag and show you some features that might interest you."
263 paragraph_2: 'Follow us!' 263 paragraph_2: 'Follow us!'
264 configure: 264 configure:
265 title: 'Configure the application' 265 title: 'Configure the application'
@@ -291,7 +291,7 @@ quickstart:
291 title: 'Full documentation' 291 title: 'Full documentation'
292 annotate: 'Annotate your article' 292 annotate: 'Annotate your article'
293 export: 'Convert your articles into ePUB or PDF' 293 export: 'Convert your articles into ePUB or PDF'
294 search_filters: 'See how you can look for an article by using search engine and filters' 294 search_filters: 'See how you can look for an article by using the search engine and filters'
295 fetching_errors: 'What can I do if an article encounters errors during fetching?' 295 fetching_errors: 'What can I do if an article encounters errors during fetching?'
296 all_docs: 'And so many other articles!' 296 all_docs: 'And so many other articles!'
297 support: 297 support:
@@ -304,11 +304,11 @@ quickstart:
304tag: 304tag:
305 page_title: 'Tags' 305 page_title: 'Tags'
306 list: 306 list:
307 number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' 307 number_on_the_page: '{0} There are no tags.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
308 308
309import: 309import:
310 page_title: 'Import' 310 page_title: 'Import'
311 page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' 311 page_description: 'Welcome to wallabag importer. Please select your previous service from which you want to migrate.'
312 action: 312 action:
313 import_contents: 'Import contents' 313 import_contents: 'Import contents'
314 form: 314 form:
@@ -318,7 +318,7 @@ import:
318 save_label: 'Upload file' 318 save_label: 'Upload file'
319 pocket: 319 pocket:
320 page_title: 'Import > Pocket' 320 page_title: 'Import > Pocket'
321 description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag." 321 description: "This importer will import all of your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag."
322 config_missing: 322 config_missing:
323 description: "Pocket import isn't configured." 323 description: "Pocket import isn't configured."
324 admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' 324 admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
index 9ce5b645..920fa933 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
@@ -32,7 +32,7 @@
32 32
33 <div class="card-content"> 33 <div class="card-content">
34 {% if not entry.previewPicture is null %} 34 {% if not entry.previewPicture is null %}
35 <i class="card-title grey-text text-darken-4 activator mdi-navigation-more-vert right"></i> 35 <i class="card-title grey-text text-darken-4 activator mdi-navigation-more-horiz right"></i>
36 {% endif %} 36 {% endif %}
37 37
38 <span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|striptags|slice(0, 42)|raw }}</a></span> 38 <span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|striptags|slice(0, 42)|raw }}</a></span>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
index 75170f91..25ad23dd 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
@@ -134,7 +134,7 @@
134 <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS"> 134 <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS">
135 <span class="icon-apple"></span> 135 <span class="icon-apple"></span>
136 </a> 136 </a>
137 <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/ru/firefox/addon/wallabag/" title="Firefox"> 137 <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/firefox/addon/wallabag/" title="Firefox">
138 <span class="icon-firefox"></span> 138 <span class="icon-firefox"></span>
139 </a> 139 </a>
140 <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome"> 140 <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome">
diff --git a/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig b/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
index c44fcfb7..3731f13b 100644
--- a/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
@@ -74,7 +74,7 @@
74 74
75 <table cellpadding="0" cellspacing="0" border="0" align="center" id="card"> 75 <table cellpadding="0" cellspacing="0" border="0" align="center" id="card">
76 <tr> 76 <tr>
77 <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ wallabag_url }}/themes/material/img/logo-other_themes.png" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td> 77 <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ asset('bundles/wallabagcore/themes/material/img/logo-other_themes.png') }}" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td>
78 <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc"> 78 <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc">
79 <h1>wallabag</h1> 79 <h1>wallabag</h1>
80 <h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5> 80 <h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5>