Compare commits

...

45 Commits
2.0.4 ... 2.0.5

Author SHA1 Message Date
81b53d9812 Release wallabag 2.0.5 2016-05-31 21:49:52 +02:00
1584067028 Merge pull request #2118 from wallabag/prepare-205
Prepare wallabag 2.0.5
2016-05-31 21:45:01 +02:00
17dfff6918 Prepare wallabag 2.0.5 2016-05-31 21:18:22 +02:00
f329e769fd Merge pull request #2122 from wallabag/fix-tags-deletion
Fix the deletion of Tags/Entries relation when delete an entry
2016-05-31 11:31:16 +02:00
3be047456d Change ManyToMany between entry & tag
Following https://gist.github.com/Ocramius/3121916

Be sure to remove the related entity when removing an entity.

Let say you have Entry -> EntryTag -> Tag.
If you remove the entry:

 - before that commit, the EntryTag will stay (at least using SQLite).
 - with that commit, the related entity is removed
2016-05-31 10:01:03 +02:00
39ba51ca1a Display a message when saving an entry failed
When saving an entry fail because of database error we previously just returned `false`.
Now we got an error in the log and the displayed notice to the user is updated too.
2016-05-30 14:32:43 +02:00
2c045a210a Move fixtures to the right place 2016-05-30 14:18:47 +02:00
f41c840b8c Fix the deletion of Tags/Entries relation when delete an entry
Fix #2121
2016-05-28 13:38:59 +02:00
839475776b Merge pull request #2052 from danbartram/feature-filter-unread
Add unread filter to entries pages
2016-05-27 09:57:51 +02:00
7b67f785ff Merge pull request #2112 from Poorchop/docs-proposal
Docs proposal
2016-05-26 20:50:11 +02:00
c15a150d2e Merge pull request #2111 from wallabag/translate-android-docu-pics-to-english
add screenshots of android docu in English
2016-05-24 13:41:56 +02:00
92491227c1 add screenshots of android docu in English 2016-05-23 21:16:53 +02:00
b5fa6607a9 Update installation instructions
-Fix grammar
-Add SELinux section
2016-05-23 13:22:12 -04:00
4127d7ad1b Update FAQ
-Fix grammar
-Add notes about MTA, firewall, and SELinux
2016-05-23 13:18:20 -04:00
2857aaa994 Merge pull request #2109 from Poorchop/grammar
Improve English translation
2016-05-23 07:50:47 +02:00
8fef96ee9f Improve English translation 2016-05-23 01:04:17 -04:00
9f95b14dec Merge pull request #2097 from bmillemathias/issue_2045
Fix image path in 2-factor authentification email
2016-05-19 09:19:01 +02:00
151f046f61 Merge pull request #2098 from wallabag/cs-2092
CS
2016-05-19 09:18:16 +02:00
6922168420 CS 2016-05-19 07:41:54 +02:00
e7658cb009 Merge pull request #2092 from Rurik19/issue2089
Starred and Archived clears if article is already exists
2016-05-19 07:39:30 +02:00
2dcb1dbf05 Forgot a double quote 2016-05-19 01:51:50 +02:00
871f667a55 Fix image path in 2-factor authentification email
Fix the broken url to image ressource hosted on wallabag.org
2016-05-18 21:18:41 +02:00
d30ec39008 Merge pull request #2093 from wallabag/replace-dots-material
Replace vertical dots in material theme with horizontal dots
2016-05-18 14:58:50 +02:00
8baf3d4bda Merge pull request #2094 from wallabag/update-contributing
Update CONTRIBUTING file
2016-05-18 14:58:45 +02:00
953305e904 Update CONTRIBUTING file
Fix #2059
2016-05-18 14:33:06 +02:00
9b40422594 Replace vertical dots in material theme with horizontal dots 2016-05-18 14:29:41 +02:00
bba271e619 Tests for issue #2089 2016-05-18 15:37:07 +05:00
614a0bfd86 PATCH also clears starred and archived signs 2016-05-18 15:28:49 +05:00
873e380658 Starred and Archived clears if article is already exists 2016-05-18 10:30:33 +05:00
cac3f603cf Merge pull request #2069 from merwan/patch-1
Do not specify language in Firefox addon link
2016-05-13 14:15:01 +02:00
5f2971e1d4 Do not specify language in Firefox addon link 2016-05-13 11:58:10 +02:00
f7e714bde7 Merge pull request #2068 from mariovor/documentation/datadb
Added information about permissions on data/
2016-05-13 09:16:35 +02:00
458854f1e4 Added information about permissions on data/ 2016-05-12 19:21:27 +02:00
e0f953a5a6 Added information about permissions on data/db 2016-05-12 19:10:23 +02:00
12f8631e8a Merge pull request #2054 from wallabag/jamiroconca-craueconfigbundle-update-1
Update CraueConfigBundle.it.yml
2016-05-11 09:15:24 +02:00
9b8d1d8bbf Update CraueConfigBundle.it.yml 2016-05-11 00:23:36 +02:00
30334567a3 Add unread filter test to EntryControllerTest
Add a new test to the EntryControllerTest collection which checks that
only entries which have not been archived (and are treated as "unread")
are retrieved.
2016-05-09 19:48:28 +01:00
e2f2f61001 Merge pull request #2049 from joshp23/patch-1
Update api.rst
2016-05-09 20:00:40 +02:00
4ca4d1b3b1 Update api.rst 2016-05-09 11:27:27 -04:00
733b2cf19b Add unread filter to entries pages
Add the ability to filter for unread pages in the filters menu.
2016-05-09 14:56:52 +01:00
acd3c26a74 Update api.rst
I just used google translate for this bit ... I really don't know any French ;)
2016-05-09 08:51:45 -04:00
b1fcd47a5c Merge pull request #2044 from joshp23/patch-1
Update api.rst
2016-05-09 04:39:59 +02:00
d948ee531e Update api.rst
Added my plugin, renamed the resource section for better english. Propose that the third party resource section have it's own page.
2016-05-08 18:04:14 -04:00
1875afaeff Merge pull request #2038 from foxmask/master
new details in the doc about the rights access again;)
2016-05-08 08:47:48 +02:00
ab46a256f4 new details in the doc about the rgihts access again;) 2016-05-07 22:55:19 +02:00
47 changed files with 6549 additions and 113 deletions

