1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-07-22 17:18:37 +00:00

Merge remote-tracking branch 'origin/master' into 2.1

This commit is contained in:
Jeremy Benoist 2016-08-22 23:03:16 +02:00
commit 79efca1e6f
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
45 changed files with 494 additions and 153 deletions

View file

@ -23,8 +23,8 @@ php:
- 5.5 - 5.5
- 5.6 - 5.6
- 7.0 - 7.0
- 7.1
- nightly - nightly
- hhvm
node_js: node_js:
- "5" - "5"
@ -37,15 +37,32 @@ env:
matrix: matrix:
fast_finish: true fast_finish: true
include: 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 - php: 7.0
env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite ASSETS=nobuild env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite ASSETS=nobuild
- php: 7.0 - php: 7.0
env: DB=sqlite ASSETS=build env: DB=sqlite ASSETS=build
exclude:
- php: hhvm
env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
allow_failures: allow_failures:
- php: hhvm - php: hhvm-3.12
- php: nightly
# exclude v1 branches # exclude v1 branches
branches: branches:
@ -53,9 +70,11 @@ branches:
- legacy - legacy
before_script: before_script:
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi; - PHP=$TRAVIS_PHP_VERSION
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi; - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
- if [ "$TRAVIS_PHP_VERSION" = "5.5" ]; then composer require "phpunit/phpunit:4.*" --no-update; fi; # xdebug isn't enable for PHP 7.1
- if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi
- if [[ $PHP = 5.5 ]]; then composer require "phpunit/phpunit:4.*" --no-update; fi;
- composer self-update --no-progress - composer self-update --no-progress
- if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi; - if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; 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/). 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 ## [2.0.5] - 2016-05-31
### Added ### 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) [![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) [![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag)
# What is wallabag? # What is wallabag?
@ -16,7 +16,7 @@ Then you can install wallabag by executing the following commands:
``` ```
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.5 git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod php bin/console server:run --env=prod

View file

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

View file

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

View file

@ -30,7 +30,7 @@ framework:
assets: ~ assets: ~
wallabag_core: 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" paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
languages: languages:
en: 'English' en: 'English'
@ -138,6 +138,11 @@ nelmio_cors:
#origin_regex: false #origin_regex: false
paths: paths:
'^/api/': '^/api/':
allow_origin: ['*']
allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'PATCH','GET', 'DELETE']
max_age: 3600
'^/oauth/':
allow_origin: ['*'] allow_origin: ['*']
allow_headers: ['X-Custom-Auth'] allow_headers: ['X-Custom-Auth']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE'] allow_methods: ['POST', 'PUT', 'GET', 'DELETE']

View file

@ -54,7 +54,7 @@ Um wallabag selbst zu installieren, musst du die folgenden Kommandos ausführen:
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.5 git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod
@ -73,7 +73,7 @@ Und wallabag unter http://deineserverip:8000 erreichen
Auf einem geteilten Webhosting Auf einem geteilten Webhosting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wir stellen ein Paket inkl. aller Abhängigkeiten bereit. 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``. 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``. Wir haben bereits einen Nutzer erstellt: Login und Passwort sind ``wallabag``.

View file

@ -53,7 +53,7 @@ To install wallabag itself, you must run the following commands:
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.5 git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod

View file

