diff options
148 files changed, 2681 insertions, 496 deletions
@@ -10,6 +10,9 @@ | |||
10 | /var/sessions/* | 10 | /var/sessions/* |
11 | !var/sessions/.gitkeep | 11 | !var/sessions/.gitkeep |
12 | !var/SymfonyRequirements.php | 12 | !var/SymfonyRequirements.php |
13 | /bin/* | ||
14 | !/bin/console | ||
15 | !/bin/symfony_requirements | ||
13 | 16 | ||
14 | # Parameters | 17 | # Parameters |
15 | /app/config/parameters.yml | 18 | /app/config/parameters.yml |
diff --git a/.travis.yml b/.travis.yml index d397c872..73f9491a 100644 --- a/.travis.yml +++ b/.travis.yml | |||
@@ -20,7 +20,8 @@ php: | |||
20 | - 5.5 | 20 | - 5.5 |
21 | - 5.6 | 21 | - 5.6 |
22 | - 7.0 | 22 | - 7.0 |
23 | - hhvm | 23 | - 7.1 |
24 | - nightly | ||
24 | 25 | ||
25 | env: | 26 | env: |
26 | - DB=mysql | 27 | - DB=mysql |
@@ -30,13 +31,30 @@ env: | |||
30 | matrix: | 31 | matrix: |
31 | fast_finish: true | 32 | fast_finish: true |
32 | include: | 33 | include: |
34 | # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency | ||
35 | - php: hhvm-3.12 | ||
36 | sudo: required | ||
37 | dist: trusty | ||
38 | group: edge | ||
39 | env: DB=mysql | ||
40 | addons: | ||
41 | apt: | ||
42 | packages: | ||
43 | - mysql-server-5.6 | ||
44 | - mysql-client-core-5.6 | ||
45 | - mysql-client-5.6 | ||
46 | services: | ||
47 | - mysql | ||
48 | - php: hhvm-3.12 | ||
49 | sudo: required | ||
50 | dist: trusty | ||
51 | group: edge | ||
52 | env: DB=sqlite | ||
33 | - php: 7.0 | 53 | - php: 7.0 |
34 | env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite | 54 | env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite |
35 | exclude: | ||
36 | - php: hhvm | ||
37 | env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency | ||
38 | allow_failures: | 55 | allow_failures: |
39 | - php: hhvm | 56 | - php: hhvm-3.12 |
57 | - php: nightly | ||
40 | 58 | ||
41 | # exclude v1 branches | 59 | # exclude v1 branches |
42 | branches: | 60 | branches: |
@@ -44,8 +62,10 @@ branches: | |||
44 | - legacy | 62 | - legacy |
45 | 63 | ||
46 | before_script: | 64 | before_script: |
47 | - if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; | 65 | - PHP=$TRAVIS_PHP_VERSION |
48 | - if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi; | 66 | - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; |
67 | # xdebug isn't enable for PHP 7.1 | ||
68 | - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi | ||
49 | - composer self-update --no-progress | 69 | - composer self-update --no-progress |
50 | - if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi; | 70 | - if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi; |
51 | 71 | ||
@@ -55,6 +75,6 @@ before_install: | |||
55 | script: | 75 | script: |
56 | - travis_wait composer install --no-interaction --no-progress --prefer-dist -o | 76 | - travis_wait composer install --no-interaction --no-progress --prefer-dist -o |
57 | - ant prepare-$DB | 77 | - ant prepare-$DB |
58 | - bin/phpunit -v | 78 | - phpunit -v |
59 | - if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi; | 79 | - if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi; |
60 | - if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi; | 80 | - if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi; |
diff --git a/.zappr.yaml b/.zappr.yaml new file mode 100644 index 00000000..f90cd809 --- /dev/null +++ b/.zappr.yaml | |||
@@ -0,0 +1,26 @@ | |||
1 | # see https://zappr.opensource.zalan.do/ | ||
2 | autobranch: false | ||
3 | commit: false | ||
4 | approvals: | ||
5 | minimum: 1 | ||
6 | ignore: pr_opener | ||
7 | pattern: "^(:\\+1:|ðŸ‘)$" | ||
8 | veto: | ||
9 | pattern: "^(:\\-1:|👎)$" | ||
10 | from: | ||
11 | orgs: | ||
12 | - wallabag | ||
13 | collaborators: true | ||
14 | specification: | ||
15 | title: | ||
16 | minimum-length: | ||
17 | enabled: true | ||
18 | length: 8 | ||
19 | body: | ||
20 | minimum-length: | ||
21 | enabled: true | ||
22 | length: 8 | ||
23 | contains-url: false | ||
24 | contains-issue-number: false | ||
25 | template: | ||
26 | differs-from-body: true | ||
diff --git a/CHANGELOG.md b/CHANGELOG.md index fcc9dfbb..a6f7e168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -2,6 +2,59 @@ | |||
2 | 2 | ||
3 | All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). | 3 | All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). |
4 | 4 | ||
5 | ## [2.0.7] - 2016-08-22 | ||
6 | |||
7 | ### Added | ||
8 | |||
9 | - [#2222](https://github.com/wallabag/wallabag/pull/2222) Added creation date and reading time on article view (Nicolas LÅ“uillet) | ||
10 | - [#2134](https://github.com/wallabag/wallabag/pull/2134) Run tests on an uptodate HHVM (Jeremy Benoist) | ||
11 | |||
12 | ### Changed | ||
13 | |||
14 | - [#2221](https://github.com/wallabag/wallabag/pull/2221) Replaced favorite word/icon with star one (Nicolas LÅ“uillet) | ||
15 | |||
16 | ### Fixed | ||
17 | |||
18 | - [#2224](https://github.com/wallabag/wallabag/pull/2224) Avoid breaking import when fetching fail (Jeremy Benoist) | ||
19 | - [#2216](https://github.com/wallabag/wallabag/pull/2216), [#2220](https://github.com/wallabag/wallabag/pull/2220) Enable CORS headers for OAUTH part (Rurik19) | ||
20 | - [#2095](https://github.com/wallabag/wallabag/pull/2095) Fix form user display when 2FA is disabled (Nicolas LÅ“uillet) | ||
21 | |||
22 | ## [2.0.6] - 2016-08-10 | ||
23 | |||
24 | ### Changed | ||
25 | |||
26 | - [#2199](https://github.com/wallabag/wallabag/pull/2199) Handling socials links into a config file (Simon Alberny) | ||
27 | - [#2172](https://github.com/wallabag/wallabag/pull/2172) Change the way to login user in tests (Jeremy Benoist) | ||
28 | - [#2155](https://github.com/wallabag/wallabag/pull/2155) Use friendsofphp instead of fabpot for PHP CS Fixer (Jeremy Benoist) | ||
29 | |||
30 | ### Fixed | ||
31 | |||
32 | - [#2200](https://github.com/wallabag/wallabag/pull/2200) Fixed typo in entry:notice:entry_saved (charno6) | ||
33 | - [#2185](https://github.com/wallabag/wallabag/pull/2185) Fix 3rd-Party Apps links (Chrome & Firefox) (Thomas Citharel) | ||
34 | - [#2165](https://github.com/wallabag/wallabag/pull/2165) Fix a few french translations typos (Thomas Citharel) | ||
35 | - [#2157](https://github.com/wallabag/wallabag/pull/2157) Handle only upper or only lower reading filter (Jeremy Benoist) | ||
36 | - [#2156](https://github.com/wallabag/wallabag/pull/2156) Try to find bad redirection after delete (Jeremy Benoist) | ||
37 | |||
38 | ## [2.0.5] - 2016-05-31 | ||
39 | |||
40 | ### Added | ||
41 | |||
42 | - [#2052](https://github.com/wallabag/wallabag/pull/2052) Add unread filter to entries pages (Dan Bartram) | ||
43 | |||
44 | ### Changed | ||
45 | |||
46 | - [#2093](https://github.com/wallabag/wallabag/pull/2093) Replace vertical dots in material theme with horizontal dots (Nicolas LÅ“uillet) | ||
47 | - [#2054](https://github.com/wallabag/wallabag/pull/2054) Update italian translation (Daniele Conca) | ||
48 | - [#2068](https://github.com/wallabag/wallabag/pull/2068), [#2049](https://github.com/wallabag/wallabag/pull/2049) Update documentation (Josh Panter, Mario Vormstein) | ||
49 | |||
50 | ### Fixed | ||
51 | |||
52 | - [#2122](https://github.com/wallabag/wallabag/pull/2122) Fix the deletion of Tags/Entries relation when delete an entry (Jeremy Benoist, Nicolas LÅ“uillet) | ||
53 | - [#2095](https://github.com/wallabag/wallabag/pull/2095) Fix form user display when 2FA is disabled (Nicolas LÅ“uillet) | ||
54 | - [#2092](https://github.com/wallabag/wallabag/pull/2092) API: Starred and archived clears if article is already exists (Rurik19) | ||
55 | - [#2097](https://github.com/wallabag/wallabag/issues/2097) Fix image path in 2-factor authentification email (Baptiste Mille-Mathias) | ||
56 | - [#2069](https://github.com/wallabag/wallabag/pull/2069) Do not specify language in Firefox addon link (Merouane Atig) | ||
57 | |||
5 | ## [2.0.4] - 2016-05-07 | 58 | ## [2.0.4] - 2016-05-07 |
6 | 59 | ||
7 | ### Added | 60 | ### Added |
@@ -1,5 +1,5 @@ | |||
1 | [![Build Status](https://api.travis-ci.org/wallabag/wallabag.svg?branch=master)](https://travis-ci.org/wallabag/wallabag) | 1 | [![Build Status](https://api.travis-ci.org/wallabag/wallabag.svg?branch=master)](https://travis-ci.org/wallabag/wallabag) |
2 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/wallabag/wallabag/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2) | 2 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/wallabag/wallabag/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=master) |
3 | [![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag) | 3 | [![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag) |
4 | 4 | ||
5 | # What is wallabag? | 5 | # What is wallabag? |
@@ -10,13 +10,13 @@ More informations on our website: [wallabag.org](https://wallabag.org) | |||
10 | 10 | ||
11 | # Install wallabag | 11 | # Install wallabag |
12 | 12 | ||
13 | If you don't have it yet, please [install composer](https://getcomposer.org/download/). | 13 | If you don't have it yet, please [install composer](https://getcomposer.org/download/) or be sure to use Composer 1.2 (`composer selfupdate` can help you about that). |
14 | Then you can install wallabag by executing the following commands: | 14 | Then you can install wallabag by executing the following commands: |
15 | 15 | ||
16 | ``` | 16 | ``` |
17 | git clone https://github.com/wallabag/wallabag.git | 17 | git clone https://github.com/wallabag/wallabag.git |
18 | cd wallabag | 18 | cd wallabag |
19 | git checkout 2.0.4 | 19 | git checkout 2.0.7 |
20 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist | 20 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist |
21 | php bin/console wallabag:install --env=prod | 21 | php bin/console wallabag:install --env=prod |
22 | php bin/console server:run --env=prod | 22 | php bin/console server:run --env=prod |
diff --git a/app/config/config.yml b/app/config/config.yml index 689cccec..49b325a2 100644 --- a/app/config/config.yml +++ b/app/config/config.yml | |||
@@ -5,30 +5,32 @@ imports: | |||
5 | 5 | ||
6 | framework: | 6 | framework: |
7 | #esi: ~ | 7 | #esi: ~ |
8 | translator: { fallback: "%locale%" } | 8 | translator: |
9 | secret: "%secret%" | 9 | enabled: true |
10 | fallback: "%locale%" | ||
11 | secret: "%secret%" | ||
10 | router: | 12 | router: |
11 | resource: "%kernel.root_dir%/config/routing.yml" | 13 | resource: "%kernel.root_dir%/config/routing.yml" |
12 | strict_requirements: ~ | 14 | strict_requirements: ~ |
13 | form: ~ | 15 | form: ~ |
14 | csrf_protection: ~ | 16 | csrf_protection: ~ |
15 | validation: { enable_annotations: true } | 17 | validation: |
18 | enable_annotations: true | ||
16 | templating: | 19 | templating: |
17 | engines: ['twig'] | 20 | engines: ['twig'] |
18 | #assets_version: SomeVersionScheme | 21 | default_locale: "%locale%" |
19 | default_locale: "%locale%" | 22 | trusted_hosts: ~ |
20 | trusted_hosts: ~ | ||
21 | trusted_proxies: ~ | 23 | trusted_proxies: ~ |
22 | session: | 24 | session: |
23 | # handler_id set to null will use default session handler from php.ini | 25 | # handler_id set to null will use default session handler from php.ini |
24 | handler_id: session.handler.native_file | 26 | handler_id: session.handler.native_file |
25 | save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" | 27 | save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" |
26 | fragments: ~ | 28 | fragments: ~ |
27 | http_method_override: true | 29 | http_method_override: true |
28 | assets: ~ | 30 | assets: ~ |
29 | 31 | ||
30 | wallabag_core: | 32 | wallabag_core: |
31 | version: 2.0.4 | 33 | version: 2.0.7 |
32 | paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb" | 34 | paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb" |
33 | languages: | 35 | languages: |
34 | en: 'English' | 36 | en: 'English' |
@@ -54,14 +56,14 @@ wallabag_import: | |||
54 | 56 | ||
55 | # Twig Configuration | 57 | # Twig Configuration |
56 | twig: | 58 | twig: |
57 | debug: "%kernel.debug%" | 59 | debug: "%kernel.debug%" |
58 | strict_variables: "%kernel.debug%" | 60 | strict_variables: "%kernel.debug%" |
59 | form_themes: | 61 | form_themes: |
60 | - "LexikFormFilterBundle:Form:form_div_layout.html.twig" | 62 | - "LexikFormFilterBundle:Form:form_div_layout.html.twig" |
61 | 63 | ||
62 | # Assetic Configuration | 64 | # Assetic Configuration |
63 | assetic: | 65 | assetic: |
64 | debug: "%kernel.debug%" | 66 | debug: "%kernel.debug%" |
65 | use_controller: false | 67 | use_controller: false |
66 | bundles: [ ] | 68 | bundles: [ ] |
67 | #java: /usr/bin/java | 69 | #java: /usr/bin/java |
@@ -75,14 +77,14 @@ assetic: | |||
75 | # Doctrine Configuration | 77 | # Doctrine Configuration |
76 | doctrine: | 78 | doctrine: |
77 | dbal: | 79 | dbal: |
78 | driver: "%database_driver%" | 80 | driver: "%database_driver%" |
79 | host: "%database_host%" | 81 | host: "%database_host%" |
80 | port: "%database_port%" | 82 | port: "%database_port%" |
81 | dbname: "%database_name%" | 83 | dbname: "%database_name%" |
82 | user: "%database_user%" | 84 | user: "%database_user%" |
83 | password: "%database_password%" | 85 | password: "%database_password%" |
84 | charset: UTF8 | 86 | charset: UTF8 |
85 | path: "%database_path%" | 87 | path: "%database_path%" |
86 | server_version: 5.6 | 88 | server_version: 5.6 |
87 | 89 | ||
88 | orm: | 90 | orm: |
@@ -108,10 +110,11 @@ doctrine_migrations: | |||
108 | # Swiftmailer Configuration | 110 | # Swiftmailer Configuration |
109 | swiftmailer: | 111 | swiftmailer: |
110 | transport: "%mailer_transport%" | 112 | transport: "%mailer_transport%" |
111 | host: "%mailer_host%" | 113 | host: "%mailer_host%" |
112 | username: "%mailer_user%" | 114 | username: "%mailer_user%" |
113 | password: "%mailer_password%" | 115 | password: "%mailer_password%" |
114 | spool: { type: memory } | 116 | spool: |
117 | type: memory | ||
115 | 118 | ||
116 | fos_rest: | 119 | fos_rest: |
117 | param_fetcher_listener: true | 120 | param_fetcher_listener: true |
@@ -150,6 +153,11 @@ nelmio_cors: | |||
150 | '^/api/': | 153 | '^/api/': |
151 | allow_origin: ['*'] | 154 | allow_origin: ['*'] |
152 | allow_headers: ['X-Custom-Auth'] | 155 | allow_headers: ['X-Custom-Auth'] |
156 | allow_methods: ['POST', 'PUT', 'PATCH','GET', 'DELETE'] | ||
157 | max_age: 3600 | ||
158 | '^/oauth/': | ||
159 | allow_origin: ['*'] | ||
160 | allow_headers: ['X-Custom-Auth'] | ||
153 | allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] | 161 | allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] |
154 | max_age: 3600 | 162 | max_age: 3600 |
155 | '^/': | 163 | '^/': |
@@ -169,17 +177,17 @@ liip_theme: | |||
169 | 177 | ||
170 | path_patterns: | 178 | path_patterns: |
171 | bundle_resource: | 179 | bundle_resource: |
172 | - %%bundle_path%%/Resources/views/themes/%%current_theme%%/%%template%% | 180 | - "%%bundle_path%%/Resources/views/themes/%%current_theme%%/%%template%%" |
173 | 181 | ||
174 | fos_user: | 182 | fos_user: |
175 | db_driver: orm | 183 | db_driver: orm |
176 | firewall_name: main | 184 | firewall_name: secured_area |
177 | user_class: Wallabag\UserBundle\Entity\User | 185 | user_class: Wallabag\UserBundle\Entity\User |
178 | registration: | 186 | registration: |
179 | confirmation: | 187 | confirmation: |
180 | enabled: %fosuser_confirmation% | 188 | enabled: "%fosuser_confirmation%" |
181 | from_email: | 189 | from_email: |
182 | address: %from_email% | 190 | address: "%from_email%" |
183 | sender_name: wallabag | 191 | sender_name: wallabag |
184 | fos_oauth_server: | 192 | fos_oauth_server: |
185 | db_driver: orm | 193 | db_driver: orm |
@@ -197,8 +205,8 @@ scheb_two_factor: | |||
197 | cookie_lifetime: 2592000 | 205 | cookie_lifetime: 2592000 |
198 | 206 | ||
199 | email: | 207 | email: |
200 | enabled: %twofactor_auth% | 208 | enabled: "%twofactor_auth%" |
201 | sender_email: %twofactor_sender% | 209 | sender_email: "%twofactor_sender%" |
202 | digits: 6 | 210 | digits: 6 |
203 | template: WallabagUserBundle:Authentication:form.html.twig | 211 | template: WallabagUserBundle:Authentication:form.html.twig |
204 | mailer: wallabag_user.auth_code_mailer | 212 | mailer: wallabag_user.auth_code_mailer |
diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml index 2813e369..0fa23dbf 100644 --- a/app/config/config_dev.yml +++ b/app/config/config_dev.yml | |||
@@ -5,7 +5,8 @@ framework: | |||
5 | router: | 5 | router: |
6 | resource: "%kernel.root_dir%/config/routing_dev.yml" | 6 | resource: "%kernel.root_dir%/config/routing_dev.yml" |
7 | strict_requirements: true | 7 | strict_requirements: true |
8 | profiler: { only_exceptions: false } | 8 | profiler: |
9 | only_exceptions: false | ||
9 | 10 | ||
10 | web_profiler: | 11 | web_profiler: |
11 | toolbar: true | 12 | toolbar: true |
@@ -14,19 +15,19 @@ web_profiler: | |||
14 | monolog: | 15 | monolog: |
15 | handlers: | 16 | handlers: |
16 | main: | 17 | main: |
17 | type: stream | 18 | type: stream |
18 | path: "%kernel.logs_dir%/%kernel.environment%.log" | 19 | path: "%kernel.logs_dir%/%kernel.environment%.log" |
19 | level: debug | 20 | level: debug |
20 | channels: [!event] | 21 | channels: ['!event'] |
21 | console: | 22 | console: |
22 | type: console | 23 | type: console |
23 | bubble: false | 24 | bubble: false |
24 | verbosity_levels: | 25 | verbosity_levels: |
25 | VERBOSITY_VERBOSE: INFO | 26 | VERBOSITY_VERBOSE: INFO |
26 | VERBOSITY_VERY_VERBOSE: DEBUG | 27 | VERBOSITY_VERY_VERBOSE: DEBUG |
27 | channels: [!event, !doctrine] | 28 | channels: ['!event', '!doctrine'] |
28 | console_very_verbose: | 29 | console_very_verbose: |
29 | type: console | 30 | type: console |
30 | bubble: false | 31 | bubble: false |
31 | verbosity_levels: | 32 | verbosity_levels: |
32 | VERBOSITY_VERBOSE: NOTICE | 33 | VERBOSITY_VERBOSE: NOTICE |
diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml index 342837a0..5a4dd69e 100644 --- a/app/config/config_prod.yml +++ b/app/config/config_prod.yml | |||
@@ -2,8 +2,8 @@ imports: | |||
2 | - { resource: config.yml } | 2 | - { resource: config.yml } |
3 | 3 | ||
4 | #framework: | 4 | #framework: |
5 | # validation: | 5 | # cache: |
6 | # cache: apc | 6 | # system: cache.adapter.apcu |
7 | 7 | ||
8 | #doctrine: | 8 | #doctrine: |
9 | # orm: | 9 | # orm: |
@@ -14,12 +14,12 @@ imports: | |||
14 | monolog: | 14 | monolog: |
15 | handlers: | 15 | handlers: |
16 | main: | 16 | main: |
17 | type: fingers_crossed | 17 | type: fingers_crossed |
18 | action_level: error | 18 | action_level: error |
19 | handler: nested | 19 | handler: nested |
20 | nested: | 20 | nested: |
21 | type: stream | 21 | type: stream |
22 | path: "%kernel.logs_dir%/%kernel.environment%.log" | 22 | path: "%kernel.logs_dir%/%kernel.environment%.log" |
23 | level: debug | 23 | level: debug |
24 | console: | 24 | console: |
25 | type: console | 25 | type: console |
diff --git a/app/config/routing.yml b/app/config/routing.yml index 6a6aa6ac..40cc7165 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml | |||
@@ -4,8 +4,8 @@ wallabag_annotation: | |||
4 | 4 | ||
5 | wallabag_import: | 5 | wallabag_import: |
6 | resource: "@WallabagImportBundle/Controller/" | 6 | resource: "@WallabagImportBundle/Controller/" |
7 | type: annotation | 7 | type: annotation |
8 | prefix: /import | 8 | prefix: /import |
9 | 9 | ||
10 | wallabag_api: | 10 | wallabag_api: |
11 | resource: "@WallabagApiBundle/Resources/config/routing.yml" | 11 | resource: "@WallabagApiBundle/Resources/config/routing.yml" |
diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml index 404f6a3b..95c1b026 100644 --- a/app/config/routing_dev.yml +++ b/app/config/routing_dev.yml | |||
@@ -1,14 +1,14 @@ | |||
1 | _wdt: | 1 | _wdt: |
2 | resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" | 2 | resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" |
3 | prefix: /_wdt | 3 | prefix: /_wdt |
4 | 4 | ||
5 | _profiler: | 5 | _profiler: |
6 | resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" | 6 | resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" |
7 | prefix: /_profiler | 7 | prefix: /_profiler |
8 | 8 | ||
9 | _errors: | 9 | _errors: |
10 | resource: "@TwigBundle/Resources/config/routing/errors.xml" | 10 | resource: "@TwigBundle/Resources/config/routing/errors.xml" |
11 | prefix: /_error | 11 | prefix: /_error |
12 | 12 | ||
13 | _main: | 13 | _main: |
14 | resource: routing.yml | 14 | resource: routing.yml |
diff --git a/app/config/security.yml b/app/config/security.yml index 0748c06c..e24e03df 100644 --- a/app/config/security.yml +++ b/app/config/security.yml | |||
@@ -3,12 +3,14 @@ security: | |||
3 | FOS\UserBundle\Model\UserInterface: sha512 | 3 | FOS\UserBundle\Model\UserInterface: sha512 |
4 | 4 | ||
5 | role_hierarchy: | 5 | role_hierarchy: |
6 | ROLE_ADMIN: ROLE_USER | 6 | ROLE_ADMIN: ROLE_USER |
7 | ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] | 7 | ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] |
8 | 8 | ||
9 | providers: | 9 | providers: |
10 | administrators: | 10 | administrators: |
11 | entity: { class: WallabagUserBundle:User, property: username } | 11 | entity: |
12 | class: WallabagUserBundle:User | ||
13 | property: username | ||
12 | fos_userbundle: | 14 | fos_userbundle: |
13 | id: fos_user.user_provider.username | 15 | id: fos_user.user_provider.username |
14 | 16 | ||
@@ -31,7 +33,7 @@ security: | |||
31 | anonymous: true | 33 | anonymous: true |
32 | 34 | ||
33 | login_firewall: | 35 | login_firewall: |
34 | pattern: ^/login$ | 36 | pattern: ^/login$ |
35 | anonymous: ~ | 37 | anonymous: ~ |
36 | 38 | ||
37 | secured_area: | 39 | secured_area: |
@@ -40,12 +42,12 @@ security: | |||
40 | provider: fos_userbundle | 42 | provider: fos_userbundle |
41 | csrf_token_generator: security.csrf.token_manager | 43 | csrf_token_generator: security.csrf.token_manager |
42 | 44 | ||
43 | anonymous: true | 45 | anonymous: true |
44 | remember_me: | 46 | remember_me: |
45 | secret: "%secret%" | 47 | secret: "%secret%" |
46 | lifetime: 31536000 | 48 | lifetime: 31536000 |
47 | path: / | 49 | path: / |
48 | domain: ~ | 50 | domain: ~ |
49 | 51 | ||
50 | logout: | 52 | logout: |
51 | path: /logout | 53 | path: /logout |
diff --git a/bin/doctrine b/bin/doctrine deleted file mode 120000 index 0f72e36f..00000000 --- a/bin/doctrine +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/doctrine/orm/bin/doctrine \ No newline at end of file | ||
diff --git a/bin/doctrine-dbal b/bin/doctrine-dbal deleted file mode 120000 index 110e93c5..00000000 --- a/bin/doctrine-dbal +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/doctrine/dbal/bin/doctrine-dbal \ No newline at end of file | ||
diff --git a/bin/doctrine-migrations b/bin/doctrine-migrations deleted file mode 120000 index 7184da71..00000000 --- a/bin/doctrine-migrations +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/doctrine/migrations/bin/doctrine-migrations \ No newline at end of file | ||
diff --git a/bin/doctrine.php b/bin/doctrine.php deleted file mode 120000 index b22b74da..00000000 --- a/bin/doctrine.php +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/doctrine/orm/bin/doctrine.php \ No newline at end of file | ||
diff --git a/bin/php-cs-fixer b/bin/php-cs-fixer deleted file mode 120000 index 902e8f5f..00000000 --- a/bin/php-cs-fixer +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/fabpot/php-cs-fixer/php-cs-fixer \ No newline at end of file | ||
diff --git a/bin/phpunit b/bin/phpunit deleted file mode 120000 index 4ba32564..00000000 --- a/bin/phpunit +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/phpunit/phpunit/phpunit \ No newline at end of file | ||
diff --git a/bin/security-checker b/bin/security-checker deleted file mode 120000 index 85f6e8ed..00000000 --- a/bin/security-checker +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | ../vendor/sensiolabs/security-checker/security-checker \ No newline at end of file | ||
diff --git a/bin/symfony_requirements b/bin/symfony_requirements index 7cd559a4..8825a964 100755 --- a/bin/symfony_requirements +++ b/bin/symfony_requirements | |||
@@ -13,7 +13,7 @@ echo '> PHP is using the following php.ini file:'.PHP_EOL; | |||
13 | if ($iniPath) { | 13 | if ($iniPath) { |
14 | echo_style('green', ' '.$iniPath); | 14 | echo_style('green', ' '.$iniPath); |
15 | } else { | 15 | } else { |
16 | echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); | 16 | echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!'); |
17 | } | 17 | } |
18 | 18 | ||
19 | echo PHP_EOL.PHP_EOL; | 19 | echo PHP_EOL.PHP_EOL; |
diff --git a/composer.json b/composer.json index a430c59e..c7830a14 100644 --- a/composer.json +++ b/composer.json | |||
@@ -43,7 +43,7 @@ | |||
43 | "ext-iconv": "*", | 43 | "ext-iconv": "*", |
44 | "ext-tokenizer": "*", | 44 | "ext-tokenizer": "*", |
45 | "ext-pdo": "*", | 45 | "ext-pdo": "*", |
46 | "symfony/symfony": "3.0.*", | 46 | "symfony/symfony": "3.1.*", |
47 | "doctrine/orm": "^2.5", | 47 | "doctrine/orm": "^2.5", |
48 | "doctrine/doctrine-bundle": "^1.6", | 48 | "doctrine/doctrine-bundle": "^1.6", |
49 | "doctrine/doctrine-cache-bundle": "^1.2", | 49 | "doctrine/doctrine-cache-bundle": "^1.2", |
@@ -74,7 +74,7 @@ | |||
74 | "grandt/phpepub": "~4.0", | 74 | "grandt/phpepub": "~4.0", |
75 | "wallabag/php-mobi": "~1.0.0", | 75 | "wallabag/php-mobi": "~1.0.0", |
76 | "kphoen/rulerz-bundle": "~0.10", | 76 | "kphoen/rulerz-bundle": "~0.10", |
77 | "guzzlehttp/guzzle": "^5.2.0", | 77 | "guzzlehttp/guzzle": "^5.3.1", |
78 | "doctrine/doctrine-migrations-bundle": "^1.0", | 78 | "doctrine/doctrine-migrations-bundle": "^1.0", |
79 | "paragonie/random_compat": "~1.0", | 79 | "paragonie/random_compat": "~1.0", |
80 | "craue/config-bundle": "~1.4", | 80 | "craue/config-bundle": "~1.4", |
@@ -85,10 +85,11 @@ | |||
85 | }, | 85 | }, |
86 | "require-dev": { | 86 | "require-dev": { |
87 | "doctrine/doctrine-fixtures-bundle": "~2.2", | 87 | "doctrine/doctrine-fixtures-bundle": "~2.2", |
88 | "doctrine/data-fixtures": "~1.1.1", | ||
88 | "sensio/generator-bundle": "^3.0", | 89 | "sensio/generator-bundle": "^3.0", |
89 | "phpunit/phpunit": "~4.4", | 90 | "phpunit/phpunit": "~4.4", |
90 | "symfony/phpunit-bridge": "^2.7", | 91 | "symfony/phpunit-bridge": "^3.0", |
91 | "fabpot/php-cs-fixer": "~1.9" | 92 | "friendsofphp/php-cs-fixer": "~1.9" |
92 | }, | 93 | }, |
93 | "scripts": { | 94 | "scripts": { |
94 | "post-cmd": [ | 95 | "post-cmd": [ |
@@ -121,6 +122,9 @@ | |||
121 | "psr-4": { "Wallabag\\": "src/Wallabag/" }, | 122 | "psr-4": { "Wallabag\\": "src/Wallabag/" }, |
122 | "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] | 123 | "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] |
123 | }, | 124 | }, |
125 | "autoload-dev": { | ||
126 | "psr-4": { "Tests\\": "tests/" } | ||
127 | }, | ||
124 | "config": { | 128 | "config": { |
125 | "bin-dir": "bin" | 129 | "bin-dir": "bin" |
126 | }, | 130 | }, |
diff --git a/docs/de/developer/api.rst b/docs/de/developer/api.rst new file mode 100644 index 00000000..f8911181 --- /dev/null +++ b/docs/de/developer/api.rst | |||
@@ -0,0 +1,270 @@ | |||
1 | API DoKumentation | ||
2 | ================= | ||
3 | |||
4 | Dank dieser Dokumentation werden wir sehen, wie wir mit der wallabag API interagieren. | ||
5 | |||
6 | Voraussetzungen | ||
7 | --------------- | ||
8 | |||
9 | * wallabag frisch (oder nicht) installiert auf http://localhost:8000 | ||
10 | * ``httpie`` installiert auf deinem Computer (`siehe Projektwebsite <https://github.com/jkbrzt/httpie>`__). Beachte, dass du die Kommandos auch mit curl oder wget nutzen kannst. | ||
11 | * alle API Methoden sind hier dokumentiert http://localhost:8000/api/doc | ||
12 | |||
13 | Einen neuen API Client erstellen | ||
14 | -------------------------------- | ||
15 | |||
16 | In deinem wallabag Account, kannst du einen neuen API Client unter dieser URL http://localhost:8000/developer/client/create erstellen. | ||
17 | |||
18 | Gib dazu nur die Umleitungs-URL deiner Appliaktion an und erstelle deinen Client. Wenn deine Applikation eine Desktopapplikation ist, trage die URL, die dir am besten passt, ein. | ||
19 | |||
20 | Du bekommst Informationen wie diese: | ||
21 | |||
22 | :: | ||
23 | |||
24 | Client ID: | ||
25 | |||
26 | 1_3o53gl30vhgk0c8ks4cocww08o84448osgo40wgw4gwkoo8skc | ||
27 | |||
28 | Client secret: | ||
29 | |||
30 | 636ocbqo978ckw0gsw4gcwwocg8044sco0w8w84cws48ggogs4 | ||
31 | |||
32 | |||
33 | Einen Aktualisierungstoken erhalten | ||
34 | ----------------------------------- | ||
35 | |||
36 | Für jeden API Aufruf brauchst du einen Token. Lass uns einen erstellen mit diesem Kommando (ersetze ``client_id``, ``client_secret``, ``username`` und ``password`` mit ihren Werten): | ||
37 | |||
38 | :: | ||
39 | |||
40 | http POST http://localhost:8000/oauth/v2/token \ | ||
41 | grant_type=password \ | ||
42 | client_id=1_3o53gl30vhgk0c8ks4cocww08o84448osgo40wgw4gwkoo8skc \ | ||
43 | client_secret=636ocbqo978ckw0gsw4gcwwocg8044sco0w8w84cws48ggogs4 \ | ||
44 | username=wallabag \ | ||
45 | password=wallabag | ||
46 | |||
47 | Du bekommst folgendes zurück: | ||
48 | |||
49 | :: | ||
50 | |||
51 | HTTP/1.1 200 OK | ||
52 | Cache-Control: no-store, private | ||
53 | Connection: close | ||
54 | Content-Type: application/json | ||
55 | Date: Tue, 05 Apr 2016 08:44:33 GMT | ||
56 | Host: localhost:8000 | ||
57 | Pragma: no-cache | ||
58 | X-Debug-Token: 19c8e0 | ||
59 | X-Debug-Token-Link: /_profiler/19c8e0 | ||
60 | X-Powered-By: PHP/7.0.4 | ||
61 | |||
62 | { | ||
63 | "access_token": "ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA", | ||
64 | "expires_in": 3600, | ||
65 | "refresh_token": "OTNlZGE5OTJjNWQwYzc2NDI5ZGE5MDg3ZTNjNmNkYTY0ZWZhZDVhNDBkZTc1ZTNiMmQ0MjQ0OThlNTFjNTQyMQ", | ||
66 | "scope": null, | ||
67 | "token_type": "bearer" | ||
68 | } | ||
69 | |||
70 | Wir werden mit dem ``access_token`` Wert in unseren nächsten Aufrufen arbeiten. | ||
71 | |||
72 | cURL Beispiel: | ||
73 | |||
74 | :: | ||
75 | |||
76 | curl -s "https://localhost:8000/oauth/v2/token?grant_type=password&client_id=1_3o53gl30vhgk0c8ks4cocww08o84448osgo40wgw4gwkoo8skc&client_secret=636ocbqo978ckw0gsw4gcwwocg8044sco0w8w84cws48ggogs4&username=wallabag&password=wallabag" | ||
77 | |||
78 | Existierende Einträge erhalten | ||
79 | ------------------------------ | ||
80 | |||
81 | Dokumentation für diese Methode: http://localhost:8000/api/doc#get--api-entries.{_format} | ||
82 | |||
83 | Da wir auf einer neuen wallabag Installation arbeiten, bekommen wir keine Ergebnisse mit diesem Kommando: | ||
84 | |||
85 | :: | ||
86 | |||
87 | http GET http://localhost:8000/api/entries.json \ | ||
88 | "Authorization:Bearer ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA" | ||
89 | |||
90 | gibt zurück: | ||
91 | |||
92 | :: | ||
93 | |||
94 | HTTP/1.1 200 OK | ||
95 | 0: application/json | ||
96 | Cache-Control: no-cache | ||
97 | Connection: close | ||
98 | Content-Type: application/json | ||
99 | Date: Tue, 05 Apr 2016 08:51:32 GMT | ||
100 | Host: localhost:8000 | ||
101 | Set-Cookie: PHPSESSID=nrogm748md610ovhu6j70c3q63; path=/; HttpOnly | ||
102 | X-Debug-Token: 4fbbc4 | ||
103 | X-Debug-Token-Link: /_profiler/4fbbc4 | ||
104 | X-Powered-By: PHP/7.0.4 | ||
105 | |||
106 | { | ||
107 | "_embedded": { | ||
108 | "items": [] | ||
109 | }, | ||
110 | "_links": { | ||
111 | "first": { | ||
112 | "href": "http://localhost:8000/api/entries?page=1&perPage=30" | ||
113 | }, | ||
114 | "last": { | ||
115 | "href": "http://localhost:8000/api/entries?page=1&perPage=30" | ||
116 | }, | ||
117 | "self": { | ||
118 | "href": "http://localhost:8000/api/entries?page=1&perPage=30" | ||
119 | } | ||
120 | }, | ||
121 | "limit": 30, | ||
122 | "page": 1, | ||
123 | "pages": 1, | ||
124 | "total": 0 | ||
125 | } | ||
126 | |||
127 | Das Array ``items`` ist leer. | ||
128 | |||
129 | cURL Beispiel: | ||
130 | |||
131 | :: | ||
132 | |||
133 | curl --get "https://localhost:8000/api/entries.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA" | ||
134 | |||
135 | Deinen ersten Eintrag hinzufügen | ||
136 | -------------------------------- | ||
137 | |||
138 | Dokumentation für diese Methode: http://localhost:8000/api/doc#post--api-entries.{_format} | ||
139 | |||
140 | :: | ||
141 | |||
142 | http POST http://localhost:8000/api/entries.json \ | ||
143 | "Authorization:Bearer ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA" \ | ||
144 | url="http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html" | ||
145 | |||
146 | gibt zurück: | ||
147 | |||
148 | :: | ||
149 | |||
150 | HTTP/1.1 200 OK | ||
151 | 0: application/json | ||
152 | Cache-Control: no-cache | ||
153 | Connection: close | ||
154 | Content-Type: application/json | ||
155 | Date: Tue, 05 Apr 2016 09:07:54 GMT | ||
156 | Host: localhost:8000 | ||
157 | Set-Cookie: PHPSESSID=bjie40ck72kp2pst3i71gf43a4; path=/; HttpOnly | ||
158 | X-Debug-Token: e01c51 | ||
159 | X-Debug-Token-Link: /_profiler/e01c51 | ||
160 | X-Powered-By: PHP/7.0.4 | ||
161 | |||
162 | { | ||
163 | "_links": { | ||
164 | "self": { | ||
165 | "href": "/api/entries/1" | ||
166 | } | ||
167 | }, | ||
168 | "content": "<p class=\"chapo\">Fonctionnant sur le même principe que Pocket, Instapaper ou Readability, le logiciel Wallabag permet de mémoriser des articles pour les lire plus tard. Sa nouvelle version apporte une multitude de nouvelles fonctionnalités.</p><p>Si vous utilisez Firefox comme navigateur web, vous avez peut-être constaté l’arrivée d’<a href=\"http://www.numerama.com/magazine/33292-update-firefox.html\">une fonctionnalité intitulée Pocket</a>. Disponible autrefois sous la forme d’un module complémentaire, et sous un autre nom (Read it Later), elle est depuis le mois de juin 2015 directement incluse au sein de Firefox.</p>\n<p>Concrètement, Pocket sert à garder en mémoire des contenus que vous croisez au fil de la navigation, comme des articles de presse ou des vidéos, afin de pouvoir les consulter plus tard. Pocket fonctionne un peu comme un système de favoris, mais en bien plus élaboré grâce à ses options supplémentaires.</p>\n<p>Mais <a href=\"https://en.wikipedia.org/wiki/Pocket_%28application%29#Firefox_integration\" target=\"_blank\">Pocket fait polémique</a>, car il s’agit d’un projet propriétaire qui est intégré dans un logiciel libre. C’est pour cette raison que des utilisateurs ont choisi de se tourner vers d’autres solutions, comme <strong>Wallabag</strong>, qui est l’équivalent libre de Pocket et d’autres systèmes du même genre, comme Instapaper et Readability.</p>\n<p>Et justement, Wallabag évolue. C’est ce dimanche que la <a href=\"https://www.wallabag.org/blog/2016/04/03/wallabag-v2\" target=\"_blank\">version 2.0.0 du logiciel</a> a été publiée par l’équipe en charge de son développement et celle-ci contient de nombreux changements par rapport aux moutures précédentes (la <a href=\"http://doc.wallabag.org/fr/v2/\" target=\"_blank\">documentation est traduite</a> en français), lui permettant d’apparaître comme une alternative à Pocket, Instapaper et Readability.</p>\n<p><img class=\"aligncenter size-medium wp-image-160439\" src=\"http://www.numerama.com/content/uploads/2016/04/homepage-680x347.png\" alt=\"homepage\" width=\"680\" height=\"347\" srcset=\"//www.numerama.com/content/uploads/2016/04/homepage-680x347.png 680w, //www.numerama.com/content/uploads/2016/04/homepage-1024x523.png 1024w, //www.numerama.com/content/uploads/2016/04/homepage-270x138.png 270w, //www.numerama.com/content/uploads/2016/04/homepage.png 1286w\" sizes=\"(max-width: 680px) 100vw, 680px\"/></p>\n<p>Parmi les principaux changements que l’on peut retenir avec cette nouvelle version, notons la possibilité d’écrire des annotations dans les articles mémorisés, de filtrer les contenus selon divers critères (temps de lecture, nom de domaine, date de création, statut…), d’assigner des mots-clés aux entrées, de modifier le titre des articles, le support des flux RSS ou encore le support de plusieurs langues dont le français.</p>\n<p>D’autres options sont également à signaler, comme l’aperçu d’un article mémorisé (si l’option est disponible), un guide de démarrage rapide pour les débutants, un outil d’export dans divers formats (PDF, JSON, EPUB, MOBI, XML, CSV et TXT) et, surtout, la possibilité de migrer vers Wallabag depuis Pocket, afin de convaincre les usagers de se lancer.</p>\n \n \n <footer class=\"clearfix\" readability=\"1\"><p class=\"source\">\n Crédit photo de la une : <a href=\"https://www.flickr.com/photos/bookgrl/2388310523/\">Laura Taylor</a>\n </p>\n \n <p><a href=\"http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html?&show_reader_reports\" target=\"_blank\" rel=\"nofollow\">Signaler une erreur dans le texte</a></p>\n \n</footer> <section class=\"related-article\"><header><h3>Articles liés</h3>\n </header><article class=\"post-grid format-article\"><a class=\"floatleft\" href=\"http://www.numerama.com/magazine/34444-firefox-prepare-l-enterrement-des-vieux-plugins.html\" title=\"Firefox prépare l'enterrement des vieux plugins\">\n <div class=\"cover-preview cover-tech\">\n <p>Lire</p>\n \n \n \n <img class=\"cover-preview_img\" src=\"http://c2.lestechnophiles.com/www.numerama.com/content/uploads/2015/10/cimetierecolleville.jpg?resize=200,135\" srcset=\" //c2.lestechnophiles.com/www.numerama.com/content/uploads/2015/10/cimetierecolleville.jpg?resize=200,135 200w, //c2.lestechnophiles.com/www.numerama.com/content/uploads/2015/10/cimetierecolleville.jpg?resize=100,67 100w, \" sizes=\"(min-width: 1001px) 200px, (max-width: 1000px) 100px\" alt=\"Firefox prépare l'enterrement des vieux plugins\"/></div>\n <h4> Firefox prépare l'enterrement des vieux plugins </h4>\n </a>\n <footer class=\"span12\">\n </footer></article><article class=\"post-grid format-article\"><a class=\"floatleft\" href=\"http://www.numerama.com/tech/131636-activer-navigation-privee-navigateur-web.html\" title=\"Comment activer la navigation privée sur son navigateur web\">\n <div class=\"cover-preview cover-tech\">\n <p>Lire</p>\n \n \n \n <img class=\"cover-preview_img\" src=\"http://c1.lestechnophiles.com/www.numerama.com/content/uploads/2015/11/Incognito.jpg?resize=200,135\" srcset=\" //c1.lestechnophiles.com/www.numerama.com/content/uploads/2015/11/Incognito.jpg?resize=200,135 200w, //c1.lestechnophiles.com/www.numerama.com/content/uploads/2015/11/Incognito.jpg?resize=100,67 100w, \" sizes=\"(min-width: 1001px) 200px, (max-width: 1000px) 100px\" alt=\"Comment activer la navigation privée sur son navigateur web\"/></div>\n <h4> Comment activer la navigation privée sur son navigateur web </h4>\n </a>\n <footer class=\"span12\">\n </footer></article><article class=\"post-grid format-article\"><a class=\"floatleft\" href=\"http://www.numerama.com/tech/144028-firefox-se-mettra-a-jour-regulierement.html\" title=\"Firefox se mettra à jour un peu moins régulièrement\">\n <div class=\"cover-preview cover-tech\">\n <p>Lire</p>\n \n \n \n <img class=\"cover-preview_img\" src=\"http://c0.lestechnophiles.com/www.numerama.com/content/uploads/2016/02/firefox-mobile.jpg?resize=200,135\" srcset=\" //c0.lestechnophiles.com/www.numerama.com/content/uploads/2016/02/firefox-mobile.jpg?resize=200,135 200w, //c0.lestechnophiles.com/www.numerama.com/content/uploads/2016/02/firefox-mobile.jpg?resize=100,67 100w, \" sizes=\"(min-width: 1001px) 200px, (max-width: 1000px) 100px\" alt=\"Firefox se mettra à jour un peu moins régulièrement\"/></div>\n <h4> Firefox se mettra à jour un peu moins régulièrement </h4>\n </a>\n <footer class=\"span12\">\n </footer></article>\n</section>\n", | ||
169 | "created_at": "2016-04-05T09:07:54+0000", | ||
170 | "domain_name": "www.numerama.com", | ||
171 | "id": 1, | ||
172 | "is_archived": 0, | ||
173 | "is_starred": 0, | ||
174 | "language": "fr-FR", | ||
175 | "mimetype": "text/html", | ||
176 | "preview_picture": "http://www.numerama.com/content/uploads/2016/04/post-it.jpg", | ||
177 | "reading_time": 2, | ||
178 | "tags": [], | ||
179 | "title": "Le Pocket libre Wallabag fait le plein de fonctionnalités - Tech - Numerama", | ||
180 | "updated_at": "2016-04-05T09:07:54+0000", | ||
181 | "url": "http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html", | ||
182 | "user_email": "", | ||
183 | "user_id": 1, | ||
184 | "user_name": "wallabag" | ||
185 | } | ||
186 | |||
187 | Wenn du jetzt das vorherige Kommando (siehe **Existierende Einträge erhalten**), wirst du Daten erhalten. | ||
188 | |||
189 | cURL Beispiel: | ||
190 | |||
191 | :: | ||
192 | |||
193 | curl "https://localhost:8000/api/entries.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA&url=http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html" | ||
194 | |||
195 | Eintrag löschen | ||
196 | ----------------- | ||
197 | |||
198 | Dokumentation für diese Methode: http://localhost:8000/api/doc#delete--api-entries-{entry}.{_format} | ||
199 | |||
200 | :: | ||
201 | |||
202 | http DELETE http://localhost:8000/api/entries/1.json \ | ||
203 | "Authorization:Bearer ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA" | ||
204 | |||
205 | gibt zurück: | ||
206 | |||
207 | :: | ||
208 | |||
209 | HTTP/1.1 200 OK | ||
210 | 0: application/json | ||
211 | Cache-Control: no-cache | ||
212 | Connection: close | ||
213 | Content-Type: application/json | ||
214 | Date: Tue, 05 Apr 2016 09:19:07 GMT | ||
215 | Host: localhost:8000 | ||
216 | Set-Cookie: PHPSESSID=jopgnfvmuc9a62b27sqm6iulr6; path=/; HttpOnly | ||
217 | X-Debug-Token: 887cef | ||
218 | X-Debug-Token-Link: /_profiler/887cef | ||
219 | X-Powered-By: PHP/7.0.4 | ||
220 | |||
221 | { | ||
222 | "_links": { | ||
223 | "self": { | ||
224 | "href": "/api/entries/" | ||
225 | } | ||
226 | }, | ||
227 | "annotations": [], | ||
228 | "content": "<p class=\"chapo\">Fonctionnant sur le même principe que Pocket, Instapaper ou Readability, le logiciel Wallabag permet de mémoriser des articles pour les lire plus tard. Sa nouvelle version apporte une multitude de nouvelles fonctionnalités.</p><p>Si vous utilisez Firefox comme navigateur web, vous avez peut-être constaté l’arrivée d’<a href=\"http://www.numerama.com/magazine/33292-update-firefox.html\">une fonctionnalité intitulée Pocket</a>. Disponible autrefois sous la forme d’un module complémentaire, et sous un autre nom (Read it Later), elle est depuis le mois de juin 2015 directement incluse au sein de Firefox.</p>\n<p>Concrètement, Pocket sert à garder en mémoire des contenus que vous croisez au fil de la navigation, comme des articles de presse ou des vidéos, afin de pouvoir les consulter plus tard. Pocket fonctionne un peu comme un système de favoris, mais en bien plus élaboré grâce à ses options supplémentaires.</p>\n<p>Mais <a href=\"https://en.wikipedia.org/wiki/Pocket_%28application%29#Firefox_integration\" target=\"_blank\">Pocket fait polémique</a>, car il s’agit d’un projet propriétaire qui est intégré dans un logiciel libre. C’est pour cette raison que des utilisateurs ont choisi de se tourner vers d’autres solutions, comme <strong>Wallabag</strong>, qui est l’équivalent libre de Pocket et d’autres systèmes du même genre, comme Instapaper et Readability.</p>\n<p>Et justement, Wallabag évolue. C’est ce dimanche que la <a href=\"https://www.wallabag.org/blog/2016/04/03/wallabag-v2\" target=\"_blank\">version 2.0.0 du logiciel</a> a été publiée par l’équipe en charge de son développement et celle-ci contient de nombreux changements par rapport aux moutures précédentes (la <a href=\"http://doc.wallabag.org/fr/v2/\" target=\"_blank\">documentation est traduite</a> en français), lui permettant d’apparaître comme une alternative à Pocket, Instapaper et Readability.</p>\n<p><img class=\"aligncenter size-medium wp-image-160439\" src=\"http://www.numerama.com/content/uploads/2016/04/homepage-680x347.png\" alt=\"homepage\" width=\"680\" height=\"347\" srcset=\"//www.numerama.com/content/uploads/2016/04/homepage-680x347.png 680w, //www.numerama.com/content/uploads/2016/04/homepage-1024x523.png 1024w, //www.numerama.com/content/uploads/2016/04/homepage-270x138.png 270w, //www.numerama.com/content/uploads/2016/04/homepage.png 1286w\" sizes=\"(max-width: 680px) 100vw, 680px\"/></p>\n<p>Parmi les principaux changements que l’on peut retenir avec cette nouvelle version, notons la possibilité d’écrire des annotations dans les articles mémorisés, de filtrer les contenus selon divers critères (temps de lecture, nom de domaine, date de création, statut…), d’assigner des mots-clés aux entrées, de modifier le titre des articles, le support des flux RSS ou encore le support de plusieurs langues dont le français.</p>\n<p>D’autres options sont également à signaler, comme l’aperçu d’un article mémorisé (si l’option est disponible), un guide de démarrage rapide pour les débutants, un outil d’export dans divers formats (PDF, JSON, EPUB, MOBI, XML, CSV et TXT) et, surtout, la possibilité de migrer vers Wallabag depuis Pocket, afin de convaincre les usagers de se lancer.</p>\n \n \n <footer class=\"clearfix\" readability=\"1\"><p class=\"source\">\n Crédit photo de la une : <a href=\"https://www.flickr.com/photos/bookgrl/2388310523/\">Laura Taylor</a>\n </p>\n \n <p><a href=\"http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html?&show_reader_reports\" target=\"_blank\" rel=\"nofollow\">Signaler une erreur dans le texte</a></p>\n \n</footer> <section class=\"related-article\"><header><h3>Articles liés</h3>\n </header><article class=\"post-grid format-article\"><a class=\"floatleft\" href=\"http://www.numerama.com/magazine/34444-firefox-prepare-l-enterrement-des-vieux-plugins.html\" title=\"Firefox prépare l'enterrement des vieux plugins\">\n <div class=\"cover-preview cover-tech\">\n <p>Lire</p>\n \n \n \n <img class=\"cover-preview_img\" src=\"http://c2.lestechnophiles.com/www.numerama.com/content/uploads/2015/10/cimetierecolleville.jpg?resize=200,135\" srcset=\" //c2.lestechnophiles.com/www.numerama.com/content/uploads/2015/10/cimetierecolleville.jpg?resize=200,135 200w, //c2.lestechnophiles.com/www.numerama.com/content/uploads/2015/10/cimetierecolleville.jpg?resize=100,67 100w, \" sizes=\"(min-width: 1001px) 200px, (max-width: 1000px) 100px\" alt=\"Firefox prépare l'enterrement des vieux plugins\"/></div>\n <h4> Firefox prépare l'enterrement des vieux plugins </h4>\n </a>\n <footer class=\"span12\">\n </footer></article><article class=\"post-grid format-article\"><a class=\"floatleft\" href=\"http://www.numerama.com/tech/131636-activer-navigation-privee-navigateur-web.html\" title=\"Comment activer la navigation privée sur son navigateur web\">\n <div class=\"cover-preview cover-tech\">\n <p>Lire</p>\n \n \n \n <img class=\"cover-preview_img\" src=\"http://c1.lestechnophiles.com/www.numerama.com/content/uploads/2015/11/Incognito.jpg?resize=200,135\" srcset=\" //c1.lestechnophiles.com/www.numerama.com/content/uploads/2015/11/Incognito.jpg?resize=200,135 200w, //c1.lestechnophiles.com/www.numerama.com/content/uploads/2015/11/Incognito.jpg?resize=100,67 100w, \" sizes=\"(min-width: 1001px) 200px, (max-width: 1000px) 100px\" alt=\"Comment activer la navigation privée sur son navigateur web\"/></div>\n <h4> Comment activer la navigation privée sur son navigateur web </h4>\n </a>\n <footer class=\"span12\">\n </footer></article><article class=\"post-grid format-article\"><a class=\"floatleft\" href=\"http://www.numerama.com/tech/144028-firefox-se-mettra-a-jour-regulierement.html\" title=\"Firefox se mettra à jour un peu moins régulièrement\">\n <div class=\"cover-preview cover-tech\">\n <p>Lire</p>\n \n \n \n <img class=\"cover-preview_img\" src=\"http://c0.lestechnophiles.com/www.numerama.com/content/uploads/2016/02/firefox-mobile.jpg?resize=200,135\" srcset=\" //c0.lestechnophiles.com/www.numerama.com/content/uploads/2016/02/firefox-mobile.jpg?resize=200,135 200w, //c0.lestechnophiles.com/www.numerama.com/content/uploads/2016/02/firefox-mobile.jpg?resize=100,67 100w, \" sizes=\"(min-width: 1001px) 200px, (max-width: 1000px) 100px\" alt=\"Firefox se mettra à jour un peu moins régulièrement\"/></div>\n <h4> Firefox se mettra à jour un peu moins régulièrement </h4>\n </a>\n <footer class=\"span12\">\n </footer></article>\n</section>\n", | ||
229 | "created_at": "2016-04-05T09:07:54+0000", | ||
230 | "domain_name": "www.numerama.com", | ||
231 | "is_archived": 0, | ||
232 | "is_starred": 0, | ||
233 | "language": "fr-FR", | ||
234 | "mimetype": "text/html", | ||
235 | "preview_picture": "http://www.numerama.com/content/uploads/2016/04/post-it.jpg", | ||
236 | "reading_time": 2, | ||
237 | "tags": [], | ||
238 | "title": "Le Pocket libre Wallabag fait le plein de fonctionnalités - Tech - Numerama", | ||
239 | "updated_at": "2016-04-05T09:07:54+0000", | ||
240 | "url": "http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html", | ||
241 | "user_email": "", | ||
242 | "user_id": 1, | ||
243 | "user_name": "wallabag" | ||
244 | } | ||
245 | |||
246 | Und wenn du die existierenden Einträge nun listen willst (siehe **Existierende Einträge erhalten**), ist das Array wieder leer. | ||
247 | |||
248 | cURL Beispiel: | ||
249 | |||
250 | :: | ||
251 | |||
252 | curl --request DELETE "https://localhost:8000/api/entries/1.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA" | ||
253 | |||
254 | Andere Methoden | ||
255 | --------------- | ||
256 | |||
257 | Wir werden nicht für jede API Methode Beispiele schreiben. | ||
258 | |||
259 | Wirf einen Blick in die Liste http://localhost:8000/api/doc, um alle Methode kennenzulernen. | ||
260 | |||
261 | |||
262 | Drittanbieter Ressourcen | ||
263 | ------------------------ | ||
264 | |||
265 | Einige Applikationen oder Bibliotheken nutzen unsere API. Hier ist eine nicht abschließende Aufzählung von ihnen: | ||
266 | |||
267 | - `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ von Strubbl. | ||
268 | - `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ von Julian Oster. | ||
269 | - `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ von FoxMaSk, für sein Projekt `Trigger Happy <https://blog.trigger-happy.eu/>`_. | ||
270 | - `A plugin <https://github.com/joshp23/ttrss-to-wallabag-v2>`_ entworfen für `Tiny Tiny RSS <https://tt-rss.org/gitlab/fox/tt-rss/wikis/home>`_, das die wallabag v2 API nutzt. Von Josh Panter. | ||
diff --git a/docs/de/developer/docker.rst b/docs/de/developer/docker.rst new file mode 100644 index 00000000..c63194aa --- /dev/null +++ b/docs/de/developer/docker.rst | |||
@@ -0,0 +1,57 @@ | |||
1 | Lasse wallabag in docker-compose laufen | ||
2 | ======================================= | ||
3 | |||
4 | Um deine eigene Entwicklungsinstanz von wallabag laufen zu lassen, | ||
5 | möchtest du vielleicht die vorkonfigurierten docker compose Dateien | ||
6 | nutzen. | ||
7 | |||
8 | Voraussetzungen | ||
9 | --------------- | ||
10 | |||
11 | Stelle sicher `Docker | ||
12 | <https://docs.docker.com/installation/ubuntulinux/>`__ und `Docker | ||
13 | Compose <https://docs.docker.com/compose/install/>`__ auf deinem | ||
14 | System verfügbar und aktuell zu haben. | ||
15 | |||
16 | Wechsel des DBMS | ||
17 | ---------------- | ||
18 | |||
19 | Standardmäßig startet wallabag mit einer SQLite Datenbank. | ||
20 | Da wallabag Unterstützung für Postgresql und MySQL bietet, gibt es | ||
21 | auch docker Container für diese. | ||
22 | |||
23 | In der ``docker-compose.yml`` kommentierst du für das gewählte DBMS | ||
24 | aus: | ||
25 | |||
26 | - die Container Definition (``postgres`` oder ``mariadb`` root | ||
27 | Level Block) | ||
28 | - den Container Link in dem ``php`` Container | ||
29 | - die Container Umgebungsdatei in dem ``php`` Container | ||
30 | |||
31 | Um mit Symfony Kommandos auf deinem Host auszuführen (wie z.B. | ||
32 | ``wallabag:install``), sollst du außerdem: | ||
33 | |||
34 | - die richtige Umgebungsdatei auf deiner Kommandozeile einlesen, | ||
35 | sodass Variablen wie ``SYMFONY__ENV__DATABASE_HOST`` existieren | ||
36 | - eine Zeile ``127.0.0.1 rdbms`` in deiner ``hosts`` Datei auf dem | ||
37 | System erstellen | ||
38 | |||
39 | wallabag laufen lassen | ||
40 | ---------------------- | ||
41 | |||
42 | #. Forke und klone das Projekt | ||
43 | #. Bearbeite ``app/config/parameters.yml`` um ``database_*`` | ||
44 | Eigenschaften mit den kommentierten zu ersetzen (mit Werten | ||
45 | mit ``env.`` Präfix) | ||
46 | #. ``composer install`` die Projektabhängigkeiten | ||
47 | #. ``php app/console wallabag:install``, um das Schema zu erstellen | ||
48 | #. ``docker-compose up`` um die Container laufen zu lassen | ||
49 | #. Schließlich öffne http://localhost:8080/, um dein frisch | ||
50 | installiertes wallabag zu finden. | ||
51 | |||
52 | In den verschiedenen Schritten wirst du vielleicht in verschiendene | ||
53 | Probleme laufen wie UNIX Berechtigungsprobleme, falschen Pfaden im | ||
54 | generierten Cache, etc.… | ||
55 | Operationen wie das Löschen der Cachedateien oder das Ändern der | ||
56 | Dateibesitzer können öfter gebraucht werden, darum habe keine Angst | ||
57 | sie anzupassen. | ||
diff --git a/docs/de/developer/documentation.rst b/docs/de/developer/documentation.rst new file mode 100644 index 00000000..41e19363 --- /dev/null +++ b/docs/de/developer/documentation.rst | |||
@@ -0,0 +1,10 @@ | |||
1 | Wirke an dieser Dokumentation mit | ||
2 | ================================= | ||
3 | |||
4 | Quellen der Dokumentation sind hier zu finden https://github.com/wallabag/wallabag/tree/master/docs | ||
5 | |||
6 | Wir nutzen `ReadTheDocs <https://readthedocs.org>`__, um sie zu generieren. | ||
7 | |||
8 | Seiten werden in `reStructuredText <https://de.wikipedia.org/wiki/ReStructuredText>`__ geschrieben. Du kannst Onlinetools wie http://rst.aaroniles.net/ oder http://rst.ninjs.org/ nutzen, um eine Vorschau deiner Artikel zu betrachten. | ||
9 | |||
10 | Wenn du eine neue Seite erstellst, vergiss nicht die `index.rst <https://raw.githubusercontent.com/wallabag/wallabag/master/docs/en/index.rst>`__ zu bearbeiten, um dort einen Link für die Seitenleiste hinzuzufügen. | ||
diff --git a/docs/de/developer/maintenance.rst b/docs/de/developer/maintenance.rst new file mode 100644 index 00000000..2a9070e1 --- /dev/null +++ b/docs/de/developer/maintenance.rst | |||
@@ -0,0 +1,32 @@ | |||
1 | Wartungsmodus | ||
2 | ============= | ||
3 | |||
4 | Wenn du längere Aufgaben auf deiner wallabag Instanz ausführen willst, kannst du den Wartungsmodus aktivieren. | ||
5 | Keiner wird dann Zugang zu deiner Instanz haben. | ||
6 | |||
7 | Aktivieren des Wartungsmodus | ||
8 | ---------------------------- | ||
9 | |||
10 | Um den Wartungsmodus zu aktivieren, führe folgendes Kommando aus: | ||
11 | |||
12 | :: | ||
13 | |||
14 | bin/console lexik:maintenance:lock --no-interaction | ||
15 | |||
16 | Du kannst deine IP Adresse in ``app/config/config.yml`` setzen, wenn du Zugriff zu wallabag haben willst, auch wenn der Wartungsmodus aktiv ist. Zum Beispiel: | ||
17 | |||
18 | :: | ||
19 | |||
20 | lexik_maintenance: | ||
21 | authorized: | ||
22 | ips: ['127.0.0.1'] | ||
23 | |||
24 | |||
25 | Deaktivieren des Wartungsmodus | ||
26 | ------------------------ | ||
27 | |||
28 | Um den Wartungsmodus zu deaktivieren, führe dieses Kommando aus: | ||
29 | |||
30 | :: | ||
31 | |||
32 | bin/console lexik:maintenance:unlock | ||
diff --git a/docs/de/developer/translate.rst b/docs/de/developer/translate.rst new file mode 100644 index 00000000..50e136ea --- /dev/null +++ b/docs/de/developer/translate.rst | |||
@@ -0,0 +1,57 @@ | |||
1 | Ãœbersetze wallabag | ||
2 | ================== | ||
3 | |||
4 | wallabag Webapplikation | ||
5 | ----------------------- | ||
6 | |||
7 | Ãœbersetzungsdateien | ||
8 | ~~~~~~~~~~~~~~~~~~~ | ||
9 | |||
10 | .. note:: | ||
11 | |||
12 | Da wallabag hauptsächlich von einem französischem Team entwickelt wird, betrachte | ||
13 | die französische Übersetzung als die aktuellste und kopiere sie, um deine eigene Übersetzung zu starten. | ||
14 | |||
15 | Du kannst die Ãœbersetzungsdateien hier finden: https://github.com/wallabag/wallabag/tree/master/src/Wallabag/CoreBundle/Resources/translations. | ||
16 | |||
17 | Du musst die ``messages.CODE.yml`` und ``validators.CODE.yml`` erstellen, wobei CODE | ||
18 | der ISO 639-1 Code deiner Sprache ist (`siehe Wikipedia <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`__). | ||
19 | |||
20 | Andere Dateien zum Ãœbersetzen: | ||
21 | |||
22 | - https://github.com/wallabag/wallabag/tree/master/app/Resources/CraueConfigBundle/translations. | ||
23 | - https://github.com/wallabag/wallabag/tree/master/app/Resources/FOSUserBundle/translations. | ||
24 | |||
25 | Du musst die ``THE_TRANSLATION_FILE.CODE.yml`` Dateien erstellen. | ||
26 | |||
27 | Konfigurationsdatei | ||
28 | ~~~~~~~~~~~~~~~~~~~ | ||
29 | |||
30 | Du musst die `app/config/config.yml <https://github.com/wallabag/wallabag/blob/master/app/config/config.yml>`__ bearbeiten, | ||
31 | um deine Sprache auf der Konfigurationsseite in wallabag anzuzeigen (um Nutzern zu erlauben zu dieser neuen Ãœbersetzung zu wechseln). | ||
32 | |||
33 | Unter dem Abschnitt ``wallabag_core.languages`` musst du eine neue Zeile mit deiner Übersetzung hinzufügen. Zum Beispiel: | ||
34 | |||
35 | :: | ||
36 | |||
37 | wallabag_core: | ||
38 | ... | ||
39 | languages: | ||
40 | en: 'English' | ||
41 | fr: 'Français' | ||
42 | |||
43 | |||
44 | Für die erste Spalte (``en``, ``fr``, etc.) musst du den ISO 639-1 Code deiner Sprache hinzufügen (siehe oben). | ||
45 | |||
46 | Für die zweite Spalte trägst du den Namen deiner Sprache ein. Nur den. | ||
47 | |||
48 | wallabag Dokumentation | ||
49 | ---------------------- | ||
50 | |||
51 | .. note:: | ||
52 | |||
53 | Im Gegensatz zur Webapplikation ist die Hauptsprache für die Dokumentation Englisch. | ||
54 | |||
55 | Documentationsdateien sind hier gespeichert: https://github.com/wallabag/wallabag/tree/master/docs | ||
56 | |||
57 | Du musst die Ordnerstruktur des Ordners ``en`` beachten, wenn du deine eigene Ãœbersetzung startest. | ||
diff --git a/docs/de/index.rst b/docs/de/index.rst new file mode 100644 index 00000000..5311150f --- /dev/null +++ b/docs/de/index.rst | |||
@@ -0,0 +1,52 @@ | |||
1 | wallabag Dokumentation | ||
2 | ====================== | ||
3 | |||
4 | .. image:: ../img/wallabag.png | ||
5 | :alt: wallabag Logo | ||
6 | :align: center | ||
7 | |||
8 | **wallabag** ist eine Read-it-later Applikation: es speichert Websites, | ||
9 | indem es nur den Inhalt behält. Elemente wie Navigation oder Werbung werden gelöscht. | ||
10 | |||
11 | .. tip:: | ||
12 | |||
13 | Diese Dokumentation ist über wallabag v2. Wenn du die Dokumentation für wallabag v1 lesen willst, `siehe dir bitte das hier an <https://github.com/wallabag/documentation>`__. | ||
14 | |||
15 | Die Hauptdokumentation für diese Applikation ist in einigen Abschnitten organisiert: | ||
16 | |||
17 | * :ref:`user-docs` | ||
18 | * :ref:`dev-docs` | ||
19 | |||
20 | .. _user-docs: | ||
21 | |||
22 | .. toctree:: | ||
23 | :maxdepth: 2 | ||
24 | :caption: Nutzerdokumentation | ||
25 | |||
26 | user/faq | ||
27 | user/installation | ||
28 | user/upgrade | ||
29 | user/migration | ||
30 | user/import | ||
31 | user/create_account | ||
32 | user/login | ||
33 | user/configuration | ||
34 | user/first_article | ||
35 | user/errors_during_fetching | ||
36 | user/annotations | ||
37 | user/download_articles | ||
38 | user/filters | ||
39 | user/tags | ||
40 | user/android | ||
41 | |||
42 | .. _dev-docs: | ||
43 | |||
44 | .. toctree:: | ||
45 | :maxdepth: 2 | ||
46 | :caption: Entwicklerdokumentation | ||
47 | |||
48 | developer/api | ||
49 | developer/docker | ||
50 | developer/documentation | ||
51 | developer/translate | ||
52 | developer/maintenance | ||
diff --git a/docs/de/user/android.rst b/docs/de/user/android.rst new file mode 100644 index 00000000..8573bcb8 --- /dev/null +++ b/docs/de/user/android.rst | |||
@@ -0,0 +1,107 @@ | |||
1 | Android App | ||
2 | =========== | ||
3 | |||
4 | |||
5 | Zweck dieses Dokuments | ||
6 | ---------------------- | ||
7 | |||
8 | Dieses Dokument beschreibt wie du deine Android App einrichtest, damit sie mit deiner Wallabaginstanz zusammenarbeitet. Es gibt hierbei keinen Unterschied im Vorgang - egal ob du Wallabag v1 oder v2 einsetzt. | ||
9 | |||
10 | |||
11 | Schritte, um dein App zu einzurichten | ||
12 | ------------------------------------- | ||
13 | |||
14 | Wenn du das erste Mal die App startest, siehst du den Willkommensbildschirm, wo du angewiesen wirst zunächst deine App mit deiner Wallabaginstanz einzurichten. | ||
15 | |||
16 | .. image:: ../../img/user/android_welcome_screen.de.png | ||
17 | :alt: Willkommensbildschirm | ||
18 | :align: center | ||
19 | |||
20 | Bestätige nur diese Nachricht und du wirst zum Einstellungsbildschirm weitergeleitet. | ||
21 | |||
22 | .. image:: ../../img/user/android_configuration_screen.de.png | ||
23 | :alt: Einstellungsbildschirm | ||
24 | :align: center | ||
25 | |||
26 | Trage deine Wallabagdaten ein. Du musst deine Wallabagadresse eintragen. Es ist wichtig, dass die URL nicht mit einem Schrägstrich endet. Füge auch deine Wallabagzugangsdaten in das Nutzer- und Passwortfeld ein. | ||
27 | |||
28 | .. image:: ../../img/user/android_configuration_filled_in.de.png | ||
29 | :alt: Eingetragene Einstellungen | ||
30 | :align: center | ||
31 | |||
32 | Nachdem du deine Daten eingetragen hast, drücke den Button Verbindung testen und warte auf das Fertigstellen des Tests. | ||
33 | |||
34 | .. image:: ../../img/user/android_configuration_connection_test.de.png | ||
35 | :alt: Verbindungstest mit deinen Wallabagdaten | ||
36 | :align: center | ||
37 | |||
38 | Der Verbindungstest sollte mit Erfolg ausgehen. Falls nicht, musst du zunächst deine Daten korrigieren bevor du zum nächsten Schritt gehst. | ||
39 | |||
40 | .. image:: ../../img/user/android_configuration_connection_test_success.de.png | ||
41 | :alt: Verbindungstest war erfolgreich | ||
42 | :align: center | ||
43 | |||
44 | Nach dem Verbindungstest erfolgreich war, kannst du den Button zum Feedzugangsdaten abholen drücken. Die App versucht nun sich bei deiner Wallabaginstanz einzuloggen und die Nutzer ID und den dazugehörigen Token für die Feeds zu laden. | ||
45 | |||
46 | .. image:: ../../img/user/android_configuration_get_feed_credentials.de.png | ||
47 | :alt: Feedzugangsdaten abholen | ||
48 | :align: center | ||
49 | |||
50 | Wenn der Prozess des Abholens deiner Feedzugangsdaten erfolgreich beendet wurde, siehst du eine Toastnachricht, dass die User ID und der Token automatisch in das Formular eingetragen wurden. | ||
51 | |||
52 | .. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.de.png | ||
53 | :alt: Feedzugangsdaten erfolgreich abgeholt | ||
54 | :align: center | ||
55 | |||
56 | Jetzt scrollst du bis zum unteren Rand des Einstellungsbildschirms. Natürlich kannst du die Einstellungen dort deinen Wünschen anpassen. Schließe die Einrichtung mit dem Drücken des Speicherbuttons ab. | ||
57 | |||
58 | .. image:: ../../img/user/android_configuration_scroll_bottom.de.png | ||
59 | :alt: unterer Rand des Einstellungsbildschirms | ||
60 | :align: center | ||
61 | |||
62 | Nachdem du den Speicherbutton gedrückt hast, kommst du in den folgenden Bildschirm. Die App schlägt vor, eine initiale Synchronisation der Artikelfeeds durchzuführen. Hier ist es empfohlen, dies zu bestätigen und Ja zu drücken. | ||
63 | |||
64 | .. image:: ../../img/user/android_configuration_saved_feed_update.de.png | ||
65 | :alt: Einstellung erstmals gespeichert | ||
66 | :align: center | ||
67 | |||
68 | Schließlich nach der ersten erfolgreichen Synchronisation, wird dir die Liste der ungelesenen Artikel präsentiert. | ||
69 | |||
70 | .. image:: ../../img/user/android_unread_feed_synced.de.png | ||
71 | :alt: Gefüllte Artikellist da Feeds erfolgreich synchronisiert sind | ||
72 | :align: center | ||
73 | |||
74 | |||
75 | |||
76 | Bekannte Limitierungen | ||
77 | --------------------- | ||
78 | |||
79 | 2FA | ||
80 | ~~~ | ||
81 | |||
82 | Zur Zeit unterstützt die App keine Zwei-Faktor Authentifizierung. Du solltest sie deaktivieren damit die App funktioniert. | ||
83 | |||
84 | |||
85 | Begrenzte Anzahl Artikel mit Wallabag v2 | ||
86 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
87 | |||
88 | In deiner Wallabaginstanz kannst du einstellen, wie viele Artikel Teil deiner RSS Feeds sind. Diese Option existierte in Wallabag v1 nicht, wo immer alle Artikel Teil des Feeds waren. Also wenn du die Anzahl der Artikel, die in der App angezeigt werden sollen, größer einstellst als die Anzahl Artikel in deinem Feed, wirst du nur die Anzahl an Artikel deines Feeds sehen. | ||
89 | |||
90 | |||
91 | SSL/TLS Verschlüsselung | ||
92 | ~~~~~~~~~~~~~~~~~~~~~~~ | ||
93 | |||
94 | Wenn du deine Wallabaginstanz per HTTPS erreichen kannst, solltest du das so konfigurieren. Besonders dann, wenn deine HTTP URL nach HTTPS umleitet. Im Moment kann die App mit dieser Weiterleitung nicht korrekt umgehen. | ||
95 | |||
96 | |||
97 | Referenzen | ||
98 | ---------- | ||
99 | |||
100 | `Quellcode der Android Applikation <https://github.com/wallabag/android-app>`_ | ||
101 | |||
102 | `Android Applikation auf F-Droid <https://f-droid.org/repository/browse/?fdfilter=wallabag&fdid=fr.gaulupeau.apps.InThePoche>`_ | ||
103 | |||
104 | `Android Applikation auf Google Play <https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche>`_ | ||
105 | |||
106 | `Support Chat auf English <https://gitter.im/wallabag/wallabag>`_ | ||
107 | |||
diff --git a/docs/de/user/annotations.rst b/docs/de/user/annotations.rst new file mode 100644 index 00000000..4b4d58b0 --- /dev/null +++ b/docs/de/user/annotations.rst | |||
@@ -0,0 +1,24 @@ | |||
1 | Anmerkungen | ||
2 | =========== | ||
3 | |||
4 | In jedem Artikel, den du liest, kannst du Anmerkungen hinzufügen. Es ist einfacher mit ein paar Bilder erklärt. | ||
5 | |||
6 | Wähle den Teil des Artikels aus, den du kommentieren willst und klicke auf den Bleistift: | ||
7 | |||
8 | .. image:: ../../img/user/annotations_1.png | ||
9 | :alt: Wähle den Text | ||
10 | :align: center | ||
11 | |||
12 | Schreibe deinen Kommentar: | ||
13 | |||
14 | .. image:: ../../img/user/annotations_2.png | ||
15 | :alt: Schreibe deinen Kommentar | ||
16 | :align: center | ||
17 | |||
18 | Der Text ist nun hervorgehoben und du kannst deine Anmerkung lesen, wenn du den Mauspfeil darüber fährst. | ||
19 | |||
20 | .. image:: ../../img/user/annotations_3.png | ||
21 | :alt: lese deine Anmerkung | ||
22 | :align: center | ||
23 | |||
24 | Du kannst so viele Anmerkungen erstellen wie du möchtest. | ||
diff --git a/docs/de/user/configuration.rst b/docs/de/user/configuration.rst new file mode 100644 index 00000000..67695ff1 --- /dev/null +++ b/docs/de/user/configuration.rst | |||
@@ -0,0 +1,119 @@ | |||
1 | Konfiguration | ||
2 | ============= | ||
3 | |||
4 | Nun, da du eingeloggt bist, ist es Zeit, deinen Account so zu konfigurieren, | ||
5 | wie du möchtest. | ||
6 | |||
7 | Klicke auf ``Konfiguration`` im Menü. Du hast fünf Karteireiter: ``Einstellungen``, | ||
8 | ``RSS``, ``Benutzer-Informationen``, ``Kennwort`` und ``Tagging-Regeln``. | ||
9 | |||
10 | Einstellungen | ||
11 | ------------- | ||
12 | |||
13 | Theme | ||
14 | ~~~~~ | ||
15 | |||
16 | wallabag ist anpassbar. Du kannst dein bevorzugtes Theme hier auswählen. Du kannst | ||
17 | auch ein neues erstellen, ein extra Kapitel wird dem gewidmet sein. Das Standardtheme | ||
18 | ist ``Material``, es ist das Theme, dass in den Dokumentationsbildschirmfotos genutzt wird. | ||
19 | |||
20 | Artikel pro Seite | ||
21 | ~~~~~~~~~~~~~~~~~ | ||
22 | |||
23 | Du kannst die Anzahl der dargestellten Artikel pro Seite ändern. | ||
24 | |||
25 | Lesegeschwindigkeit | ||
26 | ~~~~~~~~~~~~~~~~~~~ | ||
27 | |||
28 | wallabag berechnet die Lesezeit für jeden Artikel. Du kannst hier definieren, dank dieser Liste, ob du | ||
29 | ein schneller oder langsamer Leser bist. wallabag wird die Lesezeit für jeden Artikel neu berechnen. | ||
30 | |||
31 | Sprache | ||
32 | ~~~~~~~ | ||
33 | |||
34 | Du kannst die Sprache von der wallabag Benutzeroberfläche ändern. Du musst die ausloggen, damit diese | ||
35 | Änderung Wirkung zeigt. | ||
36 | |||
37 | RSS | ||
38 | --- | ||
39 | |||
40 | wallabag stellt RSS Feeds für jeden Artikelstatus bereit: ungelesen, Favoriten und Archiv. | ||
41 | |||
42 | Als erstes musst du einen persönlciehn Token erstellen: Klicke auf ``Token generieren``. | ||
43 | Es ist möglich deinen Token zu ändern, indem du auf ``Token zurücksetzen`` klickst. | ||
44 | |||
45 | Jetzt hast du drei Links, einen für jeden Status: Füge sie in deinem liebsten Feedreader hinzu. | ||
46 | |||
47 | Du kannst auch definieren wie viele Artikel du in deinem RSS Feed (Standardwert: 50) haben willst. | ||
48 | |||
49 | Benutzer-Informationen | ||
50 | ---------------------- | ||
51 | |||
52 | Du kannst deinen Namen ändern, deine E-Mail-Adresse und die Zwei-Faktor-Authentifizierung aktivieren. | ||
53 | |||
54 | Zwei-Faktor-Authentifizierung | ||
55 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
56 | |||
57 | Die Zwei-Faktor-Authentifizierung (2FA) dient dem Identitätsnachweis eines Nutzers mittels der | ||
58 | Kombination zweier verschiedener und insbesondere unabhängiger Komponenten (Faktoren). | ||
59 | |||
60 | https://de.wikipedia.org/wiki/Zwei-Faktor-Authentifizierung | ||
61 | |||
62 | Wenn du 2FA aktivierst, erhälst du jedes Mal, wenn du dich bei wallabag einloggen willst, einen Code per | ||
63 | Mail. Du musst den Code in das folgende Formular eingeben. | ||
64 | |||
65 | .. image:: ../../img/user/2FA_form.png | ||
66 | :alt: Zwei-Faktor-Authentifizierung | ||
67 | :align: center | ||
68 | |||
69 | Wenn du nicht jedes Mal, wenn du dich einloggen willst, einen Code zugesendet bekommen möchtest, kannst du | ||
70 | die Checkbox ``Ich bin an einem persönlichen Computer`` anhaken: wallabag wird sich an dich für 15 Tage | ||
71 | erinnern. | ||
72 | |||
73 | Passwort | ||
74 | -------- | ||
75 | |||
76 | Du kannst dein Passwort hier ändern (8 Zeichen Minimum). | ||
77 | |||
78 | Tagging-Regeln | ||
79 | -------------- | ||
80 | |||
81 | Wenn du automatisch einen Tag zu einem neuen Artikel zuweisen lassen möchtest, ist dieser Teil der | ||
82 | Konfiguration, was du suchst. | ||
83 | |||
84 | Was ist mit Tagging-Regeln gemeint? | ||
85 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
86 | |||
87 | Dies sind Regeln, die von wallabag genutzt werden, um neue Artikel automatisch zu taggen | ||
88 | Jedes Mal, wenn ein neuer Artikel hinzugefügt wird, werden alle Tagging-Regeln genutzt, um deine | ||
89 | konfigurierten Tags hinzuzufügen, folglich um dir den Aufwand zu sparen, die Artikel manuell einzuteilen. | ||
90 | |||
91 | Wie benutze ich sie? | ||
92 | ~~~~~~~~~~~~~~~~~~~~ | ||
93 | |||
94 | Nehmen wir an, du möchtest neuen Artikeln einen Tag *schnell gelesen*, wenn du die Lesezeit kleiner als | ||
95 | 3 Minuten ist. | ||
96 | In diesem Fall solltest du in das Regelfeld "readingTime <= 3" eintragen und *schnell gelesen* in das Tags-Feld. | ||
97 | Mehrere Tags können gleichzeitig hinzugefügt werden, wenn man sie mit einem Komma trennt: | ||
98 | *schnell gelesen, Pflichtlektüre*. | ||
99 | Komplexe Regeln können mit vordefinierten Operatoren geschrieben werden: | ||
100 | Wenn *readingTime >= 5 AND domainName = "github.com"*, dann tagge als *lange zu lesen, github*. | ||
101 | |||
102 | Welche Variablen und Operatoren kann ich zum Regeln schreiben nutzen? | ||
103 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
104 | |||
105 | Die folgenden Variabel und Operatoren können genutzt werden, um Tagging-Regeln zu erstellen: | ||
106 | |||
107 | =========== ============================================== ======== ========== | ||
108 | Variable Bedeutung Operator Bedeutung | ||
109 | ----------- ---------------------------------------------- -------- ---------- | ||
110 | title Titel des Artikels <= Kleiner gleich als… | ||
111 | url URL des Artikels < Kleiner als… | ||
112 | isArchived Ob der Artikel archiviert ist oder nicht => Größer gleich als… | ||
113 | isStarred Ob der Artikel favorisiert ist oder nicht > Größer als… | ||
114 | content Inhalt des Eintrags = Gleich zu… | ||
115 | language Sprache des Eintrags != Nicht gleich zu… | ||
116 | mimetype MIME-Typ des Eintrags OR Eine Regel oder die andere | ||
117 | readingTime Die geschätzte Lesezeit in Minuten AND Eine Regel und die andere | ||
118 | domainName Der Domain-Name des Eintrags matches Testet, dass ein Feld einer Suche (unabhängig von Groß- und Kleinschreibung) übereinstimmt. Z.B.: title matches "Fußball" | ||
119 | =========== ============================================== ======== ========== | ||
diff --git a/docs/de/user/create_account.rst b/docs/de/user/create_account.rst new file mode 100644 index 00000000..ce1b02a4 --- /dev/null +++ b/docs/de/user/create_account.rst | |||
@@ -0,0 +1,25 @@ | |||
1 | Account erstellen | ||
2 | ================= | ||
3 | |||
4 | Klicke auf der Loginseite auf den ``Registrieren`` Button- | ||
5 | |||
6 | .. image:: ../../img/user/registration_form.png | ||
7 | :alt: Registrierungsformular | ||
8 | :align: center | ||
9 | |||
10 | Du musst das Formular ausfüllen. Bitte stelle sicher, dass du eine gültige | ||
11 | E-Mail-Adresse eingibst, wir werden dir eine Aktivierungsmail schicken. | ||
12 | |||
13 | .. image:: ../../img/user/sent_email.png | ||
14 | :alt: E-Mail wurde gesendet, um Account zu aktivieren | ||
15 | :align: center | ||
16 | |||
17 | Überprüfge deinen Posteingang, du hast jetzt eine neue Mail mit einem Link wie diesen | ||
18 | ``http://wallabag/register/confirm/Ba19wokGovN-DdBQNfg4YgRkUQWRP4-k2g0Bk-hBTX4``. | ||
19 | Klicke auf den Link, um deinen Account zu aktivieren. | ||
20 | |||
21 | Dein Account ist nun aktiviert. | ||
22 | |||
23 | .. image:: ../../img/user/activated_account.png | ||
24 | :alt: Willkommen! | ||
25 | :align: center | ||
diff --git a/docs/de/user/download_articles.rst b/docs/de/user/download_articles.rst new file mode 100644 index 00000000..6f5384b2 --- /dev/null +++ b/docs/de/user/download_articles.rst | |||
@@ -0,0 +1,17 @@ | |||
1 | Artikel herunterladen | ||
2 | ===================== | ||
3 | |||
4 | Du kannst jeden Artikel in verschiedenen Formaten herunterladen: ePUB, MOBI, PDF, XML, JSON, CSV. | ||
5 | |||
6 | In der Artikelansicht, klickst du auf dieses Icon in der Seitenleiste: | ||
7 | |||
8 | .. image:: ../../img/user/download_article.png | ||
9 | :alt: Artikel herunterladen | ||
10 | :align: center | ||
11 | |||
12 | Du kannst auch eine ganze Kategorie (ungelesen, Favoriten, Archiv) in diesen Formaten herunterladen. | ||
13 | Zum Beispiel, in der Ansicht **Ungelesen**, klickst du auf das Icon in der oberen Leiste: | ||
14 | |||
15 | .. image:: ../../img/user/download_articles.png | ||
16 | :alt: Artikel herunterladen | ||
17 | :align: center | ||
diff --git a/docs/de/user/errors_during_fetching.rst b/docs/de/user/errors_during_fetching.rst new file mode 100644 index 00000000..b8e3e999 --- /dev/null +++ b/docs/de/user/errors_during_fetching.rst | |||
@@ -0,0 +1,28 @@ | |||
1 | Fehler während des Artikelladens | ||
2 | ================================ | ||
3 | |||
4 | Warum schlägt das Laden eines Artikels fehl? | ||
5 | -------------------------------------------- | ||
6 | |||
7 | Das kann verschiedene Ursachen haben: | ||
8 | |||
9 | - Netzwerkprobleme | ||
10 | - wallabag kann den Inhalt aufgrund der Websitestruktur nicht laden | ||
11 | |||
12 | Wie kann ich helfen das zu beheben? | ||
13 | ----------------------------------- | ||
14 | |||
15 | - `indem du uns eine Mail mit der URL des Artikels sendest <mailto:hello\@wallabag.org>`_ | ||
16 | - indem du versuchst das Laden des Artikels durch Erstellen einer Datei für den Artikel | ||
17 | selbst zu beheben | ||
18 | Du kannst `dieses Tool <http://siteconfig.fivefilters.org/>`__ nutzen. | ||
19 | |||
20 | Wie kann ich versuchen, einen Artikel erneut zu laden? | ||
21 | ------------------------------------------------------ | ||
22 | |||
23 | Wenn wallabag beim Laden eines Artikels fehlschlägt, kannst du auf den erneut laden Button | ||
24 | klicken (der dritte in dem unteren Bild). | ||
25 | |||
26 | .. image:: ../../img/user/refetch.png | ||
27 | :alt: Inhalt neu laden | ||
28 | :align: center | ||
diff --git a/docs/de/user/faq.rst b/docs/de/user/faq.rst new file mode 100644 index 00000000..1a199c1c --- /dev/null +++ b/docs/de/user/faq.rst | |||
@@ -0,0 +1,45 @@ | |||
1 | Häufig gestellte Fragen | ||
2 | ========================== | ||
3 | |||
4 | Während der Installation sehe ich den Fehler ``Error Output: sh: 1: @post-cmd: not found`` | ||
5 | ------------------------------------------------------------------------------------------ | ||
6 | |||
7 | Es scheint, dass du ein Problem bei deiner ``composer`` Installation hast. Versuche es zu deinstallieren und neu zu installieren. | ||
8 | |||
9 | `Lies die Dokumentation über composer, um zu erfahren wie es installiert wird | ||
10 | <https://getcomposer.org/doc/00-intro.md>`__. | ||
11 | |||
12 | Ich kann das Registrierungsformular nicht validieren | ||
13 | ---------------------------------------------------- | ||
14 | |||
15 | Stelle sicher, dass alle Felder ausgefüllt sind: | ||
16 | |||
17 | * valide E-Mail-Adresse | ||
18 | * das gleiche Passwort in zwei Feldern | ||
19 | |||
20 | Ich erhalte meine Aktivierungsmail nicht | ||
21 | ---------------------------------------- | ||
22 | |||
23 | Bist du sicher, dass deine eingegebene E-Mail-Adresse korrekt war? Hast du deinen Spamordner überprüft? | ||
24 | |||
25 | Wenn du dann immer noch nicht deine Aktivierungsmail siehst, stelle bitte sicher, dass du einen MTA | ||
26 | korrekt installiert und eingerichtet hast. Prüfe, dass deine Firewallregel existiert, z.B. für firewalld: | ||
27 | |||
28 | :: | ||
29 | firewall-cmd --permanent --add-service=smtp | ||
30 | firewall-cmd --reload | ||
31 | |||
32 | Schließlich, falls du SELinux aktiviert hast, setze folgende Regel: | ||
33 | |||
34 | ``setsebool -P httpd_can_sendmail 1`` | ||
35 | |||
36 | Wenn ich den Aktivierungslink klicke, bekomme ich die Nachricht ``Der Nutzer mit dem Bestätigungstoken "DtrOPfbQeVkWf6N" existiert nicht`` | ||
37 | ------------------------------------------------------------------------------------------------------------------------------------------ | ||
38 | |||
39 | Du hast deinen Account schon aktiviert oder die URL der Aktivierungsmail ist falsch. | ||
40 | |||
41 | Ich habe mein Passwort vergessen | ||
42 | -------------------------------- | ||
43 | |||
44 | Du kannst dein Passwort zurücksetzen, indem du auf den Link ``Kennwort vergessen?`` auf der Loginseite klickst. Fülle dann das Formular mit deiner E-Mail-Adresse oder deinem Nutzernamen aus | ||
45 | und du wirst eine E-Mail zum Passwort zurücksetzen erhalten. | ||
diff --git a/docs/de/user/filters.rst b/docs/de/user/filters.rst new file mode 100644 index 00000000..c9cda6b6 --- /dev/null +++ b/docs/de/user/filters.rst | |||
@@ -0,0 +1,49 @@ | |||
1 | Filter | ||
2 | ====== | ||
3 | |||
4 | Um Artikel leichter zu erreichen, kannst du sie filtern. | ||
5 | Klicke auf das dritte Symbol in der oberen Leiste. | ||
6 | |||
7 | .. image:: ../../img/user/topbar.png | ||
8 | :alt: Obere Leiste | ||
9 | :align: center | ||
10 | |||
11 | Alle diese Filter können kombiniert werden. | ||
12 | |||
13 | .. image:: ../../img/user/filters.png | ||
14 | :alt: Kombiniere alle Filter | ||
15 | :align: center | ||
16 | |||
17 | Status | ||
18 | ------ | ||
19 | |||
20 | Nutze die Checkboxen, um einen archivierten oder favorisierten Artikel zu finden. | ||
21 | |||
22 | Vorschaubild | ||
23 | --------------- | ||
24 | |||
25 | Hake diesen Filter an, wenn du Artikel mit einem Vorschaubild erhalten willst. | ||
26 | |||
27 | Sprache | ||
28 | ------- | ||
29 | |||
30 | wallabag (via graby) kann die Artikelsprache erkennen. Es ist einfach für dich, Artikel | ||
31 | in einer bestimmten Sprache zu filtern. | ||
32 | |||
33 | Lesezeit | ||
34 | -------- | ||
35 | |||
36 | wallabag schätzt wieviel Zeit du brauchst, um einen Artikel zu lesen. Mit diesem Filter | ||
37 | kannst du zum Beispiel Artikel mit einer Lesezeit zwischen 2 und 5 Minuten finden. | ||
38 | |||
39 | Domainname | ||
40 | ---------- | ||
41 | |||
42 | Dank dieses Filters, kannst ud Artikel von der gleichen Domain finden. | ||
43 | Zum Beispiel tippst du in diesem Feld ``bbc.co.uk``, um Artikel dieser Website zu finden. | ||
44 | |||
45 | Erstellungsdatum | ||
46 | ---------------- | ||
47 | |||
48 | Wenn du Artikel speicherst, merkt sich wallabag das aktuelle Datum. So praktisch, um Aritkel, die | ||
49 | zwischen dem 1. und 31. Januar geschrieben sind, zu finden. | ||
diff --git a/docs/de/user/first_article.rst b/docs/de/user/first_article.rst new file mode 100644 index 00000000..b8ceda07 --- /dev/null +++ b/docs/de/user/first_article.rst | |||
@@ -0,0 +1,68 @@ | |||
1 | Speichere deinen ersten Artikel | ||
2 | =============================== | ||
3 | |||
4 | Der Hauptzweck von wallabag ist es Webartikel zu speichern. Du hast viele Wege das zu tun. | ||
5 | |||
6 | .. note:: | ||
7 | |||
8 | Eine Schnellstartanleitung wird in der Anwendung angezeigt bis du deinen ersten | ||
9 | Artikel gespeichert hast. | ||
10 | |||
11 | Durch Nutzung eines Bookmarklets | ||
12 | -------------------------------- | ||
13 | |||
14 | Auf der ``How-To`` Seite, hast du einen Reiter ``Bookmarklet``. Ziehe und lasse den | ||
15 | ``bag it!`` Link in die Lesezeichenleiste deines Browser los. | ||
16 | |||
17 | Jetzt kannst du immer wenn du einen Artikel im Web liest und ihn du ihn speichern | ||
18 | willst, klicke auf den ``bag it!`` Link in deiner Lesezeichenleiste. Der Artikel | ||
19 | wird gespeichert. | ||
20 | |||
21 | Durch Nutzung des klassischen Formulars | ||
22 | --------------------------------------- | ||
23 | |||
24 | In der oberen Leiste auf deinem Bildschirm, hast du drei Icons. Mit dem ersten, einem | ||
25 | Pluszeichen, kannst du einfach neue Artikel speichern. | ||
26 | |||
27 | .. image:: ../../img/user/topbar.png | ||
28 | :alt: obere Leiste | ||
29 | :align: center | ||
30 | |||
31 | Klick darauf, um ein neues Feld anzeigen zu lassen, füge deine Artikel URL ein und | ||
32 | drücke die ``Enter`` Taste. Der Artikel wird gespeichert. | ||
33 | |||
34 | Durch Nutzung eines Browser Add-ons | ||
35 | ----------------------------------- | ||
36 | |||
37 | Firefox | ||
38 | ~~~~~~~ | ||
39 | |||
40 | *Dieses Addon ist noch nicht für wallbag v2 verfügbar*. | ||
41 | |||
42 | Chrome | ||
43 | ~~~~~~ | ||
44 | |||
45 | *Dieses Addon ist noch nicht für wallbag v2 verfügbar*. | ||
46 | |||
47 | Durch Nutzung deiner Smartphone App | ||
48 | ----------------------------------- | ||
49 | |||
50 | Android | ||
51 | ~~~~~~~ | ||
52 | |||
53 | *Diese Applikation ist noch nicht für wallbag v2 verfügbar*. | ||
54 | |||
55 | Firefox OS | ||
56 | ~~~~~~~~~~ | ||
57 | |||
58 | *Diese Applikation ist noch nicht für wallbag v2 verfügbar*. | ||
59 | |||
60 | Windows Phone | ||
61 | ~~~~~~~~~~~~~ | ||
62 | |||
63 | *Diese Applikation ist noch nicht für wallbag v2 verfügbar*. | ||
64 | |||
65 | iOS | ||
66 | ~~~ | ||
67 | |||
68 | *Diese Applikation ist noch nicht für wallbag v2 verfügbar*. | ||
diff --git a/docs/de/user/import.rst b/docs/de/user/import.rst new file mode 100644 index 00000000..ecd3134b --- /dev/null +++ b/docs/de/user/import.rst | |||
@@ -0,0 +1,46 @@ | |||
1 | Migration von einem Drittanbieter | ||
2 | ================================= | ||
3 | |||
4 | Von Pocket | ||
5 | ----------- | ||
6 | |||
7 | Erstelle eine neue Applikation in Pocket | ||
8 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
9 | |||
10 | Um deine Daten von Pocket zu importieren, nutzen wir die Pocket API. Du musst | ||
11 | eine neue Applikation auf ihrer Entwicklerwebsite erstellen, um fortzufahren. | ||
12 | |||
13 | * Erstelle eine neue Applikation `auf der Entwicklerwebsite <https://getpocket.com/developer/apps/new>`_ | ||
14 | * Fülle die erforderlichen Felder aus: Name, Beschreibung, Berechtigungen (nur **abrufen**), Plattform | ||
15 | (**web**), akzeptiere die Nutzungsbedingungen und reiche deine neue Applikation ein | ||
16 | |||
17 | Pocket wird dir einen **Consumer Key** geben (z.B. `49961-985e4b92fe21fe4c78d682c1`). | ||
18 | Du musst den ``pocket_consumer_key`` in dem Abschnitt ``Import`` in dem ``Interne Einstellungen`` Menü | ||
19 | konfigurieren. | ||
20 | |||
21 | Jetzt ist alles in Ordnung, um von Pocket zu migrieren. | ||
22 | |||
23 | Importiere deine Daten in wallabag 2.x | ||
24 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
25 | |||
26 | Klicke auf den ``Importieren`` Link im menü, auf ``Inhalte importieren`` in dem Pocketabschnitt und | ||
27 | dann auf ``Verbinde mit Pocket und importieren Daten``. | ||
28 | |||
29 | Du musst wallabag erlauben, mit deinem Pocketaccount zu interagieren. | ||
30 | Deine Daten werden importiert. Datenimport kann ein sehr anspruchsvoller Prozess für deinen Server | ||
31 | sein (wir müssen daran arbeiten, um diesen Import zu verbessern). | ||
32 | |||
33 | Von Instapaper | ||
34 | -------------- | ||
35 | |||
36 | *Funktion noch nicht implementiert in wallabag v2.* | ||
37 | |||
38 | Von Readability | ||
39 | --------------- | ||
40 | |||
41 | *Funktion noch nicht implementiert in wallabag v2.* | ||
42 | |||
43 | Von einer HTML oder JSON Datei | ||
44 | ------------------------------ | ||
45 | |||
46 | *Funktion noch nicht implementiert in wallabag v2.* | ||
diff --git a/docs/de/user/installation.rst b/docs/de/user/installation.rst new file mode 100644 index 00000000..1b6710b7 --- /dev/null +++ b/docs/de/user/installation.rst | |||
@@ -0,0 +1,326 @@ | |||
1 | Installation von wallabag | ||
2 | ========================= | ||
3 | |||
4 | Voraussetzungen | ||
5 | --------------- | ||
6 | |||
7 | wallabag ist kompatibel mit PHP >= 5.5, inkl. PHP 7. | ||
8 | |||
9 | Du benötigst die folgenden Extensions damit wallabag funktioniert. Einige von diesen sind vielleicht schon in deiner Version von PHP aktiviert, somit musst du eventuell | ||
10 | nicht alle folgenden Pakete installieren. | ||
11 | |||
12 | - php-session | ||
13 | - php-ctype | ||
14 | - php-dom | ||
15 | - php-hash | ||
16 | - php-simplexml | ||
17 | - php-json | ||
18 | - php-gd | ||
19 | - php-mbstring | ||
20 | - php-xml | ||
21 | - php-tidy | ||
22 | - php-iconv | ||
23 | - php-curl | ||
24 | - php-gettext | ||
25 | - php-tokenizer | ||
26 | |||
27 | wallabag nutzt PDO, um sich mit der Datenbank zu verbinden, darum benötigst du eines der folgenden Komponenten: | ||
28 | |||
29 | - pdo_mysql | ||
30 | - pdo_sqlite | ||
31 | - pdo_pgsql | ||
32 | |||
33 | und dessen dazugehörigen Datenbankserver. | ||
34 | |||
35 | Installation | ||
36 | ------------ | ||
37 | |||
38 | Auf einem dedizierten Webserver (empfohlener Weg) | ||
39 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
40 | |||
41 | wallabag nutzt eine große Anzahl an Bibliotheken, um zu funktionieren. Diese Bibliotheken müssen mit einem Tool namens Composer installiert werden. Du musst es installieren sofern du es bisher noch nicht gemacht hast. | ||
42 | |||
43 | Composer installieren: | ||
44 | |||
45 | :: | ||
46 | |||
47 | curl -s http://getcomposer.org/installer | php | ||
48 | |||
49 | Du kannst eine spezifische Anleitung `hier <https://getcomposer.org/doc/00-intro.md>`__ finden: | ||
50 | |||
51 | Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen: | ||
52 | |||
53 | :: | ||
54 | |||
55 | git clone https://github.com/wallabag/wallabag.git | ||
56 | cd wallabag | ||
57 | git checkout 2.0.7 | ||
58 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist | ||
59 | php bin/console wallabag:install --env=prod | ||
60 | |||
61 | Um PHPs eingebauten Server zu starten und zu testen, ob alles korrekt installiert wurde, kannst du folgendes Kommando ausführen: | ||
62 | |||
63 | :: | ||
64 | |||
65 | php bin/console server:run --env=prod | ||
66 | |||
67 | Und wallabag unter http://deineserverip:8000 erreichen | ||
68 | |||
69 | .. tip:: | ||
70 | |||
71 | Um Parameter mit Umgebungsvariable zu definieren, musst du die Variable mit dem ``SYMFONY__`` Präfix setzen. Zum Beispiel ``SYMFONY__DATABASE_DRIVER``. Du kannst einen Blick die `Symfony Dokumentation <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__ werfen. | ||
72 | |||
73 | Auf einem geteilten Webhosting | ||
74 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
75 | |||
76 | Wir stellen ein Paket inkl. aller Abhängigkeiten bereit. | ||
77 | Die Standardkonfiguration nutzt SQLite für die Datenbank. Wenn du diese Einstellung ändern willst, ändere bitte ``app/config/parameters.yml``. | ||
78 | |||
79 | Wir haben bereits einen Nutzer erstellt: Login und Passwort sind ``wallabag``. | ||
80 | |||
81 | .. caution:: Mit diesem Paket überprüft wallabag nicht die von der Applikation gebrauchten Exentions (diese Tests werden während ``composer install`` durchgeführt wenn du einen dedizierten Webserver hast, siehe oben). | ||
82 | |||
83 | Führe dieses Kommando aus, um das neueste Paket herunterzuladen und zu entpacken: | ||
84 | |||
85 | .. code-block:: bash | ||
86 | |||
87 | wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package | ||
88 | |||
89 | Jetzt lese die Dokumentation, um einen Virtualhost zu erstellen, dann greife auf dein wallabag zu. | ||
90 | Wenn du die Datenbankkonfiguration eingestellt hast, MySQL oder PostgreSQL zu nutzen, musst du einen Nutzer über das folgende Kommando erstellen ``php bin/console wallabag:install --env=prod``. | ||
91 | |||
92 | Installation mit Docker | ||
93 | ------------------------ | ||
94 | |||
95 | Wir stellen ein Docker Image zu Verfügung, um wallabag einfach zu installieren. Schaue in unser Repository in unserem `Docker Hub <https://hub.docker.com/r/wallabag/wallabag/>`__, um mehr Informationen zu erhalten. | ||
96 | |||
97 | Kommando, um den Container zu starten | ||
98 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
99 | |||
100 | .. code-block:: bash | ||
101 | |||
102 | docker pull wallabag/wallabag | ||
103 | |||
104 | Virtualhosts | ||
105 | ------------ | ||
106 | |||
107 | Konfiguration von Apache | ||
108 | ~~~~~~~~~~~~~~~~~~~~~~~ | ||
109 | |||
110 | Angenommen du willst wallabag in das Verzeichnis ``/var/www/wallabag`` installieren und du willst PHP als Apache Modul nutzen, dann ist hier ein vhost für wallabag: | ||
111 | |||
112 | :: | ||
113 | |||
114 | <VirtualHost *:80> | ||
115 | ServerName domain.tld | ||
116 | ServerAlias www.domain.tld | ||
117 | |||
118 | DocumentRoot /var/www/wallabag/web | ||
119 | <Directory /var/www/wallabag/web> | ||
120 | AllowOverride None | ||
121 | Order Allow,Deny | ||
122 | Allow from All | ||
123 | |||
124 | <IfModule mod_rewrite.c> | ||
125 | Options -MultiViews | ||
126 | RewriteEngine On | ||
127 | RewriteCond %{REQUEST_FILENAME} !-f | ||
128 | RewriteRule ^(.*)$ app.php [QSA,L] | ||
129 | </IfModule> | ||
130 | </Directory> | ||
131 | |||
132 | # uncomment the following lines if you install assets as symlinks | ||
133 | # or run into problems when compiling LESS/Sass/CoffeScript assets | ||
134 | # <Directory /var/www/wallabag> | ||
135 | # Options FollowSymlinks | ||
136 | # </Directory> | ||
137 | |||
138 | # optionally disable the RewriteEngine for the asset directories | ||
139 | # which will allow apache to simply reply with a 404 when files are | ||
140 | # not found instead of passing the request into the full symfony stack | ||
141 | <Directory /var/www/wallabag/web/bundles> | ||
142 | <IfModule mod_rewrite.c> | ||
143 | RewriteEngine Off | ||
144 | </IfModule> | ||
145 | </Directory> | ||
146 | ErrorLog /var/log/apache2/wallabag_error.log | ||
147 | CustomLog /var/log/apache2/wallabag_access.log combined | ||
148 | </VirtualHost> | ||
149 | |||
150 | Nach dem du Apache neugeladen oder neugestartet hast, solltest du nun wallabag unter http://domain.tld erreichen. | ||
151 | |||
152 | Konfiguration von Nginx | ||
153 | ~~~~~~~~~~~~~~~~~~~~~~~ | ||
154 | |||
155 | Angenommen du willst wallabag in das Verzeichnis ``/var/www/wallabag`` installieren, dann ist hier ein Rezept für wallabag: | ||
156 | |||
157 | :: | ||
158 | |||
159 | server { | ||
160 | server_name domain.tld www.domain.tld; | ||
161 | root /var/www/wallabag/web; | ||
162 | |||
163 | location / { | ||
164 | # try to serve file directly, fallback to app.php | ||
165 | try_files $uri /app.php$is_args$args; | ||
166 | } | ||
167 | location ~ ^/app\.php(/|$) { | ||
168 | fastcgi_pass unix:/var/run/php5-fpm.sock; | ||
169 | fastcgi_split_path_info ^(.+\.php)(/.*)$; | ||
170 | include fastcgi_params; | ||
171 | # When you are using symlinks to link the document root to the | ||
172 | # current version of your application, you should pass the real | ||
173 | # application path instead of the path to the symlink to PHP | ||
174 | # FPM. | ||
175 | # Otherwise, PHP's OPcache may not properly detect changes to | ||
176 | # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126 | ||
177 | # for more information). | ||
178 | fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; | ||
179 | fastcgi_param DOCUMENT_ROOT $realpath_root; | ||
180 | # Prevents URIs that include the front controller. This will 404: | ||
181 | # http://domain.tld/app.php/some-path | ||
182 | # Remove the internal directive to allow URIs like this | ||
183 | internal; | ||
184 | } | ||
185 | |||
186 | error_log /var/log/nginx/wallabag_error.log; | ||
187 | access_log /var/log/nginx/wallabag_access.log; | ||
188 | } | ||
189 | |||
190 | Nach dem neuladen oder neustarten von nginx, solltest du nun wallabag unter http://domain.tld erreichen. | ||
191 | |||
192 | .. tip:: | ||
193 | |||
194 | When you want to import large file into wallabag, you need to add this line in your nginx configuration ``client_max_body_size XM; # allows file uploads up to X megabytes``. | ||
195 | Wenn du eine große Datei in wallabag importieren willst, solltest du diese Zeile zu deiner nginx Konfiguration hinzufügen ``client_max_body_size XM; # allows file uploads up to X megabytes``. | ||
196 | |||
197 | Konfiguration von lighttpd | ||
198 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
199 | |||
200 | Angenommen du willst wallabag in das Verzeichnis ``/var/www/wallabag`` installieren, dann ist hier ein Rezept für wallabag (bearbeite deine ``lighttpd.conf`` und füge die Konfiguration dort ein): | ||
201 | |||
202 | :: | ||
203 | |||
204 | server.modules = ( | ||
205 | "mod_fastcgi", | ||
206 | "mod_access", | ||
207 | "mod_alias", | ||
208 | "mod_compress", | ||
209 | "mod_redirect", | ||
210 | "mod_rewrite", | ||
211 | ) | ||
212 | server.document-root = "/var/www/wallabag/web" | ||
213 | server.upload-dirs = ( "/var/cache/lighttpd/uploads" ) | ||
214 | server.errorlog = "/var/log/lighttpd/error.log" | ||
215 | server.pid-file = "/var/run/lighttpd.pid" | ||
216 | server.username = "www-data" | ||
217 | server.groupname = "www-data" | ||
218 | server.port = 80 | ||
219 | server.follow-symlink = "enable" | ||
220 | index-file.names = ( "index.php", "index.html", "index.lighttpd.html") | ||
221 | url.access-deny = ( "~", ".inc" ) | ||
222 | static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) | ||
223 | compress.cache-dir = "/var/cache/lighttpd/compress/" | ||
224 | compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" ) | ||
225 | include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port | ||
226 | include_shell "/usr/share/lighttpd/create-mime.assign.pl" | ||
227 | include_shell "/usr/share/lighttpd/include-conf-enabled.pl" | ||
228 | dir-listing.activate = "disable" | ||
229 | |||
230 | url.rewrite-if-not-file = ( | ||
231 | "^/([^?]*)(?:\?(.*))?" => "/app.php?$1&$2", | ||
232 | "^/([^?]*)" => "/app.php?=$1", | ||
233 | ) | ||
234 | |||
235 | Rechte, um das Projektverzeichnis zu betreten | ||
236 | --------------------------------------------- | ||
237 | |||
238 | Testumgebung | ||
239 | ~~~~~~~~~~~~ | ||
240 | |||
241 | Wenn wir nur wallabag testen wollen, führen wir nur das Kommando ``php bin/console server:run --env=prod`` aus, um unsere wallabag Instanz zu starten und alles wird geschmeidig laufen, weil der Nutzer, der das Projekt gestartet hat, den aktuellen Ordner ohne Probleme betreten kann. | ||
242 | |||
243 | Produktionsumgebung | ||
244 | ~~~~~~~~~~~~~~~~~~~ | ||
245 | |||
246 | Sobald wir Apache oder Nginx nutzen, um unsere wallabag Instanz zu erreichen, und nicht das Kommando ``php bin/console server:run --env=prod`` nutzen, sollten wir dafür sorgen, die Rechte vernünftig zu vergeben, um die Ordner des Projektes zu schützen. | ||
247 | |||
248 | Um dies zu machen, muss der Ordner, bekannt als ``DocumentRoot`` (bei Apache) oder ``root`` (bei Nginx), von dem Apache-/Nginx-Nutzer zugänglich sein. Sein Name ist meist ``www-data``, ``apache`` oder ``nobody`` (abhängig vom genutzten Linuxsystem). | ||
249 | |||
250 | Der Ordner ``/var/www/wallabag/web`` musst dem letztgenannten zugänglich sein. Aber dies könnte nicht genug sein, wenn wir nur auf diesen Ordner achten, weil wir eine leere Seite sehen könnten oder einen Fehler 500, wenn wir die Homepage des Projekt öffnen. | ||
251 | |||
252 | Dies kommt daher, dass wir die gleichen Rechte dem Ordner ``/var/www/wallabag/var`` geben müssen, so wie wir es für den Ordner ``/var/www/wallabag/web`` gemacht haben. Somit beheben wir das Problem mit dem folgenden Kommando: | ||
253 | |||
254 | .. code-block:: bash | ||
255 | |||
256 | chown -R www-data:www-data /var/www/wallabag/var | ||
257 | |||
258 | Es muss analog für die folgenden Ordner ausgeführt werden | ||
259 | |||
260 | * /var/www/wallabag/bin/ | ||
261 | * /var/www/wallabag/app/config/ | ||
262 | * /var/www/wallabag/vendor/ | ||
263 | * /var/www/wallabag/data/ | ||
264 | |||
265 | durch Eingabe der Kommandos | ||
266 | |||
267 | .. code-block:: bash | ||
268 | |||
269 | chown -R www-data:www-data /var/www/wallabag/bin | ||
270 | chown -R www-data:www-data /var/www/wallabag/app/config | ||
271 | chown -R www-data:www-data /var/www/wallabag/vendor | ||
272 | chown -R www-data:www-data /var/www/wallabag/data/ | ||
273 | |||
274 | ansonsten wirst du früher oder später folgenden Fehlermeldung sehen: | ||
275 | |||
276 | .. code-block:: bash | ||
277 | |||
278 | Unable to write to the "bin" directory. | ||
279 | file_put_contents(app/config/parameters.yml): failed to open stream: Permission denied | ||
280 | file_put_contents(/.../wallabag/vendor/autoload.php): failed to open stream: Permission denied | ||
281 | |||
282 | Zusätzliche Regeln für SELinux | ||
283 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
284 | |||
285 | Wenn SELinux in deinem System aktiviert ist, wirst du zusätzliche Kontexte konfigurieren müssen damit wallabag ordentlich funktioniert. Um zu testen, ob SELinux aktiviert ist, führe einfach folgendes aus: | ||
286 | |||
287 | ``getenforce`` | ||
288 | |||
289 | Dies wird ``Enforcing`` ausgeben, wenn SELinux aktiviert ist. Einen neuen Kontext zu erstellen, erfordert die folgende Syntax: | ||
290 | |||
291 | ``semanage fcontext -a -t <context type> <full path>`` | ||
292 | |||
293 | Zum Beispiel: | ||
294 | |||
295 | ``semanage fcontext -a -t httpd_sys_content_t "/var/www/wallabag(/.*)?"`` | ||
296 | |||
297 | Dies wird rekursiv den httpd_sys_content_t Kontext auf das wallabag Verzeichnis und alle darunterliegenden Dateien und Ordner anwenden. Die folgenden Regeln werden gebraucht: | ||
298 | |||
299 | +-----------------------------------+----------------------------+ | ||
300 | | Vollständiger Pfad | Kontext | | ||
301 | +===================================+============================+ | ||
302 | | /var/www/wallabag(/.*)? | ``httpd_sys_content_t`` | | ||
303 | +-----------------------------------+----------------------------+ | ||
304 | | /var/www/wallabag/data(/.*)? | ``httpd_sys_rw_content_t`` | | ||
305 | +-----------------------------------+----------------------------+ | ||
306 | | /var/www/wallabag/var/logs(/.*)? | ``httpd_log_t`` | | ||
307 | +-----------------------------------+----------------------------+ | ||
308 | | /var/www/wallabag/var/cache(/.*)? | ``httpd_cache_t`` | | ||
309 | +-----------------------------------+----------------------------+ | ||
310 | |||
311 | Nach dem diese Kontexte erstellt wurden, tippe das folgende, um deine Regeln anzuwenden: | ||
312 | |||
313 | ``restorecon -R -v /var/www/wallabag`` | ||
314 | |||
315 | Du kannst deine Kontexte in einem Verzeichnis überprüfen, indem du ``ls -lZ`` tippst und alle deine aktuellen Regeln mit ``semanage fcontext -l -C`` überprüfst. | ||
316 | |||
317 | Wenn du das vorkonfigurierte latest-v2-package installierst, dann ist eine weitere Regel während der Installation nötig: | ||
318 | |||
319 | ``semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wallabag/var"`` | ||
320 | |||
321 | Nachdem du erfolgreich dein wallabag erreichst und die Installation fertiggestellt hast, kann dieser Kontext entfernt werden: | ||
322 | |||
323 | :: | ||
324 | |||
325 | semanage fcontext -d -t httpd_sys_rw_content_t "/var/www/wallabag/var" | ||
326 | retorecon -R -v /var/www/wallabag/var | ||
diff --git a/docs/de/user/login.rst b/docs/de/user/login.rst new file mode 100644 index 00000000..cf1cdc4c --- /dev/null +++ b/docs/de/user/login.rst | |||
@@ -0,0 +1,13 @@ | |||
1 | Login | ||
2 | ===== | ||
3 | |||
4 | Dein Account ist nun aktiviert, Glückwünsch! | ||
5 | |||
6 | Um dich bei wallabag einzuloggen, fülle das Formular auf der Loginseite aus. | ||
7 | |||
8 | Wenn du an deinem persönlichen Computer arbeitest und verbunden bleiben willst, | ||
9 | kannst du die Checkbox ``Angemeldet bleiben`` anhaken: wallabag wird sich für ein Jahr an deinen Login erinnern. | ||
10 | |||
11 | .. image:: ../../img/user/login_form.png | ||
12 | :alt: Loginformular | ||
13 | :align: center | ||
diff --git a/docs/de/user/migration.rst b/docs/de/user/migration.rst new file mode 100644 index 00000000..bc8a61b0 --- /dev/null +++ b/docs/de/user/migration.rst | |||
@@ -0,0 +1,62 @@ | |||
1 | Migration von v1 oder v2 | ||
2 | ======================== | ||
3 | |||
4 | Von wallabag 1.x | ||
5 | ----------------- | ||
6 | |||
7 | Wenn du bisher wallabag v1.x genutzt hast, musst du deine Daten exportieren bevor du zu wallabag v2.x migrierst, weil die Applikation und ihre Datenbank sich stark geändert haben. In deiner alten wallabag Installation kannst du deine Daten auf der Konfigurationsseite exportieren. | ||
8 | |||
9 | .. image:: ../../img/user/export_v1.png | ||
10 | :alt: Export von wallabag v1 | ||
11 | :align: center | ||
12 | |||
13 | .. note:: | ||
14 | Wenn du mehrere Accounts auf der gleichen Instanz von wallabag hast, muss jeder Nutzer von v1 exportieren und in v2 seine Daten importieren. | ||
15 | |||
16 | .. note:: | ||
17 | Wenn du Probleme während des Exports oder Imports hast, scheue dich nicht davor `nach Hilfe zu fragen <https://www.wallabag.org/pages/support.html>`__. | ||
18 | |||
19 | Wenn du eine JSON Datei mit deinen Artikeln erhalten hast, kannst du wallabag v2 installieren falls benötigt durch Befolgen `der Standardprozedur <http://doc.wallabag.org/en/master/user/installation.html>`__. | ||
20 | |||
21 | Nachdem du einen Nutzerkonto auf deiner neuen wallabag v2 Instanz eingerichtet hast, kannst du zu dem Abschnitt `Import` springen und `Import von wallabag v1` auswählen. Wähle deine JSON Datei aus und lade sie hoch. | ||
22 | |||
23 | .. image:: ../../img/user/import_wallabagv1.png | ||
24 | :alt: Import von wallabag v1 | ||
25 | :align: center | ||
26 | |||
27 | Import via command-line interface (CLI) | ||
28 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
29 | |||
30 | Wenn du CLI Zugang zu deinem Webserver hast, kannst du dieses Kommando ausführen, um deine Aritkel vom wallabag v1 Export zu importieren: | ||
31 | |||
32 | :: | ||
33 | |||
34 | bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod | ||
35 | |||
36 | Bitte ersetze folgende Werte: | ||
37 | |||
38 | * ``1`` ist die Nutzer ID in der Databank (Die ID von dem ersten erstellten Nutzer in wallabag ist 1) | ||
39 | * ``~/Downloads/wallabag-export-1-2016-04-05.json`` ist der Pfad zu deinem wallabag v1 Export | ||
40 | |||
41 | Du wirst eine solche Ausgabe erhalten: | ||
42 | |||
43 | :: | ||
44 | |||
45 | Start : 05-04-2016 11:36:07 --- | ||
46 | 403 imported | ||
47 | 0 already saved | ||
48 | End : 05-04-2016 11:36:09 --- | ||
49 | |||
50 | Von wallabag 2.x | ||
51 | ---------------- | ||
52 | |||
53 | In der vorherigen wallabag Instanz, gehe zu `Alle Artikel` und exportiere diese Artikel als JSON. | ||
54 | |||
55 | .. image:: ../../img/user/export_v2.png | ||
56 | :alt: Export von wallabag v2 | ||
57 | :align: center | ||
58 | |||
59 | In deiner neuen wallabag Instanz erstellst du ein Nutzerkonto und klickst auf den Link im Menü, um den Import fortzusetzen. Wähle Import von wallabag v2 aus und lade deine JSON Datei hoch. | ||
60 | |||
61 | .. note:: | ||
62 | Wenn du Probleme während des Exports oder Imports hast, scheue dich nicht davor `nach Hilfe zu fragen <https://www.wallabag.org/pages/support.html>`__. | ||
diff --git a/docs/de/user/tags.rst b/docs/de/user/tags.rst new file mode 100644 index 00000000..8ddc0f40 --- /dev/null +++ b/docs/de/user/tags.rst | |||
@@ -0,0 +1,2 @@ | |||
1 | Tags | ||
2 | ==== \ No newline at end of file | ||
diff --git a/docs/de/user/upgrade.rst b/docs/de/user/upgrade.rst new file mode 100644 index 00000000..13e3104f --- /dev/null +++ b/docs/de/user/upgrade.rst | |||
@@ -0,0 +1,32 @@ | |||
1 | Wallabag updaten | ||
2 | ================ | ||
3 | |||
4 | Update auf einem dedizierten Webserver | ||
5 | -------------------------------------- | ||
6 | |||
7 | Das neueste Release ist auf https://www.wallabag.org/pages/download-wallabag.html veröffentlicht. Um deine wallabag Installation auf die neueste Version upzudaten, führe die folgenden Kommandos in deinem wallabag Ordner aus (ersetze ``2.0.3`` mit der neuesten Releasenummer): | ||
8 | |||
9 | :: | ||
10 | |||
11 | git fetch origin | ||
12 | git fetch --tags | ||
13 | git checkout 2.0.3 | ||
14 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist | ||
15 | php bin/console cache:clear --env=prod | ||
16 | |||
17 | Update auf einem Shared Webhosting | ||
18 | ---------------------------------- | ||
19 | |||
20 | Sichere deine ``app/config/parameters.yml`` Datei. | ||
21 | |||
22 | Lade das neueste Release von wallabag herunter: | ||
23 | |||
24 | .. code-block:: bash | ||
25 | |||
26 | wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package | ||
27 | |||
28 | Entpacke das Archiv in deinen wallabag Ordner und ersetze ``app/config/parameters.yml`` mit deiner Datei. | ||
29 | |||
30 | Wenn du SQLite nutzt, musst auch das ``data/`` Verzeichnis in die neue Installation kopieren. | ||
31 | |||
32 | Leere den ``var/cache`` Ordner. | ||
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 | ||
14 | 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. | 14 | 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. |
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 | ||
20 | Just confirm that message and you get redirected to the settings screen. | 20 | Just 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 | ||
26 | 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. | 26 | 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. |
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 | ||
32 | After you have filled in your data, push the button Connection test and wait for the test to finish. | 32 | After 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 | ||
38 | The connection test shall finish with success. If not, you need to fix this first until you proceed. | 38 | The 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 | ||
44 | 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. | 44 | 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. |
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 | ||
50 | 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. | 50 | 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. |
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 | ||
56 | 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. | 56 | 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. |
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 | ||
62 | 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. | 62 | 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. |
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 | ||
68 | Finally after the syncronisation finished successfully, you are presented the list of unread articles. | 68 | Finally 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/configuration.rst b/docs/en/user/configuration.rst index f681d874..f4c55dea 100644 --- a/docs/en/user/configuration.rst +++ b/docs/en/user/configuration.rst | |||
@@ -108,7 +108,7 @@ Variable Meaning Operator Meaning | |||
108 | title Title of the entry <= Less than… | 108 | title Title of the entry <= Less than… |
109 | url URL of the entry < Strictly less than… | 109 | url URL of the entry < Strictly less than… |
110 | isArchived Whether the entry is archived or not => Greater than… | 110 | isArchived Whether the entry is archived or not => Greater than… |
111 | isStared Whether the entry is starred or not > Strictly greater than… | 111 | isStarred Whether the entry is starred or not > Strictly greater than… |
112 | content The entry's content = Equal to… | 112 | content The entry's content = Equal to… |
113 | language The entry's language != Not equal to… | 113 | language The entry's language != Not equal to… |
114 | mimetype The entry's mime-type OR One rule or another | 114 | mimetype The entry's mime-type OR One rule or another |
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 @@ | |||
1 | Frequently Asked Questions | 1 | Frequently Asked Questions |
2 | ========================== | 2 | ========================== |
3 | 3 | ||
4 | During the installation, I've got this error ``Error Output: sh: 1: @post-cmd: not found`` | 4 | During the installation, I got the error ``Error Output: sh: 1: @post-cmd: not found`` |
5 | ------------------------------------------------------------------------------------------ | 5 | -------------------------------------------------------------------------------------- |
6 | 6 | ||
7 | It seems you have a problem with your ``composer`` installation. Try to uninstall and reinstall it. | 7 | It 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 | ||
12 | I can't valid the registration form | 12 | I can't validate the registration form |
13 | ----------------------------------- | 13 | -------------------------------------- |
14 | 14 | ||
15 | Make sure that all fields are well filled: | 15 | Ensure 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 | ||
20 | I don't receive my activation email | 20 | I'm not receiving my activation email |
21 | ----------------------------------- | 21 | ------------------------------------- |
22 | 22 | ||
23 | Are you sure your email address was correct? Did you check your spams folder? | 23 | Are you sure your email address was correct? Did you check your spam folder? |
24 | |||
25 | If you still don't see the activation email, please ensure that you have | ||
26 | installed and properly configured a mail transfer agent. Be sure to include a | ||
27 | firewall rule for SMTP. E.g., if using firewalld: | ||
28 | |||
29 | :: | ||
30 | |||
31 | firewall-cmd --permanent --add-service=smtp | ||
32 | firewall-cmd --reload | ||
33 | |||
34 | Lastly, if you have SELinux enabled, set the following rule: | ||
35 | |||
36 | ``setsebool -P httpd_can_sendmail 1`` | ||
24 | 37 | ||
25 | When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``. | 38 | When 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 6d804304..95df263a 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 | ||
26 | wallabag uses PDO to connect to database, so you'll need one of: | 26 | wallabag 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 | ||
32 | and it's corresponding database server. | 32 | and its corresponding database server. |
33 | 33 | ||
34 | Installation | 34 | Installation |
35 | ------------ | 35 | ------------ |
@@ -37,7 +37,7 @@ Installation | |||
37 | On a dedicated web server (recommended way) | 37 | On a dedicated web server (recommended way) |
38 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 38 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
39 | 39 | ||
40 | 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. | 40 | 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 and be sure to use the 1.2 version (if you already have Composer, run a ``composer selfupdate``). |
41 | 41 | ||
42 | Install Composer: | 42 | Install Composer: |
43 | 43 | ||
@@ -47,13 +47,13 @@ Install Composer: | |||
47 | 47 | ||
48 | You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__: | 48 | You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__: |
49 | 49 | ||
50 | To install wallabag itself, you must run these two commands: | 50 | To install wallabag itself, you must run the following commands: |
51 | 51 | ||
52 | :: | 52 | :: |
53 | 53 | ||
54 | git clone https://github.com/wallabag/wallabag.git | 54 | git clone https://github.com/wallabag/wallabag.git |
55 | cd wallabag | 55 | cd wallabag |
56 | git checkout 2.0.4 | 56 | git checkout 2.0.7 |
57 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist | 57 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist |
58 | php bin/console wallabag:install --env=prod | 58 | php bin/console wallabag:install --env=prod |
59 | 59 | ||
@@ -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 | ||
72 | On a shared hosting | 72 | On a shared hosting |
73 | ~~~~~~~~~~~~~~~~~~~ | 73 | ~~~~~~~~~~~~~~~~~~~ |
74 | 74 | ||
75 | We provide you a package with all dependancies inside. | 75 | We provide a package with all dependencies inside. |
76 | The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``. | 76 | The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``. |
77 | 77 | ||
78 | We already created a user: login and password are ``wallabag``. | 78 | We 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 | ||
82 | Execute this command to download and extract the latest package: | 82 | Execute 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 | ||
88 | Now, read the following documentation to create your virtual host, then access to your wallabag. | 88 | Now, read the following documentation to create your virtual host, then access your wallabag. |
89 | 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``. | 89 | 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``. |
90 | 90 | ||
91 | Installation with Docker | 91 | Installation with Docker |
@@ -151,7 +151,7 @@ After reloading or restarting Apache, you should now be able to access wallabag | |||
151 | Configuration on Nginx | 151 | Configuration on Nginx |
152 | ~~~~~~~~~~~~~~~~~~~~~~ | 152 | ~~~~~~~~~~~~~~~~~~~~~~ |
153 | 153 | ||
154 | Assuming you install wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag : | 154 | Assuming you installed wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag : |
155 | 155 | ||
156 | :: | 156 | :: |
157 | 157 | ||
@@ -226,7 +226,7 @@ Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe | |||
226 | dir-listing.activate = "disable" | 226 | dir-listing.activate = "disable" |
227 | 227 | ||
228 | url.rewrite-if-not-file = ( | 228 | url.rewrite-if-not-file = ( |
229 | "^/([^?])(?:\?(.))?" => "/app.php?$1&$2", | 229 | "^/([^?]*)(?:\?(.*))?" => "/app.php?$1&$2", |
230 | "^/([^?]*)" => "/app.php?=$1", | 230 | "^/([^?]*)" => "/app.php?=$1", |
231 | ) | 231 | ) |
232 | 232 | ||
@@ -258,7 +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 | * /var/www/wallabag/data/ |
262 | 262 | ||
263 | by entering | 263 | by entering |
264 | 264 | ||
@@ -269,10 +269,56 @@ by entering | |||
269 | 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/ | 270 | chown -R www-data:www-data /var/www/wallabag/data/ |
271 | 271 | ||
272 | otherwise, sooner or later you will meet this error messages | 272 | otherwise, sooner or later you will see these error messages: |
273 | 273 | ||
274 | .. code-block:: bash | 274 | .. code-block:: bash |
275 | 275 | ||
276 | Unable to write to the "bin" directory. | 276 | Unable to write to the "bin" directory. |
277 | 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 |
278 | 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 | |||
280 | Additional rules for SELinux | ||
281 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
282 | |||
283 | 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: | ||
284 | |||
285 | ``getenforce`` | ||
286 | |||
287 | This 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 | |||
291 | For example: | ||
292 | |||
293 | ``semanage fcontext -a -t httpd_sys_content_t "/var/www/wallabag(/.*)?"`` | ||
294 | |||
295 | 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: | ||
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 | |||
309 | After creating these contexts, enter the following in order to apply your rules: | ||
310 | |||
311 | ``restorecon -R -v /var/www/wallabag`` | ||
312 | |||
313 | 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``. | ||
314 | |||
315 | If 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 | |||
319 | After 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/user/configuration.rst b/docs/fr/user/configuration.rst index 89305998..278f0022 100644 --- a/docs/fr/user/configuration.rst +++ b/docs/fr/user/configuration.rst | |||
@@ -110,7 +110,7 @@ Variable Sens Opérateur Sens | |||
110 | title Titre de l'article <= Inférieur ou égal à … | 110 | title Titre de l'article <= Inférieur ou égal à … |
111 | url URL de l'article < Strictement inférieur à … | 111 | url URL de l'article < Strictement inférieur à … |
112 | isArchived Si l'article est archivé ou non => Supérieur ou égal à … | 112 | isArchived Si l'article est archivé ou non => Supérieur ou égal à … |
113 | isStared Si l'article est en favori ou non > Strictement supérieur à … | 113 | isStarred Si l'article est en favori ou non > Strictement supérieur à … |
114 | content Le contenu de l'article = Égal à … | 114 | content Le contenu de l'article = Égal à … |
115 | language La langue de l'article != Différent de … | 115 | language La langue de l'article != Différent de … |
116 | mimetype The type MIME de l'article OR Telle règle ou telle autre règle | 116 | mimetype The type MIME de l'article OR Telle règle ou telle autre règle |
diff --git a/docs/fr/user/installation.rst b/docs/fr/user/installation.rst index 8f9a7932..d46f79a4 100644 --- a/docs/fr/user/installation.rst +++ b/docs/fr/user/installation.rst | |||
@@ -35,7 +35,7 @@ Installation | |||
35 | Sur un serveur dédié (méthode conseillée) | 35 | Sur un serveur dédié (méthode conseillée) |
36 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 36 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
37 | 37 | ||
38 | wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait. | 38 | wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait et vous assurer que vous utilisez bien la version 1.2 (si vous avez déjà Composer, faite un ``composer selfupdate``). |
39 | 39 | ||
40 | Installation de Composer : | 40 | Installation de Composer : |
41 | 41 | ||
@@ -51,7 +51,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes : | |||
51 | 51 | ||
52 | git clone https://github.com/wallabag/wallabag.git | 52 | git clone https://github.com/wallabag/wallabag.git |
53 | cd wallabag | 53 | cd wallabag |
54 | git checkout 2.0.4 | 54 | git checkout 2.0.7 |
55 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist | 55 | SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist |
56 | php bin/console wallabag:install --env=prod | 56 | php bin/console wallabag:install --env=prod |
57 | 57 | ||
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/phpunit.xml.dist b/phpunit.xml.dist index e68df9de..38880908 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist | |||
@@ -1,24 +1,20 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | 2 | ||
3 | <phpunit backupGlobals="false" | 3 | <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
4 | backupStaticAttributes="false" | 4 | xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd" |
5 | backupGlobals="false" | ||
5 | colors="true" | 6 | colors="true" |
6 | convertErrorsToExceptions="true" | ||
7 | convertNoticesToExceptions="true" | ||
8 | convertWarningsToExceptions="true" | ||
9 | processIsolation="false" | ||
10 | stopOnFailure="false" | ||
11 | syntaxCheck="false" | ||
12 | bootstrap="app/autoload.php" | 7 | bootstrap="app/autoload.php" |
13 | > | 8 | > |
14 | 9 | ||
15 | <testsuites> | 10 | <testsuites> |
16 | <testsuite name="wallabag Test Suite"> | 11 | <testsuite name="wallabag Test Suite"> |
17 | <directory>src/Wallabag/*Bundle/Tests</directory> | 12 | <directory>tests</directory> |
18 | </testsuite> | 13 | </testsuite> |
19 | </testsuites> | 14 | </testsuites> |
20 | 15 | ||
21 | <php> | 16 | <php> |
17 | <ini name="error_reporting" value="-1" /> | ||
22 | <server name="KERNEL_DIR" value="app/" /> | 18 | <server name="KERNEL_DIR" value="app/" /> |
23 | </php> | 19 | </php> |
24 | 20 | ||
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/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 69dfd4b1..ccdf9406 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php | |||
@@ -23,10 +23,16 @@ class EntryController extends Controller | |||
23 | { | 23 | { |
24 | try { | 24 | try { |
25 | $entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); | 25 | $entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); |
26 | |||
26 | $em = $this->getDoctrine()->getManager(); | 27 | $em = $this->getDoctrine()->getManager(); |
27 | $em->persist($entry); | 28 | $em->persist($entry); |
28 | $em->flush(); | 29 | $em->flush(); |
29 | } catch (\Exception $e) { | 30 | } catch (\Exception $e) { |
31 | $this->get('logger')->error('Error while saving an entry', [ | ||
32 | 'exception' => $e, | ||
33 | 'entry' => $entry, | ||
34 | ]); | ||
35 | |||
30 | return false; | 36 | return false; |
31 | } | 37 | } |
32 | 38 | ||
@@ -60,11 +66,12 @@ class EntryController extends Controller | |||
60 | return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()])); | 66 | return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()])); |
61 | } | 67 | } |
62 | 68 | ||
63 | $this->updateEntry($entry); | 69 | $message = 'flashes.entry.notice.entry_saved'; |
64 | $this->get('session')->getFlashBag()->add( | 70 | if (false === $this->updateEntry($entry)) { |
65 | 'notice', | 71 | $message = 'flashes.entry.notice.entry_saved_failed'; |
66 | 'flashes.entry.notice.entry_saved' | 72 | } |
67 | ); | 73 | |
74 | $this->get('session')->getFlashBag()->add('notice', $message); | ||
68 | 75 | ||
69 | return $this->redirect($this->generateUrl('homepage')); | 76 | return $this->redirect($this->generateUrl('homepage')); |
70 | } | 77 | } |
@@ -350,7 +357,7 @@ class EntryController extends Controller | |||
350 | } | 357 | } |
351 | 358 | ||
352 | /** | 359 | /** |
353 | * Changes favorite status for an entry. | 360 | * Changes starred status for an entry. |
354 | * | 361 | * |
355 | * @param Request $request | 362 | * @param Request $request |
356 | * @param Entry $entry | 363 | * @param Entry $entry |
@@ -399,7 +406,7 @@ class EntryController extends Controller | |||
399 | $url = $this->generateUrl( | 406 | $url = $this->generateUrl( |
400 | 'view', | 407 | 'view', |
401 | ['id' => $entry->getId()], | 408 | ['id' => $entry->getId()], |
402 | UrlGeneratorInterface::ABSOLUTE_URL | 409 | UrlGeneratorInterface::ABSOLUTE_PATH |
403 | ); | 410 | ); |
404 | 411 | ||
405 | $em = $this->getDoctrine()->getManager(); | 412 | $em = $this->getDoctrine()->getManager(); |
@@ -411,8 +418,9 @@ class EntryController extends Controller | |||
411 | 'flashes.entry.notice.entry_deleted' | 418 | 'flashes.entry.notice.entry_deleted' |
412 | ); | 419 | ); |
413 | 420 | ||
414 | // don't redirect user to the deleted entry | 421 | // don't redirect user to the deleted entry (check that the referer doesn't end with the same url) |
415 | $to = ($url !== $request->headers->get('referer') ? $request->headers->get('referer') : null); | 422 | $referer = $request->headers->get('referer'); |
423 | $to = (1 !== preg_match('#'.$url.'$#i', $referer) ? $referer : null); | ||
416 | 424 | ||
417 | $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to); | 425 | $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to); |
418 | 426 | ||
diff --git a/src/Wallabag/CoreBundle/Controller/FooterController.php b/src/Wallabag/CoreBundle/Controller/FooterController.php new file mode 100644 index 00000000..fd93c436 --- /dev/null +++ b/src/Wallabag/CoreBundle/Controller/FooterController.php | |||
@@ -0,0 +1,27 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Controller; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | |||
7 | class FooterController extends Controller | ||
8 | { | ||
9 | /** | ||
10 | * Display the footer. | ||
11 | * | ||
12 | * @return \Symfony\Component\HttpFoundation\Response | ||
13 | */ | ||
14 | public function indexAction() | ||
15 | { | ||
16 | $addonsUrl = $this->container->getParameter('addons_url'); | ||
17 | $socialsUrl = $this->container->getParameter('socials_url'); | ||
18 | |||
19 | return $this->render( | ||
20 | 'WallabagCoreBundle::footer.html.twig', | ||
21 | [ | ||
22 | 'addonsUrl' => $addonsUrl, | ||
23 | 'socialsUrl' => $socialsUrl, | ||
24 | ] | ||
25 | ); | ||
26 | } | ||
27 | } | ||
diff --git a/src/Wallabag/CoreBundle/Controller/StaticController.php b/src/Wallabag/CoreBundle/Controller/StaticController.php index b41302f8..2a57f06f 100644 --- a/src/Wallabag/CoreBundle/Controller/StaticController.php +++ b/src/Wallabag/CoreBundle/Controller/StaticController.php | |||
@@ -12,9 +12,11 @@ class StaticController extends Controller | |||
12 | */ | 12 | */ |
13 | public function howtoAction() | 13 | public function howtoAction() |
14 | { | 14 | { |
15 | $addonsUrl = $this->container->getParameter('addons_url'); | ||
16 | |||
15 | return $this->render( | 17 | return $this->render( |
16 | 'WallabagCoreBundle:Static:howto.html.twig', | 18 | 'WallabagCoreBundle:Static:howto.html.twig', |
17 | [] | 19 | ['addonsUrl' => $addonsUrl] |
18 | ); | 20 | ); |
19 | } | 21 | } |
20 | 22 | ||
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php index 5a376453..03be9667 100644 --- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php +++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadConfigData.php | |||
@@ -6,7 +6,6 @@ use Doctrine\Common\DataFixtures\AbstractFixture; | |||
6 | use Doctrine\Common\DataFixtures\OrderedFixtureInterface; | 6 | use Doctrine\Common\DataFixtures\OrderedFixtureInterface; |
7 | use Doctrine\Common\Persistence\ObjectManager; | 7 | use Doctrine\Common\Persistence\ObjectManager; |
8 | use Wallabag\CoreBundle\Entity\Config; | 8 | use Wallabag\CoreBundle\Entity\Config; |
9 | use Wallabag\CoreBundle\Entity\TaggingRule; | ||
10 | 9 | ||
11 | class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface | 10 | class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface |
12 | { | 11 | { |
@@ -16,12 +15,6 @@ class LoadConfigData extends AbstractFixture implements OrderedFixtureInterface | |||
16 | public function load(ObjectManager $manager) | 15 | public function load(ObjectManager $manager) |
17 | { | 16 | { |
18 | $adminConfig = new Config($this->getReference('admin-user')); | 17 | $adminConfig = new Config($this->getReference('admin-user')); |
19 | $taggingRule = new TaggingRule(); | ||
20 | |||
21 | $taggingRule->setConfig($adminConfig); | ||
22 | $taggingRule->setRule('title matches "wallabag"'); | ||
23 | $taggingRule->setTags(['wallabag']); | ||
24 | $manager->persist($taggingRule); | ||
25 | 18 | ||
26 | $adminConfig->setTheme('material'); | 19 | $adminConfig->setTheme('material'); |
27 | $adminConfig->setItemsPerPage(30); | 20 | $adminConfig->setItemsPerPage(30); |
diff --git a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTaggingRuleData.php b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTaggingRuleData.php index 2e1cc270..7efe6356 100644 --- a/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTaggingRuleData.php +++ b/src/Wallabag/CoreBundle/DataFixtures/ORM/LoadTaggingRuleData.php | |||
@@ -28,6 +28,14 @@ class LoadTaggingRuleData extends AbstractFixture implements OrderedFixtureInter | |||
28 | 28 | ||
29 | $manager->persist($tr2); | 29 | $manager->persist($tr2); |
30 | 30 | ||
31 | $tr3 = new TaggingRule(); | ||
32 | |||
33 | $tr3->setRule('title matches "wallabag"'); | ||
34 | $tr3->setTags(['wallabag']); | ||
35 | $tr3->setConfig($this->getReference('admin-config')); | ||
36 | |||
37 | $manager->persist($tr3); | ||
38 | |||
31 | $manager->flush(); | 39 | $manager->flush(); |
32 | } | 40 | } |
33 | 41 | ||
diff --git a/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php b/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php index 84599f0d..7d08b73b 100644 --- a/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php +++ b/src/Wallabag/CoreBundle/DependencyInjection/WallabagCoreExtension.php | |||
@@ -25,6 +25,7 @@ class WallabagCoreExtension extends Extension | |||
25 | 25 | ||
26 | $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); | 26 | $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); |
27 | $loader->load('services.yml'); | 27 | $loader->load('services.yml'); |
28 | $loader->load('parameters.yml'); | ||
28 | } | 29 | } |
29 | 30 | ||
30 | public function getAlias() | 31 | public function getAlias() |
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php index 1271f1f5..ceae78b0 100644 --- a/src/Wallabag/CoreBundle/Entity/Entry.php +++ b/src/Wallabag/CoreBundle/Entity/Entry.php | |||
@@ -177,8 +177,16 @@ class Entry | |||
177 | private $user; | 177 | private $user; |
178 | 178 | ||
179 | /** | 179 | /** |
180 | * @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist", "remove"}) | 180 | * @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist"}) |
181 | * @ORM\JoinTable | 181 | * @ORM\JoinTable( |
182 | * name="entry_tag", | ||
183 | * joinColumns={ | ||
184 | * @ORM\JoinColumn(name="entry_id", referencedColumnName="id") | ||
185 | * }, | ||
186 | * inverseJoinColumns={ | ||
187 | * @ORM\JoinColumn(name="tag_id", referencedColumnName="id") | ||
188 | * } | ||
189 | * ) | ||
182 | * | 190 | * |
183 | * @Groups({"entries_for_user", "export_all"}) | 191 | * @Groups({"entries_for_user", "export_all"}) |
184 | */ | 192 | */ |
@@ -526,13 +534,18 @@ class Entry | |||
526 | } | 534 | } |
527 | } | 535 | } |
528 | 536 | ||
529 | $this->tags[] = $tag; | 537 | $this->tags->add($tag); |
530 | $tag->addEntry($this); | 538 | $tag->addEntry($this); |
531 | } | 539 | } |
532 | 540 | ||
533 | public function removeTag(Tag $tag) | 541 | public function removeTag(Tag $tag) |
534 | { | 542 | { |
543 | if (!$this->tags->contains($tag)) { | ||
544 | return; | ||
545 | } | ||
546 | |||
535 | $this->tags->removeElement($tag); | 547 | $this->tags->removeElement($tag); |
548 | $tag->removeEntry($this); | ||
536 | } | 549 | } |
537 | 550 | ||
538 | /** | 551 | /** |
diff --git a/src/Wallabag/CoreBundle/Entity/Tag.php b/src/Wallabag/CoreBundle/Entity/Tag.php index b4adbbd3..4b480ff1 100644 --- a/src/Wallabag/CoreBundle/Entity/Tag.php +++ b/src/Wallabag/CoreBundle/Entity/Tag.php | |||
@@ -98,9 +98,30 @@ class Tag | |||
98 | return $this->slug; | 98 | return $this->slug; |
99 | } | 99 | } |
100 | 100 | ||
101 | /** | ||
102 | * @param Entry $entry | ||
103 | */ | ||
101 | public function addEntry(Entry $entry) | 104 | public function addEntry(Entry $entry) |
102 | { | 105 | { |
103 | $this->entries[] = $entry; | 106 | if ($this->entries->contains($entry)) { |
107 | return; | ||
108 | } | ||
109 | |||
110 | $this->entries->add($entry); | ||
111 | $entry->addTag($this); | ||
112 | } | ||
113 | |||
114 | /** | ||
115 | * @param Entry $entry | ||
116 | */ | ||
117 | public function removeEntry(Entry $entry) | ||
118 | { | ||
119 | if (!$this->entries->contains($entry)) { | ||
120 | return; | ||
121 | } | ||
122 | |||
123 | $this->entries->removeElement($entry); | ||
124 | $entry->removeTag($this); | ||
104 | } | 125 | } |
105 | 126 | ||
106 | public function hasEntry($entry) | 127 | public function hasEntry($entry) |
diff --git a/src/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformer.php b/src/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformer.php index b712ad15..cb4bee83 100644 --- a/src/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformer.php +++ b/src/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformer.php | |||
@@ -16,7 +16,7 @@ class StringToListTransformer implements DataTransformerInterface | |||
16 | private $separator; | 16 | private $separator; |
17 | 17 | ||
18 | /** | 18 | /** |
19 | * @param string $separator The separator used in the list. | 19 | * @param string $separator The separator used in the list |
20 | */ | 20 | */ |
21 | public function __construct($separator = ',') | 21 | public function __construct($separator = ',') |
22 | { | 22 | { |
diff --git a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php index 4cf22200..7d25cc80 100644 --- a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php +++ b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php | |||
@@ -21,7 +21,9 @@ class ConfigType extends AbstractType | |||
21 | { | 21 | { |
22 | $this->themes = array_combine( | 22 | $this->themes = array_combine( |
23 | $themes, | 23 | $themes, |
24 | array_map(function ($s) { return ucwords(strtolower(str_replace('-', ' ', $s))); }, $themes) | 24 | array_map(function ($s) { |
25 | return ucwords(strtolower(str_replace('-', ' ', $s))); | ||
26 | }, $themes) | ||
25 | ); | 27 | ); |
26 | 28 | ||
27 | $this->languages = $languages; | 29 | $this->languages = $languages; |
@@ -32,7 +34,6 @@ class ConfigType extends AbstractType | |||
32 | $builder | 34 | $builder |
33 | ->add('theme', ChoiceType::class, [ | 35 | ->add('theme', ChoiceType::class, [ |
34 | 'choices' => array_flip($this->themes), | 36 | 'choices' => array_flip($this->themes), |
35 | 'choices_as_values' => true, | ||
36 | 'label' => 'config.form_settings.theme_label', | 37 | 'label' => 'config.form_settings.theme_label', |
37 | ]) | 38 | ]) |
38 | ->add('items_per_page', null, [ | 39 | ->add('items_per_page', null, [ |
@@ -49,7 +50,6 @@ class ConfigType extends AbstractType | |||
49 | ]) | 50 | ]) |
50 | ->add('language', ChoiceType::class, [ | 51 | ->add('language', ChoiceType::class, [ |
51 | 'choices' => array_flip($this->languages), | 52 | 'choices' => array_flip($this->languages), |
52 | 'choices_as_values' => true, | ||
53 | 'label' => 'config.form_settings.language_label', | 53 | 'label' => 'config.form_settings.language_label', |
54 | ]) | 54 | ]) |
55 | ->add('save', SubmitType::class, [ | 55 | ->add('save', SubmitType::class, [ |
diff --git a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php index cd4d3490..3c597b5d 100644 --- a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php +++ b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php | |||
@@ -36,17 +36,26 @@ class EntryFilterType extends AbstractType | |||
36 | $builder | 36 | $builder |
37 | ->add('readingTime', NumberRangeFilterType::class, [ | 37 | ->add('readingTime', NumberRangeFilterType::class, [ |
38 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { | 38 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
39 | $value = $values['value']; | 39 | $lower = $values['value']['left_number'][0]; |
40 | $upper = $values['value']['right_number'][0]; | ||
41 | |||
42 | $min = (int) ($lower * $this->user->getConfig()->getReadingSpeed()); | ||
43 | $max = (int) ($upper * $this->user->getConfig()->getReadingSpeed()); | ||
40 | 44 | ||
41 | if (null === $value['left_number'][0] || null === $value['right_number'][0]) { | 45 | if (null === $lower && null === $upper) { |
46 | // no value? no filter | ||
42 | return; | 47 | return; |
48 | } elseif (null === $lower && null !== $upper) { | ||
49 | // only lower value is defined: query all entries with reading LOWER THAN this value | ||
50 | $expression = $filterQuery->getExpr()->lte($field, $max); | ||
51 | } elseif (null !== $lower && null === $upper) { | ||
52 | // only upper value is defined: query all entries with reading GREATER THAN this value | ||
53 | $expression = $filterQuery->getExpr()->gte($field, $min); | ||
54 | } else { | ||
55 | // both value are defined, perform a between | ||
56 | $expression = $filterQuery->getExpr()->between($field, $min, $max); | ||
43 | } | 57 | } |
44 | 58 | ||
45 | $min = (int) ($value['left_number'][0] * $this->user->getConfig()->getReadingSpeed()); | ||
46 | $max = (int) ($value['right_number'][0] * $this->user->getConfig()->getReadingSpeed()); | ||
47 | |||
48 | $expression = $filterQuery->getExpr()->between($field, $min, $max); | ||
49 | |||
50 | return $filterQuery->createCondition($expression); | 59 | return $filterQuery->createCondition($expression); |
51 | }, | 60 | }, |
52 | 'label' => 'entry.filters.reading_time.label', | 61 | 'label' => 'entry.filters.reading_time.label', |
@@ -87,6 +96,18 @@ class EntryFilterType extends AbstractType | |||
87 | ->add('isStarred', CheckboxFilterType::class, [ | 96 | ->add('isStarred', CheckboxFilterType::class, [ |
88 | 'label' => 'entry.filters.starred_label', | 97 | 'label' => 'entry.filters.starred_label', |
89 | ]) | 98 | ]) |
99 | ->add('isUnread', CheckboxFilterType::class, [ | ||
100 | 'label' => 'entry.filters.unread_label', | ||
101 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { | ||
102 | if (false === $values['value']) { | ||
103 | return; | ||
104 | } | ||
105 | |||
106 | $expression = $filterQuery->getExpr()->eq('e.isArchived', 'false'); | ||
107 | |||
108 | return $filterQuery->createCondition($expression); | ||
109 | }, | ||
110 | ]) | ||
90 | ->add('previewPicture', CheckboxFilterType::class, [ | 111 | ->add('previewPicture', CheckboxFilterType::class, [ |
91 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { | 112 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
92 | if (false === $values['value']) { | 113 | if (false === $values['value']) { |
@@ -101,7 +122,6 @@ class EntryFilterType extends AbstractType | |||
101 | ]) | 122 | ]) |
102 | ->add('language', ChoiceFilterType::class, [ | 123 | ->add('language', ChoiceFilterType::class, [ |
103 | 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())), | 124 | 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())), |
104 | 'choices_as_values' => true, | ||
105 | 'label' => 'entry.filters.language_label', | 125 | 'label' => 'entry.filters.language_label', |
106 | ]) | 126 | ]) |
107 | ; | 127 | ; |
diff --git a/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php b/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php index 14ef4a64..239d09ae 100644 --- a/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php +++ b/src/Wallabag/CoreBundle/Helper/RuleBasedTagger.php | |||
@@ -25,7 +25,7 @@ class RuleBasedTagger | |||
25 | /** | 25 | /** |
26 | * Add tags from rules defined by the user. | 26 | * Add tags from rules defined by the user. |
27 | * | 27 | * |
28 | * @param Entry $entry Entry to tag. | 28 | * @param Entry $entry Entry to tag |
29 | */ | 29 | */ |
30 | public function tag(Entry $entry) | 30 | public function tag(Entry $entry) |
31 | { | 31 | { |
@@ -49,7 +49,7 @@ class RuleBasedTagger | |||
49 | * | 49 | * |
50 | * @param User $user | 50 | * @param User $user |
51 | * | 51 | * |
52 | * @return array<Entry> A list of modified entries. | 52 | * @return array<Entry> A list of modified entries |
53 | */ | 53 | */ |
54 | public function tagAllForUser(User $user) | 54 | public function tagAllForUser(User $user) |
55 | { | 55 | { |
@@ -75,7 +75,7 @@ class RuleBasedTagger | |||
75 | /** | 75 | /** |
76 | * Fetch a tag. | 76 | * Fetch a tag. |
77 | * | 77 | * |
78 | * @param string $label The tag's label. | 78 | * @param string $label The tag's label |
79 | * | 79 | * |
80 | * @return Tag | 80 | * @return Tag |
81 | */ | 81 | */ |
diff --git a/src/Wallabag/CoreBundle/Resources/config/parameters.yml b/src/Wallabag/CoreBundle/Resources/config/parameters.yml new file mode 100644 index 00000000..abd9ab68 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/config/parameters.yml | |||
@@ -0,0 +1,12 @@ | |||
1 | parameters: | ||
2 | addons_url: | ||
3 | firefox: https://addons.mozilla.org/firefox/addon/wallabag-v2/ | ||
4 | chrome: https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm | ||
5 | f_droid: https://f-droid.org/app/fr.gaulupeau.apps.InThePoche | ||
6 | google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche | ||
7 | ios: https://itunes.apple.com/app/wallabag/id828331015?mt=8 | ||
8 | windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646 | ||
9 | socials_url: | ||
10 | twitter: https://twitter.com/wallabagapp | ||
11 | google_plus: https://plus.google.com/+WallabagOrg/posts | ||
12 | facebook: https://facebook.com/Wallabag | ||
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css index b203cbb8..605eb641 100644 --- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/css/ratatouille.css | |||
@@ -64,7 +64,7 @@ pre { | |||
64 | max-width: 61.25em;/*980px*/ | 64 | max-width: 61.25em;/*980px*/ |
65 | } | 65 | } |
66 | 66 | ||
67 | table, img { | 67 | table, img, figure { |
68 | max-width: 100%; | 68 | max-width: 100%; |
69 | height :auto; | 69 | height :auto; |
70 | } | 70 | } |
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css index f0beab98..eb4eebd8 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css | |||
@@ -351,7 +351,8 @@ main ul.row { | |||
351 | max-width: 40em; | 351 | max-width: 40em; |
352 | } | 352 | } |
353 | 353 | ||
354 | #article img { | 354 | #article img, |
355 | #article figure { | ||
355 | max-width: 100%; | 356 | max-width: 100%; |
356 | height: auto; | 357 | height: auto; |
357 | } | 358 | } |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml index 8d392063..c066aaf7 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'estimeret læsetid' | 144 | reading_time: 'estimeret læsetid' |
145 | reading_time_minutes: 'estimeret læsetid: %readingTime% min' | 145 | reading_time_minutes: 'estimeret læsetid: %readingTime% min' |
146 | reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Marker som læst' | 150 | toogle_as_read: 'Marker som læst' |
149 | toogle_as_star: 'Skift favoritstatus' | 151 | toogle_as_star: 'Skift favoritstatus' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Status' | 156 | status_label: 'Status' |
155 | archived_label: 'Arkiveret' | 157 | archived_label: 'Arkiveret' |
156 | starred_label: 'Favorit' | 158 | starred_label: 'Favorit' |
159 | unread_label: 'Ulæst' | ||
157 | preview_picture_label: 'Har et vist billede' | 160 | preview_picture_label: 'Har et vist billede' |
158 | preview_picture_help: 'Forhåndsvis billede' | 161 | preview_picture_help: 'Forhåndsvis billede' |
159 | language_label: 'Sprog' | 162 | language_label: 'Sprog' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Tilbage' | 178 | back_to_homepage: 'Tilbage' |
176 | set_as_read: 'Marker som læst' | 179 | set_as_read: 'Marker som læst' |
177 | # set_as_unread: 'Mark as unread' | 180 | # set_as_unread: 'Mark as unread' |
178 | set_as_favorite: 'Marker som favorit' | 181 | set_as_starred: 'Marker som favorit' |
179 | view_original_article: 'Originalartikel' | 182 | view_original_article: 'Originalartikel' |
180 | # re_fetch_content: 'Re-fetch content' | 183 | # re_fetch_content: 'Re-fetch content' |
181 | delete: 'Slet' | 184 | delete: 'Slet' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Rediger titel' | 193 | edit_title: 'Rediger titel' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | 195 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' |
196 | created_at: 'Oprettelsesdato' | ||
193 | new: | 197 | new: |
194 | page_title: 'Gem ny artikel' | 198 | page_title: 'Gem ny artikel' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | # entry_already_saved: 'Entry already saved on %date%' | 401 | # entry_already_saved: 'Entry already saved on %date%' |
398 | # entry_saved: 'Entry saved' | 402 | # entry_saved: 'Entry saved' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | # entry_updated: 'Entry updated' | 404 | # entry_updated: 'Entry updated' |
400 | # entry_reloaded: 'Entry reloaded' | 405 | # entry_reloaded: 'Entry reloaded' |
401 | # entry_reload_failed: 'Failed to reload entry' | 406 | # entry_reload_failed: 'Failed to reload entry' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml index c7a89492..28d826b6 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'geschätzte Lesezeit' | 144 | reading_time: 'geschätzte Lesezeit' |
145 | reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min' | 145 | reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min' |
146 | reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Gelesen-Status ändern' | 150 | toogle_as_read: 'Gelesen-Status ändern' |
149 | toogle_as_star: 'Favoriten-Status ändern' | 151 | toogle_as_star: 'Favoriten-Status ändern' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Status' | 156 | status_label: 'Status' |
155 | archived_label: 'Archiviert' | 157 | archived_label: 'Archiviert' |
156 | starred_label: 'Favorisiert' | 158 | starred_label: 'Favorisiert' |
159 | unread_label: 'Ungelesene' | ||
157 | preview_picture_label: 'Vorschaubild vorhanden' | 160 | preview_picture_label: 'Vorschaubild vorhanden' |
158 | preview_picture_help: 'Vorschaubild' | 161 | preview_picture_help: 'Vorschaubild' |
159 | language_label: 'Sprache' | 162 | language_label: 'Sprache' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Zurück' | 178 | back_to_homepage: 'Zurück' |
176 | set_as_read: 'Als gelesen markieren' | 179 | set_as_read: 'Als gelesen markieren' |
177 | set_as_unread: 'Als ungelesen markieren' | 180 | set_as_unread: 'Als ungelesen markieren' |
178 | set_as_favorite: 'Favorisieren' | 181 | set_as_starred: 'Favorisieren' |
179 | view_original_article: 'Original-Artikel' | 182 | view_original_article: 'Original-Artikel' |
180 | re_fetch_content: 'Inhalt neu laden' | 183 | re_fetch_content: 'Inhalt neu laden' |
181 | delete: 'Löschen' | 184 | delete: 'Löschen' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Titel ändern' | 193 | edit_title: 'Titel ändern' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | annotations_on_the_entry: '{0} Keine Anmerkungen|{1} Eine Anmerkung|]1,Inf[ %nbAnnotations% Anmerkungen' | 195 | annotations_on_the_entry: '{0} Keine Anmerkungen|{1} Eine Anmerkung|]1,Inf[ %nbAnnotations% Anmerkungen' |
196 | created_at: 'Erstellungsdatum' | ||
193 | new: | 197 | new: |
194 | page_title: 'Neuen Artikel speichern' | 198 | page_title: 'Neuen Artikel speichern' |
195 | placeholder: 'https://website.de' | 199 | placeholder: 'https://website.de' |
@@ -395,7 +399,8 @@ flashes: | |||
395 | entry: | 399 | entry: |
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Eintrag bereits am %date% gespeichert' | 401 | entry_already_saved: 'Eintrag bereits am %date% gespeichert' |
398 | entry_saved: 'Eintag gespeichert' | 402 | entry_saved: 'Eintrag gespeichert' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | entry_updated: 'Eintrag aktualisiert' | 404 | entry_updated: 'Eintrag aktualisiert' |
400 | entry_reloaded: 'Eintrag neugeladen' | 405 | entry_reloaded: 'Eintrag neugeladen' |
401 | entry_reload_failed: 'Neuladen des Eintrags fehlgeschlagen' | 406 | entry_reload_failed: 'Neuladen des Eintrags fehlgeschlagen' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml index 1cc42404..c6633f5b 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 <= 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 >= 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 <= 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 >= 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,13 +140,15 @@ 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"><</small> 1 min' | 146 | reading_time_less_one_minute: 'estimated reading time: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Toggle mark as read' | 150 | toogle_as_read: 'Toggle mark as read' |
149 | toogle_as_star: 'Toggle favorite' | 151 | toogle_as_star: 'Toggle starred' |
150 | delete: 'Delete' | 152 | delete: 'Delete' |
151 | export_title: 'Export' | 153 | export_title: 'Export' |
152 | filters: | 154 | filters: |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Status' | 156 | status_label: 'Status' |
155 | archived_label: 'Archived' | 157 | archived_label: 'Archived' |
156 | starred_label: 'Starred' | 158 | starred_label: 'Starred' |
159 | unread_label: 'Unread' | ||
157 | preview_picture_label: 'Has a preview picture' | 160 | preview_picture_label: 'Has a preview picture' |
158 | preview_picture_help: 'Preview picture' | 161 | preview_picture_help: 'Preview picture' |
159 | language_label: 'Language' | 162 | language_label: 'Language' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Back' | 178 | back_to_homepage: 'Back' |
176 | set_as_read: 'Mark as read' | 179 | set_as_read: 'Mark as read' |
177 | set_as_unread: 'Mark as unread' | 180 | set_as_unread: 'Mark as unread' |
178 | set_as_favorite: 'Favorite' | 181 | set_as_starred: 'Toggle starred' |
179 | view_original_article: 'Original article' | 182 | view_original_article: 'Original article' |
180 | re_fetch_content: 'Re-fetch content' | 183 | re_fetch_content: 'Re-fetch content' |
181 | delete: 'Delete' | 184 | delete: 'Delete' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Edit title' | 193 | edit_title: 'Edit title' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | 195 | annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' |
196 | created_at: 'Creation date' | ||
193 | new: | 197 | new: |
194 | page_title: 'Save new entry' | 198 | page_title: 'Save new entry' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -222,14 +226,14 @@ about: | |||
222 | bug_reports: 'Bug reports' | 226 | bug_reports: 'Bug reports' |
223 | support: '<a href="https://support.wallabag.org">On our support website</a> or <a href="https://github.com/wallabag/wallabag/issues">on GitHub</a>' | 227 | 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 | helping: | 228 | helping: |
225 | description: 'wallabag is free and opensource. You can help us:' | 229 | description: 'wallabag is free and open source. You can help us:' |
226 | by_contributing: 'by contributing to the project:' | 230 | by_contributing: 'by contributing to the project:' |
227 | by_contributing_2: 'an issue lists all our needs' | 231 | by_contributing_2: 'an issue lists all our needs' |
228 | by_paypal: 'via Paypal' | 232 | by_paypal: 'via Paypal' |
229 | contributors: | 233 | contributors: |
230 | description: 'Thank you to contributors on wallabag web application' | 234 | description: 'Thank you to contributors on wallabag web application' |
231 | third_party: | 235 | third_party: |
232 | description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' | 236 | description: 'Here is the list of third-party libraries used in wallabag (with their licenses):' |
233 | package: 'Package' | 237 | package: 'Package' |
234 | license: 'License' | 238 | license: 'License' |
235 | 239 | ||
@@ -258,7 +262,7 @@ quickstart: | |||
258 | page_title: 'Quickstart' | 262 | page_title: 'Quickstart' |
259 | intro: | 263 | intro: |
260 | title: 'Welcome to wallabag!' | 264 | title: 'Welcome to wallabag!' |
261 | paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." | 265 | paragraph_1: "We'll accompany you on your visit to wallabag and show you some features that might interest you." |
262 | paragraph_2: 'Follow us!' | 266 | paragraph_2: 'Follow us!' |
263 | configure: | 267 | configure: |
264 | title: 'Configure the application' | 268 | title: 'Configure the application' |
@@ -290,7 +294,7 @@ quickstart: | |||
290 | title: 'Full documentation' | 294 | title: 'Full documentation' |
291 | annotate: 'Annotate your article' | 295 | annotate: 'Annotate your article' |
292 | export: 'Convert your articles into ePUB or PDF' | 296 | export: 'Convert your articles into ePUB or PDF' |
293 | search_filters: 'See how you can look for an article by using search engine and filters' | 297 | search_filters: 'See how you can look for an article by using the search engine and filters' |
294 | fetching_errors: 'What can I do if an article encounters errors during fetching?' | 298 | fetching_errors: 'What can I do if an article encounters errors during fetching?' |
295 | all_docs: 'And so many other articles!' | 299 | all_docs: 'And so many other articles!' |
296 | support: | 300 | support: |
@@ -303,11 +307,11 @@ quickstart: | |||
303 | tag: | 307 | tag: |
304 | page_title: 'Tags' | 308 | page_title: 'Tags' |
305 | list: | 309 | list: |
306 | number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' | 310 | number_on_the_page: '{0} There are no tags.|{1} There is one tag.|]1,Inf[ There are %count% tags.' |
307 | 311 | ||
308 | import: | 312 | import: |
309 | page_title: 'Import' | 313 | page_title: 'Import' |
310 | page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' | 314 | page_description: 'Welcome to wallabag importer. Please select your previous service from which you want to migrate.' |
311 | action: | 315 | action: |
312 | import_contents: 'Import contents' | 316 | import_contents: 'Import contents' |
313 | form: | 317 | form: |
@@ -317,7 +321,7 @@ import: | |||
317 | save_label: 'Upload file' | 321 | save_label: 'Upload file' |
318 | pocket: | 322 | pocket: |
319 | page_title: 'Import > Pocket' | 323 | page_title: 'Import > Pocket' |
320 | 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." | 324 | 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." |
321 | config_missing: | 325 | config_missing: |
322 | description: "Pocket import isn't configured." | 326 | description: "Pocket import isn't configured." |
323 | admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' | 327 | admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Entry already saved on %date%' | 401 | entry_already_saved: 'Entry already saved on %date%' |
398 | entry_saved: 'Entry saved' | 402 | entry_saved: 'Entry saved' |
403 | entry_saved_failed: 'Failed to save entry' | ||
399 | entry_updated: 'Entry updated' | 404 | entry_updated: 'Entry updated' |
400 | entry_reloaded: 'Entry reloaded' | 405 | entry_reloaded: 'Entry reloaded' |
401 | entry_reload_failed: 'Failed to reload entry' | 406 | entry_reload_failed: 'Failed to reload entry' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml index e8461247..266b4af5 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml | |||
@@ -135,7 +135,7 @@ config: | |||
135 | 135 | ||
136 | entry: | 136 | entry: |
137 | page_titles: | 137 | page_titles: |
138 | unread: 'Artúclos no leÃdos' | 138 | unread: 'ArtÃculos no leÃdos' |
139 | starred: 'ArtÃculos favoritos' | 139 | starred: 'ArtÃculos favoritos' |
140 | archived: 'ArtÃculos archivados' | 140 | archived: 'ArtÃculos archivados' |
141 | filtered: 'ArtÃculos filtrados' | 141 | filtered: 'ArtÃculos filtrados' |
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'tiempo estimado de lectura' | 144 | reading_time: 'tiempo estimado de lectura' |
145 | reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min' | 145 | reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min' |
146 | reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Marcar como leÃdo/ no leÃdo' | 150 | toogle_as_read: 'Marcar como leÃdo/ no leÃdo' |
149 | toogle_as_star: 'Marcar como favorito/ no favorito' | 151 | toogle_as_star: 'Marcar como favorito/ no favorito' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Estatus' | 156 | status_label: 'Estatus' |
155 | archived_label: 'Archivado' | 157 | archived_label: 'Archivado' |
156 | starred_label: 'Favorito' | 158 | starred_label: 'Favorito' |
159 | unread_label: 'Sin leer' | ||
157 | preview_picture_label: 'Hay una foto' | 160 | preview_picture_label: 'Hay una foto' |
158 | preview_picture_help: 'Foto de preview' | 161 | preview_picture_help: 'Foto de preview' |
159 | language_label: 'Idioma' | 162 | language_label: 'Idioma' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Regrese a la página principal' | 178 | back_to_homepage: 'Regrese a la página principal' |
176 | set_as_read: 'Marcar como leÃdo' | 179 | set_as_read: 'Marcar como leÃdo' |
177 | set_as_unread: 'Marcar como no leÃdo' | 180 | set_as_unread: 'Marcar como no leÃdo' |
178 | set_as_favorite: 'Marcar como favorito' | 181 | set_as_starred: 'Marcar como favorito' |
179 | view_original_article: 'ArtÃculo original' | 182 | view_original_article: 'ArtÃculo original' |
180 | re_fetch_content: 'Redescargar el contenido' | 183 | re_fetch_content: 'Redescargar el contenido' |
181 | delete: 'Suprimir' | 184 | delete: 'Suprimir' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Modificar el tÃtulo' | 193 | edit_title: 'Modificar el tÃtulo' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones' | 195 | annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones' |
196 | created_at: 'Fecha de creación' | ||
193 | new: | 197 | new: |
194 | page_title: 'Guardar un nuevo artÃculo' | 198 | page_title: 'Guardar un nuevo artÃculo' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Entrada ya guardada por %fecha%' | 401 | entry_already_saved: 'Entrada ya guardada por %fecha%' |
398 | entry_saved: 'Entrada guardada' | 402 | entry_saved: 'Entrada guardada' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | entry_updated: 'Entrada actualizada' | 404 | entry_updated: 'Entrada actualizada' |
400 | entry_reloaded: 'Entrada recargada' | 405 | entry_reloaded: 'Entrada recargada' |
401 | entry_reload_failed: 'Entrada recargada reprobada' | 406 | entry_reload_failed: 'Entrada recargada reprobada' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml index d34ff8ff..c2350019 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml | |||
@@ -96,8 +96,8 @@ config: | |||
96 | rule_label: 'قانون' | 96 | rule_label: 'قانون' |
97 | tags_label: 'برچسب‌ها' | 97 | tags_label: 'برچسب‌ها' |
98 | faq: | 98 | faq: |
99 | title: 'پرسش‌های متداول' | 99 | title: 'پرسش‌های متداول' |
100 | tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟' | 100 | tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟' |
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 to manually classify 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 <= 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 >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | 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 <= 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 >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' |
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'زمان تخمینی برای خواندن' | 144 | reading_time: 'زمان تخمینی برای خواندن' |
145 | reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min' | 145 | reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min' |
146 | reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'خوانده‌شده/خوانده‌نشده' | 150 | toogle_as_read: 'خوانده‌شده/خوانده‌نشده' |
149 | toogle_as_star: 'برگزیده/نابرگزیده' | 151 | toogle_as_star: 'برگزیده/نابرگزیده' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'وضعیت' | 156 | status_label: 'وضعیت' |
155 | archived_label: 'بایگانی‌شده' | 157 | archived_label: 'بایگانی‌شده' |
156 | starred_label: 'برگزیده' | 158 | starred_label: 'برگزیده' |
159 | unread_label: 'خوانده‌نشده' | ||
157 | preview_picture_label: 'دارای عکس پیش‌نمایش' | 160 | preview_picture_label: 'دارای عکس پیش‌نمایش' |
158 | preview_picture_help: 'پیش‌نمایش عکس' | 161 | preview_picture_help: 'پیش‌نمایش عکس' |
159 | language_label: 'زبان' | 162 | language_label: 'زبان' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'بازگشت' | 178 | back_to_homepage: 'بازگشت' |
176 | set_as_read: 'خوانده‌شده' | 179 | set_as_read: 'خوانده‌شده' |
177 | set_as_unread: 'به عنوان خوانده‌نشده علامت بزن' | 180 | set_as_unread: 'به عنوان خوانده‌نشده علامت بزن' |
178 | set_as_favorite: 'برگزیده' | 181 | set_as_starred: 'برگزیده' |
179 | view_original_article: 'مقالهٔ اصلی' | 182 | view_original_article: 'مقالهٔ اصلی' |
180 | re_fetch_content: 'مقاله‌ها را دوباره دریاÙت Ú©Ù†' | 183 | re_fetch_content: 'مقاله‌ها را دوباره دریاÙت Ú©Ù†' |
181 | delete: 'پاک کردن' | 184 | delete: 'پاک کردن' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'ویرایش عنوان' | 193 | edit_title: 'ویرایش عنوان' |
191 | original_article: 'اصلی' | 194 | original_article: 'اصلی' |
192 | annotations_on_the_entry: '{0} بدون Øاشیه|{1} یک Øاشیه|]1,Inf[ %nbØاشیه% annotations' | 195 | annotations_on_the_entry: '{0} بدون Øاشیه|{1} یک Øاشیه|]1,Inf[ %nbØاشیه% annotations' |
196 | created_at: 'زمان ساخت' | ||
193 | new: | 197 | new: |
194 | page_title: 'ذخیرهٔ مقالهٔ تازه' | 198 | page_title: 'ذخیرهٔ مقالهٔ تازه' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -383,30 +387,31 @@ developer: | |||
383 | flashes: | 387 | flashes: |
384 | config: | 388 | config: |
385 | notice: | 389 | notice: |
386 | config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.' | 390 | config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.' |
387 | password_updated: 'رمز به‌روز شد' | 391 | password_updated: 'رمز به‌روز شد' |
388 | password_not_updated_demo: "در Øالت نمایشی نمی‌توانید رمز کاربر را عوض کنید." | 392 | password_not_updated_demo: "در Øالت نمایشی نمی‌توانید رمز کاربر را عوض کنید." |
389 | user_updated: 'اطلاعات به‌روز شد' | 393 | user_updated: 'اطلاعات به‌روز شد' |
390 | rss_updated: 'اطلاعات آر-اس-اس به‌روز شد' | 394 | rss_updated: 'اطلاعات آر-اس-اس به‌روز شد' |
391 | tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد' | 395 | tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد' |
392 | tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد' | 396 | tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد' |
393 | user_added: 'کابر "%username%" اÙزوده شد' | 397 | user_added: 'کابر "%username%" اÙزوده شد' |
394 | rss_token_updated: 'کد آر-اس-اس به‌روز شد' | 398 | rss_token_updated: 'کد آر-اس-اس به‌روز شد' |
395 | entry: | 399 | entry: |
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' | 401 | entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' |
398 | entry_saved: 'مقاله ذخیره شد' | 402 | entry_saved: 'مقاله ذخیره شد' |
399 | entry_updated: 'مقاله به‌روز شد' | 403 | # entry_saved_failed: 'Failed to save entry' |
400 | entry_reloaded: 'مقاله به‌روز شد' | 404 | entry_updated: 'مقاله به‌روز شد' |
401 | entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد' | 405 | entry_reloaded: 'مقاله به‌روز شد' |
402 | entry_archived: 'مقاله بایگانی شد' | 406 | entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد' |
403 | entry_unarchived: 'مقاله از بایگانی درآمد' | 407 | entry_archived: 'مقاله بایگانی شد' |
404 | entry_starred: 'مقاله برگزیده شد' | 408 | entry_unarchived: 'مقاله از بایگانی درآمد' |
405 | entry_unstarred: 'مقاله نابرگزیده شد' | 409 | entry_starred: 'مقاله برگزیده شد' |
406 | entry_deleted: 'مقاله پاک شد' | 410 | entry_unstarred: 'مقاله نابرگزیده شد' |
411 | entry_deleted: 'مقاله پاک شد' | ||
407 | tag: | 412 | tag: |
408 | notice: | 413 | notice: |
409 | tag_added: 'برچسب اÙزوده شد' | 414 | tag_added: 'برچسب اÙزوده شد' |
410 | import: | 415 | import: |
411 | notice: | 416 | notice: |
412 | failed: 'درون‌ریزی شکست خورد. لطÙاً دوباره تلاش کنید.' | 417 | failed: 'درون‌ریزی شکست خورد. لطÙاً دوباره تلاش کنید.' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml index 80ba0546..25d9ec59 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'durée de lecture' | 144 | reading_time: 'durée de lecture' |
145 | reading_time_minutes: 'durée de lecture: %readingTime% min' | 145 | reading_time_minutes: 'durée de lecture: %readingTime% min' |
146 | reading_time_less_one_minute: 'durée de lecture: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'durée de lecture: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Marquer comme lu/non lu' | 150 | toogle_as_read: 'Marquer comme lu/non lu' |
149 | toogle_as_star: 'Marquer comme favori' | 151 | toogle_as_star: 'Marquer comme favori' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Status' | 156 | status_label: 'Status' |
155 | archived_label: 'Lus' | 157 | archived_label: 'Lus' |
156 | starred_label: 'Favoris' | 158 | starred_label: 'Favoris' |
159 | unread_label: 'Non lus' | ||
157 | preview_picture_label: 'A une photo' | 160 | preview_picture_label: 'A une photo' |
158 | preview_picture_help: 'Photo' | 161 | preview_picture_help: 'Photo' |
159 | language_label: 'Langue' | 162 | language_label: 'Langue' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Retour' | 178 | back_to_homepage: 'Retour' |
176 | set_as_read: 'Marquer comme lu' | 179 | set_as_read: 'Marquer comme lu' |
177 | set_as_unread: 'Marquer comme non lu' | 180 | set_as_unread: 'Marquer comme non lu' |
178 | set_as_favorite: 'Mettre en favori' | 181 | set_as_starred: 'Mettre en favori' |
179 | view_original_article: 'Article original' | 182 | view_original_article: 'Article original' |
180 | re_fetch_content: 'Recharger le contenu' | 183 | re_fetch_content: 'Recharger le contenu' |
181 | delete: 'Supprimer' | 184 | delete: 'Supprimer' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Modifier le titre' | 193 | edit_title: 'Modifier le titre' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations' | 195 | annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations' |
196 | created_at: 'Date de création' | ||
193 | new: | 197 | new: |
194 | page_title: 'Sauvegarder un nouvel article' | 198 | page_title: 'Sauvegarder un nouvel article' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -267,12 +271,12 @@ quickstart: | |||
267 | tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles' | 271 | tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles' |
268 | admin: | 272 | admin: |
269 | title: 'Administration' | 273 | title: 'Administration' |
270 | description: "En tant qu'adminitrasteur sur wallabag, vous avez des privilèges qui vous permette de :" | 274 | description: "En tant qu'administrateur sur wallabag, vous avez des privilèges qui vous permettent de :" |
271 | new_user: 'Créer un nouvel utilisateur' | 275 | new_user: 'Créer un nouvel utilisateur' |
272 | analytics: 'Configurer les statistiques' | 276 | analytics: 'Configurer les statistiques' |
273 | sharing: 'Activer des paramètres de partages' | 277 | sharing: 'Activer des paramètres de partages' |
274 | export: 'Configurer les export' | 278 | export: "Configurer les formats d'export" |
275 | import: 'Configurer les import' | 279 | import: "Configurer l'import" |
276 | first_steps: | 280 | first_steps: |
277 | title: 'Premiers pas' | 281 | title: 'Premiers pas' |
278 | new_article: 'Ajoutez votre premier article' | 282 | new_article: 'Ajoutez votre premier article' |
@@ -288,7 +292,7 @@ quickstart: | |||
288 | create_application: 'Créer votre application tierce' | 292 | create_application: 'Créer votre application tierce' |
289 | docs: | 293 | docs: |
290 | title: 'Documentation complète' | 294 | title: 'Documentation complète' |
291 | annotate: 'Annotater votre article' | 295 | annotate: 'Annoter votre article' |
292 | export: 'Convertissez vos articles en ePub ou en PDF' | 296 | export: 'Convertissez vos articles en ePub ou en PDF' |
293 | search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse" | 297 | search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse" |
294 | fetching_errors: "Que faire si mon article n'est pas correctement récupéré ?" | 298 | fetching_errors: "Que faire si mon article n'est pas correctement récupéré ?" |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Article déjà sauvergardé le %date%' | 401 | entry_already_saved: 'Article déjà sauvergardé le %date%' |
398 | entry_saved: 'Article enregistré' | 402 | entry_saved: 'Article enregistré' |
403 | entry_saved_failed: "L'enregistrement a échoué" | ||
399 | entry_updated: 'Article mis à jour' | 404 | entry_updated: 'Article mis à jour' |
400 | entry_reloaded: 'Article rechargé' | 405 | entry_reloaded: 'Article rechargé' |
401 | entry_reload_failed: "Le rechargement de l'article a échoué" | 406 | entry_reload_failed: "Le rechargement de l'article a échoué" |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml index 4f3ac090..231ba759 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'tempo di lettura stimato' | 144 | reading_time: 'tempo di lettura stimato' |
145 | reading_time_minutes: 'tempo di lettura stimato: %readingTime% min' | 145 | reading_time_minutes: 'tempo di lettura stimato: %readingTime% min' |
146 | reading_time_less_one_minute: 'tempo di lettura stimato: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'tempo di lettura stimato: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'originale' | 149 | original_article: 'originale' |
148 | toogle_as_read: 'Segna come da leggere' | 150 | toogle_as_read: 'Segna come da leggere' |
149 | toogle_as_star: 'Segna come non preferito' | 151 | toogle_as_star: 'Segna come non preferito' |
@@ -175,7 +177,7 @@ entry: | |||
175 | back_to_homepage: 'Indietro' | 177 | back_to_homepage: 'Indietro' |
176 | set_as_read: 'Segna come già letto' | 178 | set_as_read: 'Segna come già letto' |
177 | set_as_unread: 'Segna come da leggere' | 179 | set_as_unread: 'Segna come da leggere' |
178 | set_as_favorite: 'Segna come preferito' | 180 | set_as_starred: 'Segna come preferito' |
179 | view_original_article: 'Contenuto originale' | 181 | view_original_article: 'Contenuto originale' |
180 | re_fetch_content: 'Ri-ottieni pagina' | 182 | re_fetch_content: 'Ri-ottieni pagina' |
181 | delete: 'Elimina' | 183 | delete: 'Elimina' |
@@ -190,6 +192,7 @@ entry: | |||
190 | edit_title: 'Modifica titolo' | 192 | edit_title: 'Modifica titolo' |
191 | original_article: 'originale' | 193 | original_article: 'originale' |
192 | annotations_on_the_entry: '{0} Nessuna annotazione|{1} Una annotazione|]1,Inf[ %nbAnnotations% annotazioni' | 194 | annotations_on_the_entry: '{0} Nessuna annotazione|{1} Una annotazione|]1,Inf[ %nbAnnotations% annotazioni' |
195 | created_at: 'Data di creazione' | ||
193 | new: | 196 | new: |
194 | page_title: 'Salva un nuovo contenuto' | 197 | page_title: 'Salva un nuovo contenuto' |
195 | placeholder: 'http://website.com' | 198 | placeholder: 'http://website.com' |
@@ -396,6 +399,7 @@ flashes: | |||
396 | notice: | 399 | notice: |
397 | entry_already_saved: 'Contenuto già salvato in data %date%' | 400 | entry_already_saved: 'Contenuto già salvato in data %date%' |
398 | entry_saved: 'Contenuto salvato' | 401 | entry_saved: 'Contenuto salvato' |
402 | # entry_saved_failed: 'Failed to save entry' | ||
399 | entry_updated: 'Contenuto aggiornato' | 403 | entry_updated: 'Contenuto aggiornato' |
400 | entry_reloaded: 'Contenuto ricaricato' | 404 | entry_reloaded: 'Contenuto ricaricato' |
401 | entry_reload_failed: 'Errore nel ricaricamento del contenuto' | 405 | entry_reload_failed: 'Errore nel ricaricamento del contenuto' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml index 46f58bbf..6e71b850 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'durada de lectura' | 144 | reading_time: 'durada de lectura' |
145 | reading_time_minutes: 'durada de lectura : %readingTime% min' | 145 | reading_time_minutes: 'durada de lectura : %readingTime% min' |
146 | reading_time_less_one_minute: 'durada de lectura : <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'durada de lectura : <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Marcar coma legit/pas legit' | 150 | toogle_as_read: 'Marcar coma legit/pas legit' |
149 | toogle_as_star: 'Marcar coma favorit' | 151 | toogle_as_star: 'Marcar coma favorit' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Estatus' | 156 | status_label: 'Estatus' |
155 | archived_label: 'Legits' | 157 | archived_label: 'Legits' |
156 | starred_label: 'Favorits' | 158 | starred_label: 'Favorits' |
159 | unread_label: 'Pas legits' | ||
157 | preview_picture_label: 'A una fotò' | 160 | preview_picture_label: 'A una fotò' |
158 | preview_picture_help: 'Fotò' | 161 | preview_picture_help: 'Fotò' |
159 | language_label: 'Lenga' | 162 | language_label: 'Lenga' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Tornar' | 178 | back_to_homepage: 'Tornar' |
176 | set_as_read: 'Marcar coma legit' | 179 | set_as_read: 'Marcar coma legit' |
177 | set_as_unread: 'Marcar coma pas legit' | 180 | set_as_unread: 'Marcar coma pas legit' |
178 | set_as_favorite: 'Metre en favori' | 181 | set_as_starred: 'Metre en favori' |
179 | view_original_article: 'Article original' | 182 | view_original_article: 'Article original' |
180 | re_fetch_content: 'Tornar cargar lo contengut' | 183 | re_fetch_content: 'Tornar cargar lo contengut' |
181 | delete: 'Suprimir' | 184 | delete: 'Suprimir' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Modificar lo tÃtol' | 193 | edit_title: 'Modificar lo tÃtol' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions" | 195 | annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions" |
196 | created_at: 'Data de creacion' | ||
193 | new: | 197 | new: |
194 | page_title: 'Enregistrar un novèl article' | 198 | page_title: 'Enregistrar un novèl article' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Article ja salvargardat lo %date%' | 401 | entry_already_saved: 'Article ja salvargardat lo %date%' |
398 | entry_saved: 'Article enregistrat' | 402 | entry_saved: 'Article enregistrat' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | entry_updated: 'Article mes a jorn' | 404 | entry_updated: 'Article mes a jorn' |
400 | entry_reloaded: 'Article recargat' | 405 | entry_reloaded: 'Article recargat' |
401 | entry_reload_failed: "Fracàs de l'actualizacion de l'article" | 406 | entry_reload_failed: "Fracàs de l'actualizacion de l'article" |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml index 292749ed..2db26cf1 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'szacunkowy czas czytania' | 144 | reading_time: 'szacunkowy czas czytania' |
145 | reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min' | 145 | reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min' |
146 | reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'oryginał' | 149 | original_article: 'oryginał' |
148 | toogle_as_read: 'Oznacz jako przeczytane' | 150 | toogle_as_read: 'Oznacz jako przeczytane' |
149 | toogle_as_star: 'Oznacz jako ulubione' | 151 | toogle_as_star: 'Oznacz jako ulubione' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Status' | 156 | status_label: 'Status' |
155 | archived_label: 'Zarchiwizowane' | 157 | archived_label: 'Zarchiwizowane' |
156 | starred_label: 'Oznaczone gwiazdkÄ…' | 158 | starred_label: 'Oznaczone gwiazdkÄ…' |
159 | unread_label: 'Nieprzeczytane' | ||
157 | preview_picture_label: 'Posiada podglÄ…d obrazu' | 160 | preview_picture_label: 'Posiada podglÄ…d obrazu' |
158 | preview_picture_help: 'PodglÄ…d obrazu' | 161 | preview_picture_help: 'PodglÄ…d obrazu' |
159 | language_label: 'Język' | 162 | language_label: 'Język' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Cofnij' | 178 | back_to_homepage: 'Cofnij' |
176 | set_as_read: 'Oznacz jako przeczytane' | 179 | set_as_read: 'Oznacz jako przeczytane' |
177 | set_as_unread: 'Oznacz jako nieprzeczytane' | 180 | set_as_unread: 'Oznacz jako nieprzeczytane' |
178 | set_as_favorite: 'Ulubione' | 181 | set_as_starred: 'Ulubione' |
179 | view_original_article: 'Oryginalny artykuł' | 182 | view_original_article: 'Oryginalny artykuł' |
180 | re_fetch_content: 'Pobierz ponownie treść' | 183 | re_fetch_content: 'Pobierz ponownie treść' |
181 | delete: 'Usuń' | 184 | delete: 'Usuń' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Edytuj tytuł' | 193 | edit_title: 'Edytuj tytuł' |
191 | original_article: 'oryginalny' | 194 | original_article: 'oryginalny' |
192 | annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji' | 195 | annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji' |
196 | created_at: 'Czas stworzenia' | ||
193 | new: | 197 | new: |
194 | page_title: 'Zapisz nowy wpis' | 198 | page_title: 'Zapisz nowy wpis' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Wpis już został dodany %date%' | 401 | entry_already_saved: 'Wpis już został dodany %date%' |
398 | entry_saved: 'Wpis zapisany' | 402 | entry_saved: 'Wpis zapisany' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | entry_updated: 'Wpis zaktualizowany' | 404 | entry_updated: 'Wpis zaktualizowany' |
400 | entry_reloaded: 'Wpis ponownie załadowany' | 405 | entry_reloaded: 'Wpis ponownie załadowany' |
401 | entry_reload_failed: 'Błąd ponownego załadowania' | 406 | entry_reload_failed: 'Błąd ponownego załadowania' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml index 45040f35..d8f09bc9 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'timp estimat de citire' | 144 | reading_time: 'timp estimat de citire' |
145 | reading_time_minutes: 'timp estimat de citire: %readingTime% min' | 145 | reading_time_minutes: 'timp estimat de citire: %readingTime% min' |
146 | reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | 149 | original_article: 'original' |
148 | toogle_as_read: 'Comută marcat ca citit' | 150 | toogle_as_read: 'Comută marcat ca citit' |
149 | toogle_as_star: 'Comută marcat ca favorit' | 151 | toogle_as_star: 'Comută marcat ca favorit' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Status' | 156 | status_label: 'Status' |
155 | archived_label: 'Arhivat' | 157 | archived_label: 'Arhivat' |
156 | starred_label: 'Steluțe' | 158 | starred_label: 'Steluțe' |
159 | unread_label: 'Necitite' | ||
157 | preview_picture_label: 'Are o imagine de previzualizare' | 160 | preview_picture_label: 'Are o imagine de previzualizare' |
158 | preview_picture_help: 'Previzualizare imagine' | 161 | preview_picture_help: 'Previzualizare imagine' |
159 | language_label: 'Limbă' | 162 | language_label: 'Limbă' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'ÃŽnapoi' | 178 | back_to_homepage: 'ÃŽnapoi' |
176 | set_as_read: 'Marchează ca citit' | 179 | set_as_read: 'Marchează ca citit' |
177 | # set_as_unread: 'Mark as unread' | 180 | # set_as_unread: 'Mark as unread' |
178 | set_as_favorite: 'Favorit' | 181 | set_as_starred: 'Favorit' |
179 | view_original_article: 'Articol original' | 182 | view_original_article: 'Articol original' |
180 | # re_fetch_content: 'Re-fetch content' | 183 | # re_fetch_content: 'Re-fetch content' |
181 | delete: 'Șterge' | 184 | delete: 'Șterge' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Editează titlul' | 193 | edit_title: 'Editează titlul' |
191 | original_article: 'original' | 194 | original_article: 'original' |
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | 195 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' |
196 | created_at: 'Data creării' | ||
193 | new: | 197 | new: |
194 | page_title: 'Salvează un nou articol' | 198 | page_title: 'Salvează un nou articol' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | # entry_already_saved: 'Entry already saved on %date%' | 401 | # entry_already_saved: 'Entry already saved on %date%' |
398 | # entry_saved: 'Entry saved' | 402 | # entry_saved: 'Entry saved' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | # entry_updated: 'Entry updated' | 404 | # entry_updated: 'Entry updated' |
400 | # entry_reloaded: 'Entry reloaded' | 405 | # entry_reloaded: 'Entry reloaded' |
401 | # entry_reload_failed: 'Failed to reload entry' | 406 | # entry_reload_failed: 'Failed to reload entry' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml index 8a095a5b..074d13e2 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml | |||
@@ -144,6 +144,8 @@ entry: | |||
144 | reading_time: 'tahmini okuma süresi' | 144 | reading_time: 'tahmini okuma süresi' |
145 | reading_time_minutes: 'tahmini okuma süresi: %readingTime% min' | 145 | reading_time_minutes: 'tahmini okuma süresi: %readingTime% min' |
146 | reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur"><</small> 1 min' | 146 | reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur"><</small> 1 min' |
147 | reading_time_minutes_short: '%readingTime% min' | ||
148 | reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'orijinal' | 149 | original_article: 'orijinal' |
148 | toogle_as_read: 'Okundu/okunmadı olarak işaretle' | 150 | toogle_as_read: 'Okundu/okunmadı olarak işaretle' |
149 | toogle_as_star: 'Favorilere ekle/çıkar' | 151 | toogle_as_star: 'Favorilere ekle/çıkar' |
@@ -154,6 +156,7 @@ entry: | |||
154 | status_label: 'Durum' | 156 | status_label: 'Durum' |
155 | archived_label: 'ArÅŸiv' | 157 | archived_label: 'ArÅŸiv' |
156 | starred_label: 'Favori' | 158 | starred_label: 'Favori' |
159 | unread_label: 'Okunmayan' | ||
157 | preview_picture_label: 'Resim önizlemesi varsa' | 160 | preview_picture_label: 'Resim önizlemesi varsa' |
158 | preview_picture_help: 'Resim önizlemesi' | 161 | preview_picture_help: 'Resim önizlemesi' |
159 | language_label: 'Dil' | 162 | language_label: 'Dil' |
@@ -175,7 +178,7 @@ entry: | |||
175 | back_to_homepage: 'Back' | 178 | back_to_homepage: 'Back' |
176 | set_as_read: 'Okundu olarak iÅŸaretle' | 179 | set_as_read: 'Okundu olarak iÅŸaretle' |
177 | set_as_unread: 'Okunmadı olarak işaretle' | 180 | set_as_unread: 'Okunmadı olarak işaretle' |
178 | set_as_favorite: 'Favorilere ekle/çıkar' | 181 | set_as_starred: 'Favorilere ekle/çıkar' |
179 | view_original_article: 'Orijinal makale' | 182 | view_original_article: 'Orijinal makale' |
180 | re_fetch_content: 'İçeriği yenile' | 183 | re_fetch_content: 'İçeriği yenile' |
181 | delete: 'Sil' | 184 | delete: 'Sil' |
@@ -190,6 +193,7 @@ entry: | |||
190 | edit_title: 'Başlığı düzenle' | 193 | edit_title: 'Başlığı düzenle' |
191 | original_article: 'orijinal' | 194 | original_article: 'orijinal' |
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | 195 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' |
196 | created_at: 'OluÅŸturulma tarihi' | ||
193 | new: | 197 | new: |
194 | page_title: 'Yeni makaleyi kaydet' | 198 | page_title: 'Yeni makaleyi kaydet' |
195 | placeholder: 'http://website.com' | 199 | placeholder: 'http://website.com' |
@@ -396,6 +400,7 @@ flashes: | |||
396 | notice: | 400 | notice: |
397 | entry_already_saved: 'Entry already saved on %date%' | 401 | entry_already_saved: 'Entry already saved on %date%' |
398 | entry_saved: 'Makale kaydedildi' | 402 | entry_saved: 'Makale kaydedildi' |
403 | # entry_saved_failed: 'Failed to save entry' | ||
399 | # entry_updated: 'Entry updated' | 404 | # entry_updated: 'Entry updated' |
400 | entry_reloaded: 'Makale içeriği yenilendi' | 405 | entry_reloaded: 'Makale içeriği yenilendi' |
401 | # entry_reload_failed: 'Failed to reload entry' | 406 | # entry_reload_failed: 'Failed to reload entry' |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig index c51f90d2..a8abe8d3 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig | |||
@@ -134,7 +134,8 @@ | |||
134 | </fieldset> | 134 | </fieldset> |
135 | {% endif %} | 135 | {% endif %} |
136 | 136 | ||
137 | {{ form_rest(form.user) }} | 137 | {{ form_widget(form.user._token) }} |
138 | {{ form_widget(form.user.save) }} | ||
138 | </form> | 139 | </form> |
139 | 140 | ||
140 | <h2>{{ 'config.tab_menu.password'|trans }}</h2> | 141 | <h2>{{ 'config.tab_menu.password'|trans }}</h2> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig index a2caaebf..778625ae 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig | |||
@@ -54,6 +54,11 @@ | |||
54 | </div> | 54 | </div> |
55 | 55 | ||
56 | <div class="input-field"> | 56 | <div class="input-field"> |
57 | {{ form_widget(form.isUnread) }} | ||
58 | {{ form_label(form.isUnread) }} | ||
59 | </div> | ||
60 | |||
61 | <div class="input-field"> | ||
57 | {{ form_widget(form.previewPicture) }} | 62 | {{ form_widget(form.previewPicture) }} |
58 | {{ form_label(form.previewPicture) }} | 63 | {{ form_label(form.previewPicture) }} |
59 | </div> | 64 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig index 5a800332..d7374dc7 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig | |||
@@ -14,7 +14,7 @@ | |||
14 | <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li> | 14 | <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li> |
15 | <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li> | 15 | <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li> |
16 | <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li> | 16 | <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li> |
17 | <li><a title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span></a></li> | 17 | <li><a title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span></a></li> |
18 | <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li> | 18 | <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li> |
19 | <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li> | 19 | <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li> |
20 | {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %} | 20 | {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %} |
@@ -29,6 +29,19 @@ | |||
29 | <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li> | 29 | <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li> |
30 | </ul> | 30 | </ul> |
31 | </div> | 31 | </div> |
32 | <div class="link mdi-action-today"> | ||
33 | {{ 'entry.view.created_at'|trans }}: {{ entry.createdAt|date('Y-m-d') }} | ||
34 | </div> | ||
35 | |||
36 | <div class="link mdi-action-query-builder"> | ||
37 | {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} | ||
38 | {% if readingTime > 0 %} | ||
39 | {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round})|capitalize }} | ||
40 | {% else %} | ||
41 | {{ 'entry.list.reading_time_less_one_minute'|trans|raw }} | ||
42 | {% endif %} | ||
43 | </div> | ||
44 | |||
32 | {% set nbAnnotations = entry.annotations | length %} | 45 | {% set nbAnnotations = entry.annotations | length %} |
33 | <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> | 46 | <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> |
34 | <aside class="tags"> | 47 | <aside class="tags"> |
@@ -72,7 +85,7 @@ | |||
72 | $("body").css("cursor", "auto"); | 85 | $("body").css("cursor", "auto"); |
73 | });*/ | 86 | });*/ |
74 | 87 | ||
75 | // toggle favorite property of current article | 88 | // toggle starred property of current article |
76 | /* $('#setFav').click(function(){ | 89 | /* $('#setFav').click(function(){ |
77 | $("body").css("cursor", "wait"); | 90 | $("body").css("cursor", "wait"); |
78 | $.ajax( { url: '{{ path('star_entry', { 'id': entry.id }) }}' }).done( | 91 | $.ajax( { url: '{{ path('star_entry', { 'id': entry.id }) }}' }).done( |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig index eab092c7..b529a0ac 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig | |||
@@ -11,14 +11,14 @@ | |||
11 | </ul> | 11 | </ul> |
12 | <h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3> | 12 | <h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3> |
13 | <ul> | 13 | <ul> |
14 | <li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li> | 14 | <li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li> |
15 | <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li> | 15 | <li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li> |
16 | </ul> | 16 | </ul> |
17 | <h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3> | 17 | <h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3> |
18 | <ul> | 18 | <ul> |
19 | <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li> | 19 | <li>Android: <a href="{{ addonsUrl.f_droid }}" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="{{ addonsUrl.google_play }}" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li> |
20 | <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li> | 20 | <li>iOS: <a href="{{ addonsUrl.ios }}" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li> |
21 | <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li> | 21 | <li>Windows Phone: <a href="{{ addonsUrl.windows }}" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li> |
22 | </ul> | 22 | </ul> |
23 | <h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3> | 23 | <h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3> |
24 | <p> | 24 | <p> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig index 5a90f227..afd5b499 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig | |||
@@ -158,7 +158,7 @@ | |||
158 | {% endif %} | 158 | {% endif %} |
159 | 159 | ||
160 | {{ form_widget(form.user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} | 160 | {{ form_widget(form.user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
161 | {{ form_rest(form.user) }} | 161 | {{ form_widget(form.user._token) }} |
162 | </form> | 162 | </form> |
163 | </div> | 163 | </div> |
164 | 164 | ||
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 5f49062f..2110b889 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 | |||
@@ -77,7 +77,7 @@ | |||
77 | <ul class="tools links right"> | 77 | <ul class="tools links right"> |
78 | <li> | 78 | <li> |
79 | <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a> | 79 | <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a> |
80 | <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a> | 80 | <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a> |
81 | <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a> | 81 | <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a> |
82 | </li> | 82 | </li> |
83 | </ul> | 83 | </ul> |
@@ -126,6 +126,11 @@ | |||
126 | {{ form_label(form.isStarred) }} | 126 | {{ form_label(form.isStarred) }} |
127 | </div> | 127 | </div> |
128 | 128 | ||
129 | <div class="input-field col s6 with-checkbox"> | ||
130 | {{ form_widget(form.isUnread) }} | ||
131 | {{ form_label(form.isUnread) }} | ||
132 | </div> | ||
133 | |||
129 | <div class="col s12"> | 134 | <div class="col s12"> |
130 | <label>{{ 'entry.filters.preview_picture_help'|trans }}</label> | 135 | <label>{{ 'entry.filters.preview_picture_help'|trans }}</label> |
131 | </div> | 136 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig index e89aea3a..2ee615aa 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig | |||
@@ -24,8 +24,8 @@ | |||
24 | </a> | 24 | </a> |
25 | </li> | 25 | </li> |
26 | <li> | 26 | <li> |
27 | <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> | 27 | <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> |
28 | <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> | 28 | <i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i> |
29 | </a> | 29 | </a> |
30 | </li> | 30 | </li> |
31 | <li> | 31 | <li> |
@@ -70,9 +70,9 @@ | |||
70 | </li> | 70 | </li> |
71 | 71 | ||
72 | <li class="bold hide-on-med-and-down"> | 72 | <li class="bold hide-on-med-and-down"> |
73 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> | 73 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> |
74 | <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> | 74 | <i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i> |
75 | <span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span> | 75 | <span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span> |
76 | </a> | 76 | </a> |
77 | <div class="collapsible-body"></div> | 77 | <div class="collapsible-body"></div> |
78 | </li> | 78 | </li> |
@@ -193,6 +193,15 @@ | |||
193 | <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> | 193 | <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> |
194 | </header> | 194 | </header> |
195 | <aside> | 195 | <aside> |
196 | <span class="link mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> {{ entry.createdAt|date('Y-m-d') }}</span> | ||
197 | {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} | ||
198 | <span class="link mdi-action-query-builder"> | ||
199 | {% if readingTime > 0 %} | ||
200 | {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': readingTime|round}) }} | ||
201 | {% else %} | ||
202 | {{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }} | ||
203 | {% endif %} | ||
204 | </span> | ||
196 | <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a> | 205 | <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a> |
197 | <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> | 206 | <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> |
198 | <div id="list"> | 207 | <div id="list"> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig index 4354a6b7..6a177d6b 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig | |||
@@ -18,17 +18,17 @@ | |||
18 | <div class="col s12"> | 18 | <div class="col s12"> |
19 | <h5>{{ 'howto.top_menu.browser_addons'|trans }}</h5> | 19 | <h5>{{ 'howto.top_menu.browser_addons'|trans }}</h5> |
20 | <ul> | 20 | <ul> |
21 | <li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li> | 21 | <li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li> |
22 | <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li> | 22 | <li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li> |
23 | </ul> | 23 | </ul> |
24 | </div> | 24 | </div> |
25 | 25 | ||
26 | <div class="col s12"> | 26 | <div class="col s12"> |
27 | <h5>{{ 'howto.top_menu.mobile_apps'|trans }}</h5> | 27 | <h5>{{ 'howto.top_menu.mobile_apps'|trans }}</h5> |
28 | <ul> | 28 | <ul> |
29 | <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li> | 29 | <li>Android: <a href="{{ addonsUrl.f_droid }}" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="{{ addonsUrl.google_play }}" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li> |
30 | <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li> | 30 | <li>iOS: <a href="{{ addonsUrl.ios }}" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li> |
31 | <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li> | 31 | <li>Windows Phone: <a href="{{ addonsUrl.windows }}" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li> |
32 | </ul> | 32 | </ul> |
33 | </div> | 33 | </div> |
34 | 34 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig new file mode 100644 index 00000000..7cb19966 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/footer.html.twig | |||
@@ -0,0 +1,41 @@ | |||
1 | <footer class="page-footer cyan darken-2"> | ||
2 | <div class="container"> | ||
3 | <div class="row"> | ||
4 | <div class="col l6 s12"> | ||
5 | <h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5> | ||
6 | <p class="grey-text text-lighten-4"> | ||
7 | <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.google_play }}" title="Android"> | ||
8 | <span class="icon-android"></span> | ||
9 | </a> | ||
10 | <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.ios }}" title="iOS"> | ||
11 | <span class="icon-apple"></span> | ||
12 | </a> | ||
13 | <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.firefox }}" title="Firefox"> | ||
14 | <span class="icon-firefox"></span> | ||
15 | </a> | ||
16 | <a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.chrome }}" title="Chrome"> | ||
17 | <span class="icon-chrome"></span> | ||
18 | </a> | ||
19 | </p> | ||
20 | </div> | ||
21 | <div class="col l4 offset-l2 s12"> | ||
22 | <h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5> | ||
23 | <a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.twitter }}" title="Twitter"> | ||
24 | <span class="icon-twitter"></span> | ||
25 | </a> | ||
26 | <a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.google_plus }}" title="Google+"> | ||
27 | <span class="icon-google-plus2"></span> | ||
28 | </a> | ||
29 | <a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.facebook }}" title="Facebook"> | ||
30 | <span class="icon-facebook2"></span> | ||
31 | </a> | ||
32 | </div> | ||
33 | </div> | ||
34 | </div> | ||
35 | <div class="footer-copyright"> | ||
36 | <div class="container"> | ||
37 | <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> | ||
38 | <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a> | ||
39 | </div> | ||
40 | </div> | ||
41 | </footer> | ||
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 630cbd66..0573e8e5 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig | |||
@@ -123,45 +123,5 @@ | |||
123 | {% endblock %} | 123 | {% endblock %} |
124 | 124 | ||
125 | {% block footer %} | 125 | {% block footer %} |
126 | <footer class="page-footer cyan darken-2"> | 126 | {{ render(controller("WallabagCoreBundle:Footer:index")) }} |
127 | <div class="container"> | ||
128 | <div class="row"> | ||
129 | <div class="col l6 s12"> | ||
130 | <h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5> | ||
131 | <p class="grey-text text-lighten-4"> | ||
132 | <a target="_blank" class="grey-text text-lighten-3" href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" title="Android"> | ||
133 | <span class="icon-android"></span> | ||
134 | </a> | ||
135 | <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS"> | ||
136 | <span class="icon-apple"></span> | ||
137 | </a> | ||
138 | <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/firefox/addon/wallabag/" title="Firefox"> | ||
139 | <span class="icon-firefox"></span> | ||
140 | </a> | ||
141 | <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome"> | ||
142 | <span class="icon-chrome"></span> | ||
143 | </a> | ||
144 | </p> | ||
145 | </div> | ||
146 | <div class="col l4 offset-l2 s12"> | ||
147 | <h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5> | ||
148 | <a target="_blank" class="grey-text text-lighten-3" href="https://twitter.com/wallabagapp" title="Twitter"> | ||
149 | <span class="icon-twitter"></span> | ||
150 | </a> | ||
151 | <a target="_blank" class="grey-text text-lighten-3" href="https://plus.google.com/+WallabagOrg/posts" title="Google+"> | ||
152 | <span class="icon-google-plus2"></span> | ||
153 | </a> | ||
154 | <a target="_blank" class="grey-text text-lighten-3" href="https://facebook.com/Wallabag" title="Facebook"> | ||
155 | <span class="icon-facebook2"></span> | ||
156 | </a> | ||
157 | </div> | ||
158 | </div> | ||
159 | </div> | ||
160 | <div class="footer-copyright"> | ||
161 | <div class="container"> | ||
162 | <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> | ||
163 | <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a> | ||
164 | </div> | ||
165 | </div> | ||
166 | </footer> | ||
167 | {% endblock %} | 127 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Tests/WallabagCoreTestCase.php b/src/Wallabag/CoreBundle/Tests/WallabagCoreTestCase.php deleted file mode 100644 index 05450c0b..00000000 --- a/src/Wallabag/CoreBundle/Tests/WallabagCoreTestCase.php +++ /dev/null | |||
@@ -1,51 +0,0 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Tests; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
6 | |||
7 | abstract class WallabagCoreTestCase extends WebTestCase | ||
8 | { | ||
9 | private $client = null; | ||
10 | |||
11 | public function getClient() | ||
12 | { | ||
13 | return $this->client; | ||
14 | } | ||
15 | |||
16 | public function setUp() | ||
17 | { | ||
18 | parent::setUp(); | ||
19 | |||
20 | $this->client = static::createClient(); | ||
21 | } | ||
22 | |||
23 | public function logInAs($username) | ||
24 | { | ||
25 | $crawler = $this->client->request('GET', '/login'); | ||
26 | $form = $crawler->filter('button[type=submit]')->form(); | ||
27 | $data = [ | ||
28 | '_username' => $username, | ||
29 | '_password' => 'mypassword', | ||
30 | ]; | ||
31 | |||
32 | $this->client->submit($form, $data); | ||
33 | } | ||
34 | |||
35 | /** | ||
36 | * Return the user id of the logged in user. | ||
37 | * You should be sure that you called `logInAs` before. | ||
38 | * | ||
39 | * @return int | ||
40 | */ | ||
41 | public function getLoggedInUserId() | ||
42 | { | ||
43 | $token = static::$kernel->getContainer()->get('security.token_storage')->getToken(); | ||
44 | |||
45 | if (null !== $token) { | ||
46 | return $token->getUser()->getId(); | ||
47 | } | ||
48 | |||
49 | throw new \RuntimeException('No logged in User.'); | ||
50 | } | ||
51 | } | ||
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php new file mode 100644 index 00000000..14377a35 --- /dev/null +++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php | |||
@@ -0,0 +1,47 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Psr\Log\LoggerInterface; | ||
6 | use Psr\Log\NullLogger; | ||
7 | use Doctrine\ORM\EntityManager; | ||
8 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
9 | use Wallabag\CoreBundle\Entity\Entry; | ||
10 | |||
11 | abstract class AbstractImport implements ImportInterface | ||
12 | { | ||
13 | protected $em; | ||
14 | protected $logger; | ||
15 | protected $contentProxy; | ||
16 | |||
17 | public function __construct(EntityManager $em, ContentProxy $contentProxy) | ||
18 | { | ||
19 | $this->em = $em; | ||
20 | $this->logger = new NullLogger(); | ||
21 | $this->contentProxy = $contentProxy; | ||
22 | } | ||
23 | |||
24 | public function setLogger(LoggerInterface $logger) | ||
25 | { | ||
26 | $this->logger = $logger; | ||
27 | } | ||
28 | |||
29 | /** | ||
30 | * Fetch content from the ContentProxy (using graby). | ||
31 | * If it fails return false instead of the updated entry. | ||
32 | * | ||
33 | * @param Entry $entry Entry to update | ||
34 | * @param string $url Url to grab content for | ||
35 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url | ||
36 | * | ||
37 | * @return Entry|false | ||
38 | */ | ||
39 | protected function fetchContent(Entry $entry, $url, array $content = []) | ||
40 | { | ||
41 | try { | ||
42 | return $this->contentProxy->updateEntry($entry, $url, $content); | ||
43 | } catch (\Exception $e) { | ||
44 | return false; | ||
45 | } | ||
46 | } | ||
47 | } | ||
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index 29361a32..798cfdae 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php | |||
@@ -2,7 +2,6 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Psr\Log\LoggerInterface; | ||
6 | use Psr\Log\NullLogger; | 5 | use Psr\Log\NullLogger; |
7 | use Doctrine\ORM\EntityManager; | 6 | use Doctrine\ORM\EntityManager; |
8 | use GuzzleHttp\Client; | 7 | use GuzzleHttp\Client; |
@@ -12,12 +11,9 @@ use Wallabag\CoreBundle\Entity\Entry; | |||
12 | use Wallabag\CoreBundle\Helper\ContentProxy; | 11 | use Wallabag\CoreBundle\Helper\ContentProxy; |
13 | use Craue\ConfigBundle\Util\Config; | 12 | use Craue\ConfigBundle\Util\Config; |
14 | 13 | ||
15 | class PocketImport implements ImportInterface | 14 | class PocketImport extends AbstractImport |
16 | { | 15 | { |
17 | private $user; | 16 | private $user; |
18 | private $em; | ||
19 | private $contentProxy; | ||
20 | private $logger; | ||
21 | private $client; | 17 | private $client; |
22 | private $consumerKey; | 18 | private $consumerKey; |
23 | private $skippedEntries = 0; | 19 | private $skippedEntries = 0; |
@@ -34,11 +30,6 @@ class PocketImport implements ImportInterface | |||
34 | $this->logger = new NullLogger(); | 30 | $this->logger = new NullLogger(); |
35 | } | 31 | } |
36 | 32 | ||
37 | public function setLogger(LoggerInterface $logger) | ||
38 | { | ||
39 | $this->logger = $logger; | ||
40 | } | ||
41 | |||
42 | /** | 33 | /** |
43 | * {@inheritdoc} | 34 | * {@inheritdoc} |
44 | */ | 35 | */ |
@@ -219,14 +210,20 @@ class PocketImport implements ImportInterface | |||
219 | } | 210 | } |
220 | 211 | ||
221 | $entry = new Entry($this->user); | 212 | $entry = new Entry($this->user); |
222 | $entry = $this->contentProxy->updateEntry($entry, $url); | 213 | $entry = $this->fetchContent($entry, $url); |
214 | |||
215 | // jump to next entry in case of problem while getting content | ||
216 | if (false === $entry) { | ||
217 | ++$this->skippedEntries; | ||
218 | continue; | ||
219 | } | ||
223 | 220 | ||
224 | // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted | 221 | // 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted |
225 | if ($pocketEntry['status'] == 1 || $this->markAsRead) { | 222 | if ($pocketEntry['status'] == 1 || $this->markAsRead) { |
226 | $entry->setArchived(true); | 223 | $entry->setArchived(true); |
227 | } | 224 | } |
228 | 225 | ||
229 | // 0 or 1 - 1 If the item is favorited | 226 | // 0 or 1 - 1 If the item is starred |
230 | if ($pocketEntry['favorite'] == 1) { | 227 | if ($pocketEntry['favorite'] == 1) { |
231 | $entry->setStarred(true); | 228 | $entry->setStarred(true); |
232 | } | 229 | } |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php index 65803823..a1cc085b 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagImport.php +++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php | |||
@@ -2,19 +2,12 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Psr\Log\LoggerInterface; | ||
6 | use Psr\Log\NullLogger; | ||
7 | use Doctrine\ORM\EntityManager; | ||
8 | use Wallabag\CoreBundle\Entity\Entry; | 5 | use Wallabag\CoreBundle\Entity\Entry; |
9 | use Wallabag\UserBundle\Entity\User; | 6 | use Wallabag\UserBundle\Entity\User; |
10 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
11 | 7 | ||
12 | abstract class WallabagImport implements ImportInterface | 8 | abstract class WallabagImport extends AbstractImport |
13 | { | 9 | { |
14 | protected $user; | 10 | protected $user; |
15 | protected $em; | ||
16 | protected $logger; | ||
17 | protected $contentProxy; | ||
18 | protected $skippedEntries = 0; | 11 | protected $skippedEntries = 0; |
19 | protected $importedEntries = 0; | 12 | protected $importedEntries = 0; |
20 | protected $filepath; | 13 | protected $filepath; |
@@ -35,18 +28,6 @@ abstract class WallabagImport implements ImportInterface | |||
35 | '', | 28 | '', |
36 | ]; | 29 | ]; |
37 | 30 | ||
38 | public function __construct(EntityManager $em, ContentProxy $contentProxy) | ||
39 | { | ||
40 | $this->em = $em; | ||
41 | $this->logger = new NullLogger(); | ||
42 | $this->contentProxy = $contentProxy; | ||
43 | } | ||
44 | |||
45 | public function setLogger(LoggerInterface $logger) | ||
46 | { | ||
47 | $this->logger = $logger; | ||
48 | } | ||
49 | |||
50 | /** | 31 | /** |
51 | * We define the user in a custom call because on the import command there is no logged in user. | 32 | * We define the user in a custom call because on the import command there is no logged in user. |
52 | * So we can't retrieve user from the `security.token_storage` service. | 33 | * So we can't retrieve user from the `security.token_storage` service. |
@@ -159,12 +140,18 @@ abstract class WallabagImport implements ImportInterface | |||
159 | 140 | ||
160 | $data = $this->prepareEntry($importedEntry, $this->markAsRead); | 141 | $data = $this->prepareEntry($importedEntry, $this->markAsRead); |
161 | 142 | ||
162 | $entry = $this->contentProxy->updateEntry( | 143 | $entry = $this->fetchContent( |
163 | new Entry($this->user), | 144 | new Entry($this->user), |
164 | $importedEntry['url'], | 145 | $importedEntry['url'], |
165 | $data | 146 | $data |
166 | ); | 147 | ); |
167 | 148 | ||
149 | // jump to next entry in case of problem while getting content | ||
150 | if (false === $entry) { | ||
151 | ++$this->skippedEntries; | ||
152 | continue; | ||
153 | } | ||
154 | |||
168 | if (array_key_exists('tags', $data)) { | 155 | if (array_key_exists('tags', $data)) { |
169 | $this->contentProxy->assignTagsToEntry( | 156 | $this->contentProxy->assignTagsToEntry( |
170 | $entry, | 157 | $entry, |
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php deleted file mode 100644 index 403fe9b0..00000000 --- a/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php +++ /dev/null | |||
@@ -1,65 +0,0 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\ImportBundle\Tests\Controller; | ||
4 | |||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | ||
6 | |||
7 | class PocketControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testImportPocket() | ||
10 | { | ||
11 | $this->logInAs('admin'); | ||
12 | $client = $this->getClient(); | ||
13 | |||
14 | $crawler = $client->request('GET', '/import/pocket'); | ||
15 | |||
16 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
17 | $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); | ||
18 | } | ||
19 | |||
20 | public function testImportPocketAuthBadToken() | ||
21 | { | ||
22 | $this->logInAs('admin'); | ||
23 | $client = $this->getClient(); | ||
24 | |||
25 | $crawler = $client->request('GET', '/import/pocket/auth'); | ||
26 | |||
27 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
28 | } | ||
29 | |||
30 | public function testImportPocketAuth() | ||
31 | { | ||
32 | $this->markTestSkipped('PocketImport: Find a way to properly mock a service.'); | ||
33 | |||
34 | $this->logInAs('admin'); | ||
35 | $client = $this->getClient(); | ||
36 | |||
37 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
38 | ->disableOriginalConstructor() | ||
39 | ->getMock(); | ||
40 | |||
41 | $pocketImport | ||
42 | ->expects($this->once()) | ||
43 | ->method('getRequestToken') | ||
44 | ->willReturn('token'); | ||
45 | |||
46 | $client->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
47 | |||
48 | $crawler = $client->request('GET', '/import/pocket/auth'); | ||
49 | |||
50 | $this->assertEquals(301, $client->getResponse()->getStatusCode()); | ||
51 | $this->assertContains('getpocket.com/auth/authorize', $client->getResponse()->headers->get('location')); | ||
52 | } | ||
53 | |||
54 | public function testImportPocketCallbackWithBadToken() | ||
55 | { | ||
56 | $this->logInAs('admin'); | ||
57 | $client = $this->getClient(); | ||
58 | |||
59 | $crawler = $client->request('GET', '/import/pocket/callback'); | ||
60 | |||
61 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
62 | $this->assertContains('import/pocket', $client->getResponse()->headers->get('location')); | ||
63 | $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); | ||
64 | } | ||
65 | } | ||
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> |
diff --git a/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php b/tests/Wallabag/AnnotationBundle/Controller/AnnotationControllerTest.php index 3eba7193..70849f74 100644 --- a/src/Wallabag/AnnotationBundle/Tests/Controller/AnnotationControllerTest.php +++ b/tests/Wallabag/AnnotationBundle/Controller/AnnotationControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\AnnotationBundle\Tests\Controller; | 3 | namespace Tests\AnnotationBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\AnnotationBundle\Tests\WallabagAnnotationTestCase; | 5 | use Tests\Wallabag\AnnotationBundle\WallabagAnnotationTestCase; |
6 | 6 | ||
7 | class AnnotationControllerTest extends WallabagAnnotationTestCase | 7 | class AnnotationControllerTest extends WallabagAnnotationTestCase |
8 | { | 8 | { |
diff --git a/src/Wallabag/AnnotationBundle/Tests/WallabagAnnotationTestCase.php b/tests/Wallabag/AnnotationBundle/WallabagAnnotationTestCase.php index a9035acc..82790a5c 100644 --- a/src/Wallabag/AnnotationBundle/Tests/WallabagAnnotationTestCase.php +++ b/tests/Wallabag/AnnotationBundle/WallabagAnnotationTestCase.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\AnnotationBundle\Tests; | 3 | namespace Tests\Wallabag\AnnotationBundle; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | 5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; |
6 | use Symfony\Component\BrowserKit\Cookie; | 6 | use Symfony\Component\BrowserKit\Cookie; |
diff --git a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php index 2f2d92ee..c39cc357 100644 --- a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php +++ b/tests/Wallabag/ApiBundle/Controller/WallabagRestControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ApiBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\ApiBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\ApiBundle\Tests\WallabagApiTestCase; | 5 | use Tests\Wallabag\ApiBundle\WallabagApiTestCase; |
6 | 6 | ||
7 | class WallabagRestControllerTest extends WallabagApiTestCase | 7 | class WallabagRestControllerTest extends WallabagApiTestCase |
8 | { | 8 | { |
@@ -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/ApiBundle/Tests/WallabagApiTestCase.php b/tests/Wallabag/ApiBundle/WallabagApiTestCase.php index 13d72d2c..cf9b3347 100644 --- a/src/Wallabag/ApiBundle/Tests/WallabagApiTestCase.php +++ b/tests/Wallabag/ApiBundle/WallabagApiTestCase.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ApiBundle\Tests; | 3 | namespace Tests\Wallabag\ApiBundle; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | 5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; |
6 | use Symfony\Component\BrowserKit\Cookie; | 6 | use Symfony\Component\BrowserKit\Cookie; |
diff --git a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php index 0673d581..089a1c5f 100644 --- a/src/Wallabag/CoreBundle/Tests/Command/InstallCommandTest.php +++ b/tests/Wallabag/CoreBundle/Command/InstallCommandTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Command; | 3 | namespace Tests\Wallabag\CoreBundle\Command; |
4 | 4 | ||
5 | use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; | 5 | use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand; |
6 | use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; | 6 | use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand; |
@@ -9,8 +9,8 @@ use Symfony\Component\Console\Input\ArrayInput; | |||
9 | use Symfony\Component\Console\Output\NullOutput; | 9 | use Symfony\Component\Console\Output\NullOutput; |
10 | use Symfony\Component\Console\Tester\CommandTester; | 10 | use Symfony\Component\Console\Tester\CommandTester; |
11 | use Wallabag\CoreBundle\Command\InstallCommand; | 11 | use Wallabag\CoreBundle\Command\InstallCommand; |
12 | use Wallabag\CoreBundle\Tests\Mock\InstallCommandMock; | 12 | use Tests\Wallabag\CoreBundle\Mock\InstallCommandMock; |
13 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 13 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
14 | 14 | ||
15 | class InstallCommandTest extends WallabagCoreTestCase | 15 | class InstallCommandTest extends WallabagCoreTestCase |
16 | { | 16 | { |
@@ -28,16 +28,32 @@ class InstallCommandTest extends WallabagCoreTestCase | |||
28 | * | 28 | * |
29 | * http://stackoverflow.com/a/14374832/569101 | 29 | * http://stackoverflow.com/a/14374832/569101 |
30 | */ | 30 | */ |
31 | $this->markTestSkipped('PostgreSQL spotted: can find a good way to drop current database, skipping.'); | 31 | $this->markTestSkipped('PostgreSQL spotted: can\'t find a good way to drop current database, skipping.'); |
32 | } | 32 | } |
33 | } | 33 | } |
34 | 34 | ||
35 | /** | ||
36 | * Ensure next tests will have a clean database | ||
37 | */ | ||
35 | public static function tearDownAfterClass() | 38 | public static function tearDownAfterClass() |
36 | { | 39 | { |
37 | $application = new Application(static::$kernel); | 40 | $application = new Application(static::$kernel); |
38 | $application->setAutoExit(false); | 41 | $application->setAutoExit(false); |
39 | 42 | ||
40 | $code = $application->run(new ArrayInput([ | 43 | $application->run(new ArrayInput([ |
44 | 'command' => 'doctrine:schema:drop', | ||
45 | '--no-interaction' => true, | ||
46 | '--force' => true, | ||
47 | '--env' => 'test', | ||
48 | ]), new NullOutput()); | ||
49 | |||
50 | $application->run(new ArrayInput([ | ||
51 | 'command' => 'doctrine:schema:create', | ||
52 | '--no-interaction' => true, | ||
53 | '--env' => 'test', | ||
54 | ]), new NullOutput()); | ||
55 | |||
56 | $application->run(new ArrayInput([ | ||
41 | 'command' => 'doctrine:fixtures:load', | 57 | 'command' => 'doctrine:fixtures:load', |
42 | '--no-interaction' => true, | 58 | '--no-interaction' => true, |
43 | '--env' => 'test', | 59 | '--env' => 'test', |
diff --git a/src/Wallabag/CoreBundle/Tests/Command/TagAllCommandTest.php b/tests/Wallabag/CoreBundle/Command/TagAllCommandTest.php index 4f544c1d..ec31708f 100644 --- a/src/Wallabag/CoreBundle/Tests/Command/TagAllCommandTest.php +++ b/tests/Wallabag/CoreBundle/Command/TagAllCommandTest.php | |||
@@ -1,11 +1,11 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Command; | 3 | namespace Tests\Wallabag\CoreBundle\Command; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Console\Application; | 5 | use Symfony\Bundle\FrameworkBundle\Console\Application; |
6 | use Symfony\Component\Console\Tester\CommandTester; | 6 | use Symfony\Component\Console\Tester\CommandTester; |
7 | use Wallabag\CoreBundle\Command\TagAllCommand; | 7 | use Wallabag\CoreBundle\Command\TagAllCommand; |
8 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 8 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
9 | 9 | ||
10 | class TagAllCommandTest extends WallabagCoreTestCase | 10 | class TagAllCommandTest extends WallabagCoreTestCase |
11 | { | 11 | { |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php index 8cdedfda..7193f9b0 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class ConfigControllerTest extends WallabagCoreTestCase | 7 | class ConfigControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/DeveloperControllerTest.php b/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php index fc220b85..79452ace 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/DeveloperControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/DeveloperControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class DeveloperControllerTest extends WallabagCoreTestCase | 7 | class DeveloperControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php index df4c34cd..5c739c78 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | use Wallabag\CoreBundle\Entity\Entry; | 6 | use Wallabag\CoreBundle\Entity\Entry; |
7 | 7 | ||
8 | class EntryControllerTest extends WallabagCoreTestCase | 8 | class EntryControllerTest extends WallabagCoreTestCase |
@@ -163,7 +163,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
163 | /** | 163 | /** |
164 | * This test will require an internet connection. | 164 | * This test will require an internet connection. |
165 | */ | 165 | */ |
166 | public function testPostNewThatWillBeTaggued() | 166 | public function testPostNewThatWillBeTagged() |
167 | { | 167 | { |
168 | $this->logInAs('admin'); | 168 | $this->logInAs('admin'); |
169 | $client = $this->getClient(); | 169 | $client = $this->getClient(); |
@@ -181,8 +181,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
181 | $client->submit($form, $data); | 181 | $client->submit($form, $data); |
182 | 182 | ||
183 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | 183 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); |
184 | 184 | $this->assertContains('/', $client->getResponse()->getTargetUrl()); | |
185 | $client->followRedirect(); | ||
186 | 185 | ||
187 | $em = $client->getContainer() | 186 | $em = $client->getContainer() |
188 | ->get('doctrine.orm.entity_manager'); | 187 | ->get('doctrine.orm.entity_manager'); |
@@ -196,6 +195,35 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
196 | 195 | ||
197 | $em->remove($entry); | 196 | $em->remove($entry); |
198 | $em->flush(); | 197 | $em->flush(); |
198 | |||
199 | // and now re-submit it to test the cascade persistence for tags after entry removal | ||
200 | // related https://github.com/wallabag/wallabag/issues/2121 | ||
201 | $crawler = $client->request('GET', '/new'); | ||
202 | |||
203 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
204 | |||
205 | $form = $crawler->filter('form[name=entry]')->form(); | ||
206 | |||
207 | $data = [ | ||
208 | 'entry[url]' => $url = 'https://github.com/wallabag/wallabag/tree/master', | ||
209 | ]; | ||
210 | |||
211 | $client->submit($form, $data); | ||
212 | |||
213 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
214 | $this->assertContains('/', $client->getResponse()->getTargetUrl()); | ||
215 | |||
216 | $entry = $em | ||
217 | ->getRepository('WallabagCoreBundle:Entry') | ||
218 | ->findOneByUrl($url); | ||
219 | |||
220 | $tags = $entry->getTags(); | ||
221 | |||
222 | $this->assertCount(1, $tags); | ||
223 | $this->assertEquals('wallabag', $tags[0]->getLabel()); | ||
224 | |||
225 | $em->remove($entry); | ||
226 | $em->flush(); | ||
199 | } | 227 | } |
200 | 228 | ||
201 | public function testArchive() | 229 | public function testArchive() |
@@ -471,6 +499,60 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
471 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | 499 | $this->assertCount(1, $crawler->filter('div[class=entry]')); |
472 | } | 500 | } |
473 | 501 | ||
502 | public function testFilterOnReadingTimeOnlyUpper() | ||
503 | { | ||
504 | $this->logInAs('admin'); | ||
505 | $client = $this->getClient(); | ||
506 | |||
507 | $crawler = $client->request('GET', '/unread/list'); | ||
508 | |||
509 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
510 | |||
511 | $data = [ | ||
512 | 'entry_filter[readingTime][right_number]' => 22, | ||
513 | ]; | ||
514 | |||
515 | $crawler = $client->submit($form, $data); | ||
516 | |||
517 | $this->assertCount(2, $crawler->filter('div[class=entry]')); | ||
518 | } | ||
519 | |||
520 | public function testFilterOnReadingTimeOnlyLower() | ||
521 | { | ||
522 | $this->logInAs('admin'); | ||
523 | $client = $this->getClient(); | ||
524 | |||
525 | $crawler = $client->request('GET', '/unread/list'); | ||
526 | |||
527 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
528 | |||
529 | $data = [ | ||
530 | 'entry_filter[readingTime][left_number]' => 22, | ||
531 | ]; | ||
532 | |||
533 | $crawler = $client->submit($form, $data); | ||
534 | |||
535 | $this->assertCount(4, $crawler->filter('div[class=entry]')); | ||
536 | } | ||
537 | |||
538 | public function testFilterOnUnreadStatus() | ||
539 | { | ||
540 | $this->logInAs('admin'); | ||
541 | $client = $this->getClient(); | ||
542 | |||
543 | $crawler = $client->request('GET', '/all/list'); | ||
544 | |||
545 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
546 | |||
547 | $data = [ | ||
548 | 'entry_filter[isUnread]' => true, | ||
549 | ]; | ||
550 | |||
551 | $crawler = $client->submit($form, $data); | ||
552 | |||
553 | $this->assertCount(4, $crawler->filter('div[class=entry]')); | ||
554 | } | ||
555 | |||
474 | public function testFilterOnCreationDate() | 556 | public function testFilterOnCreationDate() |
475 | { | 557 | { |
476 | $this->logInAs('admin'); | 558 | $this->logInAs('admin'); |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ExportControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php index 76c98055..b22156c3 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ExportControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/ExportControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class ExportControllerTest extends WallabagCoreTestCase | 7 | class ExportControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php b/tests/Wallabag/CoreBundle/Controller/RssControllerTest.php index 87a01b8e..fb6fe06a 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/RssControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/RssControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class RssControllerTest extends WallabagCoreTestCase | 7 | class RssControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php index 2910fa4f..03355f5a 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class SecurityControllerTest extends WallabagCoreTestCase | 7 | class SecurityControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
@@ -36,7 +36,7 @@ class SecurityControllerTest extends WallabagCoreTestCase | |||
36 | $em->persist($user); | 36 | $em->persist($user); |
37 | $em->flush(); | 37 | $em->flush(); |
38 | 38 | ||
39 | $this->logInAs('admin'); | 39 | $this->logInAsUsingHttp('admin'); |
40 | $crawler = $client->request('GET', '/config'); | 40 | $crawler = $client->request('GET', '/config'); |
41 | $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]); | 41 | $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]); |
42 | 42 | ||
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/SettingsControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SettingsControllerTest.php index fd698b3e..9b8b5702 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/SettingsControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/SettingsControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | /** | 7 | /** |
8 | * The controller `SettingsController` does not exist. | 8 | * The controller `SettingsController` does not exist. |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/StaticControllerTest.php b/tests/Wallabag/CoreBundle/Controller/StaticControllerTest.php index 6d7976c4..98a37b50 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/StaticControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/StaticControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class StaticControllerTest extends WallabagCoreTestCase | 7 | class StaticControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php index 8af37ea4..58450e5f 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class TagControllerTest extends WallabagCoreTestCase | 7 | class TagControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
@@ -39,6 +39,12 @@ class TagControllerTest extends WallabagCoreTestCase | |||
39 | $client->submit($form, $data); | 39 | $client->submit($form, $data); |
40 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | 40 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); |
41 | 41 | ||
42 | // be sure to reload the entry | ||
43 | $entry = $client->getContainer() | ||
44 | ->get('doctrine.orm.entity_manager') | ||
45 | ->getRepository('WallabagCoreBundle:Entry') | ||
46 | ->findOneByUsernameAndNotArchived('admin'); | ||
47 | |||
42 | $this->assertEquals(1, count($entry->getTags())); | 48 | $this->assertEquals(1, count($entry->getTags())); |
43 | 49 | ||
44 | # tag already exists and already assigned | 50 | # tag already exists and already assigned |
diff --git a/src/Wallabag/CoreBundle/Tests/EventListener/LocaleListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php index b4c022d5..2a7f9390 100644 --- a/src/Wallabag/CoreBundle/Tests/EventListener/LocaleListenerTest.php +++ b/tests/Wallabag/CoreBundle/EventListener/LocaleListenerTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\EventListener; | 3 | namespace Tests\Wallabag\CoreBundle\EventListener; |
4 | 4 | ||
5 | use Symfony\Component\EventDispatcher\EventDispatcher; | 5 | use Symfony\Component\EventDispatcher\EventDispatcher; |
6 | use Symfony\Component\HttpFoundation\Request; | 6 | use Symfony\Component\HttpFoundation\Request; |
diff --git a/src/Wallabag/CoreBundle/Tests/EventListener/RegistrationConfirmedListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListenerTest.php index 7039dc61..e45722fa 100644 --- a/src/Wallabag/CoreBundle/Tests/EventListener/RegistrationConfirmedListenerTest.php +++ b/tests/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListenerTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\EventListener; | 3 | namespace Tests\Wallabag\CoreBundle\EventListener; |
4 | 4 | ||
5 | use FOS\UserBundle\Event\FilterUserResponseEvent; | 5 | use FOS\UserBundle\Event\FilterUserResponseEvent; |
6 | use FOS\UserBundle\FOSUserEvents; | 6 | use FOS\UserBundle\FOSUserEvents; |
diff --git a/src/Wallabag/CoreBundle/Tests/EventListener/UserLocaleListenerTest.php b/tests/Wallabag/CoreBundle/EventListener/UserLocaleListenerTest.php index d9ffe30e..e9ac7c1d 100644 --- a/src/Wallabag/CoreBundle/Tests/EventListener/UserLocaleListenerTest.php +++ b/tests/Wallabag/CoreBundle/EventListener/UserLocaleListenerTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\EventListener; | 3 | namespace Tests\Wallabag\CoreBundle\EventListener; |
4 | 4 | ||
5 | use Symfony\Component\HttpFoundation\Request; | 5 | use Symfony\Component\HttpFoundation\Request; |
6 | use Symfony\Component\HttpFoundation\Session\Session; | 6 | use Symfony\Component\HttpFoundation\Session\Session; |
diff --git a/src/Wallabag/CoreBundle/Tests/Form/DataTransformer/StringToListTransformerTest.php b/tests/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformerTest.php index 6b1e8613..0ec98c1f 100644 --- a/src/Wallabag/CoreBundle/Tests/Form/DataTransformer/StringToListTransformerTest.php +++ b/tests/Wallabag/CoreBundle/Form/DataTransformer/StringToListTransformerTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Form\DataTransformer; | 3 | namespace Tests\Wallabag\CoreBundle\Form\DataTransformer; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Form\DataTransformer\StringToListTransformer; | 5 | use Wallabag\CoreBundle\Form\DataTransformer\StringToListTransformer; |
6 | 6 | ||
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php index 9d7b0f36..7abb0737 100644 --- a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php +++ b/tests/Wallabag/CoreBundle/Helper/ContentProxyTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Helper; | 3 | namespace Tests\Wallabag\CoreBundle\Helper; |
4 | 4 | ||
5 | use Psr\Log\NullLogger; | 5 | use Psr\Log\NullLogger; |
6 | use Wallabag\CoreBundle\Helper\ContentProxy; | 6 | use Wallabag\CoreBundle\Helper\ContentProxy; |
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/RedirectTest.php b/tests/Wallabag/CoreBundle/Helper/RedirectTest.php index f4aecc80..f339f75e 100644 --- a/src/Wallabag/CoreBundle/Tests/Helper/RedirectTest.php +++ b/tests/Wallabag/CoreBundle/Helper/RedirectTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Helper; | 3 | namespace Tests\Wallabag\CoreBundle\Helper; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Helper\Redirect; | 5 | use Wallabag\CoreBundle\Helper\Redirect; |
6 | 6 | ||
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php b/tests/Wallabag/CoreBundle/Helper/RuleBasedTaggerTest.php index e9025b45..17b08c2a 100644 --- a/src/Wallabag/CoreBundle/Tests/Helper/RuleBasedTaggerTest.php +++ b/tests/Wallabag/CoreBundle/Helper/RuleBasedTaggerTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Helper; | 3 | namespace Tests\Wallabag\CoreBundle\Helper; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Entity\Config; | 5 | use Wallabag\CoreBundle\Entity\Config; |
6 | use Wallabag\CoreBundle\Entity\Entry; | 6 | use Wallabag\CoreBundle\Entity\Entry; |
diff --git a/src/Wallabag/CoreBundle/Tests/Mock/InstallCommandMock.php b/tests/Wallabag/CoreBundle/Mock/InstallCommandMock.php index ff9cdafd..5806bd4d 100644 --- a/src/Wallabag/CoreBundle/Tests/Mock/InstallCommandMock.php +++ b/tests/Wallabag/CoreBundle/Mock/InstallCommandMock.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Mock; | 3 | namespace Tests\Wallabag\CoreBundle\Mock; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Command\InstallCommand; | 5 | use Wallabag\CoreBundle\Command\InstallCommand; |
6 | 6 | ||
diff --git a/src/Wallabag/CoreBundle/Tests/ParamConverter/UsernameRssTokenConverterTest.php b/tests/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverterTest.php index ee10938a..e29b58b5 100644 --- a/src/Wallabag/CoreBundle/Tests/ParamConverter/UsernameRssTokenConverterTest.php +++ b/tests/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverterTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Command; | 3 | namespace Tests\Wallabag\CoreBundle\Command; |
4 | 4 | ||
5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; |
6 | use Symfony\Component\HttpFoundation\Request; | 6 | use Symfony\Component\HttpFoundation\Request; |
diff --git a/src/Wallabag/CoreBundle/Tests/Subscriber/TablePrefixSubscriberTest.php b/tests/Wallabag/CoreBundle/Subscriber/TablePrefixSubscriberTest.php index e5eafab1..4ae76703 100644 --- a/src/Wallabag/CoreBundle/Tests/Subscriber/TablePrefixSubscriberTest.php +++ b/tests/Wallabag/CoreBundle/Subscriber/TablePrefixSubscriberTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Subscriber; | 3 | namespace Tests\Wallabag\CoreBundle\Subscriber; |
4 | 4 | ||
5 | use Doctrine\Common\EventManager; | 5 | use Doctrine\Common\EventManager; |
6 | use Doctrine\ORM\Event\LoadClassMetadataEventArgs; | 6 | use Doctrine\ORM\Event\LoadClassMetadataEventArgs; |
diff --git a/src/Wallabag/CoreBundle/Tests/Twig/WallabagExtensionTest.php b/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php index 9af8fad8..8ec2a75a 100644 --- a/src/Wallabag/CoreBundle/Tests/Twig/WallabagExtensionTest.php +++ b/tests/Wallabag/CoreBundle/Twig/WallabagExtensionTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Tests\Twig; | 3 | namespace Tests\Wallabag\CoreBundle\Twig; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Twig\WallabagExtension; | 5 | use Wallabag\CoreBundle\Twig\WallabagExtension; |
6 | 6 | ||
diff --git a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php new file mode 100644 index 00000000..c0055888 --- /dev/null +++ b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php | |||
@@ -0,0 +1,83 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\CoreBundle; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
6 | use Symfony\Component\BrowserKit\Cookie; | ||
7 | |||
8 | abstract class WallabagCoreTestCase extends WebTestCase | ||
9 | { | ||
10 | private $client = null; | ||
11 | |||
12 | public function getClient() | ||
13 | { | ||
14 | return $this->client; | ||
15 | } | ||
16 | |||
17 | public function setUp() | ||
18 | { | ||
19 | parent::setUp(); | ||
20 | |||
21 | $this->client = static::createClient(); | ||
22 | } | ||
23 | |||
24 | /** | ||
25 | * Login a user without making a HTTP request. | ||
26 | * If we make a HTTP request we lose ability to mock service in the container. | ||
27 | * | ||
28 | * @param string $username User to log in | ||
29 | */ | ||
30 | public function logInAs($username) | ||
31 | { | ||
32 | $container = $this->client->getContainer(); | ||
33 | $session = $container->get('session'); | ||
34 | |||
35 | $userManager = $container->get('fos_user.user_manager'); | ||
36 | $loginManager = $container->get('fos_user.security.login_manager'); | ||
37 | $firewallName = $container->getParameter('fos_user.firewall_name'); | ||
38 | |||
39 | $user = $userManager->findUserBy(array('username' => $username)); | ||
40 | $loginManager->loginUser($firewallName, $user); | ||
41 | |||
42 | $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); | ||
43 | $session->save(); | ||
44 | |||
45 | $cookie = new Cookie($session->getName(), $session->getId()); | ||
46 | $this->client->getCookieJar()->set($cookie); | ||
47 | } | ||
48 | |||
49 | /** | ||
50 | * Instead of `logInAs` this method use a HTTP request to log in the user. | ||
51 | * Could be better for some tests. | ||
52 | * | ||
53 | * @param string $username User to log in | ||
54 | */ | ||
55 | public function logInAsUsingHttp($username) | ||
56 | { | ||
57 | $crawler = $this->client->request('GET', '/login'); | ||
58 | $form = $crawler->filter('button[type=submit]')->form(); | ||
59 | $data = [ | ||
60 | '_username' => $username, | ||
61 | '_password' => 'mypassword', | ||
62 | ]; | ||
63 | |||
64 | $this->client->submit($form, $data); | ||
65 | } | ||
66 | |||
67 | /** | ||
68 | * Return the user id of the logged in user. | ||
69 | * You should be sure that you called `logInAs` before. | ||
70 | * | ||
71 | * @return int | ||
72 | */ | ||
73 | public function getLoggedInUserId() | ||
74 | { | ||
75 | $token = static::$kernel->getContainer()->get('security.token_storage')->getToken(); | ||
76 | |||
77 | if (null !== $token) { | ||
78 | return $token->getUser()->getId(); | ||
79 | } | ||
80 | |||
81 | throw new \RuntimeException('No logged in User.'); | ||
82 | } | ||
83 | } | ||
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/ImportControllerTest.php b/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php index 9f38fa82..96b5300b 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/ImportControllerTest.php +++ b/tests/Wallabag/ImportBundle/Controller/ImportControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | 6 | ||
7 | class ImportControllerTest extends WallabagCoreTestCase | 7 | class ImportControllerTest extends WallabagCoreTestCase |
8 | { | 8 | { |
diff --git a/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php new file mode 100644 index 00000000..e0e61df8 --- /dev/null +++ b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php | |||
@@ -0,0 +1,108 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ImportBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | ||
6 | |||
7 | class PocketControllerTest extends WallabagCoreTestCase | ||
8 | { | ||
9 | public function testImportPocket() | ||
10 | { | ||
11 | $this->logInAs('admin'); | ||
12 | $client = $this->getClient(); | ||
13 | |||
14 | $crawler = $client->request('GET', '/import/pocket'); | ||
15 | |||
16 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | ||
17 | $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); | ||
18 | } | ||
19 | |||
20 | public function testImportPocketAuthBadToken() | ||
21 | { | ||
22 | $this->logInAs('admin'); | ||
23 | $client = $this->getClient(); | ||
24 | |||
25 | $client->request('GET', '/import/pocket/auth'); | ||
26 | |||
27 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
28 | } | ||
29 | |||
30 | public function testImportPocketAuth() | ||
31 | { | ||
32 | $this->logInAs('admin'); | ||
33 | $client = $this->getClient(); | ||
34 | |||
35 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
36 | ->disableOriginalConstructor() | ||
37 | ->getMock(); | ||
38 | |||
39 | $pocketImport | ||
40 | ->expects($this->once()) | ||
41 | ->method('getRequestToken') | ||
42 | ->willReturn('token'); | ||
43 | |||
44 | static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
45 | |||
46 | $client->request('GET', '/import/pocket/auth'); | ||
47 | |||
48 | $this->assertEquals(301, $client->getResponse()->getStatusCode()); | ||
49 | $this->assertContains('getpocket.com/auth/authorize', $client->getResponse()->headers->get('location')); | ||
50 | } | ||
51 | |||
52 | public function testImportPocketCallbackWithBadToken() | ||
53 | { | ||
54 | $this->logInAs('admin'); | ||
55 | $client = $this->getClient(); | ||
56 | |||
57 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
58 | ->disableOriginalConstructor() | ||
59 | ->getMock(); | ||
60 | |||
61 | $pocketImport | ||
62 | ->expects($this->once()) | ||
63 | ->method('authorize') | ||
64 | ->willReturn(false); | ||
65 | |||
66 | static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
67 | |||
68 | $client->request('GET', '/import/pocket/callback'); | ||
69 | |||
70 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
71 | $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage'); | ||
72 | $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); | ||
73 | } | ||
74 | |||
75 | public function testImportPocketCallback() | ||
76 | { | ||
77 | $this->logInAs('admin'); | ||
78 | $client = $this->getClient(); | ||
79 | |||
80 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
81 | ->disableOriginalConstructor() | ||
82 | ->getMock(); | ||
83 | |||
84 | $pocketImport | ||
85 | ->expects($this->once()) | ||
86 | ->method('authorize') | ||
87 | ->willReturn(true); | ||
88 | |||
89 | $pocketImport | ||
90 | ->expects($this->once()) | ||
91 | ->method('setMarkAsRead') | ||
92 | ->with(false) | ||
93 | ->willReturn($pocketImport); | ||
94 | |||
95 | $pocketImport | ||
96 | ->expects($this->once()) | ||
97 | ->method('import') | ||
98 | ->willReturn(true); | ||
99 | |||
100 | static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
101 | |||
102 | $client->request('GET', '/import/pocket/callback'); | ||
103 | |||
104 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
105 | $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage'); | ||
106 | $this->assertEquals('flashes.import.notice.summary', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); | ||
107 | } | ||
108 | } | ||
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php b/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php index f7de3fef..c1025b41 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php +++ b/tests/Wallabag/ImportBundle/Controller/WallabagV1ControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | use Symfony\Component\HttpFoundation\File\UploadedFile; | 6 | use Symfony\Component\HttpFoundation\File\UploadedFile; |
7 | 7 | ||
8 | class WallabagV1ControllerTest extends WallabagCoreTestCase | 8 | class WallabagV1ControllerTest extends WallabagCoreTestCase |
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php b/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php index 15251ae7..d8d2c8bf 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php +++ b/tests/Wallabag/ImportBundle/Controller/WallabagV2ControllerTest.php | |||
@@ -1,8 +1,8 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Controller; | 3 | namespace Tests\Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Tests\WallabagCoreTestCase; | 5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | use Symfony\Component\HttpFoundation\File\UploadedFile; | 6 | use Symfony\Component\HttpFoundation\File\UploadedFile; |
7 | 7 | ||
8 | class WallabagV2ControllerTest extends WallabagCoreTestCase | 8 | class WallabagV2ControllerTest extends WallabagCoreTestCase |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/ImportChainTest.php b/tests/Wallabag/ImportBundle/Import/ImportChainTest.php index 702d2a9b..32568ce5 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/ImportChainTest.php +++ b/tests/Wallabag/ImportBundle/Import/ImportChainTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Import; | 3 | namespace Tests\Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Wallabag\ImportBundle\Import\ImportChain; | 5 | use Wallabag\ImportBundle\Import\ImportChain; |
6 | 6 | ||
diff --git a/src/Wallabag/ImportBundle/Tests/Import/ImportCompilerPassTest.php b/tests/Wallabag/ImportBundle/Import/ImportCompilerPassTest.php index b22fcfbc..71a007a9 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/ImportCompilerPassTest.php +++ b/tests/Wallabag/ImportBundle/Import/ImportCompilerPassTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Import; | 3 | namespace Tests\Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Symfony\Component\DependencyInjection\ContainerBuilder; | 5 | use Symfony\Component\DependencyInjection\ContainerBuilder; |
6 | use Wallabag\ImportBundle\Import\ImportCompilerPass; | 6 | use Wallabag\ImportBundle\Import\ImportCompilerPass; |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php index cb171572..8534e1c8 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php +++ b/tests/Wallabag/ImportBundle/Import/PocketImportTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Import; | 3 | namespace Tests\Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Wallabag\UserBundle\Entity\User; | 5 | use Wallabag\UserBundle\Entity\User; |
6 | use Wallabag\CoreBundle\Entity\Entry; | 6 | use Wallabag\CoreBundle\Entity\Entry; |
@@ -390,4 +390,55 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase | |||
390 | $this->assertContains('PocketImport: Failed to import', $records[0]['message']); | 390 | $this->assertContains('PocketImport: Failed to import', $records[0]['message']); |
391 | $this->assertEquals('ERROR', $records[0]['level_name']); | 391 | $this->assertEquals('ERROR', $records[0]['level_name']); |
392 | } | 392 | } |
393 | |||
394 | public function testImportWithExceptionFromGraby() | ||
395 | { | ||
396 | $client = new Client(); | ||
397 | |||
398 | $mock = new Mock([ | ||
399 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))), | ||
400 | new Response(200, ['Content-Type' => 'application/json'], Stream::factory(' | ||
401 | { | ||
402 | "status": 1, | ||
403 | "list": { | ||
404 | "229279689": { | ||
405 | "resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview" | ||
406 | } | ||
407 | } | ||
408 | } | ||
409 | ')), | ||
410 | ]); | ||
411 | |||
412 | $client->getEmitter()->attach($mock); | ||
413 | |||
414 | $pocketImport = $this->getPocketImport(); | ||
415 | |||
416 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
417 | ->disableOriginalConstructor() | ||
418 | ->getMock(); | ||
419 | |||
420 | $entryRepo->expects($this->once()) | ||
421 | ->method('findByUrlAndUserId') | ||
422 | ->will($this->onConsecutiveCalls(false, true)); | ||
423 | |||
424 | $this->em | ||
425 | ->expects($this->once()) | ||
426 | ->method('getRepository') | ||
427 | ->willReturn($entryRepo); | ||
428 | |||
429 | $entry = new Entry($this->user); | ||
430 | |||
431 | $this->contentProxy | ||
432 | ->expects($this->once()) | ||
433 | ->method('updateEntry') | ||
434 | ->will($this->throwException(new \Exception())); | ||
435 | |||
436 | $pocketImport->setClient($client); | ||
437 | $pocketImport->authorize('wunderbar_code'); | ||
438 | |||
439 | $res = $pocketImport->import(); | ||
440 | |||
441 | $this->assertTrue($res); | ||
442 | $this->assertEquals(['skipped' => 1, 'imported' => 0], $pocketImport->getSummary()); | ||
443 | } | ||
393 | } | 444 | } |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php index 8c967e1b..bdc47dac 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php +++ b/tests/Wallabag/ImportBundle/Import/WallabagV1ImportTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Import; | 3 | namespace Tests\Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Wallabag\ImportBundle\Import\WallabagV1Import; | 5 | use Wallabag\ImportBundle\Import\WallabagV1Import; |
6 | use Wallabag\UserBundle\Entity\User; | 6 | use Wallabag\UserBundle\Entity\User; |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php index e287d8e2..4a45e0f0 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php +++ b/tests/Wallabag/ImportBundle/Import/WallabagV2ImportTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Import; | 3 | namespace Tests\Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Wallabag\ImportBundle\Import\WallabagV2Import; | 5 | use Wallabag\ImportBundle\Import\WallabagV2Import; |
6 | use Wallabag\UserBundle\Entity\User; | 6 | use Wallabag\UserBundle\Entity\User; |
@@ -143,4 +143,44 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase | |||
143 | $this->assertContains('WallabagImport: user is not defined', $records[0]['message']); | 143 | $this->assertContains('WallabagImport: user is not defined', $records[0]['message']); |
144 | $this->assertEquals('ERROR', $records[0]['level_name']); | 144 | $this->assertEquals('ERROR', $records[0]['level_name']); |
145 | } | 145 | } |
146 | |||
147 | public function testImportEmptyFile() | ||
148 | { | ||
149 | $wallabagV2Import = $this->getWallabagV2Import(); | ||
150 | $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2-empty.json'); | ||
151 | |||
152 | $res = $wallabagV2Import->import(); | ||
153 | |||
154 | $this->assertFalse($res); | ||
155 | $this->assertEquals(['skipped' => 0, 'imported' => 0], $wallabagV2Import->getSummary()); | ||
156 | } | ||
157 | |||
158 | public function testImportWithExceptionFromGraby() | ||
159 | { | ||
160 | $wallabagV2Import = $this->getWallabagV2Import(); | ||
161 | $wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json'); | ||
162 | |||
163 | $entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository') | ||
164 | ->disableOriginalConstructor() | ||
165 | ->getMock(); | ||
166 | |||
167 | $entryRepo->expects($this->exactly(24)) | ||
168 | ->method('findByUrlAndUserId') | ||
169 | ->will($this->onConsecutiveCalls(false, true, false)); | ||
170 | |||
171 | $this->em | ||
172 | ->expects($this->any()) | ||
173 | ->method('getRepository') | ||
174 | ->willReturn($entryRepo); | ||
175 | |||
176 | $this->contentProxy | ||
177 | ->expects($this->exactly(2)) | ||
178 | ->method('updateEntry') | ||
179 | ->will($this->throwException(new \Exception())); | ||
180 | |||
181 | $res = $wallabagV2Import->import(); | ||
182 | |||
183 | $this->assertTrue($res); | ||
184 | $this->assertEquals(['skipped' => 24, 'imported' => 0], $wallabagV2Import->getSummary()); | ||
185 | } | ||
146 | } | 186 | } |
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/test.html b/tests/Wallabag/ImportBundle/fixtures/test.html index e69de29b..e69de29b 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/test.html +++ b/tests/Wallabag/ImportBundle/fixtures/test.html | |||
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/test.txt b/tests/Wallabag/ImportBundle/fixtures/test.txt index e69de29b..e69de29b 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/test.txt +++ b/tests/Wallabag/ImportBundle/fixtures/test.txt | |||
diff --git a/tests/Wallabag/ImportBundle/fixtures/unnamed.png b/tests/Wallabag/ImportBundle/fixtures/unnamed.png new file mode 100644 index 00000000..e6dd9caa --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/unnamed.png | |||
Binary files differ | |||
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1-read.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1-read.json index c4d1cf58..c4d1cf58 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1-read.json +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1-read.json | |||
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1.json index f298469f..f298469f 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v1.json +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v1.json | |||
diff --git a/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-empty.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-empty.json new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-empty.json | |||
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2-read.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json index 3fa0bddf..3fa0bddf 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2-read.json +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2-read.json | |||
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json index 37c59668..37c59668 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json +++ b/tests/Wallabag/ImportBundle/fixtures/wallabag-v2.json | |||
diff --git a/src/Wallabag/UserBundle/Tests/Mailer/AuthCodeMailerTest.php b/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php index 00967051..f670c925 100644 --- a/src/Wallabag/UserBundle/Tests/Mailer/AuthCodeMailerTest.php +++ b/tests/Wallabag/UserBundle/Mailer/AuthCodeMailerTest.php | |||
@@ -1,6 +1,6 @@ | |||
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace Wallabag\UserBundle\Tests\Mailer; | 3 | namespace Tests\Wallabag\UserBundle\Mailer; |
4 | 4 | ||
5 | use Wallabag\UserBundle\Entity\User; | 5 | use Wallabag\UserBundle\Entity\User; |
6 | use Wallabag\UserBundle\Mailer\AuthCodeMailer; | 6 | use Wallabag\UserBundle\Mailer\AuthCodeMailer; |
diff --git a/var/SymfonyRequirements.php b/var/SymfonyRequirements.php index 841338f4..0a5de546 100644 --- a/var/SymfonyRequirements.php +++ b/var/SymfonyRequirements.php | |||
@@ -681,10 +681,17 @@ class SymfonyRequirements extends RequirementCollection | |||
681 | 681 | ||
682 | if (class_exists('Symfony\Component\Intl\Intl')) { | 682 | if (class_exists('Symfony\Component\Intl\Intl')) { |
683 | $this->addRecommendation( | 683 | $this->addRecommendation( |
684 | \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(), | 684 | \Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion(), |
685 | sprintf('intl ICU version installed on your system (%s) should match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), | 685 | sprintf('intl ICU version installed on your system is outdated (%s) and does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), |
686 | 'In most cases you should be fine, but please verify there is no inconsistencies between data provided by Symfony and the intl extension. See https://github.com/symfony/symfony/issues/15007 for an example of inconsistencies you might run into.' | 686 | 'To get the latest internationalization data upgrade the ICU system package and the intl PHP extension.' |
687 | ); | 687 | ); |
688 | if (\Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion()) { | ||
689 | $this->addRecommendation( | ||
690 | \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(), | ||
691 | sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), | ||
692 | 'To avoid internationalization data incosistencies upgrade the symfony/intl component.' | ||
693 | ); | ||
694 | } | ||
688 | } | 695 | } |
689 | 696 | ||
690 | $this->addPhpIniRecommendation( | 697 | $this->addPhpIniRecommendation( |
diff --git a/web/app.php b/web/app.php index 5c5ee03b..4c2c4650 100644 --- a/web/app.php +++ b/web/app.php | |||
@@ -8,16 +8,6 @@ use Symfony\Component\HttpFoundation\Request; | |||
8 | $loader = require __DIR__.'/../app/autoload.php'; | 8 | $loader = require __DIR__.'/../app/autoload.php'; |
9 | include_once __DIR__.'/../var/bootstrap.php.cache'; | 9 | include_once __DIR__.'/../var/bootstrap.php.cache'; |
10 | 10 | ||
11 | // Enable APC for autoloading to improve performance. | ||
12 | // You should change the ApcClassLoader first argument to a unique prefix | ||
13 | // in order to prevent cache key conflicts with other applications | ||
14 | // also using APC. | ||
15 | /* | ||
16 | $apcLoader = new Symfony\Component\ClassLoader\ApcClassLoader(sha1(__FILE__), $loader); | ||
17 | $loader->unregister(); | ||
18 | $apcLoader->register(true); | ||
19 | */ | ||
20 | |||
21 | $kernel = new AppKernel('prod', false); | 11 | $kernel = new AppKernel('prod', false); |
22 | $kernel->loadClassCache(); | 12 | $kernel->loadClassCache(); |
23 | //$kernel = new AppCache($kernel); | 13 | //$kernel = new AppCache($kernel); |