Compare commits

..

68 Commits
2.0.5 ... 2.0.7

Author SHA1 Message Date
76ee8a9ea5 Release wallabag 2.0.7 2016-08-22 11:15:28 +02:00
80bb0b7344 Merge pull request #2226 from wallabag/prepare-207
Prepare wallabag 2.0.7
2016-08-22 10:40:24 +02:00
5068544e10 Prepare wallabag 2.0.7 2016-08-22 10:08:21 +02:00
c649d43381 Merge pull request #2222 from wallabag/add-date-on-article-view
Added creation date and reading time on article view
2016-08-22 09:40:21 +02:00
d35ba2c3d6 Display text on baggy
Instead of using icons (which aren't available) display real text for reading time & creation date
2016-08-21 22:22:34 +02:00
4e4e8e9899 Merge pull request #2221 from wallabag/replace-favorite-star
Replaced favorite word/icon with star one
2016-08-21 22:11:20 +02:00
8642f14220 Merge pull request #2224 from wallabag/avoid-exception-import
Avoid breaking import when fetching fail
2016-08-20 14:31:32 +02:00
19d9efab32 Avoid breaking import when fetching fail
graby will throw an Exception in some case (like a bad url, a restricted url or a secured pdf).

Import doesn't handle that case and break the whole import.
With that commit the import isn't stopped but the entry is just skipped.

Also, as a  bonus, I've added extra test on WallabagImportV2 when the json is empty.
2016-08-20 01:17:26 +02:00
e7732deb1f Changed code indentation 2016-08-18 15:37:44 +02:00
eecd7e406d Fixed some translations 2016-08-18 15:30:28 +02:00
4e1be104ab Added creation date and reading time on article view
Fix #2034
2016-08-18 15:23:19 +02:00
519ba0b5e7 Replaced favorite word/icon with star one
Fix #2041
2016-08-18 14:27:17 +02:00
e408d7e895 Merge pull request #2220 from Rurik19/master
Enable PATCH method for CORS in API part
2016-08-18 11:56:02 +02:00
41c9eecfa7 Enable PATCH method for CORS in API part 2016-08-18 14:30:32 +05:00
b762ab3cce Merge pull request #2134 from wallabag/hhvm
Run tests on an uptodate HHVM
2016-08-17 18:00:17 +02:00
fc41abb990 Run tests on an uptodate HHVM
Using some tricks from symfony/symfony
2016-08-17 16:41:36 +02:00
782390a80e Merge pull request #2095 from wallabag/fix-2auth-form
Fix form user display when 2FA is disabled
2016-08-17 15:17:07 +02:00
0cecfa2536 CS 2016-08-17 14:36:20 +02:00
6dfac457d8 Fix tests
Ensure tests after the InstallCommand test will have a clean database.
Previous attempt failed because of a foreign key

Also, nightly on Travis seems to target PHP 7.2-dev, so I put 7.1 in requirement and moved nightly in allowed failures.
And it seems xdebug isn't shipped with PHP 7.1, so I added a workaround to avoid build to fail when trying to remove xdebug.ini file.
2016-08-17 14:34:39 +02:00
9a5c5c330e Disable autobranch & commit 2016-08-17 12:31:16 +02:00
7dbedfc8a3 Enable Zappr 2016-08-17 12:29:47 +02:00
e49c62fac8 Fix form user display for baggy theme 2016-08-17 11:41:46 +02:00
8f5e220327 Fix form user display when 2FA is disabled 2016-08-17 11:41:46 +02:00
2e16a90339 Merge pull request #2216 from Rurik19/master
Enable CORS headers for OAUTH part
2016-08-16 14:22:43 +02:00
848c2e1b97 Enable CORS headers for OAUTH part 2016-08-12 13:01:53 +05:00
00acc0d006 Changed URL for scrutinizer in README 2016-08-11 20:57:06 +02:00
8617972f3f Merge pull request #2212 from wallabag/prepare-206
Prepare release 2.0.6
2016-08-10 15:03:43 +02:00
a26f91dcb6 Prepare release 2.0.6 2016-08-10 14:26:13 +02:00
029965b6a2 Merge pull request #2200 from charno6/patch-1
Fixed typo in entry:notice:entry_saved
2016-07-23 22:58:26 +02:00
75ac3e6289 Fixed typo in entry:notice:entry_saved
"Eintag" to "Eintrag"
2016-07-23 22:40:23 +02:00
8c7d7c0300 Merge pull request #2199 from Simounet/facto/social-links
Handling socials links into a config file
2016-07-21 16:17:53 +02:00
57c608fa94 php-cs-fixer pass 2016-07-20 23:08:04 +02:00
40288b7166 Chrome extension URL updated 2016-07-20 22:55:43 +02:00
78d1727096 Merge pull request #2198 from Simounet/fix/image-inside-figure
FIX image inside a figure element max-width
2016-07-20 20:44:47 +02:00
0e1abf392c FIX image inside a figure element max-width (baggy theme) 2016-07-20 20:23:55 +02:00
f64472e9f8 FIX image inside a figure element max-width 2016-07-20 19:39:24 +02:00
39f27d6370 Handling socials links into a config file 2016-07-20 19:36:01 +02:00
317fc6e684 Merge pull request #2195 from wallabag/remove-bin
Remove binary from repo
2016-07-20 11:38:55 +02:00
8d8d48a2bb Remove binary from repo
Since Composer 1.2, binaries are re-installed from vendors if there aren't found.
This avoid us to commit binaries vendors into the repo.

⚠️ You have to update your Composer to the 1.2 (`composer selfupdate`)
2016-07-20 10:51:37 +02:00
0dc09439ef Merge pull request #2048 from wallabag/travis-php-7.1
Run PHP 7.1 on Travis
2016-07-19 11:24:26 +02:00
ab3eb4ba95 Merge pull request #2194 from benages/patch-2
Fixed spelling Artúclos --> Artículos
2016-07-18 22:56:02 +02:00
57b62cbf79 Fixed spelling Artúclos --> Artículos 2016-07-18 21:53:53 +02:00
1973897305 Run PHP 7.1 on Travis
- Using nightly (as of now it's PHP 7.1 alpha)
- Force guzzle to be at least 5.3.1 (which fix some bugs in PHP 7)
2016-07-18 18:07:25 +02:00
51cbc2ebfe Merge pull request #2185 from wallabag/fix-3rd-party-links
Fix 3rd-Party Apps links (Chrome & Firefox)
2016-07-02 12:33:33 +02:00
8d4152f70d Remove fr part 2016-07-02 11:56:14 +02:00
baef8ea26c Fix 3rd-Party Apps links (Chrome & Firefox) 2016-07-02 11:50:32 +02:00
9f8c43e222 Merge pull request #2172 from wallabag/more-tests
Change the way to login user in tests
2016-06-24 14:22:47 +02:00
fdc90ceb17 Change the way to login user in tests
Instead of using a HTTP request we just login user like FOSUser does.
It allows us to mock service in container for functional tests.

Also, fix a bad config name in fos_user for firewall

And finally, add functional test to PocketImport
2016-06-24 11:55:47 +02:00
2bc9cad78e Remove useless spaces 2016-06-24 11:28:07 +02:00
fb5c17a9ab Merge pull request #2157 from wallabag/lower-upper-readingtime
Handle only upper or only lower reading filter
2016-06-23 11:38:10 +02:00
95859e54c5 Add some tests about readingTime 2016-06-23 10:46:47 +02:00
bf27f99d54 Merge pull request #2165 from wallabag/translation-typos
Fix a few french translations typos
2016-06-23 10:43:06 +02:00
2c00dddf01 fixup! Handle only upper or only lower reading filter 2016-06-23 09:41:30 +02:00
1bdbc39f02 Handle only upper or only lower reading filter
When we select only one value in the reading time filter, we need to perform a query with only one value (greater than OR lower than).
2016-06-23 09:41:30 +02:00
b46124cb9b Fix a few french translations typos 2016-06-23 09:38:49 +02:00
d37bb05c88 Merge pull request #2132 from wallabag/sf3.1
Jump to Symfony 3.1
2016-06-23 09:18:18 +02:00
99451fe4b7 Fix bad loading fixtures
Since doctrine/data-fixtures 1.2.0 fixtures seems to be badly loaded.
No time for investigate but reverting back to 1.1.* is fixing issues.
2016-06-22 23:15:17 +02:00
23634d5d84 Jump to Symfony 3.1 2016-06-22 17:59:35 +02:00
891a026e31 Merge pull request #2160 from wallabag/bin-cs-fixer
Update symlink to php-cs-fixer
2016-06-20 12:11:53 +02:00
2f30eed236 Update symlink to php-cs-fixer 2016-06-20 11:22:30 +02:00
247cf4897a Merge pull request #2155 from wallabag/php-cs-fixer
Use friendsofphp instead of fabpot
2016-06-20 09:35:55 +02:00
3c552f0d04 Merge pull request #2156 from wallabag/delete-redirect
Try to find bad redirection after delete
2016-06-20 09:35:41 +02:00
ce0e9ec31b Try to find bad redirection after delete
Instead of checking for the whole absolute url, we just check with the relative url.
If the referer ends with the relative url of the deleted entry, don't redirect to the referer.
2016-06-17 22:18:48 +02:00
d71b600599 Use friendsofphp instead of fabpot
The fabpot's one is now depreacted
2016-06-17 22:03:29 +02:00
77c530f43c Merge pull request #2148 from wallabag/start-german-docu
translate documentation to German
2016-06-16 06:50:21 +02:00
429480357f translate documentation to German 2016-06-16 00:39:48 +02:00
d220a95121 Merge pull request #2145 from even-allmighty/master
Corrected Regex for lighttpd rewrite
2016-06-13 11:51:37 +02:00
02d10905b3 Corrected Regex for lighttpd rewrite 2016-06-13 10:35:05 +02:00
129 changed files with 3762 additions and 546 deletions

3
.gitignore vendored
View File

@ -10,6 +10,9 @@
/var/sessions/*
!var/sessions/.gitkeep
!var/SymfonyRequirements.php
/bin/*
!/bin/console
!/bin/symfony_requirements
# Parameters
/app/config/parameters.yml

View File

@ -20,7 +20,8 @@ php:
- 5.5
- 5.6
- 7.0
- hhvm
- 7.1
- nightly
env:
- DB=mysql
@ -30,13 +31,30 @@ env:
matrix:
fast_finish: true
include:
# driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
- php: hhvm-3.12
sudo: required
dist: trusty
group: edge
env: DB=mysql
addons:
apt:
packages:
- mysql-server-5.6
- mysql-client-core-5.6
- mysql-client-5.6
services:
- mysql
- php: hhvm-3.12
sudo: required
dist: trusty
group: edge
env: DB=sqlite
- php: 7.0
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite
exclude:
- php: hhvm
env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
allow_failures:
- php: hhvm
- php: hhvm-3.12
- php: nightly
# exclude v1 branches
branches:
@ -44,8 +62,10 @@ branches:
- legacy
before_script:
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi;
- PHP=$TRAVIS_PHP_VERSION
- if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
# xdebug isn't enable for PHP 7.1
- if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi
- composer self-update --no-progress
- if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi;
@ -55,6 +75,6 @@ before_install:
script:
- travis_wait composer update --no-interaction --no-progress
- ant prepare-$DB
- bin/phpunit -v
- phpunit -v
- if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
- if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;

26
.zappr.yaml Normal file
View File

@ -0,0 +1,26 @@
# see https://zappr.opensource.zalan.do/
autobranch: false
commit: false
approvals:
minimum: 1
ignore: pr_opener
pattern: "^(:\\+1:|👍)$"
veto:
pattern: "^(:\\-1:|👎)$"
from:
orgs:
- wallabag
collaborators: true
specification:
title:
minimum-length:
enabled: true
length: 8
body:
minimum-length:
enabled: true
length: 8
contains-url: false
contains-issue-number: false
template:
differs-from-body: true

View File

@ -2,6 +2,39 @@
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [2.0.7] - 2016-08-22
### Added
- [#2222](https://github.com/wallabag/wallabag/pull/2222) Added creation date and reading time on article view (Nicolas Lœuillet)
- [#2134](https://github.com/wallabag/wallabag/pull/2134) Run tests on an uptodate HHVM (Jeremy Benoist)
### Changed
- [#2221](https://github.com/wallabag/wallabag/pull/2221) Replaced favorite word/icon with star one (Nicolas Lœuillet)
### Fixed
- [#2224](https://github.com/wallabag/wallabag/pull/2224) Avoid breaking import when fetching fail (Jeremy Benoist)
- [#2216](https://github.com/wallabag/wallabag/pull/2216), [#2220](https://github.com/wallabag/wallabag/pull/2220) Enable CORS headers for OAUTH part (Rurik19)
- [#2095](https://github.com/wallabag/wallabag/pull/2095) Fix form user display when 2FA is disabled (Nicolas Lœuillet)
## [2.0.6] - 2016-08-10
### Changed
- [#2199](https://github.com/wallabag/wallabag/pull/2199) Handling socials links into a config file (Simon Alberny)
- [#2172](https://github.com/wallabag/wallabag/pull/2172) Change the way to login user in tests (Jeremy Benoist)
- [#2155](https://github.com/wallabag/wallabag/pull/2155) Use friendsofphp instead of fabpot for PHP CS Fixer (Jeremy Benoist)
### Fixed
- [#2200](https://github.com/wallabag/wallabag/pull/2200) Fixed typo in entry:notice:entry_saved (charno6)
- [#2185](https://github.com/wallabag/wallabag/pull/2185) Fix 3rd-Party Apps links (Chrome & Firefox) (Thomas Citharel)
- [#2165](https://github.com/wallabag/wallabag/pull/2165) Fix a few french translations typos (Thomas Citharel)
- [#2157](https://github.com/wallabag/wallabag/pull/2157) Handle only upper or only lower reading filter (Jeremy Benoist)
- [#2156](https://github.com/wallabag/wallabag/pull/2156) Try to find bad redirection after delete (Jeremy Benoist)
## [2.0.5] - 2016-05-31
### Added

View File

@ -1,5 +1,5 @@
[![Build Status](https://api.travis-ci.org/wallabag/wallabag.svg?branch=master)](https://travis-ci.org/wallabag/wallabag)
[![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)
[![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)
[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag)
# What is wallabag?
@ -10,13 +10,13 @@ More informations on our website: [wallabag.org](https://wallabag.org)
# Install wallabag
If you don't have it yet, please [install composer](https://getcomposer.org/download/).
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).
Then you can install wallabag by executing the following commands:
```
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.5
git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod

View File

@ -5,30 +5,32 @@ imports:
framework:
#esi: ~
translator: { fallback: "%locale%" }
secret: "%secret%"
translator:
enabled: true
fallback: "%locale%"
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
validation:
enable_annotations: true
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_hosts: ~
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
handler_id: session.handler.native_file
save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
fragments: ~
http_method_override: true
assets: ~
wallabag_core:
version: 2.0.5
version: 2.0.7
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
languages:
en: 'English'
@ -54,14 +56,14 @@ wallabag_import:
# Twig Configuration
twig:
debug: "%kernel.debug%"
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
form_themes:
- "LexikFormFilterBundle:Form:form_div_layout.html.twig"
# Assetic Configuration
assetic:
debug: "%kernel.debug%"
debug: "%kernel.debug%"
use_controller: false
bundles: [ ]
#java: /usr/bin/java
@ -75,14 +77,14 @@ assetic:
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
path: "%database_path%"
charset: UTF8
path: "%database_path%"
server_version: 5.6
orm:
@ -108,10 +110,11 @@ doctrine_migrations:
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool:
type: memory
fos_rest:
param_fetcher_listener: true
@ -148,6 +151,11 @@ nelmio_cors:
#origin_regex: false
paths:
'^/api/':
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'PATCH','GET', 'DELETE']
max_age: 3600
'^/oauth/':
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
@ -169,17 +177,17 @@ liip_theme:
path_patterns:
bundle_resource:
- %%bundle_path%%/Resources/views/themes/%%current_theme%%/%%template%%
- "%%bundle_path%%/Resources/views/themes/%%current_theme%%/%%template%%"
fos_user:
db_driver: orm
firewall_name: main
firewall_name: secured_area
user_class: Wallabag\UserBundle\Entity\User
registration:
confirmation:
enabled: %fosuser_confirmation%
enabled: "%fosuser_confirmation%"
from_email:
address: %from_email%
address: "%from_email%"
sender_name: wallabag
fos_oauth_server:
db_driver: orm
@ -197,8 +205,8 @@ scheb_two_factor:
cookie_lifetime: 2592000
email:
enabled: %twofactor_auth%
sender_email: %twofactor_sender%
enabled: "%twofactor_auth%"
sender_email: "%twofactor_sender%"
digits: 6
template: WallabagUserBundle:Authentication:form.html.twig
mailer: wallabag_user.auth_code_mailer

View File

@ -5,7 +5,8 @@ framework:
router:
resource: "%kernel.root_dir%/config/routing_dev.yml"
strict_requirements: true
profiler: { only_exceptions: false }
profiler:
only_exceptions: false
web_profiler:
toolbar: true
@ -14,19 +15,19 @@ web_profiler:
monolog:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: [!event]
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: ['!event']
console:
type: console
type: console
bubble: false
verbosity_levels:
VERBOSITY_VERBOSE: INFO
VERBOSITY_VERY_VERBOSE: DEBUG
channels: [!event, !doctrine]
channels: ['!event', '!doctrine']
console_very_verbose:
type: console
type: console
bubble: false
verbosity_levels:
VERBOSITY_VERBOSE: NOTICE

View File

@ -2,8 +2,8 @@ imports:
- { resource: config.yml }
#framework:
# validation:
# cache: apc
# cache:
# system: cache.adapter.apcu
#doctrine:
# orm:
@ -14,12 +14,12 @@ imports:
monolog:
handlers:
main:
type: fingers_crossed
type: fingers_crossed
action_level: error
handler: nested
handler: nested
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
type: console

View File

@ -4,8 +4,8 @@ wallabag_annotation:
wallabag_import:
resource: "@WallabagImportBundle/Controller/"
type: annotation
prefix: /import
type: annotation
prefix: /import
wallabag_api:
resource: "@WallabagApiBundle/Resources/config/routing.yml"

View File

@ -1,14 +1,14 @@
_wdt:
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
prefix: /_wdt
prefix: /_wdt
_profiler:
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
prefix: /_profiler
prefix: /_profiler
_errors:
resource: "@TwigBundle/Resources/config/routing/errors.xml"
prefix: /_error
prefix: /_error
_main:
resource: routing.yml

View File

@ -3,12 +3,14 @@ security:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
providers:
administrators:
entity: { class: WallabagUserBundle:User, property: username }
entity:
class: WallabagUserBundle:User
property: username
fos_userbundle:
id: fos_user.user_provider.username
@ -31,7 +33,7 @@ security:
anonymous: true
login_firewall:
pattern: ^/login$
pattern: ^/login$
anonymous: ~
secured_area:
@ -40,12 +42,12 @@ security:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
anonymous: true
anonymous: true
remember_me:
secret: "%secret%"
secret: "%secret%"
lifetime: 31536000
path: /
domain: ~
path: /
domain: ~
logout:
path: /logout

View File

@ -1 +0,0 @@
../vendor/doctrine/orm/bin/doctrine

View File

@ -1 +0,0 @@
../vendor/doctrine/dbal/bin/doctrine-dbal

View File

@ -1 +0,0 @@
../vendor/doctrine/migrations/bin/doctrine-migrations

View File

@ -1 +0,0 @@
../vendor/doctrine/orm/bin/doctrine.php

View File

@ -1 +0,0 @@
../vendor/fabpot/php-cs-fixer/php-cs-fixer

View File

@ -1 +0,0 @@
../vendor/phpunit/phpunit/phpunit

View File

@ -1 +0,0 @@
../vendor/sensiolabs/security-checker/security-checker

View File

@ -13,7 +13,7 @@ echo '> PHP is using the following php.ini file:'.PHP_EOL;
if ($iniPath) {
echo_style('green', ' '.$iniPath);
} else {
echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!');
echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!');
}
echo PHP_EOL.PHP_EOL;

View File

@ -43,7 +43,7 @@
"ext-iconv": "*",
"ext-tokenizer": "*",
"ext-pdo": "*",
"symfony/symfony": "3.0.*",
"symfony/symfony": "3.1.*",
"doctrine/orm": "^2.5",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
@ -74,7 +74,7 @@
"grandt/phpepub": "~4.0",
"wallabag/php-mobi": "~1.0.0",
"kphoen/rulerz-bundle": "~0.10",
"guzzlehttp/guzzle": "^5.2.0",
"guzzlehttp/guzzle": "^5.3.1",
"doctrine/doctrine-migrations-bundle": "^1.0",
"paragonie/random_compat": "~1.0",
"craue/config-bundle": "~1.4",
@ -85,10 +85,11 @@
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "~2.2",
"doctrine/data-fixtures": "~1.1.1",
"sensio/generator-bundle": "^3.0",
"phpunit/phpunit": "~4.4",
"symfony/phpunit-bridge": "^2.7",
"fabpot/php-cs-fixer": "~1.9"
"symfony/phpunit-bridge": "^3.0",
"friendsofphp/php-cs-fixer": "~1.9"
},
"scripts": {
"post-cmd": [
@ -121,6 +122,9 @@
"psr-4": { "Wallabag\\": "src/Wallabag/" },
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
"autoload-dev": {
"psr-4": { "Tests\\": "tests/" }
},
"config": {
"bin-dir": "bin"
},

1611
composer.lock generated

File diff suppressed because it is too large Load Diff

270
docs/de/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,57 @@
Lasse wallabag in docker-compose laufen
=======================================
Um deine eigene Entwicklungsinstanz von wallabag laufen zu lassen,
möchtest du vielleicht die vorkonfigurierten docker compose Dateien
nutzen.
Voraussetzungen
---------------
Stelle sicher `Docker
<https://docs.docker.com/installation/ubuntulinux/>`__ und `Docker
Compose <https://docs.docker.com/compose/install/>`__ auf deinem
System verfügbar und aktuell zu haben.
Wechsel des DBMS
----------------
Standardmäßig startet wallabag mit einer SQLite Datenbank.
Da wallabag Unterstützung für Postgresql und MySQL bietet, gibt es
auch docker Container für diese.
In der ``docker-compose.yml`` kommentierst du für das gewählte DBMS
aus:
- die Container Definition (``postgres`` oder ``mariadb`` root
Level Block)
- den Container Link in dem ``php`` Container
- die Container Umgebungsdatei in dem ``php`` Container
Um mit Symfony Kommandos auf deinem Host auszuführen (wie z.B.
``wallabag:install``), sollst du außerdem:
- die richtige Umgebungsdatei auf deiner Kommandozeile einlesen,
sodass Variablen wie ``SYMFONY__ENV__DATABASE_HOST`` existieren
- eine Zeile ``127.0.0.1 rdbms`` in deiner ``hosts`` Datei auf dem
System erstellen
wallabag laufen lassen
----------------------
#. Forke und klone das Projekt
#. Bearbeite ``app/config/parameters.yml`` um ``database_*``
Eigenschaften mit den kommentierten zu ersetzen (mit Werten
mit ``env.`` Präfix)
#. ``composer install`` die Projektabhängigkeiten
#. ``php app/console wallabag:install``, um das Schema zu erstellen
#. ``docker-compose up`` um die Container laufen zu lassen
#. Schließlich öffne http://localhost:8080/, um dein frisch
installiertes wallabag zu finden.
In den verschiedenen Schritten wirst du vielleicht in verschiendene
Probleme laufen wie UNIX Berechtigungsprobleme, falschen Pfaden im
generierten Cache, etc.…
Operationen wie das Löschen der Cachedateien oder das Ändern der
Dateibesitzer können öfter gebraucht werden, darum habe keine Angst
sie anzupassen.

View File

@ -0,0 +1,10 @@
Wirke an dieser Dokumentation mit
=================================
Quellen der Dokumentation sind hier zu finden https://github.com/wallabag/wallabag/tree/master/docs
Wir nutzen `ReadTheDocs <https://readthedocs.org>`__, um sie zu generieren.
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.
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.

View File

@ -0,0 +1,32 @@
Wartungsmodus
=============
Wenn du längere Aufgaben auf deiner wallabag Instanz ausführen willst, kannst du den Wartungsmodus aktivieren.
Keiner wird dann Zugang zu deiner Instanz haben.
Aktivieren des Wartungsmodus
----------------------------
Um den Wartungsmodus zu aktivieren, führe folgendes Kommando aus:
::
bin/console lexik:maintenance:lock --no-interaction
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:
::
lexik_maintenance:
authorized:
ips: ['127.0.0.1']
Deaktivieren des Wartungsmodus
------------------------
Um den Wartungsmodus zu deaktivieren, führe dieses Kommando aus:
::
bin/console lexik:maintenance:unlock

View File

@ -0,0 +1,57 @@
Übersetze wallabag
==================
wallabag Webapplikation
-----------------------
Übersetzungsdateien
~~~~~~~~~~~~~~~~~~~
.. note::
Da wallabag hauptsächlich von einem französischem Team entwickelt wird, betrachte
die französische Übersetzung als die aktuellste und kopiere sie, um deine eigene Übersetzung zu starten.
Du kannst die Übersetzungsdateien hier finden: https://github.com/wallabag/wallabag/tree/master/src/Wallabag/CoreBundle/Resources/translations.
Du musst die ``messages.CODE.yml`` und ``validators.CODE.yml`` erstellen, wobei CODE
der ISO 639-1 Code deiner Sprache ist (`siehe Wikipedia <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`__).
Andere Dateien zum Übersetzen:
- https://github.com/wallabag/wallabag/tree/master/app/Resources/CraueConfigBundle/translations.
- https://github.com/wallabag/wallabag/tree/master/app/Resources/FOSUserBundle/translations.
Du musst die ``THE_TRANSLATION_FILE.CODE.yml`` Dateien erstellen.
Konfigurationsdatei
~~~~~~~~~~~~~~~~~~~
Du musst die `app/config/config.yml <https://github.com/wallabag/wallabag/blob/master/app/config/config.yml>`__ bearbeiten,
um deine Sprache auf der Konfigurationsseite in wallabag anzuzeigen (um Nutzern zu erlauben zu dieser neuen Übersetzung zu wechseln).
Unter dem Abschnitt ``wallabag_core.languages`` musst du eine neue Zeile mit deiner Übersetzung hinzufügen. Zum Beispiel:
::
wallabag_core:
...
languages:
en: 'English'
fr: 'Français'
Für die erste Spalte (``en``, ``fr``, etc.) musst du den ISO 639-1 Code deiner Sprache hinzufügen (siehe oben).
Für die zweite Spalte trägst du den Namen deiner Sprache ein. Nur den.
wallabag Dokumentation
----------------------
.. note::
Im Gegensatz zur Webapplikation ist die Hauptsprache für die Dokumentation Englisch.
Documentationsdateien sind hier gespeichert: https://github.com/wallabag/wallabag/tree/master/docs
Du musst die Ordnerstruktur des Ordners ``en`` beachten, wenn du deine eigene Übersetzung startest.

52
docs/de/index.rst Normal file
View File

@ -0,0 +1,52 @@
wallabag Dokumentation
======================
.. image:: ../img/wallabag.png
:alt: wallabag Logo
:align: center
**wallabag** ist eine Read-it-later Applikation: es speichert Websites,
indem es nur den Inhalt behält. Elemente wie Navigation oder Werbung werden gelöscht.
.. tip::
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>`__.
Die Hauptdokumentation für diese Applikation ist in einigen Abschnitten organisiert:
* :ref:`user-docs`
* :ref:`dev-docs`
.. _user-docs:
.. toctree::
:maxdepth: 2
:caption: Nutzerdokumentation
user/faq
user/installation
user/upgrade
user/migration
user/import
user/create_account
user/login
user/configuration
user/first_article
user/errors_during_fetching
user/annotations
user/download_articles
user/filters
user/tags
user/android
.. _dev-docs:
.. toctree::
:maxdepth: 2
:caption: Entwicklerdokumentation
developer/api
developer/docker
developer/documentation
developer/translate
developer/maintenance

107
docs/de/user/android.rst Normal file
View File

@ -0,0 +1,107 @@
Android App
===========
Zweck dieses Dokuments
----------------------
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.
Schritte, um dein App zu einzurichten
-------------------------------------
Wenn du das erste Mal die App startest, siehst du den Willkommensbildschirm, wo du angewiesen wirst zunächst deine App mit deiner Wallabaginstanz einzurichten.
.. image:: ../../img/user/android_welcome_screen.de.png
:alt: Willkommensbildschirm
:align: center
Bestätige nur diese Nachricht und du wirst zum Einstellungsbildschirm weitergeleitet.
.. image:: ../../img/user/android_configuration_screen.de.png
:alt: Einstellungsbildschirm
:align: center
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.
.. image:: ../../img/user/android_configuration_filled_in.de.png
:alt: Eingetragene Einstellungen
:align: center
Nachdem du deine Daten eingetragen hast, drücke den Button Verbindung testen und warte auf das Fertigstellen des Tests.
.. image:: ../../img/user/android_configuration_connection_test.de.png
:alt: Verbindungstest mit deinen Wallabagdaten
:align: center
Der Verbindungstest sollte mit Erfolg ausgehen. Falls nicht, musst du zunächst deine Daten korrigieren bevor du zum nächsten Schritt gehst.
.. image:: ../../img/user/android_configuration_connection_test_success.de.png
:alt: Verbindungstest war erfolgreich
:align: center
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.
.. image:: ../../img/user/android_configuration_get_feed_credentials.de.png
:alt: Feedzugangsdaten abholen
:align: center
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.
.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.de.png
:alt: Feedzugangsdaten erfolgreich abgeholt
:align: center
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.
.. image:: ../../img/user/android_configuration_scroll_bottom.de.png
:alt: unterer Rand des Einstellungsbildschirms
:align: center
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.
.. image:: ../../img/user/android_configuration_saved_feed_update.de.png
:alt: Einstellung erstmals gespeichert
:align: center
Schließlich nach der ersten erfolgreichen Synchronisation, wird dir die Liste der ungelesenen Artikel präsentiert.
.. image:: ../../img/user/android_unread_feed_synced.de.png
:alt: Gefüllte Artikellist da Feeds erfolgreich synchronisiert sind
:align: center
Bekannte Limitierungen
---------------------
2FA
~~~
Zur Zeit unterstützt die App keine Zwei-Faktor Authentifizierung. Du solltest sie deaktivieren damit die App funktioniert.
Begrenzte Anzahl Artikel mit Wallabag v2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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.
SSL/TLS Verschlüsselung
~~~~~~~~~~~~~~~~~~~~~~~
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.
Referenzen
----------
`Quellcode der Android Applikation <https://github.com/wallabag/android-app>`_
`Android Applikation auf F-Droid <https://f-droid.org/repository/browse/?fdfilter=wallabag&fdid=fr.gaulupeau.apps.InThePoche>`_
`Android Applikation auf Google Play <https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche>`_
`Support Chat auf English <https://gitter.im/wallabag/wallabag>`_

View File

@ -0,0 +1,24 @@
Anmerkungen
===========
In jedem Artikel, den du liest, kannst du Anmerkungen hinzufügen. Es ist einfacher mit ein paar Bilder erklärt.
Wähle den Teil des Artikels aus, den du kommentieren willst und klicke auf den Bleistift:
.. image:: ../../img/user/annotations_1.png
:alt: Wähle den Text
:align: center
Schreibe deinen Kommentar:
.. image:: ../../img/user/annotations_2.png
:alt: Schreibe deinen Kommentar
:align: center
Der Text ist nun hervorgehoben und du kannst deine Anmerkung lesen, wenn du den Mauspfeil darüber fährst.
.. image:: ../../img/user/annotations_3.png
:alt: lese deine Anmerkung
:align: center
Du kannst so viele Anmerkungen erstellen wie du möchtest.

View File

@ -0,0 +1,119 @@
Konfiguration
=============
Nun, da du eingeloggt bist, ist es Zeit, deinen Account so zu konfigurieren,
wie du möchtest.
Klicke auf ``Konfiguration`` im Menü. Du hast fünf Karteireiter: ``Einstellungen``,
``RSS``, ``Benutzer-Informationen``, ``Kennwort`` und ``Tagging-Regeln``.
Einstellungen
-------------
Theme
~~~~~
wallabag ist anpassbar. Du kannst dein bevorzugtes Theme hier auswählen. Du kannst
auch ein neues erstellen, ein extra Kapitel wird dem gewidmet sein. Das Standardtheme
ist ``Material``, es ist das Theme, dass in den Dokumentationsbildschirmfotos genutzt wird.
Artikel pro Seite
~~~~~~~~~~~~~~~~~
Du kannst die Anzahl der dargestellten Artikel pro Seite ändern.
Lesegeschwindigkeit
~~~~~~~~~~~~~~~~~~~
wallabag berechnet die Lesezeit für jeden Artikel. Du kannst hier definieren, dank dieser Liste, ob du
ein schneller oder langsamer Leser bist. wallabag wird die Lesezeit für jeden Artikel neu berechnen.
Sprache
~~~~~~~
Du kannst die Sprache von der wallabag Benutzeroberfläche ändern. Du musst die ausloggen, damit diese
Änderung Wirkung zeigt.
RSS
---
wallabag stellt RSS Feeds für jeden Artikelstatus bereit: ungelesen, Favoriten und Archiv.
Als erstes musst du einen persönlciehn Token erstellen: Klicke auf ``Token generieren``.
Es ist möglich deinen Token zu ändern, indem du auf ``Token zurücksetzen`` klickst.
Jetzt hast du drei Links, einen für jeden Status: Füge sie in deinem liebsten Feedreader hinzu.
Du kannst auch definieren wie viele Artikel du in deinem RSS Feed (Standardwert: 50) haben willst.
Benutzer-Informationen
----------------------
Du kannst deinen Namen ändern, deine E-Mail-Adresse und die Zwei-Faktor-Authentifizierung aktivieren.
Zwei-Faktor-Authentifizierung
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Die Zwei-Faktor-Authentifizierung (2FA) dient dem Identitätsnachweis eines Nutzers mittels der
Kombination zweier verschiedener und insbesondere unabhängiger Komponenten (Faktoren).
https://de.wikipedia.org/wiki/Zwei-Faktor-Authentifizierung
Wenn du 2FA aktivierst, erhälst du jedes Mal, wenn du dich bei wallabag einloggen willst, einen Code per
Mail. Du musst den Code in das folgende Formular eingeben.
.. image:: ../../img/user/2FA_form.png
:alt: Zwei-Faktor-Authentifizierung
:align: center
Wenn du nicht jedes Mal, wenn du dich einloggen willst, einen Code zugesendet bekommen möchtest, kannst du
die Checkbox ``Ich bin an einem persönlichen Computer`` anhaken: wallabag wird sich an dich für 15 Tage
erinnern.
Passwort
--------
Du kannst dein Passwort hier ändern (8 Zeichen Minimum).
Tagging-Regeln
--------------
Wenn du automatisch einen Tag zu einem neuen Artikel zuweisen lassen möchtest, ist dieser Teil der
Konfiguration, was du suchst.
Was ist mit Tagging-Regeln gemeint?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dies sind Regeln, die von wallabag genutzt werden, um neue Artikel automatisch zu taggen
Jedes Mal, wenn ein neuer Artikel hinzugefügt wird, werden alle Tagging-Regeln genutzt, um deine
konfigurierten Tags hinzuzufügen, folglich um dir den Aufwand zu sparen, die Artikel manuell einzuteilen.
Wie benutze ich sie?
~~~~~~~~~~~~~~~~~~~~
Nehmen wir an, du möchtest neuen Artikeln einen Tag *schnell gelesen*, wenn du die Lesezeit kleiner als
3 Minuten ist.
In diesem Fall solltest du in das Regelfeld "readingTime <= 3" eintragen und *schnell gelesen* in das Tags-Feld.
Mehrere Tags können gleichzeitig hinzugefügt werden, wenn man sie mit einem Komma trennt:
*schnell gelesen, Pflichtlektüre*.
Komplexe Regeln können mit vordefinierten Operatoren geschrieben werden:
Wenn *readingTime >= 5 AND domainName = "github.com"*, dann tagge als *lange zu lesen, github*.
Welche Variablen und Operatoren kann ich zum Regeln schreiben nutzen?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Die folgenden Variabel und Operatoren können genutzt werden, um Tagging-Regeln zu erstellen:
=========== ============================================== ======== ==========
Variable Bedeutung Operator Bedeutung
----------- ---------------------------------------------- -------- ----------
title Titel des Artikels <= Kleiner gleich als…
url URL des Artikels < Kleiner als…
isArchived Ob der Artikel archiviert ist oder nicht => Größer gleich als…
isStarred Ob der Artikel favorisiert ist oder nicht > Größer als…
content Inhalt des Eintrags = Gleich zu…
language Sprache des Eintrags != Nicht gleich zu…
mimetype MIME-Typ des Eintrags OR Eine Regel oder die andere
readingTime Die geschätzte Lesezeit in Minuten AND Eine Regel und die andere
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"
=========== ============================================== ======== ==========

View File

@ -0,0 +1,25 @@
Account erstellen
=================
Klicke auf der Loginseite auf den ``Registrieren`` Button-
.. image:: ../../img/user/registration_form.png
:alt: Registrierungsformular
:align: center
Du musst das Formular ausfüllen. Bitte stelle sicher, dass du eine gültige
E-Mail-Adresse eingibst, wir werden dir eine Aktivierungsmail schicken.
.. image:: ../../img/user/sent_email.png
:alt: E-Mail wurde gesendet, um Account zu aktivieren
:align: center
Überprüfge deinen Posteingang, du hast jetzt eine neue Mail mit einem Link wie diesen
``http://wallabag/register/confirm/Ba19wokGovN-DdBQNfg4YgRkUQWRP4-k2g0Bk-hBTX4``.
Klicke auf den Link, um deinen Account zu aktivieren.
Dein Account ist nun aktiviert.
.. image:: ../../img/user/activated_account.png
:alt: Willkommen!
:align: center

View File

@ -0,0 +1,17 @@
Artikel herunterladen
=====================
Du kannst jeden Artikel in verschiedenen Formaten herunterladen: ePUB, MOBI, PDF, XML, JSON, CSV.
In der Artikelansicht, klickst du auf dieses Icon in der Seitenleiste:
.. image:: ../../img/user/download_article.png
:alt: Artikel herunterladen
:align: center
Du kannst auch eine ganze Kategorie (ungelesen, Favoriten, Archiv) in diesen Formaten herunterladen.
Zum Beispiel, in der Ansicht **Ungelesen**, klickst du auf das Icon in der oberen Leiste:
.. image:: ../../img/user/download_articles.png
:alt: Artikel herunterladen
:align: center

View File

@ -0,0 +1,28 @@
Fehler während des Artikelladens
================================
Warum schlägt das Laden eines Artikels fehl?
--------------------------------------------
Das kann verschiedene Ursachen haben:
- Netzwerkprobleme
- wallabag kann den Inhalt aufgrund der Websitestruktur nicht laden
Wie kann ich helfen das zu beheben?
-----------------------------------
- `indem du uns eine Mail mit der URL des Artikels sendest <mailto:hello\@wallabag.org>`_
- indem du versuchst das Laden des Artikels durch Erstellen einer Datei für den Artikel
selbst zu beheben
Du kannst `dieses Tool <http://siteconfig.fivefilters.org/>`__ nutzen.
Wie kann ich versuchen, einen Artikel erneut zu laden?
------------------------------------------------------
Wenn wallabag beim Laden eines Artikels fehlschlägt, kannst du auf den erneut laden Button
klicken (der dritte in dem unteren Bild).
.. image:: ../../img/user/refetch.png
:alt: Inhalt neu laden
:align: center

45
docs/de/user/faq.rst Normal file
View File

@ -0,0 +1,45 @@
Häufig gestellte Fragen
==========================
Während der Installation sehe ich den Fehler ``Error Output: sh: 1: @post-cmd: not found``
------------------------------------------------------------------------------------------
Es scheint, dass du ein Problem bei deiner ``composer`` Installation hast. Versuche es zu deinstallieren und neu zu installieren.
`Lies die Dokumentation über composer, um zu erfahren wie es installiert wird
<https://getcomposer.org/doc/00-intro.md>`__.
Ich kann das Registrierungsformular nicht validieren
----------------------------------------------------
Stelle sicher, dass alle Felder ausgefüllt sind:
* valide E-Mail-Adresse
* das gleiche Passwort in zwei Feldern
Ich erhalte meine Aktivierungsmail nicht
----------------------------------------
Bist du sicher, dass deine eingegebene E-Mail-Adresse korrekt war? Hast du deinen Spamordner überprüft?
Wenn du dann immer noch nicht deine Aktivierungsmail siehst, stelle bitte sicher, dass du einen MTA
korrekt installiert und eingerichtet hast. Prüfe, dass deine Firewallregel existiert, z.B. für firewalld:
::
firewall-cmd --permanent --add-service=smtp
firewall-cmd --reload
Schließlich, falls du SELinux aktiviert hast, setze folgende Regel:
``setsebool -P httpd_can_sendmail 1``
Wenn ich den Aktivierungslink klicke, bekomme ich die Nachricht ``Der Nutzer mit dem Bestätigungstoken "DtrOPfbQeVkWf6N" existiert nicht``
------------------------------------------------------------------------------------------------------------------------------------------
Du hast deinen Account schon aktiviert oder die URL der Aktivierungsmail ist falsch.
Ich habe mein Passwort vergessen
--------------------------------
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
und du wirst eine E-Mail zum Passwort zurücksetzen erhalten.

49
docs/de/user/filters.rst Normal file
View File

@ -0,0 +1,49 @@
Filter
======
Um Artikel leichter zu erreichen, kannst du sie filtern.
Klicke auf das dritte Symbol in der oberen Leiste.
.. image:: ../../img/user/topbar.png
:alt: Obere Leiste
:align: center
Alle diese Filter können kombiniert werden.
.. image:: ../../img/user/filters.png
:alt: Kombiniere alle Filter
:align: center
Status
------
Nutze die Checkboxen, um einen archivierten oder favorisierten Artikel zu finden.
Vorschaubild
---------------
Hake diesen Filter an, wenn du Artikel mit einem Vorschaubild erhalten willst.
Sprache
-------
wallabag (via graby) kann die Artikelsprache erkennen. Es ist einfach für dich, Artikel
in einer bestimmten Sprache zu filtern.
Lesezeit
--------
wallabag schätzt wieviel Zeit du brauchst, um einen Artikel zu lesen. Mit diesem Filter
kannst du zum Beispiel Artikel mit einer Lesezeit zwischen 2 und 5 Minuten finden.
Domainname
----------
Dank dieses Filters, kannst ud Artikel von der gleichen Domain finden.
Zum Beispiel tippst du in diesem Feld ``bbc.co.uk``, um Artikel dieser Website zu finden.
Erstellungsdatum
----------------
Wenn du Artikel speicherst, merkt sich wallabag das aktuelle Datum. So praktisch, um Aritkel, die
zwischen dem 1. und 31. Januar geschrieben sind, zu finden.

View File

@ -0,0 +1,68 @@
Speichere deinen ersten Artikel
===============================
Der Hauptzweck von wallabag ist es Webartikel zu speichern. Du hast viele Wege das zu tun.
.. note::
Eine Schnellstartanleitung wird in der Anwendung angezeigt bis du deinen ersten
Artikel gespeichert hast.
Durch Nutzung eines Bookmarklets
--------------------------------
Auf der ``How-To`` Seite, hast du einen Reiter ``Bookmarklet``. Ziehe und lasse den
``bag it!`` Link in die Lesezeichenleiste deines Browser los.
Jetzt kannst du immer wenn du einen Artikel im Web liest und ihn du ihn speichern
willst, klicke auf den ``bag it!`` Link in deiner Lesezeichenleiste. Der Artikel
wird gespeichert.
Durch Nutzung des klassischen Formulars
---------------------------------------
In der oberen Leiste auf deinem Bildschirm, hast du drei Icons. Mit dem ersten, einem
Pluszeichen, kannst du einfach neue Artikel speichern.
.. image:: ../../img/user/topbar.png
:alt: obere Leiste
:align: center
Klick darauf, um ein neues Feld anzeigen zu lassen, füge deine Artikel URL ein und
drücke die ``Enter`` Taste. Der Artikel wird gespeichert.
Durch Nutzung eines Browser Add-ons
-----------------------------------
Firefox
~~~~~~~
*Dieses Addon ist noch nicht für wallbag v2 verfügbar*.
Chrome
~~~~~~
*Dieses Addon ist noch nicht für wallbag v2 verfügbar*.
Durch Nutzung deiner Smartphone App
-----------------------------------
Android
~~~~~~~
*Diese Applikation ist noch nicht für wallbag v2 verfügbar*.
Firefox OS
~~~~~~~~~~
*Diese Applikation ist noch nicht für wallbag v2 verfügbar*.
Windows Phone
~~~~~~~~~~~~~
*Diese Applikation ist noch nicht für wallbag v2 verfügbar*.
iOS
~~~
*Diese Applikation ist noch nicht für wallbag v2 verfügbar*.

46
docs/de/user/import.rst Normal file
View File

@ -0,0 +1,46 @@
Migration von einem Drittanbieter
=================================
Von Pocket
-----------
Erstelle eine neue Applikation in Pocket
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Um deine Daten von Pocket zu importieren, nutzen wir die Pocket API. Du musst
eine neue Applikation auf ihrer Entwicklerwebsite erstellen, um fortzufahren.
* Erstelle eine neue Applikation `auf der Entwicklerwebsite <https://getpocket.com/developer/apps/new>`_
* Fülle die erforderlichen Felder aus: Name, Beschreibung, Berechtigungen (nur **abrufen**), Plattform
(**web**), akzeptiere die Nutzungsbedingungen und reiche deine neue Applikation ein
Pocket wird dir einen **Consumer Key** geben (z.B. `49961-985e4b92fe21fe4c78d682c1`).
Du musst den ``pocket_consumer_key`` in dem Abschnitt ``Import`` in dem ``Interne Einstellungen`` Menü
konfigurieren.
Jetzt ist alles in Ordnung, um von Pocket zu migrieren.
Importiere deine Daten in wallabag 2.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Klicke auf den ``Importieren`` Link im menü, auf ``Inhalte importieren`` in dem Pocketabschnitt und
dann auf ``Verbinde mit Pocket und importieren Daten``.
Du musst wallabag erlauben, mit deinem Pocketaccount zu interagieren.
Deine Daten werden importiert. Datenimport kann ein sehr anspruchsvoller Prozess für deinen Server
sein (wir müssen daran arbeiten, um diesen Import zu verbessern).
Von Instapaper
--------------
*Funktion noch nicht implementiert in wallabag v2.*
Von Readability
---------------
*Funktion noch nicht implementiert in wallabag v2.*
Von einer HTML oder JSON Datei
------------------------------
*Funktion noch nicht implementiert in wallabag v2.*

View File

@ -0,0 +1,326 @@
Installation von wallabag
=========================
Voraussetzungen
---------------
wallabag ist kompatibel mit PHP >= 5.5, inkl. PHP 7.
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
nicht alle folgenden Pakete installieren.
- php-session
- php-ctype
- php-dom
- php-hash
- php-simplexml
- php-json
- php-gd
- php-mbstring
- php-xml
- php-tidy
- php-iconv
- php-curl
- php-gettext
- php-tokenizer
wallabag nutzt PDO, um sich mit der Datenbank zu verbinden, darum benötigst du eines der folgenden Komponenten:
- pdo_mysql
- pdo_sqlite
- pdo_pgsql
und dessen dazugehörigen Datenbankserver.
Installation
------------
Auf einem dedizierten Webserver (empfohlener Weg)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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.
Composer installieren:
::
curl -s http://getcomposer.org/installer | php
Du kannst eine spezifische Anleitung `hier <https://getcomposer.org/doc/00-intro.md>`__ finden:
Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen:
::
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
Um PHPs eingebauten Server zu starten und zu testen, ob alles korrekt installiert wurde, kannst du folgendes Kommando ausführen:
::
php bin/console server:run --env=prod
Und wallabag unter http://deineserverip:8000 erreichen
.. tip::
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.
Auf einem geteilten Webhosting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wir stellen ein Paket inkl. aller Abhängigkeiten bereit.
Die Standardkonfiguration nutzt SQLite für die Datenbank. Wenn du diese Einstellung ändern willst, ändere bitte ``app/config/parameters.yml``.
Wir haben bereits einen Nutzer erstellt: Login und Passwort sind ``wallabag``.
.. 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).
Führe dieses Kommando aus, um das neueste Paket herunterzuladen und zu entpacken:
.. code-block:: bash
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Jetzt lese die Dokumentation, um einen Virtualhost zu erstellen, dann greife auf dein wallabag zu.
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``.
Installation mit Docker
------------------------
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.
Kommando, um den Container zu starten
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
docker pull wallabag/wallabag
Virtualhosts
------------
Konfiguration von Apache
~~~~~~~~~~~~~~~~~~~~~~~
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:
::
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/wallabag/web
<Directory /var/www/wallabag/web>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeScript assets
# <Directory /var/www/wallabag>
# Options FollowSymlinks
# </Directory>
# optionally disable the RewriteEngine for the asset directories
# which will allow apache to simply reply with a 404 when files are
# not found instead of passing the request into the full symfony stack
<Directory /var/www/wallabag/web/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
ErrorLog /var/log/apache2/wallabag_error.log
CustomLog /var/log/apache2/wallabag_access.log combined
</VirtualHost>
Nach dem du Apache neugeladen oder neugestartet hast, solltest du nun wallabag unter http://domain.tld erreichen.
Konfiguration von Nginx
~~~~~~~~~~~~~~~~~~~~~~~
Angenommen du willst wallabag in das Verzeichnis ``/var/www/wallabag`` installieren, dann ist hier ein Rezept für wallabag:
::
server {
server_name domain.tld www.domain.tld;
root /var/www/wallabag/web;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/app.php/some-path
# Remove the internal directive to allow URIs like this
internal;
}
error_log /var/log/nginx/wallabag_error.log;
access_log /var/log/nginx/wallabag_access.log;
}
Nach dem neuladen oder neustarten von nginx, solltest du nun wallabag unter http://domain.tld erreichen.
.. tip::
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``.
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``.
Konfiguration von lighttpd
~~~~~~~~~~~~~~~~~~~~~~~~~
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):
::
server.modules = (
"mod_fastcgi",
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
)
server.document-root = "/var/www/wallabag/web"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.follow-symlink = "enable"
index-file.names = ( "index.php", "index.html", "index.lighttpd.html")
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
dir-listing.activate = "disable"
url.rewrite-if-not-file = (
"^/([^?]*)(?:\?(.*))?" => "/app.php?$1&$2",
"^/([^?]*)" => "/app.php?=$1",
)
Rechte, um das Projektverzeichnis zu betreten
---------------------------------------------
Testumgebung
~~~~~~~~~~~~
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.
Produktionsumgebung
~~~~~~~~~~~~~~~~~~~
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.
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).
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.
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:
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/var
Es muss analog für die folgenden Ordner ausgeführt werden
* /var/www/wallabag/bin/
* /var/www/wallabag/app/config/
* /var/www/wallabag/vendor/
* /var/www/wallabag/data/
durch Eingabe der Kommandos
.. code-block:: bash
chown -R www-data:www-data /var/www/wallabag/bin
chown -R www-data:www-data /var/www/wallabag/app/config
chown -R www-data:www-data /var/www/wallabag/vendor
chown -R www-data:www-data /var/www/wallabag/data/
ansonsten wirst du früher oder später folgenden Fehlermeldung sehen:
.. code-block:: bash
Unable to write to the "bin" directory.
file_put_contents(app/config/parameters.yml): failed to open stream: Permission denied
file_put_contents(/.../wallabag/vendor/autoload.php): failed to open stream: Permission denied
Zusätzliche Regeln für SELinux
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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:
``getenforce``
Dies wird ``Enforcing`` ausgeben, wenn SELinux aktiviert ist. Einen neuen Kontext zu erstellen, erfordert die folgende Syntax:
``semanage fcontext -a -t <context type> <full path>``
Zum Beispiel:
``semanage fcontext -a -t httpd_sys_content_t "/var/www/wallabag(/.*)?"``
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:
+-----------------------------------+----------------------------+
| Vollständiger Pfad | Kontext |
+===================================+============================+
| /var/www/wallabag(/.*)? | ``httpd_sys_content_t`` |
+-----------------------------------+----------------------------+
| /var/www/wallabag/data(/.*)? | ``httpd_sys_rw_content_t`` |
+-----------------------------------+----------------------------+
| /var/www/wallabag/var/logs(/.*)? | ``httpd_log_t`` |
+-----------------------------------+----------------------------+
| /var/www/wallabag/var/cache(/.*)? | ``httpd_cache_t`` |
+-----------------------------------+----------------------------+
Nach dem diese Kontexte erstellt wurden, tippe das folgende, um deine Regeln anzuwenden:
``restorecon -R -v /var/www/wallabag``
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.
Wenn du das vorkonfigurierte latest-v2-package installierst, dann ist eine weitere Regel während der Installation nötig:
``semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wallabag/var"``
Nachdem du erfolgreich dein wallabag erreichst und die Installation fertiggestellt hast, kann dieser Kontext entfernt werden:
::
semanage fcontext -d -t httpd_sys_rw_content_t "/var/www/wallabag/var"
retorecon -R -v /var/www/wallabag/var

13
docs/de/user/login.rst Normal file
View File

@ -0,0 +1,13 @@
Login
=====
Dein Account ist nun aktiviert, Glückwünsch!
Um dich bei wallabag einzuloggen, fülle das Formular auf der Loginseite aus.
Wenn du an deinem persönlichen Computer arbeitest und verbunden bleiben willst,
kannst du die Checkbox ``Angemeldet bleiben`` anhaken: wallabag wird sich für ein Jahr an deinen Login erinnern.
.. image:: ../../img/user/login_form.png
:alt: Loginformular
:align: center

View File

@ -0,0 +1,62 @@
Migration von v1 oder v2
========================
Von wallabag 1.x
-----------------
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.
.. image:: ../../img/user/export_v1.png
:alt: Export von wallabag v1
:align: center
.. note::
Wenn du mehrere Accounts auf der gleichen Instanz von wallabag hast, muss jeder Nutzer von v1 exportieren und in v2 seine Daten importieren.
.. note::
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>`__.
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>`__.
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.
.. image:: ../../img/user/import_wallabagv1.png
:alt: Import von wallabag v1
:align: center
Import via command-line interface (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wenn du CLI Zugang zu deinem Webserver hast, kannst du dieses Kommando ausführen, um deine Aritkel vom wallabag v1 Export zu importieren:
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Bitte ersetze folgende Werte:
* ``1`` ist die Nutzer ID in der Databank (Die ID von dem ersten erstellten Nutzer in wallabag ist 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` ist der Pfad zu deinem wallabag v1 Export
Du wirst eine solche Ausgabe erhalten:
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
Von wallabag 2.x
----------------
In der vorherigen wallabag Instanz, gehe zu `Alle Artikel` und exportiere diese Artikel als JSON.
.. image:: ../../img/user/export_v2.png
:alt: Export von wallabag v2
:align: center
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.
.. note::
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>`__.

2
docs/de/user/tags.rst Normal file
View File

@ -0,0 +1,2 @@
Tags
====

32
docs/de/user/upgrade.rst Normal file
View File

@ -0,0 +1,32 @@
Wallabag updaten
================
Update auf einem dedizierten Webserver
--------------------------------------
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):
::
git fetch origin
git fetch --tags
git checkout 2.0.3
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console cache:clear --env=prod
Update auf einem Shared Webhosting
----------------------------------
Sichere deine ``app/config/parameters.yml`` Datei.
Lade das neueste Release von wallabag herunter:
.. code-block:: bash
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
Entpacke das Archiv in deinen wallabag Ordner und ersetze ``app/config/parameters.yml`` mit deiner Datei.
Wenn du SQLite nutzt, musst auch das ``data/`` Verzeichnis in die neue Installation kopieren.
Leere den ``var/cache`` Ordner.

View File

@ -108,7 +108,7 @@ Variable Meaning Operator Meaning
title Title of the entry <= Less than…
url URL of the entry < Strictly less than…
isArchived Whether the entry is archived or not => Greater than…
isStared Whether the entry is starred or not > Strictly greater than…
isStarred Whether the entry is starred or not > Strictly greater than…
content The entry's content = Equal to…
language The entry's language != Not equal to…
mimetype The entry's mime-type OR One rule or another

View File

@ -37,7 +37,7 @@ Installation
On a dedicated web server (recommended way)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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.
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``).
Install Composer:
@ -53,7 +53,7 @@ To install wallabag itself, you must run the following commands:
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.5
git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod
@ -226,7 +226,7 @@ Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe
dir-listing.activate = "disable"
url.rewrite-if-not-file = (
"^/([^?])(?:\?(.))?" => "/app.php?$1&$2",
"^/([^?]*)(?:\?(.*))?" => "/app.php?$1&$2",
"^/([^?]*)" => "/app.php?=$1",
)

View File

@ -110,7 +110,7 @@ Variable Sens Opérateur Sens
title Titre de l'article <= Inférieur ou égal à …
url URL de l'article < Strictement inférieur à …
isArchived Si l'article est archivé ou non => Supérieur ou égal à …
isStared Si l'article est en favori ou non > Strictement supérieur à …
isStarred Si l'article est en favori ou non > Strictement supérieur à …
content Le contenu de l'article = Égal à …
language La langue de l'article != Différent de …
mimetype The type MIME de l'article OR Telle règle ou telle autre règle

View File

@ -35,7 +35,7 @@ Installation
Sur un serveur dédié (méthode conseillée)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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.
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``).
Installation de Composer :
@ -51,7 +51,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes :
git clone https://github.com/wallabag/wallabag.git
cd wallabag
git checkout 2.0.5
git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod

View File

@ -1,24 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
bootstrap="app/autoload.php"
>
>
<testsuites>
<testsuite name="wallabag Test Suite">
<directory>src/Wallabag/*Bundle/Tests</directory>
<directory>tests</directory>
</testsuite>
</testsuites>
<php>
<ini name="error_reporting" value="-1" />
<server name="KERNEL_DIR" value="app/" />
</php>

View File

@ -357,7 +357,7 @@ class EntryController extends Controller
}
/**
* Changes favorite status for an entry.
* Changes starred status for an entry.
*
* @param Request $request
* @param Entry $entry
@ -406,7 +406,7 @@ class EntryController extends Controller
$url = $this->generateUrl(
'view',
['id' => $entry->getId()],
UrlGeneratorInterface::ABSOLUTE_URL
UrlGeneratorInterface::ABSOLUTE_PATH
);
$em = $this->getDoctrine()->getManager();
@ -418,8 +418,9 @@ class EntryController extends Controller
'flashes.entry.notice.entry_deleted'
);
// don't redirect user to the deleted entry
$to = ($url !== $request->headers->get('referer') ? $request->headers->get('referer') : null);
// don't redirect user to the deleted entry (check that the referer doesn't end with the same url)
$referer = $request->headers->get('referer');
$to = (1 !== preg_match('#'.$url.'$#i', $referer) ? $referer : null);
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to);

View File

@ -0,0 +1,27 @@
<?php
namespace Wallabag\CoreBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class FooterController extends Controller
{
/**
* Display the footer.
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function indexAction()
{
$addonsUrl = $this->container->getParameter('addons_url');
$socialsUrl = $this->container->getParameter('socials_url');
return $this->render(
'WallabagCoreBundle::footer.html.twig',
[
'addonsUrl' => $addonsUrl,
'socialsUrl' => $socialsUrl,
]
);
}
}

View File

@ -12,9 +12,11 @@ class StaticController extends Controller
*/
public function howtoAction()
{
$addonsUrl = $this->container->getParameter('addons_url');
return $this->render(
'WallabagCoreBundle:Static:howto.html.twig',
[]
['addonsUrl' => $addonsUrl]
);
}

View File

@ -25,6 +25,7 @@ class WallabagCoreExtension extends Extension
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
$loader->load('parameters.yml');
}
public function getAlias()

View File

@ -16,7 +16,7 @@ class StringToListTransformer implements DataTransformerInterface
private $separator;
/**
* @param string $separator The separator used in the list.
* @param string $separator The separator used in the list
*/
public function __construct($separator = ',')
{

View File

@ -21,7 +21,9 @@ class ConfigType extends AbstractType
{
$this->themes = array_combine(
$themes,
array_map(function ($s) { return ucwords(strtolower(str_replace('-', ' ', $s))); }, $themes)
array_map(function ($s) {
return ucwords(strtolower(str_replace('-', ' ', $s)));
}, $themes)
);
$this->languages = $languages;
@ -32,7 +34,6 @@ class ConfigType extends AbstractType
$builder
->add('theme', ChoiceType::class, [
'choices' => array_flip($this->themes),
'choices_as_values' => true,
'label' => 'config.form_settings.theme_label',
])
->add('items_per_page', null, [
@ -49,7 +50,6 @@ class ConfigType extends AbstractType
])
->add('language', ChoiceType::class, [
'choices' => array_flip($this->languages),
'choices_as_values' => true,
'label' => 'config.form_settings.language_label',
])
->add('save', SubmitType::class, [

View File

@ -36,17 +36,26 @@ class EntryFilterType extends AbstractType
$builder
->add('readingTime', NumberRangeFilterType::class, [
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
$value = $values['value'];
$lower = $values['value']['left_number'][0];
$upper = $values['value']['right_number'][0];
if (null === $value['left_number'][0] || null === $value['right_number'][0]) {
$min = (int) ($lower * $this->user->getConfig()->getReadingSpeed());
$max = (int) ($upper * $this->user->getConfig()->getReadingSpeed());
if (null === $lower && null === $upper) {
// no value? no filter
return;
} elseif (null === $lower && null !== $upper) {
// only lower value is defined: query all entries with reading LOWER THAN this value
$expression = $filterQuery->getExpr()->lte($field, $max);
} elseif (null !== $lower && null === $upper) {
// only upper value is defined: query all entries with reading GREATER THAN this value
$expression = $filterQuery->getExpr()->gte($field, $min);
} else {
// both value are defined, perform a between
$expression = $filterQuery->getExpr()->between($field, $min, $max);
}
$min = (int) ($value['left_number'][0] * $this->user->getConfig()->getReadingSpeed());
$max = (int) ($value['right_number'][0] * $this->user->getConfig()->getReadingSpeed());
$expression = $filterQuery->getExpr()->between($field, $min, $max);
return $filterQuery->createCondition($expression);
},
'label' => 'entry.filters.reading_time.label',
@ -113,7 +122,6 @@ class EntryFilterType extends AbstractType
])
->add('language', ChoiceFilterType::class, [
'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())),
'choices_as_values' => true,
'label' => 'entry.filters.language_label',
])
;

View File

@ -25,7 +25,7 @@ class RuleBasedTagger
/**
* Add tags from rules defined by the user.
*
* @param Entry $entry Entry to tag.
* @param Entry $entry Entry to tag
*/
public function tag(Entry $entry)
{
@ -49,7 +49,7 @@ class RuleBasedTagger
*
* @param User $user
*
* @return array<Entry> A list of modified entries.
* @return array<Entry> A list of modified entries
*/
public function tagAllForUser(User $user)
{
@ -75,7 +75,7 @@ class RuleBasedTagger
/**
* Fetch a tag.
*
* @param string $label The tag's label.
* @param string $label The tag's label
*
* @return Tag
*/

View File

@ -0,0 +1,12 @@
parameters:
addons_url:
firefox: https://addons.mozilla.org/firefox/addon/wallabag-v2/
chrome: https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm
f_droid: https://f-droid.org/app/fr.gaulupeau.apps.InThePoche
google_play: https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche
ios: https://itunes.apple.com/app/wallabag/id828331015?mt=8
windows: https://www.microsoft.com/store/apps/wallabag/9nblggh11646
socials_url:
twitter: https://twitter.com/wallabagapp
google_plus: https://plus.google.com/+WallabagOrg/posts
facebook: https://facebook.com/Wallabag

View File

@ -64,7 +64,7 @@ pre {
max-width: 61.25em;/*980px*/
}
table, img {
table, img, figure {
max-width: 100%;
height :auto;
}

View File

@ -345,7 +345,8 @@ main ul.row {
max-width: 40em;
}
#article img {
#article img,
#article figure {
max-width: 100%;
height: auto;
}

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'estimeret læsetid'
reading_time_minutes: 'estimeret læsetid: %readingTime% min'
reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marker som læst'
toogle_as_star: 'Skift favoritstatus'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Tilbage'
set_as_read: 'Marker som læst'
# set_as_unread: 'Mark as unread'
set_as_favorite: 'Marker som favorit'
set_as_starred: 'Marker som favorit'
view_original_article: 'Originalartikel'
# re_fetch_content: 'Re-fetch content'
delete: 'Slet'
@ -191,6 +193,7 @@ entry:
edit_title: 'Rediger titel'
original_article: 'original'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Oprettelsesdato'
new:
page_title: 'Gem ny artikel'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'geschätzte Lesezeit'
reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min'
reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Gelesen-Status ändern'
toogle_as_star: 'Favoriten-Status ändern'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Zurück'
set_as_read: 'Als gelesen markieren'
set_as_unread: 'Als ungelesen markieren'
set_as_favorite: 'Favorisieren'
set_as_starred: 'Favorisieren'
view_original_article: 'Original-Artikel'
re_fetch_content: 'Inhalt neu laden'
delete: 'Löschen'
@ -191,6 +193,7 @@ entry:
edit_title: 'Titel ändern'
original_article: 'original'
annotations_on_the_entry: '{0} Keine Anmerkungen|{1} Eine Anmerkung|]1,Inf[ %nbAnnotations% Anmerkungen'
created_at: 'Erstellungsdatum'
new:
page_title: 'Neuen Artikel speichern'
placeholder: 'https://website.de'
@ -396,7 +399,7 @@ flashes:
entry:
notice:
entry_already_saved: 'Eintrag bereits am %date% gespeichert'
entry_saved: 'Eintag gespeichert'
entry_saved: 'Eintrag gespeichert'
# entry_saved_failed: 'Failed to save entry'
entry_updated: 'Eintrag aktualisiert'
entry_reloaded: 'Eintrag neugeladen'

View File

@ -144,9 +144,11 @@ entry:
reading_time: 'estimated reading time'
reading_time_minutes: 'estimated reading time: %readingTime% min'
reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Toggle mark as read'
toogle_as_star: 'Toggle favorite'
toogle_as_star: 'Toggle starred'
delete: 'Delete'
export_title: 'Export'
filters:
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Back'
set_as_read: 'Mark as read'
set_as_unread: 'Mark as unread'
set_as_favorite: 'Favorite'
set_as_starred: 'Toggle starred'
view_original_article: 'Original article'
re_fetch_content: 'Re-fetch content'
delete: 'Delete'
@ -191,6 +193,7 @@ entry:
edit_title: 'Edit title'
original_article: 'original'
annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Creation date'
new:
page_title: 'Save new entry'
placeholder: 'http://website.com'

View File

@ -135,7 +135,7 @@ config:
entry:
page_titles:
unread: 'Artúclos no leídos'
unread: 'Artículos no leídos'
starred: 'Artículos favoritos'
archived: 'Artículos archivados'
filtered: 'Artículos filtrados'
@ -144,6 +144,8 @@ entry:
reading_time: 'tiempo estimado de lectura'
reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min'
reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marcar como leído/ no leído'
toogle_as_star: 'Marcar como favorito/ no favorito'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Regrese a la página principal'
set_as_read: 'Marcar como leído'
set_as_unread: 'Marcar como no leído'
set_as_favorite: 'Marcar como favorito'
set_as_starred: 'Marcar como favorito'
view_original_article: 'Artículo original'
re_fetch_content: 'Redescargar el contenido'
delete: 'Suprimir'
@ -191,6 +193,7 @@ entry:
edit_title: 'Modificar el título'
original_article: 'original'
annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones'
created_at: 'Fecha de creación'
new:
page_title: 'Guardar un nuevo artículo'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'زمان تخمینی برای خواندن'
reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min'
reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'خوانده‌شده/خوانده‌نشده'
toogle_as_star: 'برگزیده/نابرگزیده'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'بازگشت'
set_as_read: 'خوانده‌شده'
set_as_unread: 'به عنوان خوانده‌نشده علامت بزن'
set_as_favorite: 'برگزیده'
set_as_starred: 'برگزیده'
view_original_article: 'مقالهٔ اصلی'
re_fetch_content: 'مقاله‌ها را دوباره دریافت کن'
delete: 'پاک کردن'
@ -191,6 +193,7 @@ entry:
edit_title: 'ویرایش عنوان'
original_article: 'اصلی'
annotations_on_the_entry: '{0} بدون حاشیه|{1} یک حاشیه|]1,Inf[ %nbحاشیه% annotations'
created_at: 'زمان ساخت'
new:
page_title: 'ذخیرهٔ مقالهٔ تازه'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'durée de lecture'
reading_time_minutes: 'durée de lecture: %readingTime% min'
reading_time_less_one_minute: 'durée de lecture: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marquer comme lu/non lu'
toogle_as_star: 'Marquer comme favori'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Retour'
set_as_read: 'Marquer comme lu'
set_as_unread: 'Marquer comme non lu'
set_as_favorite: 'Mettre en favori'
set_as_starred: 'Mettre en favori'
view_original_article: 'Article original'
re_fetch_content: 'Recharger le contenu'
delete: 'Supprimer'
@ -191,6 +193,7 @@ entry:
edit_title: 'Modifier le titre'
original_article: 'original'
annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Date de création'
new:
page_title: 'Sauvegarder un nouvel article'
placeholder: 'http://website.com'
@ -268,12 +271,12 @@ quickstart:
tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles'
admin:
title: 'Administration'
description: "En tant qu'adminitrasteur sur wallabag, vous avez des privilèges qui vous permette de :"
description: "En tant qu'administrateur sur wallabag, vous avez des privilèges qui vous permettent de :"
new_user: 'Créer un nouvel utilisateur'
analytics: 'Configurer les statistiques'
sharing: 'Activer des paramètres de partages'
export: 'Configurer les export'
import: 'Configurer les import'
export: "Configurer les formats d'export"
import: "Configurer l'import"
first_steps:
title: 'Premiers pas'
new_article: 'Ajoutez votre premier article'
@ -289,7 +292,7 @@ quickstart:
create_application: 'Créer votre application tierce'
docs:
title: 'Documentation complète'
annotate: 'Annotater votre article'
annotate: 'Annoter votre article'
export: 'Convertissez vos articles en ePub ou en PDF'
search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse"
fetching_errors: "Que faire si mon article n'est pas correctement récupéré ?"

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'tempo di lettura stimato'
reading_time_minutes: 'tempo di lettura stimato: %readingTime% min'
reading_time_less_one_minute: 'tempo di lettura stimato: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'originale'
toogle_as_read: 'Segna come da leggere'
toogle_as_star: 'Segna come non preferito'
@ -175,7 +177,7 @@ entry:
back_to_homepage: 'Indietro'
set_as_read: 'Segna come già letto'
set_as_unread: 'Segna come da leggere'
set_as_favorite: 'Segna come preferito'
set_as_starred: 'Segna come preferito'
view_original_article: 'Contenuto originale'
re_fetch_content: 'Ri-ottieni pagina'
delete: 'Elimina'
@ -190,6 +192,7 @@ entry:
edit_title: 'Modifica titolo'
original_article: 'originale'
annotations_on_the_entry: '{0} Nessuna annotazione|{1} Una annotazione|]1,Inf[ %nbAnnotations% annotazioni'
created_at: 'Data di creazione'
new:
page_title: 'Salva un nuovo contenuto'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'durada de lectura'
reading_time_minutes: 'durada de lectura : %readingTime% min'
reading_time_less_one_minute: 'durada de lectura : <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marcar coma legit/pas legit'
toogle_as_star: 'Marcar coma favorit'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Tornar'
set_as_read: 'Marcar coma legit'
set_as_unread: 'Marcar coma pas legit'
set_as_favorite: 'Metre en favori'
set_as_starred: 'Metre en favori'
view_original_article: 'Article original'
re_fetch_content: 'Tornar cargar lo contengut'
delete: 'Suprimir'
@ -191,6 +193,7 @@ entry:
edit_title: 'Modificar lo títol'
original_article: 'original'
annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions"
created_at: 'Data de creacion'
new:
page_title: 'Enregistrar un novèl article'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'szacunkowy czas czytania'
reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min'
reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'oryginał'
toogle_as_read: 'Oznacz jako przeczytane'
toogle_as_star: 'Oznacz jako ulubione'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Cofnij'
set_as_read: 'Oznacz jako przeczytane'
set_as_unread: 'Oznacz jako nieprzeczytane'
set_as_favorite: 'Ulubione'
set_as_starred: 'Ulubione'
view_original_article: 'Oryginalny artykuł'
re_fetch_content: 'Pobierz ponownie treść'
delete: 'Usuń'
@ -191,6 +193,7 @@ entry:
edit_title: 'Edytuj tytuł'
original_article: 'oryginalny'
annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji'
created_at: 'Czas stworzenia'
new:
page_title: 'Zapisz nowy wpis'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'timp estimat de citire'
reading_time_minutes: 'timp estimat de citire: %readingTime% min'
reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original'
toogle_as_read: 'Comută marcat ca citit'
toogle_as_star: 'Comută marcat ca favorit'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Înapoi'
set_as_read: 'Marchează ca citit'
# set_as_unread: 'Mark as unread'
set_as_favorite: 'Favorit'
set_as_starred: 'Favorit'
view_original_article: 'Articol original'
# re_fetch_content: 'Re-fetch content'
delete: 'Șterge'
@ -191,6 +193,7 @@ entry:
edit_title: 'Editează titlul'
original_article: 'original'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Data creării'
new:
page_title: 'Salvează un nou articol'
placeholder: 'http://website.com'

View File

@ -144,6 +144,8 @@ entry:
reading_time: 'tahmini okuma süresi'
reading_time_minutes: 'tahmini okuma süresi: %readingTime% min'
reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur">&lt;</small> 1 min'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'orijinal'
toogle_as_read: 'Okundu/okunmadı olarak işaretle'
toogle_as_star: 'Favorilere ekle/çıkar'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Back'
set_as_read: 'Okundu olarak işaretle'
set_as_unread: 'Okunmadı olarak işaretle'
set_as_favorite: 'Favorilere ekle/çıkar'
set_as_starred: 'Favorilere ekle/çıkar'
view_original_article: 'Orijinal makale'
re_fetch_content: 'İçeriği yenile'
delete: 'Sil'
@ -191,6 +193,7 @@ entry:
edit_title: 'Başlığı düzenle'
original_article: 'orijinal'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Oluşturulma tarihi'
new:
page_title: 'Yeni makaleyi kaydet'
placeholder: 'http://website.com'

View File

@ -134,7 +134,8 @@
</fieldset>
{% endif %}
{{ form_rest(form.user) }}
{{ form_widget(form.user._token) }}
{{ form_widget(form.user.save) }}
</form>
<h2>{{ 'config.tab_menu.password'|trans }}</h2>

View File

@ -14,7 +14,7 @@
<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>
<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>
<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>
<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>
<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>
<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>
<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>
{% 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 @@
<li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;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>
</ul>
</div>
<div class="link mdi-action-today">
{{ 'entry.view.created_at'|trans }}: {{ entry.createdAt|date('Y-m-d') }}
</div>
<div class="link mdi-action-query-builder">
{% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
{% if readingTime > 0 %}
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round})|capitalize }}
{% else %}
{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
{% endif %}
</div>
{% set nbAnnotations = entry.annotations | length %}
<span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<aside class="tags">
@ -72,7 +85,7 @@
$("body").css("cursor", "auto");
});*/
// toggle favorite property of current article
// toggle starred property of current article
/* $('#setFav').click(function(){
$("body").css("cursor", "wait");
$.ajax( { url: '{{ path('star_entry', { 'id': entry.id }) }}' }).done(

View File

@ -11,14 +11,14 @@
</ul>
<h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3>
<ul>
<li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
<li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
<li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
<li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
</ul>
<h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3>
<ul>
<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>
<li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
<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>
<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>
<li>iOS: <a href="{{ addonsUrl.ios }}" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
<li>Windows Phone: <a href="{{ addonsUrl.windows }}" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li>
</ul>
<h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3>
<p>

View File

@ -158,7 +158,7 @@
{% endif %}
{{ form_widget(form.user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
{{ form_rest(form.user) }}
{{ form_widget(form.user._token) }}
</form>
</div>

View File

@ -77,7 +77,7 @@
<ul class="tools links right">
<li>
<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>
<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>
<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>
<a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a>
</li>
</ul>

View File

@ -24,8 +24,8 @@
</a>
</li>
<li>
<a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i>
<a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i>
</a>
</li>
<li>
@ -70,9 +70,9 @@
</li>
<li class="bold hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i>
<span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span>
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i>
<span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span>
</a>
<div class="collapsible-body"></div>
</li>
@ -193,6 +193,15 @@
<h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
</header>
<aside>
<span class="link mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> {{ entry.createdAt|date('Y-m-d') }}</span>
{% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
<span class="link mdi-action-query-builder">
{% if readingTime > 0 %}
{{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': readingTime|round}) }}
{% else %}
{{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }}
{% endif %}
</span>
<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>
<span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<div id="list">

View File

@ -18,17 +18,17 @@
<div class="col s12">
<h5>{{ 'howto.top_menu.browser_addons'|trans }}</h5>
<ul>
<li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
<li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
<li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
<li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
</ul>
</div>
<div class="col s12">
<h5>{{ 'howto.top_menu.mobile_apps'|trans }}</h5>
<ul>
<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>
<li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
<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>
<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>
<li>iOS: <a href="{{ addonsUrl.ios }}" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
<li>Windows Phone: <a href="{{ addonsUrl.windows }}" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li>
</ul>
</div>

View File

@ -0,0 +1,41 @@
<footer class="page-footer cyan darken-2">
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5>
<p class="grey-text text-lighten-4">
<a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.google_play }}" title="Android">
<span class="icon-android"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.ios }}" title="iOS">
<span class="icon-apple"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.firefox }}" title="Firefox">
<span class="icon-firefox"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="{{ addonsUrl.chrome }}" title="Chrome">
<span class="icon-chrome"></span>
</a>
</p>
</div>
<div class="col l4 offset-l2 s12">
<h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5>
<a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.twitter }}" title="Twitter">
<span class="icon-twitter"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.google_plus }}" title="Google+">
<span class="icon-google-plus2"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="{{ socialsUrl.facebook }}" title="Facebook">
<span class="icon-facebook2"></span>
</a>
</div>
</div>
</div>
<div class="footer-copyright">
<div class="container">
<p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p>
<a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a>
</div>
</div>
</footer>

View File

@ -122,45 +122,5 @@
{% endblock %}
{% block footer %}
<footer class="page-footer cyan darken-2">
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5>
<p class="grey-text text-lighten-4">
<a target="_blank" class="grey-text text-lighten-3" href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" title="Android">
<span class="icon-android"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS">
<span class="icon-apple"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/firefox/addon/wallabag/" title="Firefox">
<span class="icon-firefox"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome">
<span class="icon-chrome"></span>
</a>
</p>
</div>
<div class="col l4 offset-l2 s12">
<h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5>
<a target="_blank" class="grey-text text-lighten-3" href="https://twitter.com/wallabagapp" title="Twitter">
<span class="icon-twitter"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://plus.google.com/+WallabagOrg/posts" title="Google+">
<span class="icon-google-plus2"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://facebook.com/Wallabag" title="Facebook">
<span class="icon-facebook2"></span>
</a>
</div>
</div>
</div>
<div class="footer-copyright">
<div class="container">
<p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p>
<a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a>
</div>
</div>
</footer>
{{ render(controller("WallabagCoreBundle:Footer:index")) }}
{% endblock %}

View File

@ -1,51 +0,0 @@
<?php
namespace Wallabag\CoreBundle\Tests;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
abstract class WallabagCoreTestCase extends WebTestCase
{
private $client = null;
public function getClient()
{
return $this->client;
}
public function setUp()
{
parent::setUp();
$this->client = static::createClient();
}
public function logInAs($username)
{
$crawler = $this->client->request('GET', '/login');
$form = $crawler->filter('button[type=submit]')->form();
$data = [
'_username' => $username,
'_password' => 'mypassword',
];
$this->client->submit($form, $data);
}
/**
* Return the user id of the logged in user.
* You should be sure that you called `logInAs` before.
*
* @return int
*/
public function getLoggedInUserId()
{
$token = static::$kernel->getContainer()->get('security.token_storage')->getToken();
if (null !== $token) {
return $token->getUser()->getId();
}
throw new \RuntimeException('No logged in User.');
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace Wallabag\ImportBundle\Import;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Doctrine\ORM\EntityManager;
use Wallabag\CoreBundle\Helper\ContentProxy;
use Wallabag\CoreBundle\Entity\Entry;
abstract class AbstractImport implements ImportInterface
{
protected $em;
protected $logger;
protected $contentProxy;
public function __construct(EntityManager $em, ContentProxy $contentProxy)
{
$this->em = $em;
$this->logger = new NullLogger();
$this->contentProxy = $contentProxy;
}
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
}
/**
* Fetch content from the ContentProxy (using graby).
* If it fails return false instead of the updated entry.
*
* @param Entry $entry Entry to update
* @param string $url Url to grab content for
* @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url
*
* @return Entry|false
*/
protected function fetchContent(Entry $entry, $url, array $content = [])
{
try {
return $this->contentProxy->updateEntry($entry, $url, $content);
} catch (\Exception $e) {
return false;
}
}
}

View File

@ -2,7 +2,6 @@
namespace Wallabag\ImportBundle\Import;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Doctrine\ORM\EntityManager;
use GuzzleHttp\Client;
@ -12,12 +11,9 @@ use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Helper\ContentProxy;
use Craue\ConfigBundle\Util\Config;
class PocketImport implements ImportInterface
class PocketImport extends AbstractImport
{
private $user;
private $em;
private $contentProxy;
private $logger;
private $client;
private $consumerKey;
private $skippedEntries = 0;
@ -34,11 +30,6 @@ class PocketImport implements ImportInterface
$this->logger = new NullLogger();
}
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
}
/**
* {@inheritdoc}
*/
@ -219,14 +210,20 @@ class PocketImport implements ImportInterface
}
$entry = new Entry($this->user);
$entry = $this->contentProxy->updateEntry($entry, $url);
$entry = $this->fetchContent($entry, $url);
// jump to next entry in case of problem while getting content
if (false === $entry) {
++$this->skippedEntries;
continue;
}
// 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted
if ($pocketEntry['status'] == 1 || $this->markAsRead) {
$entry->setArchived(true);
}
// 0 or 1 - 1 If the item is favorited
// 0 or 1 - 1 If the item is starred
if ($pocketEntry['favorite'] == 1) {
$entry->setStarred(true);
}

View File

@ -2,19 +2,12 @@
namespace Wallabag\ImportBundle\Import;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Doctrine\ORM\EntityManager;
use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\UserBundle\Entity\User;
use Wallabag\CoreBundle\Helper\ContentProxy;
abstract class WallabagImport implements ImportInterface
abstract class WallabagImport extends AbstractImport
{
protected $user;
protected $em;
protected $logger;
protected $contentProxy;
protected $skippedEntries = 0;
protected $importedEntries = 0;
protected $filepath;
@ -35,18 +28,6 @@ abstract class WallabagImport implements ImportInterface
'',
];
public function __construct(EntityManager $em, ContentProxy $contentProxy)
{
$this->em = $em;
$this->logger = new NullLogger();
$this->contentProxy = $contentProxy;
}
public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
}
/**
* We define the user in a custom call because on the import command there is no logged in user.
* So we can't retrieve user from the `security.token_storage` service.
@ -159,12 +140,18 @@ abstract class WallabagImport implements ImportInterface
$data = $this->prepareEntry($importedEntry, $this->markAsRead);
$entry = $this->contentProxy->updateEntry(
$entry = $this->fetchContent(
new Entry($this->user),
$importedEntry['url'],
$data
);
// jump to next entry in case of problem while getting content
if (false === $entry) {
++$this->skippedEntries;
continue;
}
if (array_key_exists('tags', $data)) {
$this->contentProxy->assignTagsToEntry(
$entry,

View File

@ -1,65 +0,0 @@
<?php
namespace Wallabag\ImportBundle\Tests\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
class PocketControllerTest extends WallabagCoreTestCase
{
public function testImportPocket()
{
$this->logInAs('admin');
$client = $this->getClient();
$crawler = $client->request('GET', '/import/pocket');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertEquals(1, $crawler->filter('button[type=submit]')->count());
}
public function testImportPocketAuthBadToken()
{
$this->logInAs('admin');
$client = $this->getClient();
$crawler = $client->request('GET', '/import/pocket/auth');
$this->assertEquals(302, $client->getResponse()->getStatusCode());
}
public function testImportPocketAuth()
{
$this->markTestSkipped('PocketImport: Find a way to properly mock a service.');
$this->logInAs('admin');
$client = $this->getClient();
$pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport')
->disableOriginalConstructor()
->getMock();
$pocketImport
->expects($this->once())
->method('getRequestToken')
->willReturn('token');
$client->getContainer()->set('wallabag_import.pocket.import', $pocketImport);
$crawler = $client->request('GET', '/import/pocket/auth');
$this->assertEquals(301, $client->getResponse()->getStatusCode());
$this->assertContains('getpocket.com/auth/authorize', $client->getResponse()->headers->get('location'));
}
public function testImportPocketCallbackWithBadToken()
{
$this->logInAs('admin');
$client = $this->getClient();
$crawler = $client->request('GET', '/import/pocket/callback');
$this->assertEquals(302, $client->getResponse()->getStatusCode());
$this->assertContains('import/pocket', $client->getResponse()->headers->get('location'));
$this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]);
}
}

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\AnnotationBundle\Tests\Controller;
namespace Tests\AnnotationBundle\Controller;
use Wallabag\AnnotationBundle\Tests\WallabagAnnotationTestCase;
use Tests\Wallabag\AnnotationBundle\WallabagAnnotationTestCase;
class AnnotationControllerTest extends WallabagAnnotationTestCase
{

View File

@ -1,6 +1,6 @@
<?php
namespace Wallabag\AnnotationBundle\Tests;
namespace Tests\Wallabag\AnnotationBundle;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\BrowserKit\Cookie;

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\ApiBundle\Tests\Controller;
namespace Tests\Wallabag\ApiBundle\Controller;
use Wallabag\ApiBundle\Tests\WallabagApiTestCase;
use Tests\Wallabag\ApiBundle\WallabagApiTestCase;
class WallabagRestControllerTest extends WallabagApiTestCase
{

View File

@ -1,6 +1,6 @@
<?php
namespace Wallabag\ApiBundle\Tests;
namespace Tests\Wallabag\ApiBundle;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\BrowserKit\Cookie;

View File

@ -1,6 +1,6 @@
<?php
namespace Wallabag\CoreBundle\Tests\Command;
namespace Tests\Wallabag\CoreBundle\Command;
use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand;
use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand;
@ -9,8 +9,8 @@ use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Tester\CommandTester;
use Wallabag\CoreBundle\Command\InstallCommand;
use Wallabag\CoreBundle\Tests\Mock\InstallCommandMock;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\Mock\InstallCommandMock;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class InstallCommandTest extends WallabagCoreTestCase
{
@ -28,16 +28,32 @@ class InstallCommandTest extends WallabagCoreTestCase
*
* http://stackoverflow.com/a/14374832/569101
*/
$this->markTestSkipped('PostgreSQL spotted: can find a good way to drop current database, skipping.');
$this->markTestSkipped('PostgreSQL spotted: can\'t find a good way to drop current database, skipping.');
}
}
/**
* Ensure next tests will have a clean database
*/
public static function tearDownAfterClass()
{
$application = new Application(static::$kernel);
$application->setAutoExit(false);
$code = $application->run(new ArrayInput([
$application->run(new ArrayInput([
'command' => 'doctrine:schema:drop',
'--no-interaction' => true,
'--force' => true,
'--env' => 'test',
]), new NullOutput());
$application->run(new ArrayInput([
'command' => 'doctrine:schema:create',
'--no-interaction' => true,
'--env' => 'test',
]), new NullOutput());
$application->run(new ArrayInput([
'command' => 'doctrine:fixtures:load',
'--no-interaction' => true,
'--env' => 'test',

View File

@ -1,11 +1,11 @@
<?php
namespace Wallabag\CoreBundle\Tests\Command;
namespace Tests\Wallabag\CoreBundle\Command;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Tester\CommandTester;
use Wallabag\CoreBundle\Command\TagAllCommand;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class TagAllCommandTest extends WallabagCoreTestCase
{

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class ConfigControllerTest extends WallabagCoreTestCase
{

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class DeveloperControllerTest extends WallabagCoreTestCase
{

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
use Wallabag\CoreBundle\Entity\Entry;
class EntryControllerTest extends WallabagCoreTestCase
@ -499,6 +499,42 @@ class EntryControllerTest extends WallabagCoreTestCase
$this->assertCount(1, $crawler->filter('div[class=entry]'));
}
public function testFilterOnReadingTimeOnlyUpper()
{
$this->logInAs('admin');
$client = $this->getClient();
$crawler = $client->request('GET', '/unread/list');
$form = $crawler->filter('button[id=submit-filter]')->form();
$data = [
'entry_filter[readingTime][right_number]' => 22,
];
$crawler = $client->submit($form, $data);
$this->assertCount(2, $crawler->filter('div[class=entry]'));
}
public function testFilterOnReadingTimeOnlyLower()
{
$this->logInAs('admin');
$client = $this->getClient();
$crawler = $client->request('GET', '/unread/list');
$form = $crawler->filter('button[id=submit-filter]')->form();
$data = [
'entry_filter[readingTime][left_number]' => 22,
];
$crawler = $client->submit($form, $data);
$this->assertCount(4, $crawler->filter('div[class=entry]'));
}
public function testFilterOnUnreadStatus()
{
$this->logInAs('admin');

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class ExportControllerTest extends WallabagCoreTestCase
{

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class RssControllerTest extends WallabagCoreTestCase
{

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class SecurityControllerTest extends WallabagCoreTestCase
{
@ -36,7 +36,7 @@ class SecurityControllerTest extends WallabagCoreTestCase
$em->persist($user);
$em->flush();
$this->logInAs('admin');
$this->logInAsUsingHttp('admin');
$crawler = $client->request('GET', '/config');
$this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]);

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
/**
* The controller `SettingsController` does not exist.

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class StaticControllerTest extends WallabagCoreTestCase
{

View File

@ -1,8 +1,8 @@
<?php
namespace Wallabag\CoreBundle\Tests\Controller;
namespace Tests\Wallabag\CoreBundle\Controller;
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
use Tests\Wallabag\CoreBundle\WallabagCoreTestCase;
class TagControllerTest extends WallabagCoreTestCase
{
@ -39,6 +39,12 @@ class TagControllerTest extends WallabagCoreTestCase
$client->submit($form, $data);
$this->assertEquals(302, $client->getResponse()->getStatusCode());
// be sure to reload the entry
$entry = $client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneByUsernameAndNotArchived('admin');
$this->assertEquals(1, count($entry->getTags()));
# tag already exists and already assigned

View File

@ -1,6 +1,6 @@
<?php
namespace Wallabag\CoreBundle\Tests\EventListener;
namespace Tests\Wallabag\CoreBundle\EventListener;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;

View File

@ -1,6 +1,6 @@
<?php
namespace Wallabag\CoreBundle\Tests\EventListener;
namespace Tests\Wallabag\CoreBundle\EventListener;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\FOSUserEvents;

Some files were not shown because too many files have changed in this diff Show More