@ -51,7 +51,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes :
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.5 git checkout 2.0.7
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod

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 Request $request
* @param Entry $entry * @param Entry $entry

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() public function howtoAction()
{ {
$addonsUrl = $this->container->getParameter('addons_url');
return $this->render( return $this->render(
'WallabagCoreBundle:Static:howto.html.twig', '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 = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml'); $loader->load('services.yml');
$loader->load('parameters.yml');
} }
public function getAlias() public function getAlias()

View file

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

View file

@ -21,7 +21,9 @@ class ConfigType extends AbstractType
{ {
$this->themes = array_combine( $this->themes = array_combine(
$themes, $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; $this->languages = $languages;

View file

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

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'estimeret læsetid: %readingTime% min' 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_less_one_minute: 'estimeret læsetid: <small class="inferieur">&lt;</small> 1 min'
# number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original' original_article: 'original'
toogle_as_read: 'Marker som læst' toogle_as_read: 'Marker som læst'
toogle_as_star: 'Skift favoritstatus' toogle_as_star: 'Skift favoritstatus'
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Tilbage' back_to_homepage: 'Tilbage'
set_as_read: 'Marker som læst' set_as_read: 'Marker som læst'
# set_as_unread: 'Mark as unread' # set_as_unread: 'Mark as unread'
set_as_favorite: 'Marker som favorit' set_as_starred: 'Marker som favorit'
view_original_article: 'Originalartikel' view_original_article: 'Originalartikel'
# re_fetch_content: 'Re-fetch content' # re_fetch_content: 'Re-fetch content'
delete: 'Slet' delete: 'Slet'
@ -192,6 +194,7 @@ entry:
edit_title: 'Rediger titel' edit_title: 'Rediger titel'
original_article: 'original' original_article: 'original'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Oprettelsesdato'
new: new:
page_title: 'Gem ny artikel' page_title: 'Gem ny artikel'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

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

View file

@ -145,9 +145,11 @@ entry:
reading_time_minutes: 'estimated reading time: %readingTime% min' 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_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min'
number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original' original_article: 'original'
toogle_as_read: 'Toggle mark as read' toogle_as_read: 'Toggle mark as read'
toogle_as_star: 'Toggle favorite' toogle_as_star: 'Toggle starred'
delete: 'Delete' delete: 'Delete'
export_title: 'Export' export_title: 'Export'
filters: filters:
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Back' back_to_homepage: 'Back'
set_as_read: 'Mark as read' set_as_read: 'Mark as read'
set_as_unread: 'Mark as unread' set_as_unread: 'Mark as unread'
set_as_favorite: 'Favorite' set_as_starred: 'Toggle starred'
view_original_article: 'Original article' view_original_article: 'Original article'
re_fetch_content: 'Re-fetch content' re_fetch_content: 'Re-fetch content'
delete: 'Delete' delete: 'Delete'
@ -192,6 +194,7 @@ entry:
edit_title: 'Edit title' edit_title: 'Edit title'
original_article: 'original' original_article: 'original'
annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Creation date'
new: new:
page_title: 'Save new entry' page_title: 'Save new entry'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min' 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_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur">&lt;</small> 1 min'
# number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original' original_article: 'original'
toogle_as_read: 'Marcar como leído/ no leído' toogle_as_read: 'Marcar como leído/ no leído'
toogle_as_star: 'Marcar como favorito/ no favorito' toogle_as_star: 'Marcar como favorito/ no favorito'
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Regrese a la página principal' back_to_homepage: 'Regrese a la página principal'
set_as_read: 'Marcar como leído' set_as_read: 'Marcar como leído'
set_as_unread: 'Marcar como no 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' view_original_article: 'Artículo original'
re_fetch_content: 'Redescargar el contenido' re_fetch_content: 'Redescargar el contenido'
delete: 'Suprimir' delete: 'Suprimir'
@ -192,6 +194,7 @@ entry:
edit_title: 'Modificar el título' edit_title: 'Modificar el título'
original_article: 'original' original_article: 'original'
annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones' annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones'
created_at: 'Fecha de creación'
new: new:
page_title: 'Guardar un nuevo artículo' page_title: 'Guardar un nuevo artículo'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

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

View file

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'durée de lecture: %readingTime% min' 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_less_one_minute: 'durée de lecture: <small class="inferieur">&lt;</small> 1 min'
number_of_tags: '{1}et un autre tag|]1,Inf[et %count% autres tags' number_of_tags: '{1}et un autre tag|]1,Inf[et %count% autres tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original' original_article: 'original'
toogle_as_read: 'Marquer comme lu/non lu' toogle_as_read: 'Marquer comme lu/non lu'
toogle_as_star: 'Marquer comme favori' toogle_as_star: 'Marquer comme favori'
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Retour' back_to_homepage: 'Retour'
set_as_read: 'Marquer comme lu' set_as_read: 'Marquer comme lu'
set_as_unread: 'Marquer comme non 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' view_original_article: 'Article original'
re_fetch_content: 'Recharger le contenu' re_fetch_content: 'Recharger le contenu'
delete: 'Supprimer' delete: 'Supprimer'
@ -192,6 +194,7 @@ entry:
edit_title: 'Modifier le titre' edit_title: 'Modifier le titre'
original_article: 'original' original_article: 'original'
annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations' annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Date de création'
new: new:
page_title: 'Sauvegarder un nouvel article' page_title: 'Sauvegarder un nouvel article'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'tempo di lettura stimato: %readingTime% min' 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_less_one_minute: 'tempo di lettura stimato: <small class="inferieur">&lt;</small> 1 min'
# number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'originale' original_article: 'originale'
toogle_as_read: 'Segna come da leggere' toogle_as_read: 'Segna come da leggere'
toogle_as_star: 'Segna come non preferito' toogle_as_star: 'Segna come non preferito'
@ -176,7 +178,7 @@ entry:
back_to_homepage: 'Indietro' back_to_homepage: 'Indietro'
set_as_read: 'Segna come già letto' set_as_read: 'Segna come già letto'
set_as_unread: 'Segna come da leggere' set_as_unread: 'Segna come da leggere'
set_as_favorite: 'Segna come preferito' set_as_starred: 'Segna come preferito'
view_original_article: 'Contenuto originale' view_original_article: 'Contenuto originale'
re_fetch_content: 'Ri-ottieni pagina' re_fetch_content: 'Ri-ottieni pagina'
delete: 'Elimina' delete: 'Elimina'
@ -191,6 +193,7 @@ entry:
edit_title: 'Modifica titolo' edit_title: 'Modifica titolo'
original_article: 'originale' original_article: 'originale'
annotations_on_the_entry: '{0} Nessuna annotazione|{1} Una annotazione|]1,Inf[ %nbAnnotations% annotazioni' annotations_on_the_entry: '{0} Nessuna annotazione|{1} Una annotazione|]1,Inf[ %nbAnnotations% annotazioni'
created_at: 'Data di creazione'
new: new:
page_title: 'Salva un nuovo contenuto' page_title: 'Salva un nuovo contenuto'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'durada de lectura : %readingTime% min' 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_less_one_minute: 'durada de lectura : <small class="inferieur">&lt;</small> 1 min'
# number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'original' original_article: 'original'
toogle_as_read: 'Marcar coma legit/pas legit' toogle_as_read: 'Marcar coma legit/pas legit'
toogle_as_star: 'Marcar coma favorit' toogle_as_star: 'Marcar coma favorit'
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Tornar' back_to_homepage: 'Tornar'
set_as_read: 'Marcar coma legit' set_as_read: 'Marcar coma legit'
set_as_unread: 'Marcar coma pas 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' view_original_article: 'Article original'
re_fetch_content: 'Tornar cargar lo contengut' re_fetch_content: 'Tornar cargar lo contengut'
delete: 'Suprimir' delete: 'Suprimir'
@ -192,6 +194,7 @@ entry:
edit_title: 'Modificar lo títol' edit_title: 'Modificar lo títol'
original_article: 'original' original_article: 'original'
annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions" annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions"
created_at: 'Data de creacion'
new: new:
page_title: 'Enregistrar un novèl article' page_title: 'Enregistrar un novèl article'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min' 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_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur">&lt;</small> 1 min'
# number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'oryginał' original_article: 'oryginał'
toogle_as_read: 'Oznacz jako przeczytane' toogle_as_read: 'Oznacz jako przeczytane'
toogle_as_star: 'Oznacz jako ulubione' toogle_as_star: 'Oznacz jako ulubione'
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Cofnij' back_to_homepage: 'Cofnij'
set_as_read: 'Oznacz jako przeczytane' set_as_read: 'Oznacz jako przeczytane'
set_as_unread: 'Oznacz jako nieprzeczytane' set_as_unread: 'Oznacz jako nieprzeczytane'
set_as_favorite: 'Ulubione' set_as_starred: 'Ulubione'
view_original_article: 'Oryginalny artykuł' view_original_article: 'Oryginalny artykuł'
re_fetch_content: 'Pobierz ponownie treść' re_fetch_content: 'Pobierz ponownie treść'
delete: 'Usuń' delete: 'Usuń'
@ -192,6 +194,7 @@ entry:
edit_title: 'Edytuj tytuł' edit_title: 'Edytuj tytuł'
original_article: 'oryginalny' original_article: 'oryginalny'
annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji' annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji'
created_at: 'Czas stworzenia'
new: new:
page_title: 'Zapisz nowy wpis' page_title: 'Zapisz nowy wpis'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

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

View file

@ -145,6 +145,8 @@ entry:
reading_time_minutes: 'tahmini okuma süresi: %readingTime% min' 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_less_one_minute: 'tahmini okuma süresi: <small class="inferieur">&lt;</small> 1 min'
# number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags' # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
reading_time_minutes_short: '%readingTime% min'
reading_time_less_one_minute_short: '<small class="inferieur">&lt;</small> 1 min'
original_article: 'orijinal' original_article: 'orijinal'
toogle_as_read: 'Okundu/okunmadı olarak işaretle' toogle_as_read: 'Okundu/okunmadı olarak işaretle'
toogle_as_star: 'Favorilere ekle/çıkar' toogle_as_star: 'Favorilere ekle/çıkar'
@ -177,7 +179,7 @@ entry:
back_to_homepage: 'Back' back_to_homepage: 'Back'
set_as_read: 'Okundu olarak işaretle' set_as_read: 'Okundu olarak işaretle'
set_as_unread: 'Okunmadı 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' view_original_article: 'Orijinal makale'
re_fetch_content: 'İçeriği yenile' re_fetch_content: 'İçeriği yenile'
delete: 'Sil' delete: 'Sil'
@ -192,6 +194,7 @@ entry:
edit_title: 'Başlığı düzenle' edit_title: 'Başlığı düzenle'
original_article: 'orijinal' original_article: 'orijinal'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
created_at: 'Oluşturulma tarihi'
new: new:
page_title: 'Yeni makaleyi kaydet' page_title: 'Yeni makaleyi kaydet'
placeholder: 'http://website.com' placeholder: 'http://website.com'

View file

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

View file

@ -9,26 +9,39 @@
</header> </header>
<div id="article_toolbar"> <div id="article_toolbar">
<ul class="links"> <ul class="links">
<li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li> <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li>
<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 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="{{ '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="{% 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 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> <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 %} {% 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 %}
{% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %} {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %}
{% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %} {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
{% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %} {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
{% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %} {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
{% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %} {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
{% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %} {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
{% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %} {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
{% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %} {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
<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> <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> </ul>
</div> </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 %} {% set nbAnnotations = entry.annotations | length %}
<span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> <span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<aside class="tags"> <aside class="tags">
@ -46,6 +59,7 @@
{{ entry.content | raw }} {{ entry.content | raw }}
</article> </article>
</div> </div>
<script id="annotationroutes" type="application/json"> <script id="annotationroutes" type="application/json">
{ {
"prefix": "", "prefix": "",
@ -58,4 +72,22 @@
"entryId": "{{ entry.id }}" "entryId": "{{ entry.id }}"
} }
</script> </script>
<script src="{{ asset('bundles/wallabagcore/themes/_global/js/restoreScroll.js')}}"></script>
<script type="text/javascript">
$(document).ready(function() {
$(window).scroll(function(e){
var scrollTop = $(window).scrollTop();
var docHeight = $(document).height();
var scrollPercent = (scrollTop) / (docHeight);
var scrollPercentRounded = Math.round(scrollPercent*100)/100;
savePercent({{ entry.id }}, scrollPercentRounded);
});
retrievePercent({{ entry.id }});
$(window).resize(function(){
retrievePercent({{ entry.id }});
});
});
</script>
{% endblock %} {% endblock %}

View file

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

View file

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

View file

@ -93,7 +93,7 @@
<ul class="tools right"> <ul class="tools right">
<li> <li>
<a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i></a> <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i></a>
<a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}favorite_border{% else %}favorite{% endif %}</i></a> <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}star_border{% else %}star{% endif %}</i></a>
<a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a> <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a>
</li> </li>
</ul> </ul>

View file

@ -24,8 +24,8 @@
</a> </a>
</li> </li>
<li> <li>
<a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="material-icons small">{% if entry.isStarred == 0 %}favorite_outline{% else %}favorite{% endif %}</i> <i class="material-icons small">{% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %}</i>
</a> </a>
</li> </li>
<li> <li>
@ -70,9 +70,9 @@
</li> </li>
<li class="bold hide-on-med-and-down"> <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"> <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="material-icons spall">{% if entry.isStarred == 0 %}favorite_outline{% else %}favorite{% endif %}</i> <i class="material-icons spall">{% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %}</i>
<span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span> <span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span>
</a> </a>
<div class="collapsible-body"></div> <div class="collapsible-body"></div>
</li> </li>
@ -194,6 +194,15 @@
<h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
</header> </header>
<aside> <aside>
{% 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>
<span class="link mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> {{ entry.createdAt|date('Y-m-d') }}</span>
<a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool"> <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool">
<span class="link"><i class="material-icons link">link</i> {{ entry.domainName|removeWww }}</span></a> <span class="link"><i class="material-icons link">link</i> {{ entry.domainName|removeWww }}</span></a>
<span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> <span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>

View file

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

@ -26,7 +26,7 @@
<ul id="slide-out" class="side-nav fixed"> <ul id="slide-out" class="side-nav fixed">
{% block logo %} {% block logo %}
<li class="logo border-bottom"> <li class="logo border-bottom">
<a title="{% trans %}Back to unread articles{% endtrans %}" href="{{ path('unread') }}"> <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}">
<img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-square.png') }}" alt="wallabag logo" /> <img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-square.png') }}" alt="wallabag logo" />
</a> </a>
</li> </li>
@ -117,45 +117,5 @@
{% endblock %} {% endblock %}
{% block footer %} {% block footer %}
<footer class="page-footer cyan darken-2"> {{ render(controller("WallabagCoreBundle:Footer:index")) }}
<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-v2/" title="Firefox">
<span class="icon-firefox"></span>
</a>
<a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagger/gbmgphmejlcoihgedabhgjdkcahacjlj" 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>
{% endblock %} {% endblock %}

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

View file

@ -2,19 +2,12 @@
namespace Wallabag\ImportBundle\Import; namespace Wallabag\ImportBundle\Import;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Doctrine\ORM\EntityManager;
use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\UserBundle\Entity\User; use Wallabag\UserBundle\Entity\User;
use Wallabag\CoreBundle\Helper\ContentProxy;
abstract class WallabagImport implements ImportInterface abstract class WallabagImport extends AbstractImport
{ {
protected $user; protected $user;
protected $em;
protected $logger;
protected $contentProxy;
protected $skippedEntries = 0; protected $skippedEntries = 0;
protected $importedEntries = 0; protected $importedEntries = 0;
protected $filepath; 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. * 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. * 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); $data = $this->prepareEntry($importedEntry, $this->markAsRead);
$entry = $this->contentProxy->updateEntry( $entry = $this->fetchContent(
new Entry($this->user), new Entry($this->user),
$importedEntry['url'], $importedEntry['url'],
$data $data
); );
// jump to next entry in case of problem while getting content
if (false === $entry) {
++$this->skippedEntries;
continue;
}
if (array_key_exists('tags', $data)) { if (array_key_exists('tags', $data)) {
$this->contentProxy->assignTagsToEntry( $this->contentProxy->assignTagsToEntry(
$entry, $entry,

View file

@ -28,16 +28,32 @@ class InstallCommandTest extends WallabagCoreTestCase
* *
* http://stackoverflow.com/a/14374832/569101 * 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() public static function tearDownAfterClass()
{ {
$application = new Application(static::$kernel); $application = new Application(static::$kernel);
$application->setAutoExit(false); $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', 'command' => 'doctrine:fixtures:load',
'--no-interaction' => true, '--no-interaction' => true,
'--env' => 'test', '--env' => 'test',

View file

@ -390,4 +390,55 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
$this->assertContains('PocketImport: Failed to import', $records[0]['message']); $this->assertContains('PocketImport: Failed to import', $records[0]['message']);
$this->assertEquals('ERROR', $records[0]['level_name']); $this->assertEquals('ERROR', $records[0]['level_name']);
} }
public function testImportWithExceptionFromGraby()
{
$client = new Client();
$mock = new Mock([
new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar_token']))),
new Response(200, ['Content-Type' => 'application/json'], Stream::factory('
{
"status": 1,
"list": {
"229279689": {
"resolved_url": "http://www.grantland.com/blog/the-triangle/post/_/id/38347/ryder-cup-preview"
}
}
}
')),
]);
$client->getEmitter()->attach($mock);
$pocketImport = $this->getPocketImport();
$entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
->disableOriginalConstructor()
->getMock();
$entryRepo->expects($this->once())
->method('findByUrlAndUserId')
->will($this->onConsecutiveCalls(false, true));
$this->em
->expects($this->once())
->method('getRepository')
->willReturn($entryRepo);
$entry = new Entry($this->user);
$this->contentProxy
->expects($this->once())
->method('updateEntry')
->will($this->throwException(new \Exception()));
$pocketImport->setClient($client);
$pocketImport->authorize('wunderbar_code');
$res = $pocketImport->import();
$this->assertTrue($res);
$this->assertEquals(['skipped' => 1, 'imported' => 0], $pocketImport->getSummary());
}
} }

View file

@ -143,4 +143,44 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
$this->assertContains('WallabagImport: user is not defined', $records[0]['message']); $this->assertContains('WallabagImport: user is not defined', $records[0]['message']);
$this->assertEquals('ERROR', $records[0]['level_name']); $this->assertEquals('ERROR', $records[0]['level_name']);
} }
public function testImportEmptyFile()
{
$wallabagV2Import = $this->getWallabagV2Import();
$wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2-empty.json');
$res = $wallabagV2Import->import();
$this->assertFalse($res);
$this->assertEquals(['skipped' => 0, 'imported' => 0], $wallabagV2Import->getSummary());
}
public function testImportWithExceptionFromGraby()
{
$wallabagV2Import = $this->getWallabagV2Import();
$wallabagV2Import->setFilepath(__DIR__.'/../fixtures/wallabag-v2.json');
$entryRepo = $this->getMockBuilder('Wallabag\CoreBundle\Repository\EntryRepository')
->disableOriginalConstructor()
->getMock();
$entryRepo->expects($this->exactly(24))
->method('findByUrlAndUserId')
->will($this->onConsecutiveCalls(false, true, false));
$this->em
->expects($this->any())
->method('getRepository')
->willReturn($entryRepo);
$this->contentProxy
->expects($this->exactly(2))
->method('updateEntry')
->will($this->throwException(new \Exception()));
$res = $wallabagV2Import->import();
$this->assertTrue($res);
$this->assertEquals(['skipped' => 24, 'imported' => 0], $wallabagV2Import->getSummary());
}
} }