View File

@ -3,22 +3,11 @@
## You found a bug
Please [open a new issue](https://github.com/wallabag/wallabag/issues/new).
To fix the bug quickly, we need some infos:
* your wallabag version (in `app/config/config.yml`, see `wallabag_core.version`)
* your webserver installation :
* type of hosting (shared or dedicated)
* in case of a dedicated server, the server and OS used
* the php version used, eventually `phpinfo()`
* which storage system you choose at install (SQLite, MySQL/MariaDB or PostgreSQL)
* any particular details which could be related
To fix the bug quickly, we need some infos: please answer to the questions in the issue form.
If relevant :
* the link you want to save and which causes problem
* the file you want to import into wallabag, or just an extract
If you have the skills, look for errors into php, server and application (see `var/logs`) logs
If you have the skills, look for errors into php, server and application (see `var/logs`) logs.
Note : If you have large portions of text, use [Github's Gist service](https://gist.github.com/) or other pastebin-like.
## You want to fix a bug or to add a feature
Please fork wallabag and work with **the v2 branch** only. **Do not work on master branch**.
Please fork wallabag and work with **the master branch**.

View File

@ -53,7 +53,7 @@ before_install:
- if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
script:
- travis_wait composer install --no-interaction --no-progress --prefer-dist -o
- travis_wait composer update --no-interaction --no-progress
- ant prepare-$DB
- bin/phpunit -v
- if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;

View File

@ -2,6 +2,26 @@
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [2.0.5] - 2016-05-31
### Added
- [#2052](https://github.com/wallabag/wallabag/pull/2052) Add unread filter to entries pages (Dan Bartram)
### Changed
- [#2093](https://github.com/wallabag/wallabag/pull/2093) Replace vertical dots in material theme with horizontal dots (Nicolas Lœuillet)
- [#2054](https://github.com/wallabag/wallabag/pull/2054) Update italian translation (Daniele Conca)
- [#2068](https://github.com/wallabag/wallabag/pull/2068), [#2049](https://github.com/wallabag/wallabag/pull/2049) Update documentation (Josh Panter, Mario Vormstein)
### Fixed
- [#2122](https://github.com/wallabag/wallabag/pull/2122) Fix the deletion of Tags/Entries relation when delete an entry (Jeremy Benoist, Nicolas Lœuillet)
- [#2095](https://github.com/wallabag/wallabag/pull/2095) Fix form user display when 2FA is disabled (Nicolas Lœuillet)
- [#2092](https://github.com/wallabag/wallabag/pull/2092) API: Starred and archived clears if article is already exists (Rurik19)
- [#2097](https://github.com/wallabag/wallabag/issues/2097) Fix image path in 2-factor authentification email (Baptiste Mille-Mathias)
- [#2069](https://github.com/wallabag/wallabag/pull/2069) Do not specify language in Firefox addon link (Merouane Atig)
## [2.0.4] - 2016-05-07
### Added

View File

@ -16,7 +16,7 @@ Then you can install wallabag by executing the following commands:
```
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
git checkout 2.0.5
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod

View File

@ -1,5 +1,5 @@
download_pictures: Scarica le immagini sul tuo server
carrot: Abilita la condivisione su Carrot
carrot: Abilita la condivisione con Carrot
diaspora_url: Diaspora URL, se il servizio è abilitato
export_epub: Abilita esportazione ePub
export_mobi: Abilita esportazione .mobi
@ -9,15 +9,15 @@ export_json: Abilita esportazione JSON
export_txt: Abilita esportazione TXT
export_xml: Abilita esportazione XML
pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication)
shaarli_url: Shaarli URL, if the service is enabled
share_diaspora: Abilita la condivisione su Diaspora
shaarli_url: Shaarli URL, se il servizio è abilitato
share_diaspora: Abilita la condivisione con Diaspora
share_mail: Abilita la condivisione per email
share_shaarli: Abilita la condivisione su Shaarli
share_twitter: Abilita la condivisione su Twitter
share_shaarli: Abilita la condivisione con Shaarli
share_twitter: Abilita la condivisione con Twitter
show_printlink: Mostra un collegamento per stampare il contenuto
wallabag_support_url: URL di supporto per wallabag
wallabag_url: URL della *tua* installazione di wallabag
entry: "articolo"
entry: "contenuto"
export: "esporta"
import: "importa"
misc: "misc"
@ -25,5 +25,5 @@ modify_settings: "applica"
piwik_host: Host del tuo sito in Piwik
piwik_site_id: ID del tuo sito in Piwik
piwik_enabled: Abilita Piwik
demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
demo_mode_enabled: "Abilita modalità demo ? (usato solo per la demo pubblica di wallabag)"
demo_mode_username: "Utente Demo"

View File

@ -28,7 +28,7 @@ framework:
assets: ~
wallabag_core:
version: 2.0.4
version: 2.0.5
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
languages:
en: 'English'

6101
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -258,7 +258,7 @@ We won't write samples for each API method.
Have a look on the listing here: http://localhost:8000/api/doc to know each method.
Third resources
Third party resources
---------------
Some applications or libraries use our API. Here is a non-exhaustive list of them:
@ -266,3 +266,4 @@ Some applications or libraries use our API. Here is a non-exhaustive list of the
- `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ by Strubbl.
- `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ by Julian Oster.
- `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ by FoxMaSk, for his project `Trigger Happy <https://blog.trigger-happy.eu/>`_.
- `A plugin <https://github.com/joshp23/ttrss-to-wallabag-v2>`_ designed for `Tiny Tiny RSS <https://tt-rss.org/gitlab/fox/tt-rss/wikis/home>`_ that makes use of the wallabag v2 API. By Josh Panter.

View File

@ -13,61 +13,61 @@ Steps to configure your app
When you first start the app, you see the welcome screen, where you are adviced to configure the app for your wallabag instance at first.
.. image:: ../../img/user/android_welcome_screen.de.png
.. image:: ../../img/user/android_welcome_screen.en.png
:alt: Welcome screen
:align: center
Just confirm that message and you get redirected to the settings screen.
.. image:: ../../img/user/android_configuration_screen.de.png
.. image:: ../../img/user/android_configuration_screen.en.png
:alt: Settings screen
:align: center
Fill 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.
.. image:: ../../img/user/android_configuration_filled_in.de.png
.. image:: ../../img/user/android_configuration_filled_in.en.png
:alt: Filled in settings
:align: center
After you have filled in your data, push the button Connection test and wait for the test to finish.
.. image:: ../../img/user/android_configuration_connection_test.de.png
.. image:: ../../img/user/android_configuration_connection_test.en.png
:alt: Connection test with your wallabag data
:align: center
The connection test shall finish with success. If not, you need to fix this first until you proceed.
.. image:: ../../img/user/android_configuration_connection_test_success.de.png
.. image:: ../../img/user/android_configuration_connection_test_success.en.png
:alt: Connection test successful
:align: center
After 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.
.. image:: ../../img/user/android_configuration_get_feed_credentials.de.png
.. image:: ../../img/user/android_configuration_get_feed_credentials.en.png
:alt: Getting the feed credentials
:align: center
When 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.
.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.de.png
.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.en.png
:alt: Getting feed credentials successful
:align: center
Now 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.
.. image:: ../../img/user/android_configuration_scroll_bottom.de.png
.. image:: ../../img/user/android_configuration_scroll_bottom.en.png
:alt: Bottom of the settings screen
:align: center
After 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.
.. image:: ../../img/user/android_configuration_saved_feed_update.de.png
.. image:: ../../img/user/android_configuration_saved_feed_update.en.png
:alt: Settings saved the first time
:align: center
Finally after the syncronisation finished successfully, you are presented the list of unread articles.
.. image:: ../../img/user/android_unread_feed_synced.de.png
.. image:: ../../img/user/android_unread_feed_synced.en.png
:alt: Filled article list cause feeds successfully syncronized
:align: center

View File

@ -1,26 +1,39 @@
Frequently Asked Questions
==========================
During the installation, I've got this error ``Error Output: sh: 1: @post-cmd: not found``
------------------------------------------------------------------------------------------
During the installation, I got the error ``Error Output: sh: 1: @post-cmd: not found``
--------------------------------------------------------------------------------------
It seems you have a problem with your ``composer`` installation. Try to uninstall and reinstall it.
`Read the documentation about composer to know how to install it
<https://getcomposer.org/doc/00-intro.md>`__.
I can't valid the registration form
-----------------------------------
I can't validate the registration form
--------------------------------------
Make sure that all fields are well filled:
Ensure that all fields are properly filled:
* valid email address
* same passwords in two fields
I don't receive my activation email
-----------------------------------
I'm not receiving my activation email
-------------------------------------
Are you sure your email address was correct? Did you check your spams folder?
Are you sure your email address was correct? Did you check your spam folder?
If you still don't see the activation email, please ensure that you have
installed and properly configured a mail transfer agent. Be sure to include a
firewall rule for SMTP. E.g., if using firewalld:
::
firewall-cmd --permanent --add-service=smtp
firewall-cmd --reload
Lastly, if you have SELinux enabled, set the following rule:
``setsebool -P httpd_can_sendmail 1``
When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
----------------------------------------------------------------------------------------------------------------------------------

View File

@ -23,13 +23,13 @@ You'll need the following extensions for wallabag to work. Some of these may alr
- php-gettext
- php-tokenizer
wallabag uses PDO to connect to database, so you'll need one of:
wallabag uses PDO to connect to the database, so you'll need one of the following:
- pdo_mysql
- pdo_sqlite
- pdo_pgsql
and it's corresponding database server.
and its corresponding database server.
Installation
------------
@ -37,7 +37,7 @@ Installation
On a dedicated web server (recommended way)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wallabag 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.
wallabag 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.
Install Composer:
@ -47,13 +47,13 @@ Install Composer:
You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__:
To install wallabag itself, you must run these two commands:
To install wallabag itself, you must run the following commands:
::
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
git checkout 2.0.5
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
@ -67,17 +67,17 @@ And access wallabag at http://yourserverip:8000
.. tip::
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>`__.
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>`__.
On a shared hosting
~~~~~~~~~~~~~~~~~~~
We provide you a package with all dependancies inside.
We provide a package with all dependencies inside.
The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``.
We already created a user: login and password are ``wallabag``.
.. 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).
.. 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).
Execute this command to download and extract the latest package:
@ -85,7 +85,7 @@ Execute this command to download and extract the latest package:
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Now, read the following documentation to create your virtual host, then access to your wallabag.
Now, read the following documentation to create your virtual host, then access your wallabag.
If 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``.
Installation with Docker
@ -151,7 +151,7 @@ After reloading or restarting Apache, you should now be able to access wallabag
Configuration on Nginx
~~~~~~~~~~~~~~~~~~~~~~
Assuming you install wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag :
Assuming you installed wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag :
::
@ -252,3 +252,73 @@ This is due to the fact that we will need to grant the same rights access on the
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/var
It has to be the same for the following folders
* /var/www/wallabag/bin/
* /var/www/wallabag/app/config/
* /var/www/wallabag/vendor/
* /var/www/wallabag/data/
by entering
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/bin
chown -R www-data:www-data /var/www/wallabag/app/config
chown -R www-data:www-data /var/www/wallabag/vendor
chown -R www-data:www-data /var/www/wallabag/data/
otherwise, sooner or later you will see these error messages:
.. code-block:: bash
Unable to write to the "bin" directory.
file_put_contents(app/config/parameters.yml): failed to open stream: Permission denied
file_put_contents(/.../wallabag/vendor/autoload.php): failed to open stream: Permission denied
Additional rules for SELinux
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If 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:
``getenforce``
This will return ``Enforcing`` if SELinux is enabled. Creating a new context involves the following syntax:
``semanage fcontext -a -t <context type> <full path>``
For example:
``semanage fcontext -a -t httpd_sys_content_t "/var/www/wallabag(/.*)?"``
This will recursively apply the httpd_sys_content_t context to the wallabag directory and all underlying files and folders. The following rules are needed:
+-----------------------------------+----------------------------+
| Full path | Context |
+===================================+============================+
| /var/www/wallabag(/.*)? | ``httpd_sys_content_t`` |
+-----------------------------------+----------------------------+
| /var/www/wallabag/data(/.*)? | ``httpd_sys_rw_content_t`` |
+-----------------------------------+----------------------------+
| /var/www/wallabag/var/logs(/.*)? | ``httpd_log_t`` |
+-----------------------------------+----------------------------+
| /var/www/wallabag/var/cache(/.*)? | ``httpd_cache_t`` |
+-----------------------------------+----------------------------+
After creating these contexts, enter the following in order to apply your rules:
``restorecon -R -v /var/www/wallabag``
You can check contexts in a directory by typing ``ls -lZ`` and you can see all of your current rules with ``semanage fcontext -l -C``.
If you're installing the preconfigured latest-v2-package, then an additional rule is needed during the initial setup:
``semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wallabag/var"``
After you successfully access your wallabag and complete the initial setup, this context can be removed:
::
semanage fcontext -d -t httpd_sys_rw_content_t "/var/www/wallabag/var"
retorecon -R -v /var/www/wallabag/var

View File

@ -266,3 +266,4 @@ Certaines applications ou bibliothèques utilisent notre API. En voici une liste
- `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ par Strubbl.
- `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ par Julian Oster.
- `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ par FoxMaSk, pour son projet `Trigger Happy <https://blog.trigger-happy.eu/>`_.
- `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.

View File

@ -51,7 +51,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes :
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
git checkout 2.0.5
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
@ -249,3 +249,26 @@ Cela est dû au fait qu'il faut aussi octroyer les mêmes droits d'accès au dos
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/var
Il en est de même pour les dossiers suivants :
* /var/www/wallabag/bin/
* /var/www/wallabag/app/config/
* /var/www/wallabag/vendor/
en tapant
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/bin
chown -R www-data:www-data /var/www/wallabag/app/config
chown -R www-data:www-data /var/www/wallabag/vendor
sinon lors de la mise à jour vous finirez par rencontrer les erreurs suivantes :
.. code-block:: bash
Unable to write to the "bin" directory.
file_put_contents(app/config/parameters.yml): failed to open stream: Permission denied
file_put_contents(/.../wallabag/vendor/autoload.php): failed to open stream: Permission denied

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -110,8 +110,8 @@ class WallabagRestController extends FOSRestController
$url = $request->request->get('url');
$title = $request->request->get('title');
$isArchived = (int) $request->request->get('archive');
$isStarred = (int) $request->request->get('starred');
$isArchived = $request->request->get('archive');
$isStarred = $request->request->get('starred');
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($url, $this->getUser()->getId());
@ -172,8 +172,8 @@ class WallabagRestController extends FOSRestController
$this->validateUserAccess($entry->getUser()->getId());
$title = $request->request->get('title');
$isArchived = (int) $request->request->get('archive');
$isStarred = (int) $request->request->get('starred');
$isArchived = $request->request->get('archive');
$isStarred = $request->request->get('starred');
if (!is_null($title)) {
$entry->setTitle($title);

View File

@ -423,4 +423,91 @@ class WallabagRestControllerTest extends WallabagApiTestCase
$this->assertEquals($this->client->getContainer()->getParameter('wallabag_core.version'), $content);
}
public function testSaveIsArchivedAfterPost()
{
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(['user' => 1, 'isArchived' => true]);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
}
$this->client->request('POST', '/api/entries.json', [
'url' => $entry->getUrl(),
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals(true, $content['is_archived']);
}
public function testSaveIsStarredAfterPost()
{
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(['user' => 1, 'isStarred' => true]);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
}
$this->client->request('POST', '/api/entries.json', [
'url' => $entry->getUrl(),
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals(true, $content['is_starred']);
}
public function testSaveIsArchivedAfterPatch()
{
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(['user' => 1, 'isArchived' => true]);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
}
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
'title' => $entry->getTitle().'++',
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals(true, $content['is_archived']);
}
public function testSaveIsStarredAfterPatch()
{
$entry = $this->client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneBy(['user' => 1, 'isStarred' => true]);
if (!$entry) {
$this->markTestSkipped('No content found in db.');
}
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
'title' => $entry->getTitle().'++',
]);
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
$content = json_decode($this->client->getResponse()->getContent(), true);
$this->assertEquals(true, $content['is_starred']);
}
}

View File

@ -23,10 +23,16 @@ class EntryController extends Controller
{
try {
$entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl());
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
} catch (\Exception $e) {
$this->get('logger')->error('Error while saving an entry', [
'exception' => $e,
'entry' => $entry,
]);
return false;
}
@ -60,11 +66,12 @@ class EntryController extends Controller
return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
}
$this->updateEntry($entry);
$this->get('session')->getFlashBag()->add(
'notice',
'flashes.entry.notice.entry_saved'
);
$message = 'flashes.entry.notice.entry_saved';
if (false === $this->updateEntry($entry)) {
$message = 'flashes.entry.notice.entry_saved_failed';
}
$this->get('session')->getFlashBag()->add('notice', $message);
return $this->redirect($this->generateUrl('homepage'));
}

View File

@ -6,7 +6,6 @@ use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Wallabag\CoreBundle\Entity\Config;
use Wallabag\CoreBundle\Entity\TaggingRule;
class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
{
@ -16,12 +15,6 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface
public function load(ObjectManager $manager)
{
$adminConfig = new Config($this->getReference('admin-user'));
$taggingRule = new TaggingRule();
$taggingRule->setConfig($adminConfig);
$taggingRule->setRule('title matches "wallabag"');
$taggingRule->setTags(['wallabag']);
$manager->persist($taggingRule);
$adminConfig->setTheme('material');
$adminConfig->setItemsPerPage(30);

View File

@ -28,6 +28,14 @@ class LoadTaggingRuleData extends AbstractFixture implements OrderedFixtureInter
$manager->persist($tr2);
$tr3 = new TaggingRule();
$tr3->setRule('title matches "wallabag"');
$tr3->setTags(['wallabag']);
$tr3->setConfig($this->getReference('admin-config'));
$manager->persist($tr3);
$manager->flush();
}

View File

@ -177,8 +177,16 @@ class Entry
private $user;
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist", "remove"})
* @ORM\JoinTable
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist"})
* @ORM\JoinTable(
* name="entry_tag",
* joinColumns={
* @ORM\JoinColumn(name="entry_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
* }
* )
*
* @Groups({"entries_for_user", "export_all"})
*/
@ -526,13 +534,18 @@ class Entry
}
}
$this->tags[] = $tag;
$this->tags->add($tag);
$tag->addEntry($this);
}
public function removeTag(Tag $tag)
{
if (!$this->tags->contains($tag)) {
return;
}
$this->tags->removeElement($tag);
$tag->removeEntry($this);
}
/**

View File

@ -98,9 +98,30 @@ class Tag
return $this->slug;
}
/**
* @param Entry $entry
*/
public function addEntry(Entry $entry)
{
$this->entries[] = $entry;
if ($this->entries->contains($entry)) {
return;
}
$this->entries->add($entry);
$entry->addTag($this);
}
/**
* @param Entry $entry
*/
public function removeEntry(Entry $entry)
{
if (!$this->entries->contains($entry)) {
return;
}
$this->entries->removeElement($entry);
$entry->removeTag($this);
}
public function hasEntry($entry)

View File

@ -87,6 +87,18 @@ class EntryFilterType extends AbstractType
->add('isStarred', CheckboxFilterType::class, [
'label' => 'entry.filters.starred_label',
])
->add('isUnread', CheckboxFilterType::class, [
'label' => 'entry.filters.unread_label',
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
if (false === $values['value']) {
return;
}
$expression = $filterQuery->getExpr()->eq('e.isArchived', 'false');
return $filterQuery->createCondition($expression);
},
])
->add('previewPicture', CheckboxFilterType::class, [
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
if (false === $values['value']) {

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Status'
archived_label: 'Arkiveret'
starred_label: 'Favorit'
unread_label: 'Ulæst'
preview_picture_label: 'Har et vist billede'
preview_picture_help: 'Forhåndsvis billede'
language_label: 'Sprog'
@ -396,6 +397,7 @@ flashes:
notice:
# entry_already_saved: 'Entry already saved on %date%'
# entry_saved: 'Entry saved'
# entry_saved_failed: 'Failed to save entry'
# entry_updated: 'Entry updated'
# entry_reloaded: 'Entry reloaded'
# entry_reload_failed: 'Failed to reload entry'

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Status'
archived_label: 'Archiviert'
starred_label: 'Favorisiert'
unread_label: 'Ungelesene'
preview_picture_label: 'Vorschaubild vorhanden'
preview_picture_help: 'Vorschaubild'
language_label: 'Sprache'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Eintrag bereits am %date% gespeichert'
entry_saved: 'Eintag gespeichert'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'Eintrag aktualisiert'
entry_reloaded: 'Eintrag neugeladen'
entry_reload_failed: 'Neuladen des Eintrags fehlgeschlagen'

View File

@ -81,7 +81,7 @@ config:
archive: 'archived'
rss_limit: 'Number of items in the feed'
form_user:
two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion"
two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connection."
name_label: 'Name'
email_label: 'Email'
twoFactorAuthentication_label: 'Two factor authentication'
@ -98,9 +98,9 @@ config:
faq:
title: 'FAQ'
tagging_rules_definition_title: 'What does « tagging rules » mean?'
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.'
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.'
how_to_use_them_title: 'How do I use them?'
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> »'
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> »'
variables_available_title: 'Which variables and operators can I use to write rules?'
variables_available_description: 'The following variables and operators can be used to create tagging rules:'
meaning: 'Meaning'
@ -140,7 +140,7 @@ entry:
archived: 'Archived entries'
filtered: 'Filtered entries'
list:
number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
number_on_the_page: '{0} There are no entries.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
reading_time: 'estimated reading time'
reading_time_minutes: 'estimated reading time: %readingTime% min'
reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min'
@ -154,6 +154,7 @@ entry:
status_label: 'Status'
archived_label: 'Archived'
starred_label: 'Starred'
unread_label: 'Unread'
preview_picture_label: 'Has a preview picture'
preview_picture_help: 'Preview picture'
language_label: 'Language'
@ -222,14 +223,14 @@ about:
bug_reports: 'Bug reports'
support: '<a href="https://support.wallabag.org">On our support website</a> or <a href="https://github.com/wallabag/wallabag/issues">on GitHub</a>'
helping:
description: 'wallabag is free and opensource. You can help us:'
description: 'wallabag is free and open source. You can help us:'
by_contributing: 'by contributing to the project:'
by_contributing_2: 'an issue lists all our needs'
by_paypal: 'via Paypal'
contributors:
description: 'Thank you to contributors on wallabag web application'
third_party:
description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
description: 'Here is the list of third-party libraries used in wallabag (with their licenses):'
package: 'Package'
license: 'License'
@ -258,7 +259,7 @@ quickstart:
page_title: 'Quickstart'
intro:
title: 'Welcome to wallabag!'
paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
paragraph_1: "We'll accompany you on your visit to wallabag and show you some features that might interest you."
paragraph_2: 'Follow us!'
configure:
title: 'Configure the application'
@ -290,7 +291,7 @@ quickstart:
title: 'Full documentation'
annotate: 'Annotate your article'
export: 'Convert your articles into ePUB or PDF'
search_filters: 'See how you can look for an article by using search engine and filters'
search_filters: 'See how you can look for an article by using the search engine and filters'
fetching_errors: 'What can I do if an article encounters errors during fetching?'
all_docs: 'And so many other articles!'
support:
@ -303,11 +304,11 @@ quickstart:
tag:
page_title: 'Tags'
list:
number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
number_on_the_page: '{0} There are no tags.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
import:
page_title: 'Import'
page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.'
page_description: 'Welcome to wallabag importer. Please select your previous service from which you want to migrate.'
action:
import_contents: 'Import contents'
form:
@ -317,7 +318,7 @@ import:
save_label: 'Upload file'
pocket:
page_title: 'Import > Pocket'
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."
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."
config_missing:
description: "Pocket import isn't configured."
admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Entry already saved on %date%'
entry_saved: 'Entry saved'
entry_saved_failed: 'Failed to save entry'
entry_updated: 'Entry updated'
entry_reloaded: 'Entry reloaded'
entry_reload_failed: 'Failed to reload entry'

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Estatus'
archived_label: 'Archivado'
starred_label: 'Favorito'
unread_label: 'Sin leer'
preview_picture_label: 'Hay una foto'
preview_picture_help: 'Foto de preview'
language_label: 'Idioma'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Entrada ya guardada por %fecha%'
entry_saved: 'Entrada guardada'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'Entrada actualizada'
entry_reloaded: 'Entrada recargada'
entry_reload_failed: 'Entrada recargada reprobada'

View File

@ -96,8 +96,8 @@ config:
rule_label: 'قانون'
tags_label: 'برچسب‌ها'
faq:
title: 'پرسش‌های متداول'
tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟'
title: 'پرسش‌های متداول'
tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟'
# 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.'
# how_to_use_them_title: 'How do I use them?'
# 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> »'
@ -154,6 +154,7 @@ entry:
status_label: 'وضعیت'
archived_label: 'بایگانی‌شده'
starred_label: 'برگزیده'
unread_label: 'خوانده‌نشده'
preview_picture_label: 'دارای عکس پیش‌نمایش'
preview_picture_help: 'پیش‌نمایش عکس'
language_label: 'زبان'
@ -383,30 +384,31 @@ developer:
flashes:
config:
notice:
config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.'
password_updated: 'رمز به‌روز شد'
password_not_updated_demo: "در حالت نمایشی نمی‌توانید رمز کاربر را عوض کنید."
user_updated: 'اطلاعات به‌روز شد'
rss_updated: 'اطلاعات آر-اس-اس به‌روز شد'
tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد'
tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد'
user_added: 'کابر "%username%" افزوده شد'
rss_token_updated: 'کد آر-اس-اس به‌روز شد'
config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.'
password_updated: 'رمز به‌روز شد'
password_not_updated_demo: "در حالت نمایشی نمی‌توانید رمز کاربر را عوض کنید."
user_updated: 'اطلاعات به‌روز شد'
rss_updated: 'اطلاعات آر-اس-اس به‌روز شد'
tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد'
tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد'
user_added: 'کابر "%username%" افزوده شد'
rss_token_updated: 'کد آر-اس-اس به‌روز شد'
entry:
notice:
entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
entry_saved: 'مقاله ذخیره شد'
entry_updated: 'مقاله به‌روز شد'
entry_reloaded: 'مقاله به‌روز شد'
entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد'
entry_archived: 'مقاله بایگانی شد'
entry_unarchived: 'مقاله از بایگانی درآمد'
entry_starred: 'مقاله برگزیده شد'
entry_unstarred: 'مقاله نابرگزیده شد'
entry_deleted: 'مقاله پاک شد'
entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
entry_saved: 'مقاله ذخیره شد'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'مقاله به‌روز شد'
entry_reloaded: 'مقاله به‌روز شد'
entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد'
entry_archived: 'مقاله بایگانی شد'
entry_unarchived: 'مقاله از بایگانی درآمد'
entry_starred: 'مقاله برگزیده شد'
entry_unstarred: 'مقاله نابرگزیده شد'
entry_deleted: 'مقاله پاک شد'
tag:
notice:
tag_added: 'برچسب افزوده شد'
tag_added: 'برچسب افزوده شد'
import:
notice:
failed: 'درون‌ریزی شکست خورد. لطفاً دوباره تلاش کنید.'

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Status'
archived_label: 'Lus'
starred_label: 'Favoris'
unread_label: 'Non lus'
preview_picture_label: 'A une photo'
preview_picture_help: 'Photo'
language_label: 'Langue'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Article déjà sauvergardé le %date%'
entry_saved: 'Article enregistré'
entry_saved_failed: "L'enregistrement a échoué"
entry_updated: 'Article mis à jour'
entry_reloaded: 'Article rechargé'
entry_reload_failed: "Le rechargement de l'article a échoué"

View File

@ -396,6 +396,7 @@ flashes:
notice:
entry_already_saved: 'Contenuto già salvato in data %date%'
entry_saved: 'Contenuto salvato'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'Contenuto aggiornato'
entry_reloaded: 'Contenuto ricaricato'
entry_reload_failed: 'Errore nel ricaricamento del contenuto'

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Estatus'
archived_label: 'Legits'
starred_label: 'Favorits'
unread_label: 'Pas legits'
preview_picture_label: 'A una fotò'
preview_picture_help: 'Fotò'
language_label: 'Lenga'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Article ja salvargardat lo %date%'
entry_saved: 'Article enregistrat'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'Article mes a jorn'
entry_reloaded: 'Article recargat'
entry_reload_failed: "Fracàs de l'actualizacion de l'article"

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Status'
archived_label: 'Zarchiwizowane'
starred_label: 'Oznaczone gwiazdką'
unread_label: 'Nieprzeczytane'
preview_picture_label: 'Posiada podgląd obrazu'
preview_picture_help: 'Podgląd obrazu'
language_label: 'Język'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Wpis już został dodany %date%'
entry_saved: 'Wpis zapisany'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'Wpis zaktualizowany'
entry_reloaded: 'Wpis ponownie załadowany'
entry_reload_failed: 'Błąd ponownego załadowania'

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Status'
archived_label: 'Arhivat'
starred_label: 'Steluțe'
unread_label: 'Necitite'
preview_picture_label: 'Are o imagine de previzualizare'
preview_picture_help: 'Previzualizare imagine'
language_label: 'Limbă'
@ -396,6 +397,7 @@ flashes:
notice:
# entry_already_saved: 'Entry already saved on %date%'
# entry_saved: 'Entry saved'
# entry_saved_failed: 'Failed to save entry'
# entry_updated: 'Entry updated'
# entry_reloaded: 'Entry reloaded'
# entry_reload_failed: 'Failed to reload entry'

View File

@ -154,6 +154,7 @@ entry:
status_label: 'Durum'
archived_label: 'Arşiv'
starred_label: 'Favori'
unread_label: 'Okunmayan'
preview_picture_label: 'Resim önizlemesi varsa'
preview_picture_help: 'Resim önizlemesi'
language_label: 'Dil'
@ -396,6 +397,7 @@ flashes:
notice:
entry_already_saved: 'Entry already saved on %date%'
entry_saved: 'Makale kaydedildi'
# entry_saved_failed: 'Failed to save entry'
# entry_updated: 'Entry updated'
entry_reloaded: 'Makale içeriği yenilendi'
# entry_reload_failed: 'Failed to reload entry'

View File

@ -53,6 +53,11 @@
{{ form_label(form.isStarred) }}
</div>
<div class="input-field">
{{ form_widget(form.isUnread) }}
{{ form_label(form.isUnread) }}
</div>
<div class="input-field">
{{ form_widget(form.previewPicture) }}
{{ form_label(form.previewPicture) }}

View File

@ -32,7 +32,7 @@
<div class="card-content">
{% if not entry.previewPicture is null %}
<i class="card-title grey-text text-darken-4 activator mdi-navigation-more-vert right"></i>
<i class="card-title grey-text text-darken-4 activator mdi-navigation-more-horiz right"></i>
{% endif %}
<span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|striptags|slice(0, 42)|raw }}</a></span>
@ -126,6 +126,11 @@
{{ form_label(form.isStarred) }}
</div>
<div class="input-field col s6 with-checkbox">
{{ form_widget(form.isUnread) }}
{{ form_label(form.isUnread) }}
</div>
<div class="col s12">
<label>{{ 'entry.filters.preview_picture_help'|trans }}</label>
</div>

View File

@ -134,7 +134,7 @@
<a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS">
<span class="icon-apple"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/ru/firefox/addon/wallabag/" title="Firefox">
<a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/firefox/addon/wallabag/" title="Firefox">
<span class="icon-firefox"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome">

View File

@ -163,7 +163,7 @@ class EntryControllerTest extends WallabagCoreTestCase
/**
* This test will require an internet connection.
*/
public function testPostNewThatWillBeTaggued()
public function testPostNewThatWillBeTagged()
{
$this->logInAs('admin');
$client = $this->getClient();
@ -181,8 +181,7 @@ class EntryControllerTest extends WallabagCoreTestCase
$client->submit($form, $data);
$this->assertEquals(302, $client->getResponse()->getStatusCode());
$client->followRedirect();
$this->assertContains('/', $client->getResponse()->getTargetUrl());
$em = $client->getContainer()
->get('doctrine.orm.entity_manager');
@ -196,6 +195,35 @@ class EntryControllerTest extends WallabagCoreTestCase
$em->remove($entry);
$em->flush();
// and now re-submit it to test the cascade persistence for tags after entry removal
// related https://github.com/wallabag/wallabag/issues/2121
$crawler = $client->request('GET', '/new');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$form = $crawler->filter('form[name=entry]')->form();
$data = [
'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master',
];
$client->submit($form, $data);
$this->assertEquals(302, $client->getResponse()->getStatusCode());
$this->assertContains('/', $client->getResponse()->getTargetUrl());
$entry = $em
->getRepository('WallabagCoreBundle:Entry')
->findOneByUrl($url);
$tags = $entry->getTags();
$this->assertCount(1, $tags);
$this->assertEquals('wallabag', $tags[0]->getLabel());
$em->remove($entry);
$em->flush();
}
public function testArchive()
@ -471,6 +499,24 @@ class EntryControllerTest extends WallabagCoreTestCase
$this->assertCount(1, $crawler->filter('div[class=entry]'));
}
public function testFilterOnUnreadStatus()
{
$this->logInAs('admin');
$client = $this->getClient();
$crawler = $client->request('GET', '/all/list');
$form = $crawler->filter('button[id=submit-filter]')->form();
$data = [
'entry_filter[isUnread]' => true,
];
$crawler = $client->submit($form, $data);
$this->assertCount(4, $crawler->filter('div[class=entry]'));
}
public function testFilterOnCreationDate()
{
$this->logInAs('admin');

View File

@ -74,7 +74,7 @@
<table cellpadding="0" cellspacing="0" border="0" align="center" id="card">
<tr>
<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>
<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>
<td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc">
<h1>wallabag</h1>
<h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5>