Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7189067d38 | |||
| de286dc3cd |
@ -41,7 +41,8 @@ matrix:
|
||||
# exclude v1 branches
|
||||
branches:
|
||||
except:
|
||||
- legacy
|
||||
- master
|
||||
- dev
|
||||
|
||||
before_script:
|
||||
- if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
|
||||
|
||||
58
CHANGELOG.md
@ -2,64 +2,6 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [2.0.4] - 2016-05-07
|
||||
|
||||
### Added
|
||||
|
||||
- [#2016](https://github.com/wallabag/wallabag/pull/2016) Big updates in [our documentation](http://doc.wallabag.org/en/master/) (Nicolas Lœuillet)
|
||||
- [#2028](https://github.com/wallabag/wallabag/pull/2028) Documentation about android application (Strubbl)
|
||||
- [#2019](https://github.com/wallabag/wallabag/pull/2019) Italian translation (Daniele Conca)
|
||||
- [#2011](https://github.com/wallabag/wallabag/pull/2011) Documentation about wallabag upgrade (biva)
|
||||
- [#1985](https://github.com/wallabag/wallabag/pull/1985) Documentation about rights access (FoxMaSk)
|
||||
- [#1969](https://github.com/wallabag/wallabag/pull/1969) Third resources for API in documentation (Nicolas Lœuillet)
|
||||
- [#1967](https://github.com/wallabag/wallabag/pull/1967) FAQ page in documentation (Nicolas Lœuillet)
|
||||
|
||||
### Changed
|
||||
|
||||
- [#1977](https://github.com/wallabag/wallabag/pull/1977) Spanish documentation (jami7)
|
||||
|
||||
### Fixed
|
||||
|
||||
- [#2023](https://github.com/wallabag/wallabag/pull/2023) Fix translation for validators (Nicolas Lœuillet)
|
||||
- [#2020](https://github.com/wallabag/wallabag/pull/2020) Fix number of entries in tag/list (Nicolas Lœuillet)
|
||||
- [#2022](https://github.com/wallabag/wallabag/pull/2022) Fix pagination bar on small devices (Nicolas Lœuillet)
|
||||
- [#2013](https://github.com/wallabag/wallabag/pull/2013) Fix tag listing (Nicolas Lœuillet)
|
||||
- [#1976](https://github.com/wallabag/wallabag/pull/1976) Fix filter reading time (Nicolas Lœuillet)
|
||||
- [#2005](https://github.com/wallabag/wallabag/pull/2005) Fix reading speed not defined when user was created via config page (Nicolas Lœuillet)
|
||||
- [#2010](https://github.com/wallabag/wallabag/pull/2010) Set the title via POST /api/entries (Nicolas Lœuillet)
|
||||
|
||||
## [2.0.3] - 2016-04-22
|
||||
|
||||
### Added
|
||||
|
||||
- [#1962](https://github.com/wallabag/wallabag/pull/1962) cURL examples in documentation about API (Dirk Deimeke)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Forgot `composer.lock` file in 2.0.2 release so some users may encounter `Fatal error: Out of memory` error during installation
|
||||
|
||||
## [2.0.2] - 2016-04-21
|
||||
|
||||
### Added
|
||||
|
||||
- [#1945](https://github.com/wallabag/wallabag/pull/1945) cURL examples in documentation about API (Dirk Deimeke)
|
||||
- [#1911](https://github.com/wallabag/wallabag/pull/1911) Add title hover on entry titles (Thomas Citharel)
|
||||
|
||||
### Changed
|
||||
|
||||
- [#1944](https://github.com/wallabag/wallabag/pull/1944), [#1953](https://github.com/wallabag/wallabag/pull/1953), [#1954](https://github.com/wallabag/wallabag/pull/1954) Due to branches renaming, update documentation and configuration (maxi62330, Nicolas Lœuillet)
|
||||
- [#1942](https://github.com/wallabag/wallabag/pull/1942) Optimize import (Nicolas Lœuillet)
|
||||
- [#1935](https://github.com/wallabag/wallabag/pull/1935) Update spanish translation (jami7)
|
||||
- [#1929](https://github.com/wallabag/wallabag/pull/1929) Change guid and link in RSS feeds to give original entry URL (Nicolas Lœuillet)
|
||||
- [#1918](https://github.com/wallabag/wallabag/pull/1918) Improve pagination when user has lot of entries (Nicolas Lœuillet)
|
||||
- [#1916](https://github.com/wallabag/wallabag/pull/1916) Change PHP arrays and move test parameters in a separated file (Jeremy Benoist)
|
||||
|
||||
### Fixed
|
||||
|
||||
- [#1957](https://github.com/wallabag/wallabag/pull/1957) Fix translation for `Go to your account` button (Nicolas Lœuillet)
|
||||
- [#1925](https://github.com/wallabag/wallabag/pull/1925) Redirect to homepage if refered is null (Nicolas Lœuillet)
|
||||
- [#1912](https://github.com/wallabag/wallabag/pull/1912) Fix 500 Internal Server Error -> "Setting piwik_enabled couldn't be found" (Jeremy Benoist)
|
||||
|
||||
## [2.0.1] - 2016-04-11
|
||||
### Added
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
[](https://travis-ci.org/wallabag/wallabag)
|
||||
[](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
|
||||
[](https://travis-ci.org/wallabag/wallabag)
|
||||
[](https://scrutinizer-ci.com/g/wallabag/wallabag/?branch=v2)
|
||||
[](https://gitter.im/wallabag/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
|
||||
cd wallabag
|
||||
git checkout 2.0.4
|
||||
git checkout 2.0.1
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
php bin/console server:run --env=prod
|
||||
|
||||
@ -22,22 +22,19 @@ class AppKernel extends Kernel
|
||||
new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
|
||||
new Nelmio\CorsBundle\NelmioCorsBundle(),
|
||||
new Liip\ThemeBundle\LiipThemeBundle(),
|
||||
new Wallabag\CoreBundle\WallabagCoreBundle(),
|
||||
new Wallabag\ApiBundle\WallabagApiBundle(),
|
||||
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
|
||||
new Lexik\Bundle\FormFilterBundle\LexikFormFilterBundle(),
|
||||
new FOS\OAuthServerBundle\FOSOAuthServerBundle(),
|
||||
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
||||
new Scheb\TwoFactorBundle\SchebTwoFactorBundle(),
|
||||
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
|
||||
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
||||
new Craue\ConfigBundle\CraueConfigBundle(),
|
||||
new Lexik\Bundle\MaintenanceBundle\LexikMaintenanceBundle(),
|
||||
new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(),
|
||||
|
||||
// wallabag bundles
|
||||
new Wallabag\CoreBundle\WallabagCoreBundle(),
|
||||
new Wallabag\ApiBundle\WallabagApiBundle(),
|
||||
new Wallabag\UserBundle\WallabagUserBundle(),
|
||||
new Wallabag\ImportBundle\WallabagImportBundle(),
|
||||
new Wallabag\AnnotationBundle\WallabagAnnotationBundle(),
|
||||
];
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
download_pictures: Descargar imágenes
|
||||
download_pictures: Descagar imagenes
|
||||
carrot: Activar compartir con Carrot
|
||||
diaspora_url: Diaspora URL, si el servicio está activado
|
||||
diaspora_url: Diaspora URL, si el servicio esta activado
|
||||
export_epub: Activar exportación a ePub
|
||||
export_mobi: Activar exportación a .mobi
|
||||
export_pdf: Activar exportación a PDF
|
||||
@ -14,7 +14,7 @@ share_diaspora: Activar compartir con Diaspora
|
||||
share_mail: Activar compartir con email
|
||||
share_shaarli: Activar compartir con Shaarli
|
||||
share_twitter: Activar compartir con Twitter
|
||||
show_printlink: Mostrar un enlace para imprimir contenido
|
||||
show_printlink: Mostrar un link para imprimir contenido
|
||||
wallabag_support_url: URL de soporte de wallabag
|
||||
wallabag_url: URL de *tu* instancia de wallabag
|
||||
entry: "artículo"
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
download_pictures: Scarica le immagini sul tuo server
|
||||
carrot: Abilita la condivisione su Carrot
|
||||
diaspora_url: Diaspora URL, se il servizio è abilitato
|
||||
export_epub: Abilita esportazione ePub
|
||||
export_mobi: Abilita esportazione .mobi
|
||||
export_pdf: Abilita esportazione PDF
|
||||
export_csv: Abilita esportazione CSV
|
||||
export_json: Abilita esportazione JSON
|
||||
export_txt: Abilita esportazione TXT
|
||||
export_xml: Abilita esportazione XML
|
||||
pocket_consumer_key: Consumer key per Pocket per importare i contenuti (https://getpocket.com/developer/docs/authentication)
|
||||
shaarli_url: Shaarli URL, if the service is enabled
|
||||
share_diaspora: Abilita la condivisione su Diaspora
|
||||
share_mail: Abilita la condivisione per email
|
||||
share_shaarli: Abilita la condivisione su Shaarli
|
||||
share_twitter: Abilita la condivisione su Twitter
|
||||
show_printlink: Mostra un collegamento per stampare il contenuto
|
||||
wallabag_support_url: URL di supporto per wallabag
|
||||
wallabag_url: URL della *tua* installazione di wallabag
|
||||
entry: "articolo"
|
||||
export: "esporta"
|
||||
import: "importa"
|
||||
misc: "misc"
|
||||
modify_settings: "applica"
|
||||
piwik_host: Host del tuo sito in Piwik
|
||||
piwik_site_id: ID del tuo sito in Piwik
|
||||
piwik_enabled: Abilita Piwik
|
||||
demo_mode_enabled: "Enable demo mode ? (only used for the wallabag public demo)"
|
||||
demo_mode_username: "Utente Demo"
|
||||
@ -1,2 +1,2 @@
|
||||
set :branch, 'master'
|
||||
set :branch, 'v2'
|
||||
set :deploy_to, '/var/www/v2.wallabag.org/web/'
|
||||
|
||||
@ -28,7 +28,7 @@ framework:
|
||||
assets: ~
|
||||
|
||||
wallabag_core:
|
||||
version: 2.0.4
|
||||
version: 2.0.1
|
||||
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
|
||||
languages:
|
||||
en: 'English'
|
||||
@ -41,7 +41,6 @@ wallabag_core:
|
||||
da: 'Dansk'
|
||||
es: 'Español'
|
||||
oc: 'Occitan'
|
||||
it: 'Italiano'
|
||||
items_on_page: 12
|
||||
theme: material
|
||||
language: en
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
imports:
|
||||
- { resource: config_dev.yml }
|
||||
- { resource: parameters_test.yml }
|
||||
|
||||
framework:
|
||||
test: ~
|
||||
|
||||
@ -19,6 +19,14 @@ parameters:
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: 127.0.0.1
|
||||
test_database_port: ~
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: 127.0.0.1
|
||||
test_database_port: null
|
||||
test_database_name: null
|
||||
test_database_user: null
|
||||
test_database_password: null
|
||||
test_database_path: '%kernel.root_dir%/../data/db/wallabag_testYO.sqlite'
|
||||
@ -6,7 +6,7 @@ services:
|
||||
filesystem_cache:
|
||||
class: Doctrine\Common\Cache\FilesystemCache
|
||||
arguments:
|
||||
- "%kernel.cache_dir%/doctrine/metadata"
|
||||
- %kernel.cache_dir%/doctrine/metadata
|
||||
|
||||
twig.extension.text:
|
||||
class: Twig_Extensions_Extension_Text
|
||||
|
||||
37
app/config/tests/parameters.yml.dist.mysql
Normal file
@ -0,0 +1,37 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_mysql
|
||||
test_database_host: localhost
|
||||
test_database_port: 3306
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: root
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
37
app/config/tests/parameters.yml.dist.pgsql
Normal file
@ -0,0 +1,37 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_pgsql
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: travis
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
37
app/config/tests/parameters.yml.dist.sqlite
Normal file
@ -0,0 +1,37 @@
|
||||
# This file is a "template" of what your parameters.yml file should look like
|
||||
parameters:
|
||||
database_driver: pdo_sqlite
|
||||
database_host: 127.0.0.1
|
||||
database_port: ~
|
||||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/../data/db/wallabag.sqlite"
|
||||
database_table_prefix: wallabag_
|
||||
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_test.sqlite"
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
mailer_user: ~
|
||||
mailer_password: ~
|
||||
|
||||
locale: en
|
||||
|
||||
# A secret key that's used to generate certain security-related tokens
|
||||
secret: ThisTokenIsNotSoSecretChangeIt
|
||||
|
||||
# two factor stuff
|
||||
twofactor_auth: true
|
||||
twofactor_sender: no-reply@wallabag.org
|
||||
|
||||
# fosuser stuff
|
||||
fosuser_confirmation: true
|
||||
|
||||
from_email: no-reply@wallabag.org
|
||||
@ -1,8 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_mysql
|
||||
test_database_host: localhost
|
||||
test_database_port: 3306
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: root
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
@ -1,8 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_pgsql
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: wallabag_test
|
||||
test_database_user: travis
|
||||
test_database_password: ~
|
||||
test_database_path: ~
|
||||
@ -1,8 +0,0 @@
|
||||
parameters:
|
||||
test_database_driver: pdo_sqlite
|
||||
test_database_host: localhost
|
||||
test_database_port:
|
||||
test_database_name: ~
|
||||
test_database_user: ~
|
||||
test_database_password: ~
|
||||
test_database_path: "%kernel.root_dir%/../data/db/wallabag_testHU.sqlite"
|
||||
12
build.xml
@ -42,8 +42,8 @@
|
||||
<target name="db_mysql" description="Run test for MySQL">
|
||||
<delete dir="${basedir}/app/config/parameters.yml"/>
|
||||
<exec executable="cp">
|
||||
<arg value="${basedir}/app/config/tests/parameters_test.mysql.yml"/>
|
||||
<arg value="${basedir}/app/config/parameters_test.yml"/>
|
||||
<arg value="${basedir}/app/config/tests/parameters.yml.dist.mysql"/>
|
||||
<arg value="${basedir}/app/config/parameters.yml"/>
|
||||
</exec>
|
||||
|
||||
<exec executable="php">
|
||||
@ -56,8 +56,8 @@
|
||||
<target name="db_sqlite" description="Run test for SQLite">
|
||||
<delete dir="${basedir}/app/config/parameters.yml"/>
|
||||
<exec executable="cp">
|
||||
<arg value="${basedir}/app/config/tests/parameters_test.sqlite.yml"/>
|
||||
<arg value="${basedir}/app/config/parameters_test.yml"/>
|
||||
<arg value="${basedir}/app/config/tests/parameters.yml.dist.sqlite"/>
|
||||
<arg value="${basedir}/app/config/parameters.yml"/>
|
||||
</exec>
|
||||
|
||||
<exec executable="php">
|
||||
@ -70,8 +70,8 @@
|
||||
<target name="db_pgsql" description="Run test for PostgreSQL">
|
||||
<delete dir="${basedir}/app/config/parameters.yml"/>
|
||||
<exec executable="cp">
|
||||
<arg value="${basedir}/app/config/tests/parameters_test.pgsql.yml"/>
|
||||
<arg value="${basedir}/app/config/parameters_test.yml"/>
|
||||
<arg value="${basedir}/app/config/tests/parameters.yml.dist.pgsql"/>
|
||||
<arg value="${basedir}/app/config/parameters.yml"/>
|
||||
</exec>
|
||||
|
||||
<exec executable="php">
|
||||
|
||||
@ -58,6 +58,7 @@
|
||||
"friendsofsymfony/rest-bundle": "~1.4",
|
||||
"jms/serializer-bundle": "~1.0",
|
||||
"nelmio/api-doc-bundle": "~2.7",
|
||||
"ezyang/htmlpurifier": "~4.6",
|
||||
"mgargano/simplehtmldom": "~1.5",
|
||||
"tecnickcom/tcpdf": "~6.2",
|
||||
"simplepie/simplepie": "~1.3.1",
|
||||
@ -80,8 +81,7 @@
|
||||
"craue/config-bundle": "~1.4",
|
||||
"mnapoli/piwik-twig-extension": "^1.0",
|
||||
"lexik/maintenance-bundle": "~2.1",
|
||||
"ocramius/proxy-manager": "1.*",
|
||||
"white-october/pagerfanta-bundle": "^1.0"
|
||||
"ocramius/proxy-manager": "1.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/doctrine-fixtures-bundle": "~2.2",
|
||||
|
||||
279
composer.lock
generated
@ -4,8 +4,8 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"hash": "13098bd7c43a673e99a14d6ed8148962",
|
||||
"content-hash": "ed86235df64938684b50427919c0aea7",
|
||||
"hash": "ba30b73585f433f82b458cbc382ad137",
|
||||
"content-hash": "241710c2b913269e8e7dff9edb379cef",
|
||||
"packages": [
|
||||
{
|
||||
"name": "behat/transliterator",
|
||||
@ -1004,6 +1004,50 @@
|
||||
],
|
||||
"time": "2016-01-05 21:34:58"
|
||||
},
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
"version": "v4.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
||||
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40",
|
||||
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"HTMLPurifier": "library/"
|
||||
},
|
||||
"files": [
|
||||
"library/HTMLPurifier.composer.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Edward Z. Yang",
|
||||
"email": "admin@htmlpurifier.org",
|
||||
"homepage": "http://ezyang.com"
|
||||
}
|
||||
],
|
||||
"description": "Standards compliant HTML filter written in PHP",
|
||||
"homepage": "http://htmlpurifier.org/",
|
||||
"keywords": [
|
||||
"html"
|
||||
],
|
||||
"time": "2015-08-05 01:03:42"
|
||||
},
|
||||
{
|
||||
"name": "friendsofsymfony/oauth-server-bundle",
|
||||
"version": "1.5.2",
|
||||
@ -1078,16 +1122,16 @@
|
||||
},
|
||||
{
|
||||
"name": "friendsofsymfony/oauth2-php",
|
||||
"version": "1.2.1",
|
||||
"version": "1.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/FriendsOfSymfony/oauth2-php.git",
|
||||
"reference": "fa2aecb1fca2a03fd5f9aca19fe9adb9dfff928c"
|
||||
"reference": "4ae0a2aa85566146ef6f0f7169854c49e0c9243a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/FriendsOfSymfony/oauth2-php/zipball/fa2aecb1fca2a03fd5f9aca19fe9adb9dfff928c",
|
||||
"reference": "fa2aecb1fca2a03fd5f9aca19fe9adb9dfff928c",
|
||||
"url": "https://api.github.com/repos/FriendsOfSymfony/oauth2-php/zipball/4ae0a2aa85566146ef6f0f7169854c49e0c9243a",
|
||||
"reference": "4ae0a2aa85566146ef6f0f7169854c49e0c9243a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1100,7 +1144,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.2.x-dev"
|
||||
"dev-master": "1.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -1128,7 +1172,7 @@
|
||||
"oauth",
|
||||
"oauth2"
|
||||
],
|
||||
"time": "2016-03-31 14:24:17"
|
||||
"time": "2015-12-21 11:32:17"
|
||||
},
|
||||
{
|
||||
"name": "friendsofsymfony/rest-bundle",
|
||||
@ -1222,12 +1266,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/FriendsOfSymfony/FOSUserBundle.git",
|
||||
"reference": "def27463609e24af410b2606f0062de46fab5662"
|
||||
"reference": "16b04c49af05dd3fb381e4abe04f0e5e231ac76d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/def27463609e24af410b2606f0062de46fab5662",
|
||||
"reference": "def27463609e24af410b2606f0062de46fab5662",
|
||||
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/16b04c49af05dd3fb381e4abe04f0e5e231ac76d",
|
||||
"reference": "16b04c49af05dd3fb381e4abe04f0e5e231ac76d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1283,7 +1327,7 @@
|
||||
"keywords": [
|
||||
"User management"
|
||||
],
|
||||
"time": "2016-04-28 10:51:07"
|
||||
"time": "2016-03-08 11:05:28"
|
||||
},
|
||||
{
|
||||
"name": "gedmo/doctrine-extensions",
|
||||
@ -2698,16 +2742,16 @@
|
||||
},
|
||||
{
|
||||
"name": "j0k3r/graby",
|
||||
"version": "1.4.1",
|
||||
"version": "1.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/j0k3r/graby.git",
|
||||
"reference": "d4b8d3c4f55c8f7fbf5bccd8822c321bf6b9a147"
|
||||
"reference": "461731eb9c2db848ec102b473703cb6f4220f589"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/j0k3r/graby/zipball/d4b8d3c4f55c8f7fbf5bccd8822c321bf6b9a147",
|
||||
"reference": "d4b8d3c4f55c8f7fbf5bccd8822c321bf6b9a147",
|
||||
"url": "https://api.github.com/repos/j0k3r/graby/zipball/461731eb9c2db848ec102b473703cb6f4220f589",
|
||||
"reference": "461731eb9c2db848ec102b473703cb6f4220f589",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2722,8 +2766,7 @@
|
||||
"php": ">=5.4",
|
||||
"simplepie/simplepie": "^1.3.1",
|
||||
"smalot/pdfparser": "~0.9.24",
|
||||
"symfony/options-resolver": "~2.6|~3.0",
|
||||
"true/punycode": "~2.0"
|
||||
"symfony/options-resolver": "~2.6|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"satooshi/php-coveralls": "~0.6"
|
||||
@ -2751,20 +2794,20 @@
|
||||
}
|
||||
],
|
||||
"description": "Graby helps you extract article content from web pages",
|
||||
"time": "2016-04-24 18:43:00"
|
||||
"time": "2016-02-12 08:30:42"
|
||||
},
|
||||
{
|
||||
"name": "j0k3r/graby-site-config",
|
||||
"version": "1.0.17",
|
||||
"version": "1.0.16",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/j0k3r/graby-site-config.git",
|
||||
"reference": "64dcf3358ce2a2c4993164ea31be10366fe0dc43"
|
||||
"reference": "553fb65e75f2df9514f606758f105855994abaec"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/64dcf3358ce2a2c4993164ea31be10366fe0dc43",
|
||||
"reference": "64dcf3358ce2a2c4993164ea31be10366fe0dc43",
|
||||
"url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/553fb65e75f2df9514f606758f105855994abaec",
|
||||
"reference": "553fb65e75f2df9514f606758f105855994abaec",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2787,7 +2830,7 @@
|
||||
}
|
||||
],
|
||||
"description": "Graby site config files",
|
||||
"time": "2016-04-24 18:04:59"
|
||||
"time": "2016-04-10 19:15:54"
|
||||
},
|
||||
{
|
||||
"name": "j0k3r/php-readability",
|
||||
@ -3387,16 +3430,16 @@
|
||||
},
|
||||
{
|
||||
"name": "lexik/form-filter-bundle",
|
||||
"version": "v5.0.1",
|
||||
"version": "v5.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/lexik/LexikFormFilterBundle.git",
|
||||
"reference": "1eb8f523a607f5c2fac947af363ceb8beca5a57c"
|
||||
"reference": "dbc3c81600d2334a3408b37dccc3627d2019472c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/lexik/LexikFormFilterBundle/zipball/1eb8f523a607f5c2fac947af363ceb8beca5a57c",
|
||||
"reference": "1eb8f523a607f5c2fac947af363ceb8beca5a57c",
|
||||
"url": "https://api.github.com/repos/lexik/LexikFormFilterBundle/zipball/dbc3c81600d2334a3408b37dccc3627d2019472c",
|
||||
"reference": "dbc3c81600d2334a3408b37dccc3627d2019472c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3443,7 +3486,7 @@
|
||||
"filter",
|
||||
"form"
|
||||
],
|
||||
"time": "2016-04-20 08:53:41"
|
||||
"time": "2016-01-11 17:05:05"
|
||||
},
|
||||
{
|
||||
"name": "lexik/maintenance-bundle",
|
||||
@ -3694,16 +3737,16 @@
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "1.19.0",
|
||||
"version": "1.18.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Seldaek/monolog.git",
|
||||
"reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf"
|
||||
"reference": "064b38c16790249488e7a8b987acf1c9d7383c09"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/5f56ed5212dc509c8dc8caeba2715732abb32dbf",
|
||||
"reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/064b38c16790249488e7a8b987acf1c9d7383c09",
|
||||
"reference": "064b38c16790249488e7a8b987acf1c9d7383c09",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3768,7 +3811,7 @@
|
||||
"logging",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2016-04-12 18:29:35"
|
||||
"time": "2016-04-02 13:12:58"
|
||||
},
|
||||
{
|
||||
"name": "neitanod/forceutf8",
|
||||
@ -4325,16 +4368,16 @@
|
||||
},
|
||||
{
|
||||
"name": "react/promise",
|
||||
"version": "v2.4.1",
|
||||
"version": "v2.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/reactphp/promise.git",
|
||||
"reference": "8025426794f1944de806618671d4fa476dc7626f"
|
||||
"reference": "f942da7b505d1a294284ab343d05df42d02ad6d9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/reactphp/promise/zipball/8025426794f1944de806618671d4fa476dc7626f",
|
||||
"reference": "8025426794f1944de806618671d4fa476dc7626f",
|
||||
"url": "https://api.github.com/repos/reactphp/promise/zipball/f942da7b505d1a294284ab343d05df42d02ad6d9",
|
||||
"reference": "f942da7b505d1a294284ab343d05df42d02ad6d9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4365,20 +4408,20 @@
|
||||
}
|
||||
],
|
||||
"description": "A lightweight implementation of CommonJS Promises/A for PHP",
|
||||
"time": "2016-05-03 17:50:52"
|
||||
"time": "2016-03-31 13:10:33"
|
||||
},
|
||||
{
|
||||
"name": "scheb/two-factor-bundle",
|
||||
"version": "v2.2.1",
|
||||
"version": "v2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/scheb/two-factor-bundle.git",
|
||||
"reference": "a68d5baa31ba1cd8af2e2c668024b3211c5c0aaf"
|
||||
"reference": "524faa717bdc3c8823e045e8fd8c23b6a2b4dcac"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/scheb/two-factor-bundle/zipball/a68d5baa31ba1cd8af2e2c668024b3211c5c0aaf",
|
||||
"reference": "a68d5baa31ba1cd8af2e2c668024b3211c5c0aaf",
|
||||
"url": "https://api.github.com/repos/scheb/two-factor-bundle/zipball/524faa717bdc3c8823e045e8fd8c23b6a2b4dcac",
|
||||
"reference": "524faa717bdc3c8823e045e8fd8c23b6a2b4dcac",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4416,20 +4459,20 @@
|
||||
"two-factor",
|
||||
"two-step"
|
||||
],
|
||||
"time": "2016-05-07 08:24:18"
|
||||
"time": "2016-03-21 14:47:17"
|
||||
},
|
||||
{
|
||||
"name": "sensio/distribution-bundle",
|
||||
"version": "v5.0.6",
|
||||
"version": "v5.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
|
||||
"reference": "ffe306d09c1f2bad721237f63b2169d1b78253d0"
|
||||
"reference": "3a160355bb1364da55ed9e415c1aa1fa8d457b6f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/ffe306d09c1f2bad721237f63b2169d1b78253d0",
|
||||
"reference": "ffe306d09c1f2bad721237f63b2169d1b78253d0",
|
||||
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/3a160355bb1364da55ed9e415c1aa1fa8d457b6f",
|
||||
"reference": "3a160355bb1364da55ed9e415c1aa1fa8d457b6f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4468,7 +4511,7 @@
|
||||
"configuration",
|
||||
"distribution"
|
||||
],
|
||||
"time": "2016-04-25 20:50:31"
|
||||
"time": "2016-03-15 16:21:41"
|
||||
},
|
||||
{
|
||||
"name": "sensio/framework-extra-bundle",
|
||||
@ -4786,16 +4829,16 @@
|
||||
},
|
||||
{
|
||||
"name": "swiftmailer/swiftmailer",
|
||||
"version": "v5.4.2",
|
||||
"version": "v5.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/swiftmailer/swiftmailer.git",
|
||||
"reference": "d8db871a54619458a805229a057ea2af33c753e8"
|
||||
"reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/d8db871a54619458a805229a057ea2af33c753e8",
|
||||
"reference": "d8db871a54619458a805229a057ea2af33c753e8",
|
||||
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421",
|
||||
"reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4835,7 +4878,7 @@
|
||||
"mail",
|
||||
"mailer"
|
||||
],
|
||||
"time": "2016-05-01 08:45:47"
|
||||
"time": "2015-06-06 14:19:39"
|
||||
},
|
||||
{
|
||||
"name": "symfony/assetic-bundle",
|
||||
@ -4909,20 +4952,20 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/monolog-bundle",
|
||||
"version": "2.11.1",
|
||||
"version": "v2.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/monolog-bundle.git",
|
||||
"reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00"
|
||||
"reference": "82fd8f36e2cccbe94faf237403c48052d4d4b77e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00",
|
||||
"reference": "e7caf4936c7be82bc6d68df87f1d23a0d5bf6e00",
|
||||
"url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/82fd8f36e2cccbe94faf237403c48052d4d4b77e",
|
||||
"reference": "82fd8f36e2cccbe94faf237403c48052d4d4b77e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"monolog/monolog": "~1.18",
|
||||
"monolog/monolog": "~1.12",
|
||||
"php": ">=5.3.2",
|
||||
"symfony/config": "~2.3|~3.0",
|
||||
"symfony/dependency-injection": "~2.3|~3.0",
|
||||
@ -4937,7 +4980,7 @@
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.x-dev"
|
||||
"dev-master": "2.9.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -4965,7 +5008,7 @@
|
||||
"log",
|
||||
"logging"
|
||||
],
|
||||
"time": "2016-04-13 16:21:01"
|
||||
"time": "2016-03-13 15:55:56"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-icu",
|
||||
@ -5310,16 +5353,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/symfony",
|
||||
"version": "v3.0.5",
|
||||
"version": "v3.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/symfony.git",
|
||||
"reference": "10c83b58fbb42be516377de54962a758695ad964"
|
||||
"reference": "4e17cb2ecb3fd637097ebeb871fc0e2cbdd5e7ff"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/symfony/zipball/10c83b58fbb42be516377de54962a758695ad964",
|
||||
"reference": "10c83b58fbb42be516377de54962a758695ad964",
|
||||
"url": "https://api.github.com/repos/symfony/symfony/zipball/4e17cb2ecb3fd637097ebeb871fc0e2cbdd5e7ff",
|
||||
"reference": "4e17cb2ecb3fd637097ebeb871fc0e2cbdd5e7ff",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -5402,11 +5445,7 @@
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/",
|
||||
"Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/",
|
||||
"Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/",
|
||||
"Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/",
|
||||
"Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/",
|
||||
"Symfony\\Bridge\\": "src/Symfony/Bridge/",
|
||||
"Symfony\\Bundle\\": "src/Symfony/Bundle/",
|
||||
"Symfony\\Component\\": "src/Symfony/Component/"
|
||||
},
|
||||
@ -5436,7 +5475,7 @@
|
||||
"keywords": [
|
||||
"framework"
|
||||
],
|
||||
"time": "2016-05-03 05:58:56"
|
||||
"time": "2016-03-30 10:41:14"
|
||||
},
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
@ -5501,52 +5540,6 @@
|
||||
],
|
||||
"time": "2015-09-12 10:08:34"
|
||||
},
|
||||
{
|
||||
"name": "true/punycode",
|
||||
"version": "v2.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/true/php-punycode.git",
|
||||
"reference": "74fa01d4de396c40e239794123b3874cb594a30c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/true/php-punycode/zipball/74fa01d4de396c40e239794123b3874cb594a30c",
|
||||
"reference": "74fa01d4de396c40e239794123b3874cb594a30c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.7",
|
||||
"squizlabs/php_codesniffer": "~2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"TrueBV\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Renan Gonçalves",
|
||||
"email": "renan.saddam@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)",
|
||||
"homepage": "https://github.com/true/php-punycode",
|
||||
"keywords": [
|
||||
"idna",
|
||||
"punycode"
|
||||
],
|
||||
"time": "2016-01-07 17:12:58"
|
||||
},
|
||||
{
|
||||
"name": "twig/extensions",
|
||||
"version": "v1.3.0",
|
||||
@ -5706,58 +5699,6 @@
|
||||
"homepage": "https://github.com/wallabag/phpMobi",
|
||||
"time": "2015-10-16 08:42:42"
|
||||
},
|
||||
{
|
||||
"name": "white-october/pagerfanta-bundle",
|
||||
"version": "v1.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/whiteoctober/WhiteOctoberPagerfantaBundle.git",
|
||||
"reference": "ada62843d9ba0d3aa61d0dcc7becdb25a2e2f545"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/whiteoctober/WhiteOctoberPagerfantaBundle/zipball/ada62843d9ba0d3aa61d0dcc7becdb25a2e2f545",
|
||||
"reference": "ada62843d9ba0d3aa61d0dcc7becdb25a2e2f545",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"pagerfanta/pagerfanta": "1.0.*",
|
||||
"symfony/framework-bundle": "~2.3|~3.0",
|
||||
"symfony/property-access": "~2.3|~3.0",
|
||||
"symfony/twig-bundle": "~2.3|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~3.7",
|
||||
"symfony/symfony": "~2.3|~3.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WhiteOctober\\PagerfantaBundle\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Pablo Díez",
|
||||
"email": "pablodip@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Bundle to use Pagerfanta with Symfony2",
|
||||
"keywords": [
|
||||
"page",
|
||||
"paging"
|
||||
],
|
||||
"time": "2016-03-16 19:24:56"
|
||||
},
|
||||
{
|
||||
"name": "willdurand/hateoas",
|
||||
"version": "2.9.1",
|
||||
|
||||
0
docs/README.rst
Normal file
@ -69,12 +69,6 @@ You'll have this in return:
|
||||
|
||||
We'll work with the ``access_token`` value in our next calls.
|
||||
|
||||
cURL example:
|
||||
|
||||
::
|
||||
|
||||
curl -s "https://localhost:8000/oauth/v2/token?grant_type=password&client_id=1_3o53gl30vhgk0c8ks4cocww08o84448osgo40wgw4gwkoo8skc&client_secret=636ocbqo978ckw0gsw4gcwwocg8044sco0w8w84cws48ggogs4&username=wallabag&password=wallabag"
|
||||
|
||||
Getting existing entries
|
||||
------------------------
|
||||
|
||||
@ -126,12 +120,6 @@ returns:
|
||||
|
||||
The ``items`` array is empty.
|
||||
|
||||
cURL example:
|
||||
|
||||
::
|
||||
|
||||
curl --get "https://localhost:8000/api/entries.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA"
|
||||
|
||||
Adding your first entry
|
||||
-----------------------
|
||||
|
||||
@ -186,12 +174,6 @@ returns
|
||||
|
||||
Now, if you execute the previous command (see **Get existing entries**), you'll have data.
|
||||
|
||||
cURL example:
|
||||
|
||||
::
|
||||
|
||||
curl "https://localhost:8000/api/entries.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA&url=http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html"
|
||||
|
||||
Deleting an entry
|
||||
-----------------
|
||||
|
||||
@ -245,24 +227,9 @@ returns
|
||||
|
||||
And if you want to list the existing entries (see **Get existing entries**), the array is empty.
|
||||
|
||||
cURL example:
|
||||
|
||||
::
|
||||
|
||||
curl --request DELETE "https://localhost:8000/api/entries/1.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA"
|
||||
|
||||
Other methods
|
||||
-------------
|
||||
|
||||
We won't write samples for each API method.
|
||||
|
||||
Have a look on the listing here: http://localhost:8000/api/doc to know each method.
|
||||
|
||||
Third resources
|
||||
---------------
|
||||
|
||||
Some applications or libraries use our API. Here is a non-exhaustive list of them:
|
||||
|
||||
- `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ by Strubbl.
|
||||
- `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ by Julian Oster.
|
||||
- `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ by FoxMaSk, for his project `Trigger Happy <https://blog.trigger-happy.eu/>`_.
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
Contribute to this documentation
|
||||
================================
|
||||
|
||||
Sources of our documentation are here https://github.com/wallabag/wallabag/tree/master/docs
|
||||
|
||||
We use `ReadTheDocs
|
||||
<https://readthedocs.org>`__ to generate it.
|
||||
|
||||
Pages are written in `Restructured Text
|
||||
<https://en.wikipedia.org/wiki/ReStructuredText>`__ format. You can use online tools like http://rst.aaroniles.net/ or http://rst.ninjs.org/ to preview your articles.
|
||||
|
||||
If you create a new page, don't forget to edit the `index.rst <https://raw.githubusercontent.com/wallabag/wallabag/master/docs/en/index.rst>`__ file to add a link in the sidebar.
|
||||
@ -12,15 +12,15 @@ Translation files
|
||||
As wallabag is mainly developed by a French team, please consider that french
|
||||
translation is the most updated one and please copy it to create your own translation.
|
||||
|
||||
You can find translation files here: https://github.com/wallabag/wallabag/tree/master/src/Wallabag/CoreBundle/Resources/translations.
|
||||
You can find translation files here: https://github.com/wallabag/wallabag/tree/v2/src/Wallabag/CoreBundle/Resources/translations.
|
||||
|
||||
You have to create ``messages.CODE.yml`` and ``validators.CODE.yml``, where CODE
|
||||
You have to create ``messages.CODE.yml``, where CODE
|
||||
is the ISO 639-1 code of your language (`see wikipedia <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`__).
|
||||
|
||||
Other files to translate:
|
||||
|
||||
- https://github.com/wallabag/wallabag/tree/master/app/Resources/CraueConfigBundle/translations.
|
||||
- https://github.com/wallabag/wallabag/tree/master/app/Resources/FOSUserBundle/translations.
|
||||
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/CraueConfigBundle/translations.
|
||||
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/FOSUserBundle/translations.
|
||||
|
||||
You have to create ``THE_TRANSLATION_FILE.CODE.yml`` files.
|
||||
|
||||
@ -28,7 +28,7 @@ Configuration file
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You have to edit `app/config/config.yml
|
||||
<https://github.com/wallabag/wallabag/blob/master/app/config/config.yml>`__ to display
|
||||
<https://github.com/wallabag/wallabag/blob/v2/app/config/config.yml>`__ to display
|
||||
your language on Configuration page of wallabag (to allow users to switch to this new translation).
|
||||
|
||||
Under the ``wallabag_core.languages`` section, you have to add a new line with
|
||||
@ -55,6 +55,6 @@ wallabag documentation
|
||||
|
||||
Contrary to the web application, the main language for documentation is english.
|
||||
|
||||
Documentation files are stored here: https://github.com/wallabag/wallabag/tree/master/docs
|
||||
Documentation files are stored here: https://github.com/wallabag/wallabag/tree/v2/docs
|
||||
|
||||
You need to respect the ``en`` folder structure when you create your own translation.
|
||||
|
||||
@ -8,7 +8,7 @@ wallabag documentation
|
||||
**wallabag** is a read-it-later application: it saves a web page by
|
||||
keeping content only. Elements like navigation or ads are deleted.
|
||||
|
||||
.. tip::
|
||||
.. note::
|
||||
|
||||
This documentation is about wallabag v2. If you want to read documentation for wallabag v1, `please have a look here <https://github.com/wallabag/documentation>`__.
|
||||
|
||||
@ -23,21 +23,18 @@ The main documentation for this application is organized into a couple sections:
|
||||
:maxdepth: 2
|
||||
:caption: User documentation
|
||||
|
||||
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/import
|
||||
user/download_articles
|
||||
user/filters
|
||||
user/tags
|
||||
user/android
|
||||
|
||||
.. _dev-docs:
|
||||
|
||||
@ -47,6 +44,5 @@ The main documentation for this application is organized into a couple sections:
|
||||
|
||||
developer/api
|
||||
developer/docker
|
||||
developer/documentation
|
||||
developer/translate
|
||||
developer/maintenance
|
||||
|
||||
@ -1,107 +0,0 @@
|
||||
Android App
|
||||
===========
|
||||
|
||||
|
||||
Purpose of this document
|
||||
------------------------
|
||||
|
||||
This document describes how you can setup your Android application to work with your wallabag instance. There is no difference in this procedure for wallabag v1 or v2.
|
||||
|
||||
|
||||
Steps to configure your app
|
||||
---------------------------
|
||||
|
||||
When you first start the app, you see the welcome screen, where you are adviced to configure the app for your wallabag instance at first.
|
||||
|
||||
.. image:: ../../img/user/android_welcome_screen.de.png
|
||||
:alt: Welcome screen
|
||||
:align: center
|
||||
|
||||
Just confirm that message and you get redirected to the settings screen.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_screen.de.png
|
||||
:alt: Settings screen
|
||||
:align: center
|
||||
|
||||
Fill in your wallabag data. You need to enter your wallabag address. It is important that this URL does not end with a slash. Also add your wallabag credentials to the user name and password field.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_filled_in.de.png
|
||||
:alt: Filled in settings
|
||||
:align: center
|
||||
|
||||
After you have filled in your data, push the button Connection test and wait for the test to finish.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_connection_test.de.png
|
||||
:alt: Connection test with your wallabag data
|
||||
:align: center
|
||||
|
||||
The connection test shall finish with success. If not, you need to fix this first until you proceed.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_connection_test_success.de.png
|
||||
:alt: Connection test successful
|
||||
:align: center
|
||||
|
||||
After the connection test was successful, you can push the button to get your feed credentials. The app now tries to login to your wallabag instance and get the user id and the corresponding token for the feeds.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_get_feed_credentials.de.png
|
||||
:alt: Getting the feed credentials
|
||||
:align: center
|
||||
|
||||
When the process of getting your feed credentials finishes with success you see a toast message that the user id and the token were automatically filled in to the form.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_feed_credentials_automatically_filled_in.de.png
|
||||
:alt: Getting feed credentials successful
|
||||
:align: center
|
||||
|
||||
Now you need to scroll to the bottom of the settings menu. Of course you can adjust the given settings to your needs. Finish the configuration of your app with pushing the save button.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_scroll_bottom.de.png
|
||||
:alt: Bottom of the settings screen
|
||||
:align: center
|
||||
|
||||
After hitting the save button, you get the following screen. The app proposes to initiate a syncronisation process to update your feeds of articles. It is recommended to acknowledge this action and press Yes.
|
||||
|
||||
.. image:: ../../img/user/android_configuration_saved_feed_update.de.png
|
||||
:alt: Settings saved the first time
|
||||
:align: center
|
||||
|
||||
Finally after the syncronisation finished successfully, you are presented the list of unread articles.
|
||||
|
||||
.. image:: ../../img/user/android_unread_feed_synced.de.png
|
||||
:alt: Filled article list cause feeds successfully syncronized
|
||||
:align: center
|
||||
|
||||
|
||||
|
||||
Known limitations
|
||||
----
|
||||
|
||||
2FA
|
||||
~~~
|
||||
|
||||
Currently the does not support two-factor authentication. You should disable that to get the app working.
|
||||
|
||||
|
||||
Limited amount of articles with wallabag v2
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In your wallabag web instance you can configure how many items are part of the RSS feed. This option did not exist in wallabag v1, where all articles were part of the feed. So if you set the amount of articles being displayed greater than the number of items being content of your RSS feed, you will only see the number of items in your RSS feed.
|
||||
|
||||
|
||||
SSL/TLS encryption
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you can reach your wallabag web instance via HTTPS, you should use that. Especially if your HTTP URL redirects you to the HTTPS one. Currently, the app cannot handle that redirect properly.
|
||||
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
`Source code of the Android application <https://github.com/wallabag/android-app>`_
|
||||
|
||||
`Android Application on F-Droid <https://f-droid.org/repository/browse/?fdfilter=wallabag&fdid=fr.gaulupeau.apps.InThePoche>`_
|
||||
|
||||
`Android Application on Google Play <https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche>`_
|
||||
|
||||
`Support chat <https://gitter.im/wallabag/wallabag>`_
|
||||
|
||||
@ -23,3 +23,24 @@ Your account is now activated.
|
||||
.. image:: ../../img/user/activated_account.png
|
||||
:alt: Welcome on board!
|
||||
:align: center
|
||||
|
||||
Frequently asked questions
|
||||
--------------------------
|
||||
|
||||
I can't valid the registration form
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Make sure that all fields are well filled:
|
||||
|
||||
* valid email address
|
||||
* same passwords in two fields
|
||||
|
||||
I don't receive my activation email
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Are you sure your email address was correct? Did you check your spams folder?
|
||||
|
||||
When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You already enabled your account or the URL of the activation email is wrong.
|
||||
|
||||
@ -12,9 +12,9 @@ There may be several reasons:
|
||||
How can I help to fix that?
|
||||
---------------------------
|
||||
|
||||
- `by sending us an email with the article's URL <mailto:hello\@wallabag.org>`_
|
||||
- `by sending us an email with the article's URL <mailto:hello@wallabag.org>`_
|
||||
- by trying to fix this article by yourself :) by creating a file for the article.
|
||||
You can use `this tool <http://siteconfig.fivefilters.org/>`__.
|
||||
You can use this tool http://siteconfig.fivefilters.org/.
|
||||
|
||||
How can I try to re-fetch this article?
|
||||
---------------------------------------
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
Frequently Asked Questions
|
||||
==========================
|
||||
|
||||
During the installation, I've got this error ``Error Output: sh: 1: @post-cmd: not found``
|
||||
------------------------------------------------------------------------------------------
|
||||
|
||||
It seems you have a problem with your ``composer`` installation. Try to uninstall and reinstall it.
|
||||
|
||||
`Read the documentation about composer to know how to install it
|
||||
<https://getcomposer.org/doc/00-intro.md>`__.
|
||||
|
||||
I can't valid the registration form
|
||||
-----------------------------------
|
||||
|
||||
Make sure that all fields are well filled:
|
||||
|
||||
* valid email address
|
||||
* same passwords in two fields
|
||||
|
||||
I don't receive my activation email
|
||||
-----------------------------------
|
||||
|
||||
Are you sure your email address was correct? Did you check your spams folder?
|
||||
|
||||
When I click on the activation link, I've got this message: ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
|
||||
----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
You already enabled your account or the URL of the activation email is wrong.
|
||||
|
||||
I forgot my password
|
||||
--------------------
|
||||
|
||||
You can reset your password by clicking on ``Forgot your password?`` link,
|
||||
on the login page. Then, fill the form with your email address or your username,
|
||||
you'll receive an email to reset your password.
|
||||
@ -1,5 +1,42 @@
|
||||
Migrate from a third service
|
||||
============================
|
||||
Migrate to wallabag
|
||||
===================
|
||||
|
||||
From wallabag
|
||||
-------------
|
||||
|
||||
Export your data from your wallabag 1.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
On your config page, click on ``JSON export`` in the ``Export your wallabag data`` section.
|
||||
|
||||
.. image:: ../../img/user/export_wllbg_1.png
|
||||
:alt: Export from wallabag 1.x
|
||||
:align: center
|
||||
|
||||
You will have a ``wallabag-export-1-1970-01-01.json`` file.
|
||||
|
||||
Export your data from your wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
On the export sidebar, click on ``JSON``.
|
||||
|
||||
.. image:: ../../img/user/export_wllbg_2.png
|
||||
:alt: Export from wallabag 2.x
|
||||
:align: center
|
||||
|
||||
You will have a ``Unread articles.json`` file.
|
||||
|
||||
Import your data into wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Click on ``Import`` link in the menu, choose the right wallabag version,
|
||||
select your export file on your computer and import it.
|
||||
|
||||
.. image:: ../../img/user/import_wllbg.png
|
||||
:alt: Import from wallabag 1.x
|
||||
:align: center
|
||||
|
||||
All your wallabag articles will be imported.
|
||||
|
||||
From Pocket
|
||||
-----------
|
||||
@ -16,7 +53,7 @@ a new application on their developer website to continue.
|
||||
and submit your new application
|
||||
|
||||
Pocket will give you a **Consumer Key** (for example, `49961-985e4b92fe21fe4c78d682c1`).
|
||||
You need to configure the ``pocket_consumer_key`` into the ``Import`` section in the ``Internal settings`` menu.
|
||||
You need to configure the ``pocket_consumer_key`` into the ``app/config/parameters.yml`` file in wallabag.
|
||||
|
||||
Now, all is fine to migrate from Pocket.
|
||||
|
||||
|
||||
@ -34,9 +34,6 @@ and it's corresponding database server.
|
||||
Installation
|
||||
------------
|
||||
|
||||
On a dedicated web server (recommended way)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
wallabag uses a big number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you don't already have.
|
||||
|
||||
Install Composer:
|
||||
@ -45,7 +42,7 @@ Install Composer:
|
||||
|
||||
curl -s http://getcomposer.org/installer | php
|
||||
|
||||
You can find specific instructions `here <https://getcomposer.org/doc/00-intro.md>`__:
|
||||
You can find specific instructions here : __ https://getcomposer.org/doc/00-intro.md
|
||||
|
||||
To install wallabag itself, you must run these two commands:
|
||||
|
||||
@ -53,11 +50,11 @@ To install wallabag itself, you must run these two commands:
|
||||
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag
|
||||
git checkout 2.0.4
|
||||
git checkout 2.0.1
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
|
||||
To start PHP's build-in server and test if everything did install correctly, you can do:
|
||||
To start php's build-in server and test if everything did install correctly, you can do:
|
||||
|
||||
::
|
||||
|
||||
@ -65,48 +62,15 @@ To start PHP's build-in server and test if everything did install correctly, you
|
||||
|
||||
And access wallabag at http://yourserverip:8000
|
||||
|
||||
.. tip::
|
||||
.. note::
|
||||
|
||||
To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look to the `Symfony documentation <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__.
|
||||
To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look to the `Symfony documentation
|
||||
<http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__.
|
||||
|
||||
On a shared hosting
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
Installing on Apache
|
||||
--------------------
|
||||
|
||||
We provide you a package with all dependancies inside.
|
||||
The default configuration uses SQLite for the database. If you want to change these settings, please edit ``app/config/parameters.yml``.
|
||||
|
||||
We already created a user: login and password are ``wallabag``.
|
||||
|
||||
.. caution:: With this package, wallabag don't check mandatory extensions used in the application (theses checks are made during ``composer install`` when you have a dedicated web server, see above).
|
||||
|
||||
Execute this command to download and extract the latest package:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
Now, read the following documentation to create your virtual host, then access to your wallabag.
|
||||
If you changed the database configuration to use MySQL or PostgreSQL, you need to create a user via this command ``php bin/console wallabag:install --env=prod``.
|
||||
|
||||
Installation with Docker
|
||||
------------------------
|
||||
|
||||
We provide you a Docker image to install wallabag easily. Have a look to our repository on `Docker Hub <https://hub.docker.com/r/wallabag/wallabag/>`__ to have more information.
|
||||
|
||||
Command to launch container
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull wallabag/wallabag
|
||||
|
||||
Virtual hosts
|
||||
-------------
|
||||
|
||||
Configuration on Apache
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Assuming you install wallabag in the ``/var/www/wallabag`` folder and that you want to use PHP as an Apache module, here's a vhost for wallabag:
|
||||
Assuming you install wallabag in the /var/www/wallabag folder and that you want to use php as an Apache module, here's a vhost for wallabag:
|
||||
|
||||
::
|
||||
|
||||
@ -148,10 +112,10 @@ Assuming you install wallabag in the ``/var/www/wallabag`` folder and that you w
|
||||
|
||||
After reloading or restarting Apache, you should now be able to access wallabag at http://domain.tld.
|
||||
|
||||
Configuration on Nginx
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
Installing on Nginx
|
||||
-------------------
|
||||
|
||||
Assuming you install wallabag in the ``/var/www/wallabag`` folder, here's the recipe for wallabag :
|
||||
Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe for wallabag :
|
||||
|
||||
::
|
||||
|
||||
@ -188,67 +152,6 @@ Assuming you install wallabag in the ``/var/www/wallabag`` folder, here's the re
|
||||
|
||||
After reloading or restarting nginx, you should now be able to access wallabag at http://domain.tld.
|
||||
|
||||
.. tip::
|
||||
.. note::
|
||||
|
||||
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``.
|
||||
|
||||
Configuration on lighttpd
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe for wallabag (edit your ``lighttpd.conf`` file and paste this configuration into it):
|
||||
|
||||
::
|
||||
|
||||
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",
|
||||
)
|
||||
|
||||
Rights access to the folders of the project
|
||||
-------------------------------------------
|
||||
|
||||
Test environment
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
When we just want to test wallabag, we just run the command ``php bin/console server:run --env=prod`` to start our wallabag instance and everything will go smoothly because the user who started the project can access to the current folder naturally, without any problem.
|
||||
|
||||
Production environment
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
As soon as we use Apache or Nginx to access to our wallabag instance, and not from the command ``php bin/console server:run --env=prod`` to start it, we should take care to grant the good rights on the good folders to keep safe all the folders of the project.
|
||||
|
||||
To do so, the folder name, known as ``DocumentRoot`` (for apache) or ``root`` (for Nginx), has to be absolutely accessible by the Apache/Nginx user. Its name is generally ``www-data``, ``apache`` or ``nobody`` (depending on linux system used).
|
||||
|
||||
So the folder ``/var/www/wallabag/web`` has to be accessible by this last one. But this could be not enough if we just care about this folder, because we could meet a blank page or get an error 500 when trying to access to the homepage of the project.
|
||||
|
||||
This is due to the fact that we will need to grant the same rights access on the folder ``/var/www/wallabag/var`` like those we gave on the folder ``/var/www/wallabag/web``. Thus, we fix this problem with the following command:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
chown -R www-data:www-data /var/www/wallabag/var
|
||||
|
||||
@ -11,3 +11,13 @@ you can check the ``Keep me logged in`` checkbox: wallabag will remember you for
|
||||
.. image:: ../../img/user/login_form.png
|
||||
:alt: Login form
|
||||
:align: center
|
||||
|
||||
Frequently asked questions
|
||||
--------------------------
|
||||
|
||||
I forgot my password
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can reset your password by clicking on ``Forgot your password?`` link,
|
||||
on the login page. Then, fill the form with your email address or your username,
|
||||
you'll receive an email to reset your password.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
Migrate from v1 or v2
|
||||
=====================
|
||||
Migrate wallabag
|
||||
================
|
||||
|
||||
From wallabag 1.x
|
||||
-----------------
|
||||
@ -16,7 +16,7 @@ If you were using wallabag v1.x, you need to export your data before migrating t
|
||||
.. note::
|
||||
If you encounter issues during the export or the import, don't hesitate to `ask for support <https://www.wallabag.org/pages/support.html>`__.
|
||||
|
||||
When you have retrieved the json file containing your entries, you can install wallabag v2 if needed by following `the standard procedure <http://doc.wallabag.org/en/master/user/installation.html>`__.
|
||||
When you have retrieved the json file containing your entries, you can install wallabag v2 if needed by following `the standard procedure <http://doc.wallabag.org/en/v2/user/installation.html>`__.
|
||||
|
||||
After creating an user account on your new wallabag v2 instance, you must head over to the `Import` section and select `Import from wallabag v1`. Select your json file and upload it.
|
||||
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
Upgrade wallabag
|
||||
================
|
||||
|
||||
Upgrade on a dedicated web server
|
||||
---------------------------------
|
||||
|
||||
The last release is published on https://www.wallabag.org/pages/download-wallabag.html. In order to upgrade your wallabag installation and get the last version, run the following commands in you wallabag folder (replace ``2.0.3`` by the last release number):
|
||||
|
||||
::
|
||||
|
||||
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
|
||||
|
||||
Upgrade on a shared hosting
|
||||
---------------------------
|
||||
|
||||
Backup your ``app/config/parameters.yml`` file.
|
||||
|
||||
Download the last release of wallabag:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
Extract the archive in your wallabag folder and replace ``app/config/parameters.yml`` with yours.
|
||||
|
||||
If you use SQLite, you must also copy your ``data/`` folder inside the new installation.
|
||||
|
||||
Empty ``var/cache`` folder.
|
||||
@ -7,7 +7,7 @@ Pré-requis
|
||||
----------
|
||||
|
||||
* wallabag fraichement installé et disponible à http://localhost:8000
|
||||
* ``httpie`` installé sur votre ordinateur (`voir le site du projet <https://github.com/jkbrzt/httpie>`__). Vous pouvez également adapter les commandes en utilisant curl ou wget.
|
||||
* ``httpie`` installé sur votre ordinateur (`voir le site du projet <https://github.com/jkbrzt/httpie>`__). Vous pouvez également adapter les commandes en utilisant curl ou wget.
|
||||
* toutes les méthodes de l'API documentées ici http://localhost:8000/api/doc
|
||||
|
||||
Créer un nouveau client d'API
|
||||
@ -69,12 +69,6 @@ Vous obtiendrez :
|
||||
|
||||
Nous allons utiliser la valeur de ``access_token`` dans nos prochains appels.
|
||||
|
||||
Exemple cURL :
|
||||
|
||||
::
|
||||
|
||||
curl -s "https://localhost:8000/oauth/v2/token?grant_type=password&client_id=1_3o53gl30vhgk0c8ks4cocww08o84448osgo40wgw4gwkoo8skc&client_secret=636ocbqo978ckw0gsw4gcwwocg8044sco0w8w84cws48ggogs4&username=wallabag&password=wallabag"
|
||||
|
||||
Récupérer les articles existants
|
||||
--------------------------------
|
||||
|
||||
@ -126,12 +120,6 @@ retournera :
|
||||
|
||||
Le tableau ``items`` est vide.
|
||||
|
||||
Exemple cURL :
|
||||
|
||||
::
|
||||
|
||||
curl --get "https://localhost:8000/api/entries.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA"
|
||||
|
||||
Créer votre premier article
|
||||
---------------------------
|
||||
|
||||
@ -186,12 +174,6 @@ retournera :
|
||||
|
||||
Maintenant, si vous exécutez la précédente commande (voir **Récupérer les articles existants**), vous obtiendrez quelque chose.
|
||||
|
||||
Exemple cURL :
|
||||
|
||||
::
|
||||
|
||||
curl "https://localhost:8000/api/entries.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA&url=http://www.numerama.com/tech/160115-le-pocket-libre-wallabag-fait-le-plein-de-fonctionnalites.html"
|
||||
|
||||
Supprimer un article
|
||||
--------------------
|
||||
|
||||
@ -245,24 +227,9 @@ retournera :
|
||||
|
||||
Et si vous voulez voir la liste des articles existants (voir **Récupérer les articles existants**), le tableau sera vide.
|
||||
|
||||
Exemple cURL :
|
||||
|
||||
::
|
||||
|
||||
curl --request DELETE "https://localhost:8000/api/entries/1.html?access_token=ZGJmNTA2MDdmYTdmNWFiZjcxOWY3MWYyYzkyZDdlNWIzOTU4NWY3NTU1MDFjOTdhMTk2MGI3YjY1ZmI2NzM5MA"
|
||||
|
||||
Autres méthodes
|
||||
---------------
|
||||
|
||||
Nous n'écrirons pas d'exemples pour toutes les méthodes de l'API.
|
||||
|
||||
Jetez un œil à la liste complète ici http://localhost:8000/api/doc pour connaitre chaque méthode.
|
||||
|
||||
Ressources tierces
|
||||
------------------
|
||||
|
||||
Certaines applications ou bibliothèques utilisent notre API. En voici une liste non exhaustive :
|
||||
|
||||
- `Java wrapper for the wallabag API <https://github.com/Strubbl/wallabag-java>`_ par Strubbl.
|
||||
- `.NET library for the wallabag v2 API <https://github.com/jlnostr/wallabag-api>`_ par Julian Oster.
|
||||
- `Python API for wallabag <https://github.com/foxmask/wallabag_api>`_ par FoxMaSk, pour son projet `Trigger Happy <https://blog.trigger-happy.eu/>`_.
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
Contribuer à cette documentation
|
||||
================================
|
||||
|
||||
Les sources de notre documentation sont ici https://github.com/wallabag/wallabag/tree/master/docs
|
||||
|
||||
Nous utilisons `ReadTheDocs
|
||||
<https://readthedocs.org>`__ pour la générer.
|
||||
|
||||
Les pages sont écrites au format `Restructured Text
|
||||
<https://fr.wikipedia.org/wiki/ReStructuredText>`__. Vous pouvez utiliser des outils en ligne comme http://rst.aaroniles.net/ ou http://rst.ninjs.org/ pour prévisualiser vos articles.
|
||||
|
||||
Si vous créez une nouvelle page, n'oubliez pas d'éditer le fichier `index.rst <https://raw.githubusercontent.com/wallabag/wallabag/master/docs/en/index.rst>`__ pour ajouter un lien dans la barre latérale.
|
||||
@ -13,15 +13,15 @@ Fichiers de traductions
|
||||
cette traduction qui est considérée comme la plus récente. Merci de vous baser
|
||||
sur celle-ci pour créer votre traduction.
|
||||
|
||||
Les principaux fichiers de traduction se trouvent ici : https://github.com/wallabag/wallabag/tree/master/src/Wallabag/CoreBundle/Resources/translations.
|
||||
Les principaux fichiers de traduction se trouvent ici : https://github.com/wallabag/wallabag/tree/v2/src/Wallabag/CoreBundle/Resources/translations.
|
||||
|
||||
Vous devez créer les fichiers ``messages.CODE.yml`` et ``validators.CODE.yml``,
|
||||
Vous devez créer le fichier ``messages.CODE.yml``,
|
||||
où CODE est le code ISO 639-1 de votre langue (`cf wikipedia <https://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1>`__).
|
||||
|
||||
Autres fichiers à traduire :
|
||||
|
||||
- https://github.com/wallabag/wallabag/tree/master/app/Resources/CraueConfigBundle/translations.
|
||||
- https://github.com/wallabag/wallabag/tree/master/app/Resources/FOSUserBundle/translations.
|
||||
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/CraueConfigBundle/translations.
|
||||
- https://github.com/wallabag/wallabag/tree/v2/app/Resources/FOSUserBundle/translations.
|
||||
|
||||
Vous devez créer les fichiers ``LE_FICHIER_DE_TRADUCTION.CODE.yml``.
|
||||
|
||||
@ -29,7 +29,7 @@ Fichier de configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Vous devez éditer `app/config/config.yml
|
||||
<https://github.com/wallabag/wallabag/blob/master/app/config/config.yml>`__ pour
|
||||
<https://github.com/wallabag/wallabag/blob/v2/app/config/config.yml>`__ pour
|
||||
afficher votre langue dans la page Configuration de wallabag (pour permettre aux
|
||||
utilisateurs de choisir cette nouvelle traduction).
|
||||
|
||||
@ -57,6 +57,6 @@ Documentation de wallabag
|
||||
|
||||
Contrairement à l'application, la langue principale de la documentation est l'anglais
|
||||
|
||||
Les fichiers de documentation se trouvent ici : https://github.com/wallabag/wallabag/tree/master/docs
|
||||
Les fichiers de documentation se trouvent ici : https://github.com/wallabag/wallabag/tree/v2/docs
|
||||
|
||||
Vous devez respecter la structure du dossier ``en`` quand vous crééz votre traduction.
|
||||
|
||||
@ -9,7 +9,7 @@ Documentation de wallabag
|
||||
simplement d’archiver une page web en ne conservant que le contenu. Les
|
||||
éléments superflus (menu, publicité, etc.) sont supprimés.
|
||||
|
||||
.. tip::
|
||||
.. note::
|
||||
|
||||
Vous vous trouvez sur la documentation de wallabag v2. Si vous voulez lire la documentation de wallabag v1, `vous pouvez jeter un œil ici <https://github.com/wallabag/documentation>`__.
|
||||
|
||||
@ -24,17 +24,15 @@ La documentation principale de cette application est découpée en plusieurs sec
|
||||
:maxdepth: 2
|
||||
:caption: Documentation utilisateur
|
||||
|
||||
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/import
|
||||
user/download_articles
|
||||
user/filters
|
||||
user/tags
|
||||
@ -47,6 +45,5 @@ La documentation principale de cette application est découpée en plusieurs sec
|
||||
|
||||
developer/api
|
||||
developer/docker
|
||||
developer/documentation
|
||||
developer/translate
|
||||
developer/maintenance
|
||||
|
||||
@ -23,3 +23,24 @@ Votre compte est maintenant actif.
|
||||
.. image:: ../../img/user/activated_account.png
|
||||
:alt: Bienvenue à bord !
|
||||
:align: center
|
||||
|
||||
Foire aux questions
|
||||
-------------------
|
||||
|
||||
Je ne peux pas valider le formulaire de création de compte
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Soyez sur d'avoir bien renseigné tous les champs :
|
||||
|
||||
* une adresse email valide
|
||||
* le même mot de passe dans les deux champs
|
||||
|
||||
Je n'ai pas reçu mon email d'activation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Êtes-vous sur d'avoir renseigné votre bonne adresse ? Avez-vous vérifié le dossier de spams ?
|
||||
|
||||
Quand je clique sur le lien d'activation, j'ai ce message : ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Vous avez déjà activé votre compte ou l'URL d'activation n'est pas correcte.
|
||||
|
||||
@ -12,9 +12,9 @@ Il peut y avoir plusieurs raisons :
|
||||
Comment puis-je aider pour réparer ça ?
|
||||
---------------------------------------
|
||||
|
||||
- `en nous envoyant un email avec l'URL de l'article <mailto:hello\@wallabag.org>`_
|
||||
- `en nous envoyant un email avec l'URL de l'article <mailto:hello@wallabag.org>`_
|
||||
- en essayant de réparer cet article par vous-même :) en créant un fichier pour l'article.
|
||||
Vous pouvez utiliser `cet outil <http://siteconfig.fivefilters.org/>`__.
|
||||
Vous pouvez utiliser cet outil http://siteconfig.fivefilters.org/.
|
||||
|
||||
Comment puis-je réessayer de récupérer le contenu ?
|
||||
---------------------------------------------------
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
Foire Aux Questions
|
||||
===================
|
||||
|
||||
Durant l'installation, je rencontre cette erreur ``Error Output: sh: 1: @post-cmd: not found``
|
||||
----------------------------------------------------------------------------------------------
|
||||
|
||||
Il semblerait que vous ayiez un problème avec votre installation de ``composer``. Essayez de le désinstaller puis de le réinstaller.
|
||||
|
||||
`Vous pouvez lire la documentation de composer pour savoir comment l'installer
|
||||
<https://getcomposer.org/doc/00-intro.md>`__.
|
||||
|
||||
Je ne peux pas valider le formulaire de création de compte
|
||||
----------------------------------------------------------
|
||||
|
||||
Soyez sur d'avoir bien renseigné tous les champs :
|
||||
|
||||
* une adresse email valide
|
||||
* le même mot de passe dans les deux champs
|
||||
|
||||
Je n'ai pas reçu mon email d'activation
|
||||
---------------------------------------
|
||||
|
||||
Êtes-vous sur d'avoir renseigné votre bonne adresse ? Avez-vous vérifié le dossier de spams ?
|
||||
|
||||
Quand je clique sur le lien d'activation, j'ai ce message : ``The user with confirmation token "DtrOPfbQeVkWf6N" does not exist``.
|
||||
----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Vous avez déjà activé votre compte ou l'URL d'activation n'est pas correcte.
|
||||
|
||||
J'ai oublié mon mot de passe
|
||||
----------------------------
|
||||
|
||||
Vous pouvez réinitialiser votre mot de passe en cliquant sur ``Mot de passe oublié ?``,
|
||||
sur la page de connexion. Ensuite, renseignez votre adresse email ou votre nom d'utilisateur,
|
||||
un email vous sera envoyé.
|
||||
@ -1,5 +1,42 @@
|
||||
Migrer depuis un service externe
|
||||
================================
|
||||
Migrer à wallabag
|
||||
=================
|
||||
|
||||
Depuis wallabag
|
||||
---------------
|
||||
|
||||
Exportez vos données de wallabag 1.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Sur la page de configuration, cliquez sur ``Export JSON`` dans la section ``Exportez vos données wallabag``.
|
||||
|
||||
.. image:: ../../img/user/export_wllbg_1.png
|
||||
:alt: Export depuis wallabag 1.x
|
||||
:align: center
|
||||
|
||||
Vous obtiendrez un fichier ``wallabag-export-1-1970-01-01.json``.
|
||||
|
||||
Exportez vos données de wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Dans la barre latérale de téléchargement, cliquez sur ``JSON``.
|
||||
|
||||
.. image:: ../../img/user/export_wllbg_2.png
|
||||
:alt: Export depuis wallabag 2.x
|
||||
:align: center
|
||||
|
||||
Vous obtiendrez un fichier ``Unread articles.json``.
|
||||
|
||||
Importez vos données wallabag 2.x
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Cliquez sur le lien ``Importer`` dans le menu, choisissez la version de wallabag correspondante,
|
||||
sélectionnez votre fichier d'export sur votre ordinateur et importez-le.
|
||||
|
||||
.. image:: ../../img/user/import_wllbg.png
|
||||
:alt: Import depuis wallabag 1.x
|
||||
:align: center
|
||||
|
||||
Tous vos articles wallabag seront importés.
|
||||
|
||||
Depuis Pocket
|
||||
-------------
|
||||
@ -16,7 +53,7 @@ Vous devez créer une nouvelle application sur leur site dédié aux développeu
|
||||
termes d'utilisation du service et soumettez votre application
|
||||
|
||||
Pocket vous fournira une **Consumer Key** (par exemple, `49961-985e4b92fe21fe4c78d682c1`).
|
||||
Vous devez configurer la ``pocket_consumer_key`` dans la section ``Import`` du menu ``Configuration interne``.
|
||||
Vous devez configurer la ``pocket_consumer_key`` dans le fichier ``app/config/parameters.yml``.
|
||||
|
||||
Maintenant, tout est bien configuré pour migrer depuis Pocket.
|
||||
|
||||
|
||||
@ -32,9 +32,6 @@ wallabag utilise PDO afin de se connecter à une base de données, donc vous aur
|
||||
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.
|
||||
|
||||
Installation de Composer :
|
||||
@ -43,7 +40,7 @@ Installation de Composer :
|
||||
|
||||
curl -s http://getcomposer.org/installer | php
|
||||
|
||||
Vous pouvez trouver des instructions spécifiques `ici (en anglais) <https://getcomposer.org/doc/00-intro.md>`__ :
|
||||
Vous pouvez trouver des instructions spécifiques ici (en anglais) : __ https://getcomposer.org/doc/00-intro.md
|
||||
|
||||
Pour installer wallabag, vous devez exécuter ces deux commandes :
|
||||
|
||||
@ -51,7 +48,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes :
|
||||
|
||||
git clone https://github.com/wallabag/wallabag.git
|
||||
cd wallabag
|
||||
git checkout 2.0.4
|
||||
git checkout 2.0.1
|
||||
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
|
||||
php bin/console wallabag:install --env=prod
|
||||
|
||||
@ -63,47 +60,15 @@ Pour démarrer le serveur interne à php et vérifier que tout s'est installé c
|
||||
|
||||
Et accéder wallabag à l'adresse http://lipdevotreserveur:8000
|
||||
|
||||
.. tip::
|
||||
Pour définir des paramètres via des variables d'environnement, vous pouvez les spécifier avec le préfixe ``SYMFONY__``. Par exemple, ``SYMFONY__DATABASE_DRIVER``. Vous pouvez lire `documentation Symfony <http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__ pour en savoir plus.
|
||||
.. note::
|
||||
|
||||
Sur un serveur mutualisé
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Pour définir des paramètres via des variables d'environnement, vous pouvez les spécifier avec le préfixe ``SYMFONY__``. Par exemple, ``SYMFONY__DATABASE_DRIVER``. Vous pouvez lire `documentation Symfony
|
||||
<http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__ pour en savoir plus.
|
||||
|
||||
Nous mettons à votre disposition une archive avec toutes les dépendances à l'intérieur.
|
||||
La configuration par défaut utilise SQLite pour la base de données. Si vous souhaitez changer ces paramètres, vous devez modifier le fichier ``app/config/parameters.yml``.
|
||||
|
||||
Nous avons déjà créé un utilisateur : le login et le mot de passe sont ``wallabag``.
|
||||
|
||||
.. caution:: Avec cette archive, wallabag ne vérifie pas si les extensions obligatoires sont présentes sur votre serveur pour bien fonctionner (ces vérifications sont faites durant le ``composer install`` quand vous avez un serveur dédié, voir ci-dessus).
|
||||
|
||||
Exécutez cette commande pour télécharger et décompresser l'archive :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
Maintenant, lisez la documentation ci-dessous pour crééer un virtual host. Accédez ensuite à votre installation de wallabag.
|
||||
Si vous avez changé la configuration pour modifier le type de stockage (MySQL ou PostgreSQL), vous devrez vous créer un utilisateur via la commande ``php bin/console wallabag:install --env=prod``.
|
||||
|
||||
Installation avec Docker
|
||||
Installation avec Apache
|
||||
------------------------
|
||||
|
||||
Nous vous proposons une image Docker pour installer wallabag facilement. Allez voir du côté de `Docker Hub <https://hub.docker.com/r/wallabag/wallabag/>`__ pour plus d'informations.
|
||||
|
||||
Commande pour démarrer le containeur
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull wallabag/wallabag
|
||||
|
||||
Virtual hosts
|
||||
-------------
|
||||
|
||||
Configuration avec Apache
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wallabag`` et que vous utilisiez PHP comme un module Apache, voici un vhost pour wallabag :
|
||||
En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallabag et que vous utilisiez php comme un module Apache, voici un vhost pour wallabag :
|
||||
|
||||
::
|
||||
|
||||
@ -145,10 +110,10 @@ En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wall
|
||||
|
||||
Après que vous ayez rechargé/redémarré Apache, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld.
|
||||
|
||||
Configuration avec Nginx
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Installation avec Nginx
|
||||
-----------------------
|
||||
|
||||
En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wallabag``, voici un fichier de configuration Nginx pour wallabag :
|
||||
En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallabag, voici un fichier de configuration Nginx pour wallabag :
|
||||
|
||||
::
|
||||
|
||||
@ -185,67 +150,6 @@ En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wall
|
||||
|
||||
Après que vous ayez rechargé/redémarré Nginx, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld.
|
||||
|
||||
.. tip::
|
||||
.. note::
|
||||
|
||||
Si vous voulez importer un fichier important dans wallabag, vous devez ajouter cette ligne dans votre configuration nginx ``client_max_body_size XM; # allows file uploads up to X megabytes``.
|
||||
|
||||
Configuration avec lighttpd
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
En imaginant que vous vouliez installer wallabag dans le dossier ``/var/www/wallabag``, voici un fichier de configuration pour wallabag (éditez votre fichier ``lighttpd.conf`` collez-y cette configuration) :
|
||||
|
||||
::
|
||||
|
||||
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",
|
||||
)
|
||||
|
||||
Droits d'accès aux dossiers du projet
|
||||
-------------------------------------
|
||||
|
||||
Environnement de test
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Quand nous souhaitons juste tester wallabag, nous lançons simplement la commande ``php bin/console server:run --env=prod`` pour démarrer l'instance wallabag et tout se passe correctement car l'utilisateur qui a démarré le projet a accès naturellement au repertoire courant, tout va bien.
|
||||
|
||||
Environnement de production
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Dès lors que nous utilisons Apache ou Nginx pour accéder à notre instance wallabag, et non plus la commande ``php bin/console server:run --env=prod`` pour la démarrer, il faut prendre garde à octroyer les bons droits aux bons dossiers afin de préserver la sécurité de l'ensemble des fichiers fournis par le projet.
|
||||
|
||||
Aussi, le dossier, connu sous le nom de ``DocumentRoot`` (pour apache) ou ``root`` (pour Nginx), doit être impérativement accessible par l'utilisateur de Apache ou Nginx. Le nom de cet utilisateur est généralement ``www-data``, ``apache`` ou ``nobody`` (selon les systèmes linux utilisés).
|
||||
|
||||
Donc le dossier ``/var/www/wallabag/web`` doit être accessible par ce dernier. Mais cela ne suffira pas si nous nous contentons de ce dossier, et nous pourrions avoir, au mieux une page blanche en accédant à la page d'accueil du projet, au pire une erreur 500.
|
||||
|
||||
Cela est dû au fait qu'il faut aussi octroyer les mêmes droits d'accès au dossier ``/var/www/wallabag/var`` que ceux octroyés au dossier ``/var/www/wallabag/web``. Ainsi, on règle le problème par la commande suivante :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
chown -R www-data:www-data /var/www/wallabag/var
|
||||
|
||||
@ -11,3 +11,13 @@ vous pouvez cocher la case ``Restez connecté`` : wallabag se souviendra de vous
|
||||
.. image:: ../../img/user/login_form.png
|
||||
:alt: Formulaire de connexion
|
||||
:align: center
|
||||
|
||||
Foire aux questions
|
||||
-------------------
|
||||
|
||||
J'ai oublié mon mot de passe
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Vous pouvez réinitialiser votre mot de passe en cliquant sur ``Mot de passe oublié ?``,
|
||||
sur la page de connexion. Ensuite, renseignez votre adresse email ou votre nom d'utilisateur,
|
||||
un email vous sera envoyé.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
Migrer depuis la v1 ou la v2
|
||||
============================
|
||||
Migrer wallabag
|
||||
===============
|
||||
|
||||
Depuis wallabag 1.x
|
||||
-------------------
|
||||
@ -16,7 +16,7 @@ Si vous utilisiez wallabag v1.x, vous devez exporter vos données avant de migre
|
||||
.. note::
|
||||
S'il vous arrive des problèmes durant l'export ou l'import, n'hésitez pas à `demander de l'aide <https://www.wallabag.org/pages/support.html>`__.
|
||||
|
||||
Une fois que vous avez récupéré le fichier json contenant vos données, vous pouvez installer wallabag v2 si c'est nécessaire en suivant `la procédure standard <http://doc.wallabag.org/fr/master/user/installation.html>`__.
|
||||
Une fois que vous avez récupéré le fichier json contenant vos données, vous pouvez installer wallabag v2 si c'est nécessaire en suivant `la procédure standard <http://doc.wallabag.org/fr/v2/user/installation.html>`__.
|
||||
|
||||
Une fois que vous avez créé un compte utilisateur sur votre nouvelle instance de wallabag v2, rendez-vous dans la section `Import`. Vous devez choisir l'import depuis wallabag v1 puis sélectionner votre fichier json récupéré précédemment.
|
||||
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
Mettre à jour wallabag
|
||||
======================
|
||||
|
||||
Mise à jour sur un serveur dédié
|
||||
--------------------------------
|
||||
|
||||
La dernière version de wallabag est publiée à cette adresse : https://www.wallabag.org/pages/download-wallabag.html. Pour mettre à jour votre installation de wallabag, exécutez les commandes suivantes dans votre répertoire d'installation (remplacez ``2.0.3`` par le numéro de la dernière version) :
|
||||
|
||||
::
|
||||
|
||||
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
|
||||
|
||||
Mise à jour sur un hébergement mutualisé
|
||||
----------------------------------------
|
||||
|
||||
Effectuez une sauvegarde du fichier ``app/config/parameters.yml``.
|
||||
|
||||
Téléchargez la dernière version de wallabag :
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
wget http://wllbg.org/latest-v2-package && tar xvf latest-v2-package
|
||||
|
||||
Décompressez l'archive dans votre répertoire d'installation et remplacez le fichier ``app/config/parameters.yml`` avec le votre.
|
||||
|
||||
Si vous utilisez SQLite, vous devez également conserver le contenu du répertoire ``data/``.
|
||||
|
||||
Videz le répertoire ``var/cache``.
|
||||
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 47 KiB |
@ -30,7 +30,7 @@ class WallabagAnnotationController extends FOSRestController
|
||||
->getRepository('WallabagAnnotationBundle:Annotation')
|
||||
->findAnnotationsByPageId($entry->getId(), $this->getUser()->getId());
|
||||
$total = count($annotationRows);
|
||||
$annotations = ['total' => $total, 'rows' => $annotationRows];
|
||||
$annotations = array('total' => $total, 'rows' => $annotationRows);
|
||||
|
||||
$json = $this->get('serializer')->serialize($annotations, 'json');
|
||||
|
||||
@ -141,6 +141,6 @@ class WallabagAnnotationController extends FOSRestController
|
||||
*/
|
||||
private function renderJsonResponse($json, $code = 200)
|
||||
{
|
||||
return new Response($json, $code, ['application/json']);
|
||||
return new Response($json, $code, array('application/json'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,13 +35,13 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneByUsernameAndNotArchived('admin');
|
||||
|
||||
$headers = ['CONTENT_TYPE' => 'application/json'];
|
||||
$content = json_encode([
|
||||
$headers = array('CONTENT_TYPE' => 'application/json');
|
||||
$content = json_encode(array(
|
||||
'text' => 'my annotation',
|
||||
'quote' => 'my quote',
|
||||
'ranges' => ['start' => '', 'startOffset' => 24, 'end' => '', 'endOffset' => 31],
|
||||
]);
|
||||
$crawler = $this->client->request('POST', 'annotations/'.$entry->getId().'.json', [], [], $headers, $content);
|
||||
'ranges' => array('start' => '', 'startOffset' => 24, 'end' => '', 'endOffset' => 31),
|
||||
));
|
||||
$crawler = $this->client->request('POST', 'annotations/'.$entry->getId().'.json', array(), array(), $headers, $content);
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -69,11 +69,11 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
|
||||
|
||||
$this->logInAs('admin');
|
||||
|
||||
$headers = ['CONTENT_TYPE' => 'application/json'];
|
||||
$content = json_encode([
|
||||
$headers = array('CONTENT_TYPE' => 'application/json');
|
||||
$content = json_encode(array(
|
||||
'text' => 'a modified annotation',
|
||||
]);
|
||||
$crawler = $this->client->request('PUT', 'annotations/'.$annotation->getId().'.json', [], [], $headers, $content);
|
||||
));
|
||||
$crawler = $this->client->request('PUT', 'annotations/'.$annotation->getId().'.json', array(), array(), $headers, $content);
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
@ -99,11 +99,11 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
|
||||
|
||||
$this->logInAs('admin');
|
||||
|
||||
$headers = ['CONTENT_TYPE' => 'application/json'];
|
||||
$content = json_encode([
|
||||
$headers = array('CONTENT_TYPE' => 'application/json');
|
||||
$content = json_encode(array(
|
||||
'text' => 'a modified annotation',
|
||||
]);
|
||||
$crawler = $this->client->request('DELETE', 'annotations/'.$annotation->getId().'.json', [], [], $headers, $content);
|
||||
));
|
||||
$crawler = $this->client->request('DELETE', 'annotations/'.$annotation->getId().'.json', array(), array(), $headers, $content);
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
|
||||
@ -26,10 +26,10 @@ abstract class WallabagAnnotationTestCase extends WebTestCase
|
||||
{
|
||||
$crawler = $this->client->request('GET', '/login');
|
||||
$form = $crawler->filter('button[type=submit]')->form();
|
||||
$data = [
|
||||
$data = array(
|
||||
'_username' => $username,
|
||||
'_password' => 'mypassword',
|
||||
];
|
||||
);
|
||||
|
||||
$this->client->submit($form, $data);
|
||||
}
|
||||
@ -48,7 +48,7 @@ abstract class WallabagAnnotationTestCase extends WebTestCase
|
||||
$loginManager = $container->get('fos_user.security.login_manager');
|
||||
$firewallName = $container->getParameter('fos_user.firewall_name');
|
||||
|
||||
$this->user = $userManager->findUserBy(['username' => 'admin']);
|
||||
$this->user = $userManager->findUserBy(array('username' => 'admin'));
|
||||
$loginManager->loginUser($firewallName, $this->user);
|
||||
|
||||
// save the login token into the session and put it in a cookie
|
||||
|
||||
@ -109,7 +109,6 @@ class WallabagRestController extends FOSRestController
|
||||
$this->validateAuthentication();
|
||||
|
||||
$url = $request->request->get('url');
|
||||
$title = $request->request->get('title');
|
||||
$isArchived = (int) $request->request->get('archive');
|
||||
$isStarred = (int) $request->request->get('starred');
|
||||
|
||||
@ -122,10 +121,6 @@ class WallabagRestController extends FOSRestController
|
||||
);
|
||||
}
|
||||
|
||||
if (!is_null($title)) {
|
||||
$entry->setTitle($title);
|
||||
}
|
||||
|
||||
$tags = $request->request->get('tags', '');
|
||||
if (!empty($tags)) {
|
||||
$this->get('wallabag_core.content_proxy')->assignTagsToEntry($entry, $tags);
|
||||
@ -389,6 +384,6 @@ class WallabagRestController extends FOSRestController
|
||||
*/
|
||||
private function renderJsonResponse($json)
|
||||
{
|
||||
return new Response($json, 200, ['application/json']);
|
||||
return new Response($json, 200, array('application/json'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,7 +13,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneBy(['user' => 1, 'isArchived' => false]);
|
||||
->findOneBy(array('user' => 1, 'isArchived' => false));
|
||||
|
||||
if (!$entry) {
|
||||
$this->markTestSkipped('No content found in db.');
|
||||
@ -44,7 +44,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneBy(['user' => 2, 'isArchived' => false]);
|
||||
->findOneBy(array('user' => 2, 'isArchived' => false));
|
||||
|
||||
if (!$entry) {
|
||||
$this->markTestSkipped('No content found in db.');
|
||||
@ -79,7 +79,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
public function testGetStarredEntries()
|
||||
{
|
||||
$this->client->request('GET', '/api/entries', ['star' => 1, 'sort' => 'updated']);
|
||||
$this->client->request('GET', '/api/entries', array('star' => 1, 'sort' => 'updated'));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -101,7 +101,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
public function testGetArchiveEntries()
|
||||
{
|
||||
$this->client->request('GET', '/api/entries', ['archive' => 1]);
|
||||
$this->client->request('GET', '/api/entries', array('archive' => 1));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -149,11 +149,10 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
public function testPostEntry()
|
||||
{
|
||||
$this->client->request('POST', '/api/entries.json', [
|
||||
$this->client->request('POST', '/api/entries.json', array(
|
||||
'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html',
|
||||
'tags' => 'google',
|
||||
'title' => 'New title for my article',
|
||||
]);
|
||||
));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -163,18 +162,17 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
$this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']);
|
||||
$this->assertEquals(false, $content['is_archived']);
|
||||
$this->assertEquals(false, $content['is_starred']);
|
||||
$this->assertEquals('New title for my article', $content['title']);
|
||||
$this->assertEquals(1, $content['user_id']);
|
||||
$this->assertCount(1, $content['tags']);
|
||||
}
|
||||
|
||||
public function testPostSameEntry()
|
||||
{
|
||||
$this->client->request('POST', '/api/entries.json', [
|
||||
$this->client->request('POST', '/api/entries.json', array(
|
||||
'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html',
|
||||
'archive' => '1',
|
||||
'tags' => 'google, apple',
|
||||
]);
|
||||
));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -189,11 +187,11 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
public function testPostArchivedAndStarredEntry()
|
||||
{
|
||||
$this->client->request('POST', '/api/entries.json', [
|
||||
$this->client->request('POST', '/api/entries.json', array(
|
||||
'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html',
|
||||
'archive' => '1',
|
||||
'starred' => '1',
|
||||
]);
|
||||
));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -208,11 +206,11 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
public function testPostArchivedAndStarredEntryWithoutQuotes()
|
||||
{
|
||||
$this->client->request('POST', '/api/entries.json', [
|
||||
$this->client->request('POST', '/api/entries.json', array(
|
||||
'url' => 'http://www.lemonde.fr/idees/article/2016/02/08/preserver-la-liberte-d-expression-sur-les-reseaux-sociaux_4861503_3232.html',
|
||||
'archive' => 0,
|
||||
'starred' => 1,
|
||||
]);
|
||||
));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -238,12 +236,12 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
// hydrate the tags relations
|
||||
$nbTags = count($entry->getTags());
|
||||
|
||||
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
|
||||
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', array(
|
||||
'title' => 'New awesome title',
|
||||
'tags' => 'new tag '.uniqid(),
|
||||
'starred' => '1',
|
||||
'archive' => '0',
|
||||
]);
|
||||
));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -270,12 +268,12 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
// hydrate the tags relations
|
||||
$nbTags = count($entry->getTags());
|
||||
|
||||
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', [
|
||||
$this->client->request('PATCH', '/api/entries/'.$entry->getId().'.json', array(
|
||||
'title' => 'New awesome title',
|
||||
'tags' => 'new tag '.uniqid(),
|
||||
'starred' => 1,
|
||||
'archive' => 0,
|
||||
]);
|
||||
));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -300,9 +298,9 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
$this->markTestSkipped('No content found in db.');
|
||||
}
|
||||
|
||||
$tags = [];
|
||||
$tags = array();
|
||||
foreach ($entry->getTags() as $tag) {
|
||||
$tags[] = ['id' => $tag->getId(), 'label' => $tag->getLabel(), 'slug' => $tag->getSlug()];
|
||||
$tags[] = array('id' => $tag->getId(), 'label' => $tag->getLabel(), 'slug' => $tag->getSlug());
|
||||
}
|
||||
|
||||
$this->client->request('GET', '/api/entries/'.$entry->getId().'/tags');
|
||||
@ -325,7 +323,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
$newTags = 'tag1,tag2,tag3';
|
||||
|
||||
$this->client->request('POST', '/api/entries/'.$entry->getId().'/tags', ['tags' => $newTags]);
|
||||
$this->client->request('POST', '/api/entries/'.$entry->getId().'/tags', array('tags' => $newTags));
|
||||
|
||||
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
@ -339,7 +337,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->find($entry->getId());
|
||||
|
||||
$tagsInDB = [];
|
||||
$tagsInDB = array();
|
||||
foreach ($entryDB->getTags()->toArray() as $tag) {
|
||||
$tagsInDB[$tag->getId()] = $tag->getLabel();
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ abstract class WallabagApiTestCase extends WebTestCase
|
||||
$loginManager = $container->get('fos_user.security.login_manager');
|
||||
$firewallName = $container->getParameter('fos_user.firewall_name');
|
||||
|
||||
$this->user = $userManager->findUserBy(['username' => 'admin']);
|
||||
$this->user = $userManager->findUserBy(array('username' => 'admin'));
|
||||
$loginManager->loginUser($firewallName, $this->user);
|
||||
|
||||
// save the login token into the session and put it in a cookie
|
||||
|
||||
@ -468,7 +468,7 @@ class InstallCommand extends ContainerAwareCommand
|
||||
|
||||
try {
|
||||
return in_array($databaseName, $schemaManager->listDatabases());
|
||||
} catch (\Doctrine\DBAL\Exception\DriverException $e) {
|
||||
} catch (\Doctrine\DBAL\Exception\ConnectionException $e) {
|
||||
// it means we weren't able to get database list, assume the database doesn't exist
|
||||
|
||||
return false;
|
||||
|
||||
@ -32,7 +32,7 @@ class ConfigController extends Controller
|
||||
$user = $this->getUser();
|
||||
|
||||
// handle basic config detail (this form is defined as a service)
|
||||
$configForm = $this->createForm(ConfigType::class, $config, ['action' => $this->generateUrl('config')]);
|
||||
$configForm = $this->createForm(ConfigType::class, $config, array('action' => $this->generateUrl('config')));
|
||||
$configForm->handleRequest($request);
|
||||
|
||||
if ($configForm->isValid()) {
|
||||
@ -52,7 +52,7 @@ class ConfigController extends Controller
|
||||
}
|
||||
|
||||
// handle changing password
|
||||
$pwdForm = $this->createForm(ChangePasswordType::class, null, ['action' => $this->generateUrl('config').'#set4']);
|
||||
$pwdForm = $this->createForm(ChangePasswordType::class, null, array('action' => $this->generateUrl('config').'#set4'));
|
||||
$pwdForm->handleRequest($request);
|
||||
|
||||
if ($pwdForm->isValid()) {
|
||||
@ -71,10 +71,10 @@ class ConfigController extends Controller
|
||||
}
|
||||
|
||||
// handle changing user information
|
||||
$userForm = $this->createForm(UserInformationType::class, $user, [
|
||||
'validation_groups' => ['Profile'],
|
||||
$userForm = $this->createForm(UserInformationType::class, $user, array(
|
||||
'validation_groups' => array('Profile'),
|
||||
'action' => $this->generateUrl('config').'#set3',
|
||||
]);
|
||||
));
|
||||
$userForm->handleRequest($request);
|
||||
|
||||
if ($userForm->isValid()) {
|
||||
@ -89,7 +89,7 @@ class ConfigController extends Controller
|
||||
}
|
||||
|
||||
// handle rss information
|
||||
$rssForm = $this->createForm(RssType::class, $config, ['action' => $this->generateUrl('config').'#set2']);
|
||||
$rssForm = $this->createForm(RssType::class, $config, array('action' => $this->generateUrl('config').'#set2'));
|
||||
$rssForm->handleRequest($request);
|
||||
|
||||
if ($rssForm->isValid()) {
|
||||
@ -106,7 +106,7 @@ class ConfigController extends Controller
|
||||
|
||||
// handle tagging rule
|
||||
$taggingRule = new TaggingRule();
|
||||
$newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $this->generateUrl('config').'#set5']);
|
||||
$newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, array('action' => $this->generateUrl('config').'#set5'));
|
||||
$newTaggingRule->handleRequest($request);
|
||||
|
||||
if ($newTaggingRule->isValid()) {
|
||||
@ -126,10 +126,10 @@ class ConfigController extends Controller
|
||||
$newUser = $userManager->createUser();
|
||||
// enable created user by default
|
||||
$newUser->setEnabled(true);
|
||||
$newUserForm = $this->createForm(NewUserType::class, $newUser, [
|
||||
'validation_groups' => ['Profile'],
|
||||
$newUserForm = $this->createForm(NewUserType::class, $newUser, array(
|
||||
'validation_groups' => array('Profile'),
|
||||
'action' => $this->generateUrl('config').'#set6',
|
||||
]);
|
||||
));
|
||||
$newUserForm->handleRequest($request);
|
||||
|
||||
if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
|
||||
@ -140,7 +140,6 @@ class ConfigController extends Controller
|
||||
$config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page'));
|
||||
$config->setRssLimit($this->getParameter('wallabag_core.rss_limit'));
|
||||
$config->setLanguage($this->getParameter('wallabag_core.language'));
|
||||
$config->setReadingSpeed($this->getParameter('wallabag_core.reading_speed'));
|
||||
|
||||
$em->persist($config);
|
||||
|
||||
@ -148,27 +147,27 @@ class ConfigController extends Controller
|
||||
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
$this->get('translator')->trans('flashes.config.notice.user_added', ['%username%' => $newUser->getUsername()])
|
||||
$this->get('translator')->trans('flashes.config.notice.user_added', array('%username%' => $newUser->getUsername()))
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('config').'#set6');
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Config:index.html.twig', [
|
||||
'form' => [
|
||||
return $this->render('WallabagCoreBundle:Config:index.html.twig', array(
|
||||
'form' => array(
|
||||
'config' => $configForm->createView(),
|
||||
'rss' => $rssForm->createView(),
|
||||
'pwd' => $pwdForm->createView(),
|
||||
'user' => $userForm->createView(),
|
||||
'new_user' => $newUserForm->createView(),
|
||||
'new_tagging_rule' => $newTaggingRule->createView(),
|
||||
],
|
||||
'rss' => [
|
||||
),
|
||||
'rss' => array(
|
||||
'username' => $user->getUsername(),
|
||||
'token' => $config->getRssToken(),
|
||||
],
|
||||
),
|
||||
'twofactor_auth' => $this->getParameter('twofactor_auth'),
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -188,7 +187,7 @@ class ConfigController extends Controller
|
||||
$em->flush();
|
||||
|
||||
if ($request->isXmlHttpRequest()) {
|
||||
return new JsonResponse(['token' => $config->getRssToken()]);
|
||||
return new JsonResponse(array('token' => $config->getRssToken()));
|
||||
}
|
||||
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
@ -230,7 +229,7 @@ class ConfigController extends Controller
|
||||
* Retrieve config for the current user.
|
||||
* If no config were found, create a new one.
|
||||
*
|
||||
* @return Config
|
||||
* @return Wallabag\CoreBundle\Entity\Config
|
||||
*/
|
||||
private function getConfig()
|
||||
{
|
||||
|
||||
@ -21,9 +21,9 @@ class DeveloperController extends Controller
|
||||
{
|
||||
$clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll();
|
||||
|
||||
return $this->render('WallabagCoreBundle:Developer:index.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Developer:index.html.twig', array(
|
||||
'clients' => $clients,
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -43,7 +43,7 @@ class DeveloperController extends Controller
|
||||
$clientForm->handleRequest($request);
|
||||
|
||||
if ($clientForm->isValid()) {
|
||||
$client->setAllowedGrantTypes(['token', 'authorization_code', 'password', 'refresh_token']);
|
||||
$client->setAllowedGrantTypes(array('token', 'authorization_code', 'password', 'refresh_token'));
|
||||
$em->persist($client);
|
||||
$em->flush();
|
||||
|
||||
@ -52,15 +52,15 @@ class DeveloperController extends Controller
|
||||
'flashes.developer.notice.client_created'
|
||||
);
|
||||
|
||||
return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', array(
|
||||
'client_id' => $client->getPublicId(),
|
||||
'client_secret' => $client->getSecret(),
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Developer:client.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Developer:client.html.twig', array(
|
||||
'form' => $clientForm->createView(),
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -54,10 +54,10 @@ class EntryController extends Controller
|
||||
if (false !== $existingEntry) {
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
$this->get('translator')->trans('flashes.entry.notice.entry_already_saved', ['%date%' => $existingEntry->getCreatedAt()->format('d-m-Y')])
|
||||
$this->get('translator')->trans('flashes.entry.notice.entry_already_saved', array('%date%' => $existingEntry->getCreatedAt()->format('d-m-Y')))
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
|
||||
return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId())));
|
||||
}
|
||||
|
||||
$this->updateEntry($entry);
|
||||
@ -69,9 +69,9 @@ class EntryController extends Controller
|
||||
return $this->redirect($this->generateUrl('homepage'));
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,12 +131,12 @@ class EntryController extends Controller
|
||||
'flashes.entry.notice.entry_updated'
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
|
||||
return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Entry:edit.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -257,17 +257,17 @@ class EntryController extends Controller
|
||||
$entries->setCurrentPage($page);
|
||||
} catch (OutOfRangeCurrentPageException $e) {
|
||||
if ($page > 1) {
|
||||
return $this->redirect($this->generateUrl($type, ['page' => $entries->getNbPages()]), 302);
|
||||
return $this->redirect($this->generateUrl($type, array('page' => $entries->getNbPages())), 302);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render(
|
||||
'WallabagCoreBundle:Entry:entries.html.twig',
|
||||
[
|
||||
array(
|
||||
'form' => $form->createView(),
|
||||
'entries' => $entries,
|
||||
'currentPage' => $page,
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -286,7 +286,7 @@ class EntryController extends Controller
|
||||
|
||||
return $this->render(
|
||||
'WallabagCoreBundle:Entry:entry.html.twig',
|
||||
['entry' => $entry]
|
||||
array('entry' => $entry)
|
||||
);
|
||||
}
|
||||
|
||||
@ -314,7 +314,7 @@ class EntryController extends Controller
|
||||
$message
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
|
||||
return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -344,9 +344,7 @@ class EntryController extends Controller
|
||||
$message
|
||||
);
|
||||
|
||||
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
|
||||
|
||||
return $this->redirect($redirectUrl);
|
||||
return $this->redirect($request->headers->get('referer'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -376,9 +374,7 @@ class EntryController extends Controller
|
||||
$message
|
||||
);
|
||||
|
||||
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
|
||||
|
||||
return $this->redirect($redirectUrl);
|
||||
return $this->redirect($request->headers->get('referer'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -398,7 +394,7 @@ class EntryController extends Controller
|
||||
// to avoid redirecting to the deleted entry. Ugh.
|
||||
$url = $this->generateUrl(
|
||||
'view',
|
||||
['id' => $entry->getId()],
|
||||
array('id' => $entry->getId()),
|
||||
UrlGeneratorInterface::ABSOLUTE_URL
|
||||
);
|
||||
|
||||
@ -412,11 +408,7 @@ class EntryController extends Controller
|
||||
);
|
||||
|
||||
// don't redirect user to the deleted entry
|
||||
$to = ($url !== $request->headers->get('referer') ? $request->headers->get('referer') : null);
|
||||
|
||||
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to);
|
||||
|
||||
return $this->redirect($redirectUrl);
|
||||
return $this->redirect($url !== $request->headers->get('referer') ? $request->headers->get('referer') : $this->generateUrl('homepage'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -434,11 +426,11 @@ class EntryController extends Controller
|
||||
/**
|
||||
* Check for existing entry, if it exists, redirect to it with a message.
|
||||
*
|
||||
* @param Entry $entry
|
||||
* @param $entry
|
||||
*
|
||||
* @return Entry|bool
|
||||
* @return array|bool
|
||||
*/
|
||||
private function checkIfEntryAlreadyExists(Entry $entry)
|
||||
private function checkIfEntryAlreadyExists($entry)
|
||||
{
|
||||
return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
|
||||
}
|
||||
|
||||
@ -16,15 +16,12 @@ class ExportController extends Controller
|
||||
/**
|
||||
* Gets one entry content.
|
||||
*
|
||||
* @param Entry $entry
|
||||
* @param string $format
|
||||
* @param Entry $entry
|
||||
*
|
||||
* @Route("/export/{id}.{format}", name="export_entry", requirements={
|
||||
* "format": "epub|mobi|pdf|json|xml|txt|csv",
|
||||
* "id": "\d+"
|
||||
* })
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function downloadEntryAction(Entry $entry, $format)
|
||||
{
|
||||
@ -41,15 +38,10 @@ class ExportController extends Controller
|
||||
/**
|
||||
* Export all entries for current user.
|
||||
*
|
||||
* @param string $format
|
||||
* @param string $category
|
||||
*
|
||||
* @Route("/export/{category}.{format}", name="export_entries", requirements={
|
||||
* "format": "epub|mobi|pdf|json|xml|txt|csv",
|
||||
* "category": "all|unread|starred|archive"
|
||||
* })
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function downloadEntriesAction($format, $category)
|
||||
{
|
||||
|
||||
@ -87,9 +87,9 @@ class RssController extends Controller
|
||||
$perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
|
||||
$entries->setMaxPerPage($perPage);
|
||||
|
||||
return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', [
|
||||
return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
|
||||
'type' => $type,
|
||||
'entries' => $entries,
|
||||
]);
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ class StaticController extends Controller
|
||||
{
|
||||
return $this->render(
|
||||
'WallabagCoreBundle:Static:howto.html.twig',
|
||||
[]
|
||||
array()
|
||||
);
|
||||
}
|
||||
|
||||
@ -25,10 +25,10 @@ class StaticController extends Controller
|
||||
{
|
||||
return $this->render(
|
||||
'WallabagCoreBundle:Static:about.html.twig',
|
||||
[
|
||||
array(
|
||||
'version' => $this->getParameter('wallabag_core.version'),
|
||||
'paypal_url' => $this->getParameter('wallabag_core.paypal_url'),
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ class StaticController extends Controller
|
||||
{
|
||||
return $this->render(
|
||||
'WallabagCoreBundle:Static:quickstart.html.twig',
|
||||
[]
|
||||
array()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ class TagController extends Controller
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Entry $entry
|
||||
*
|
||||
* @Route("/new-tag/{entry}", requirements={"entry" = "\d+"}, name="new_tag")
|
||||
*
|
||||
@ -39,13 +38,13 @@ class TagController extends Controller
|
||||
'flashes.tag.notice.tag_added'
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
|
||||
return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
|
||||
}
|
||||
|
||||
return $this->render('WallabagCoreBundle:Tag:new_form.html.twig', [
|
||||
return $this->render('WallabagCoreBundle:Tag:new_form.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
'entry' => $entry,
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,9 +64,7 @@ class TagController extends Controller
|
||||
}
|
||||
$em->flush();
|
||||
|
||||
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
|
||||
|
||||
return $this->redirect($redirectUrl);
|
||||
return $this->redirect($request->headers->get('referer'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -81,13 +78,13 @@ class TagController extends Controller
|
||||
{
|
||||
$tags = $this->getDoctrine()
|
||||
->getRepository('WallabagCoreBundle:Tag')
|
||||
->findAllTags($this->getUser()->getId());
|
||||
->findTags($this->getUser()->getId());
|
||||
|
||||
return $this->render(
|
||||
'WallabagCoreBundle:Tag:tags.html.twig',
|
||||
[
|
||||
array(
|
||||
'tags' => $tags,
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,14 +16,14 @@ class LoadTaggingRuleData extends AbstractFixture implements OrderedFixtureInter
|
||||
{
|
||||
$tr1 = new TaggingRule();
|
||||
$tr1->setRule('content matches "spurs"');
|
||||
$tr1->setTags(['sport']);
|
||||
$tr1->setTags(array('sport'));
|
||||
$tr1->setConfig($this->getReference('admin-config'));
|
||||
|
||||
$manager->persist($tr1);
|
||||
|
||||
$tr2 = new TaggingRule();
|
||||
$tr2->setRule('content matches "basket"');
|
||||
$tr2->setTags(['sport']);
|
||||
$tr2->setTags(array('sport'));
|
||||
$tr2->setConfig($this->getReference('admin-config'));
|
||||
|
||||
$manager->persist($tr2);
|
||||
|
||||
@ -117,16 +117,4 @@ class Tag
|
||||
{
|
||||
return $this->entries;
|
||||
}
|
||||
|
||||
public function getEntriesByUserId($userId)
|
||||
{
|
||||
$filteredEntries = new ArrayCollection();
|
||||
foreach ($this->entries as $entry) {
|
||||
if ($entry->getUser()->getId() === $userId) {
|
||||
$filteredEntries->add($entry);
|
||||
}
|
||||
}
|
||||
|
||||
return $filteredEntries;
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,9 +36,9 @@ class LocaleListener implements EventSubscriberInterface
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return [
|
||||
return array(
|
||||
// must be registered before the default Locale listener
|
||||
KernelEvents::REQUEST => [['onKernelRequest', 17]],
|
||||
];
|
||||
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,9 +28,9 @@ class RegistrationConfirmedListener implements EventSubscriberInterface
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return [
|
||||
return array(
|
||||
FOSUserEvents::REGISTRATION_CONFIRMED => 'authenticate',
|
||||
];
|
||||
);
|
||||
}
|
||||
|
||||
public function authenticate(FilterUserResponseEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null)
|
||||
|
||||
@ -15,28 +15,28 @@ class ChangePasswordType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('old_password', PasswordType::class, [
|
||||
'constraints' => new UserPassword(['message' => 'validator.password_wrong_value']),
|
||||
->add('old_password', PasswordType::class, array(
|
||||
'constraints' => new UserPassword(array('message' => 'validator.password_wrong_value')),
|
||||
'label' => 'config.form_password.old_password_label',
|
||||
])
|
||||
->add('new_password', RepeatedType::class, [
|
||||
))
|
||||
->add('new_password', RepeatedType::class, array(
|
||||
'type' => PasswordType::class,
|
||||
'invalid_message' => 'validator.password_must_match',
|
||||
'required' => true,
|
||||
'first_options' => ['label' => 'config.form_password.new_password_label'],
|
||||
'second_options' => ['label' => 'config.form_password.repeat_new_password_label'],
|
||||
'constraints' => [
|
||||
new Constraints\Length([
|
||||
'first_options' => array('label' => 'config.form_password.new_password_label'),
|
||||
'second_options' => array('label' => 'config.form_password.repeat_new_password_label'),
|
||||
'constraints' => array(
|
||||
new Constraints\Length(array(
|
||||
'min' => 8,
|
||||
'minMessage' => 'validator.password_too_short',
|
||||
]),
|
||||
)),
|
||||
new Constraints\NotBlank(),
|
||||
],
|
||||
),
|
||||
'label' => 'config.form_password.new_password_label',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'config.form.save',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@ -14,8 +14,8 @@ class ClientType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('redirect_uris', UrlType::class, ['required' => true, 'label' => 'developer.client.form.redirect_uris_label'])
|
||||
->add('save', SubmitType::class, ['label' => 'developer.client.form.save_label'])
|
||||
->add('redirect_uris', UrlType::class, array('required' => true, 'label' => 'developer.client.form.redirect_uris_label'))
|
||||
->add('save', SubmitType::class, array('label' => 'developer.client.form.save_label'))
|
||||
;
|
||||
|
||||
$builder->get('redirect_uris')
|
||||
@ -24,7 +24,7 @@ class ClientType extends AbstractType
|
||||
return $originalUri;
|
||||
},
|
||||
function ($submittedUri) {
|
||||
return [$submittedUri];
|
||||
return array($submittedUri);
|
||||
}
|
||||
))
|
||||
;
|
||||
@ -32,9 +32,9 @@ class ClientType extends AbstractType
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\ApiBundle\Entity\Client',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -10,8 +10,8 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class ConfigType extends AbstractType
|
||||
{
|
||||
private $themes = [];
|
||||
private $languages = [];
|
||||
private $themes = array();
|
||||
private $languages = array();
|
||||
|
||||
/**
|
||||
* @param array $themes Themes come from the LiipThemeBundle (liip_theme.themes)
|
||||
@ -30,39 +30,39 @@ class ConfigType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('theme', ChoiceType::class, [
|
||||
->add('theme', ChoiceType::class, array(
|
||||
'choices' => array_flip($this->themes),
|
||||
'choices_as_values' => true,
|
||||
'label' => 'config.form_settings.theme_label',
|
||||
])
|
||||
->add('items_per_page', null, [
|
||||
))
|
||||
->add('items_per_page', null, array(
|
||||
'label' => 'config.form_settings.items_per_page_label',
|
||||
])
|
||||
->add('reading_speed', ChoiceType::class, [
|
||||
))
|
||||
->add('reading_speed', ChoiceType::class, array(
|
||||
'label' => 'config.form_settings.reading_speed.label',
|
||||
'choices' => [
|
||||
'choices' => array(
|
||||
'config.form_settings.reading_speed.100_word' => '0.5',
|
||||
'config.form_settings.reading_speed.200_word' => '1',
|
||||
'config.form_settings.reading_speed.300_word' => '1.5',
|
||||
'config.form_settings.reading_speed.400_word' => '2',
|
||||
],
|
||||
])
|
||||
->add('language', ChoiceType::class, [
|
||||
),
|
||||
))
|
||||
->add('language', ChoiceType::class, array(
|
||||
'choices' => array_flip($this->languages),
|
||||
'choices_as_values' => true,
|
||||
'label' => 'config.form_settings.language_label',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'config.form.save',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\CoreBundle\Entity\Config',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -14,30 +14,30 @@ class EditEntryType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('title', TextType::class, [
|
||||
->add('title', TextType::class, array(
|
||||
'required' => true,
|
||||
'label' => 'entry.edit.title_label',
|
||||
])
|
||||
->add('is_public', CheckboxType::class, [
|
||||
))
|
||||
->add('is_public', CheckboxType::class, array(
|
||||
'required' => false,
|
||||
'label' => 'entry.edit.is_public_label',
|
||||
])
|
||||
->add('url', TextType::class, [
|
||||
))
|
||||
->add('url', TextType::class, array(
|
||||
'disabled' => true,
|
||||
'required' => false,
|
||||
'label' => 'entry.edit.url_label',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'entry.edit.save_label',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\CoreBundle\Entity\Entry',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -34,42 +34,28 @@ class EntryFilterType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('readingTime', NumberRangeFilterType::class, [
|
||||
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
|
||||
$value = $values['value'];
|
||||
|
||||
if (null === $value['left_number'][0] || null === $value['right_number'][0]) {
|
||||
return;
|
||||
}
|
||||
|
||||
$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);
|
||||
},
|
||||
->add('readingTime', NumberRangeFilterType::class, array(
|
||||
'label' => 'entry.filters.reading_time.label',
|
||||
])
|
||||
->add('createdAt', DateRangeFilterType::class, [
|
||||
'left_date_options' => [
|
||||
'attr' => [
|
||||
))
|
||||
->add('createdAt', DateRangeFilterType::class, array(
|
||||
'left_date_options' => array(
|
||||
'attr' => array(
|
||||
'placeholder' => 'dd/mm/yyyy',
|
||||
],
|
||||
),
|
||||
'format' => 'dd/MM/yyyy',
|
||||
'widget' => 'single_text',
|
||||
],
|
||||
'right_date_options' => [
|
||||
'attr' => [
|
||||
),
|
||||
'right_date_options' => array(
|
||||
'attr' => array(
|
||||
'placeholder' => 'dd/mm/yyyy',
|
||||
],
|
||||
),
|
||||
'format' => 'dd/MM/yyyy',
|
||||
'widget' => 'single_text',
|
||||
],
|
||||
),
|
||||
'label' => 'entry.filters.created_at.label',
|
||||
]
|
||||
)
|
||||
)
|
||||
->add('domainName', TextFilterType::class, [
|
||||
->add('domainName', TextFilterType::class, array(
|
||||
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
|
||||
$value = $values['value'];
|
||||
if (strlen($value) <= 2 || empty($value)) {
|
||||
@ -80,14 +66,14 @@ class EntryFilterType extends AbstractType
|
||||
return $filterQuery->createCondition($expression);
|
||||
},
|
||||
'label' => 'entry.filters.domain_label',
|
||||
])
|
||||
->add('isArchived', CheckboxFilterType::class, [
|
||||
))
|
||||
->add('isArchived', CheckboxFilterType::class, array(
|
||||
'label' => 'entry.filters.archived_label',
|
||||
])
|
||||
->add('isStarred', CheckboxFilterType::class, [
|
||||
))
|
||||
->add('isStarred', CheckboxFilterType::class, array(
|
||||
'label' => 'entry.filters.starred_label',
|
||||
])
|
||||
->add('previewPicture', CheckboxFilterType::class, [
|
||||
))
|
||||
->add('previewPicture', CheckboxFilterType::class, array(
|
||||
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
|
||||
if (false === $values['value']) {
|
||||
return;
|
||||
@ -98,12 +84,12 @@ class EntryFilterType extends AbstractType
|
||||
return $filterQuery->createCondition($expression);
|
||||
},
|
||||
'label' => 'entry.filters.preview_picture_label',
|
||||
])
|
||||
->add('language', ChoiceFilterType::class, [
|
||||
))
|
||||
->add('language', ChoiceFilterType::class, array(
|
||||
'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())),
|
||||
'choices_as_values' => true,
|
||||
'label' => 'entry.filters.language_label',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
@ -114,9 +100,9 @@ class EntryFilterType extends AbstractType
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'csrf_protection' => false,
|
||||
'validation_groups' => ['filtering'],
|
||||
]);
|
||||
'validation_groups' => array('filtering'),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,18 +12,18 @@ class NewEntryType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('url', UrlType::class, [
|
||||
->add('url', UrlType::class, array(
|
||||
'required' => true,
|
||||
'label' => 'entry.new.form_new.url_label',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\CoreBundle\Entity\Entry',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -12,15 +12,15 @@ class NewTagType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('label', TextType::class, ['required' => true])
|
||||
->add('label', TextType::class, array('required' => true))
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\CoreBundle\Entity\Tag',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -17,38 +17,38 @@ class NewUserType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('username', TextType::class, [
|
||||
->add('username', TextType::class, array(
|
||||
'required' => true,
|
||||
'label' => 'config.form_new_user.username_label',
|
||||
])
|
||||
->add('plainPassword', RepeatedType::class, [
|
||||
))
|
||||
->add('plainPassword', RepeatedType::class, array(
|
||||
'type' => PasswordType::class,
|
||||
'invalid_message' => 'validator.password_must_match',
|
||||
'first_options' => ['label' => 'config.form_new_user.password_label'],
|
||||
'second_options' => ['label' => 'config.form_new_user.repeat_new_password_label'],
|
||||
'constraints' => [
|
||||
new Constraints\Length([
|
||||
'first_options' => array('label' => 'config.form_new_user.password_label'),
|
||||
'second_options' => array('label' => 'config.form_new_user.repeat_new_password_label'),
|
||||
'constraints' => array(
|
||||
new Constraints\Length(array(
|
||||
'min' => 8,
|
||||
'minMessage' => 'validator.password_too_short',
|
||||
]),
|
||||
)),
|
||||
new Constraints\NotBlank(),
|
||||
],
|
||||
),
|
||||
'label' => 'config.form_new_user.plain_password_label',
|
||||
])
|
||||
->add('email', EmailType::class, [
|
||||
))
|
||||
->add('email', EmailType::class, array(
|
||||
'label' => 'config.form_new_user.email_label',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'config.form.save',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\UserBundle\Entity\User',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -12,20 +12,20 @@ class RssType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('rss_limit', null, [
|
||||
->add('rss_limit', null, array(
|
||||
'label' => 'config.form_rss.rss_limit',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'config.form.save',
|
||||
])
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\CoreBundle\Entity\Config',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -14,19 +14,19 @@ class TaggingRuleType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('rule', TextType::class, [
|
||||
->add('rule', TextType::class, array(
|
||||
'required' => true,
|
||||
'label' => 'config.form_rules.rule_label',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'config.form.save',
|
||||
])
|
||||
))
|
||||
;
|
||||
|
||||
$tagsField = $builder
|
||||
->create('tags', TextType::class, [
|
||||
->create('tags', TextType::class, array(
|
||||
'label' => 'config.form_rules.tags_label',
|
||||
])
|
||||
))
|
||||
->addModelTransformer(new StringToListTransformer(','));
|
||||
|
||||
$builder->add($tagsField);
|
||||
@ -34,9 +34,9 @@ class TaggingRuleType extends AbstractType
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\CoreBundle\Entity\TaggingRule',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -15,19 +15,19 @@ class UserInformationType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('name', TextType::class, [
|
||||
->add('name', TextType::class, array(
|
||||
'label' => 'config.form_user.name_label',
|
||||
])
|
||||
->add('email', EmailType::class, [
|
||||
))
|
||||
->add('email', EmailType::class, array(
|
||||
'label' => 'config.form_user.email_label',
|
||||
])
|
||||
->add('twoFactorAuthentication', CheckboxType::class, [
|
||||
))
|
||||
->add('twoFactorAuthentication', CheckboxType::class, array(
|
||||
'required' => false,
|
||||
'label' => 'config.form_user.twoFactorAuthentication_label',
|
||||
])
|
||||
->add('save', SubmitType::class, [
|
||||
))
|
||||
->add('save', SubmitType::class, array(
|
||||
'label' => 'config.form.save',
|
||||
])
|
||||
))
|
||||
->remove('username')
|
||||
->remove('plainPassword')
|
||||
;
|
||||
@ -40,9 +40,9 @@ class UserInformationType extends AbstractType
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'Wallabag\UserBundle\Entity\User',
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
public function getBlockPrefix()
|
||||
|
||||
@ -82,10 +82,10 @@ class ContentProxy
|
||||
try {
|
||||
$this->tagger->tag($entry);
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->error('Error while trying to automatically tag an entry.', [
|
||||
$this->logger->error('Error while trying to automatically tag an entry.', array(
|
||||
'entry_url' => $url,
|
||||
'error_msg' => $e->getMessage(),
|
||||
]);
|
||||
));
|
||||
}
|
||||
|
||||
return $entry;
|
||||
|
||||
@ -18,10 +18,10 @@ class EntriesExport
|
||||
private $wallabagUrl;
|
||||
private $logoPath;
|
||||
private $title = '';
|
||||
private $entries = [];
|
||||
private $authors = ['wallabag'];
|
||||
private $entries = array();
|
||||
private $authors = array('wallabag');
|
||||
private $language = '';
|
||||
private $tags = [];
|
||||
private $tags = array();
|
||||
private $footerTemplate = '<div style="text-align:center;">
|
||||
<p>Produced by wallabag with %EXPORT_METHOD%</p>
|
||||
<p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p>
|
||||
@ -41,14 +41,12 @@ class EntriesExport
|
||||
* Define entries.
|
||||
*
|
||||
* @param array|Entry $entries An array of entries or one entry
|
||||
*
|
||||
* @return EntriesExport
|
||||
*/
|
||||
public function setEntries($entries)
|
||||
{
|
||||
if (!is_array($entries)) {
|
||||
$this->language = $entries->getLanguage();
|
||||
$entries = [$entries];
|
||||
$entries = array($entries);
|
||||
}
|
||||
|
||||
$this->entries = $entries;
|
||||
@ -64,8 +62,6 @@ class EntriesExport
|
||||
* Sets the category of which we want to get articles, or just one entry.
|
||||
*
|
||||
* @param string $method Method to get articles
|
||||
*
|
||||
* @return EntriesExport
|
||||
*/
|
||||
public function updateTitle($method)
|
||||
{
|
||||
@ -82,8 +78,6 @@ class EntriesExport
|
||||
* Sets the output format.
|
||||
*
|
||||
* @param string $format
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function exportAs($format)
|
||||
{
|
||||
@ -97,8 +91,6 @@ class EntriesExport
|
||||
|
||||
/**
|
||||
* Use PHPePub to dump a .epub file.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function produceEpub()
|
||||
{
|
||||
@ -170,19 +162,17 @@ class EntriesExport
|
||||
return Response::create(
|
||||
$book->getBook(),
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Content-Description' => 'File Transfer',
|
||||
'Content-type' => 'application/epub+zip',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.epub"',
|
||||
'Content-Transfer-Encoding' => 'binary',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use PHPMobi to dump a .mobi file.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function produceMobi()
|
||||
{
|
||||
@ -221,20 +211,18 @@ class EntriesExport
|
||||
return Response::create(
|
||||
$mobi->toString(),
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Accept-Ranges' => 'bytes',
|
||||
'Content-Description' => 'File Transfer',
|
||||
'Content-type' => 'application/x-mobipocket-ebook',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.mobi"',
|
||||
'Content-Transfer-Encoding' => 'binary',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use TCPDF to dump a .pdf file.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function producePdf()
|
||||
{
|
||||
@ -278,19 +266,17 @@ class EntriesExport
|
||||
return Response::create(
|
||||
$pdf->Output('', 'S'),
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Content-Description' => 'File Transfer',
|
||||
'Content-type' => 'application/pdf',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.pdf"',
|
||||
'Content-Transfer-Encoding' => 'binary',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inspired from CsvFileDumper.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function produceCsv()
|
||||
{
|
||||
@ -298,20 +284,20 @@ class EntriesExport
|
||||
$enclosure = '"';
|
||||
$handle = fopen('php://memory', 'rb+');
|
||||
|
||||
fputcsv($handle, ['Title', 'URL', 'Content', 'Tags', 'MIME Type', 'Language'], $delimiter, $enclosure);
|
||||
fputcsv($handle, array('Title', 'URL', 'Content', 'Tags', 'MIME Type', 'Language'), $delimiter, $enclosure);
|
||||
|
||||
foreach ($this->entries as $entry) {
|
||||
fputcsv(
|
||||
$handle,
|
||||
[
|
||||
array(
|
||||
$entry->getTitle(),
|
||||
$entry->getURL(),
|
||||
// remove new line to avoid crazy results
|
||||
str_replace(["\r\n", "\r", "\n"], '', $entry->getContent()),
|
||||
str_replace(array("\r\n", "\r", "\n"), '', $entry->getContent()),
|
||||
implode(', ', $entry->getTags()->toArray()),
|
||||
$entry->getMimetype(),
|
||||
$entry->getLanguage(),
|
||||
],
|
||||
),
|
||||
$delimiter,
|
||||
$enclosure
|
||||
);
|
||||
@ -324,55 +310,40 @@ class EntriesExport
|
||||
return Response::create(
|
||||
$output,
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Content-type' => 'application/csv',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.csv"',
|
||||
'Content-Transfer-Encoding' => 'UTF-8',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump a JSON file.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function produceJson()
|
||||
{
|
||||
return Response::create(
|
||||
$this->prepareSerializingContent('json'),
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Content-type' => 'application/json',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.json"',
|
||||
'Content-Transfer-Encoding' => 'UTF-8',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump a XML file.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function produceXml()
|
||||
{
|
||||
return Response::create(
|
||||
$this->prepareSerializingContent('xml'),
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Content-type' => 'application/xml',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.xml"',
|
||||
'Content-Transfer-Encoding' => 'UTF-8',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump a TXT file.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
private function produceTxt()
|
||||
{
|
||||
$content = '';
|
||||
@ -385,11 +356,11 @@ class EntriesExport
|
||||
return Response::create(
|
||||
$content,
|
||||
200,
|
||||
[
|
||||
array(
|
||||
'Content-type' => 'text/plain',
|
||||
'Content-Disposition' => 'attachment; filename="'.$this->title.'.txt"',
|
||||
'Content-Transfer-Encoding' => 'UTF-8',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -407,7 +378,7 @@ class EntriesExport
|
||||
return $serializer->serialize(
|
||||
$this->entries,
|
||||
$format,
|
||||
SerializationContext::create()->setGroups(['entries_for_user'])
|
||||
SerializationContext::create()->setGroups(array('entries_for_user'))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Wallabag\CoreBundle\Helper;
|
||||
|
||||
use Symfony\Component\Routing\Router;
|
||||
|
||||
/**
|
||||
* Manage redirections to avoid redirecting to empty routes.
|
||||
*/
|
||||
class Redirect
|
||||
{
|
||||
private $router;
|
||||
|
||||
public function __construct(Router $router)
|
||||
{
|
||||
$this->router = $router;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $url URL to redirect
|
||||
* @param string $fallback Fallback URL if $url is null
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function to($url, $fallback = '')
|
||||
{
|
||||
if (null !== $url) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
if ('' === $fallback) {
|
||||
return $this->router->generate('homepage');
|
||||
}
|
||||
|
||||
return $fallback;
|
||||
}
|
||||
}
|
||||
@ -54,7 +54,7 @@ class RuleBasedTagger
|
||||
public function tagAllForUser(User $user)
|
||||
{
|
||||
$rules = $this->getRulesForUser($user);
|
||||
$entries = [];
|
||||
$entries = array();
|
||||
|
||||
foreach ($rules as $rule) {
|
||||
$qb = $this->entryRepository->getBuilderForAllByUser($user->getId());
|
||||
|
||||
@ -157,7 +157,7 @@ class EntryRepository extends EntityRepository
|
||||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
$languages = [];
|
||||
$languages = array();
|
||||
foreach ($results as $result) {
|
||||
$languages[$result['language']] = $result['language'];
|
||||
}
|
||||
@ -233,7 +233,7 @@ class EntryRepository extends EntityRepository
|
||||
* @param $url
|
||||
* @param $userId
|
||||
*
|
||||
* @return Entry|bool
|
||||
* @return array|bool
|
||||
*/
|
||||
public function findByUrlAndUserId($url, $userId)
|
||||
{
|
||||
|
||||
@ -3,9 +3,41 @@
|
||||
namespace Wallabag\CoreBundle\Repository;
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Pagerfanta\Adapter\DoctrineORMAdapter;
|
||||
use Pagerfanta\Pagerfanta;
|
||||
|
||||
class TagRepository extends EntityRepository
|
||||
{
|
||||
/**
|
||||
* Return only the QueryBuilder to retrieve all tags for a given user.
|
||||
*
|
||||
* @param int $userId
|
||||
*
|
||||
* @return QueryBuilder
|
||||
*/
|
||||
private function getQbForAllTags($userId)
|
||||
{
|
||||
return $this->createQueryBuilder('t')
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')->setParameter('userId', $userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find Tags and return a Pager.
|
||||
*
|
||||
* @param int $userId
|
||||
*
|
||||
* @return Pagerfanta
|
||||
*/
|
||||
public function findTags($userId)
|
||||
{
|
||||
$qb = $this->getQbForAllTags($userId);
|
||||
|
||||
$pagerAdapter = new DoctrineORMAdapter($qb);
|
||||
|
||||
return new Pagerfanta($pagerAdapter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find Tags.
|
||||
*
|
||||
@ -15,9 +47,7 @@ class TagRepository extends EntityRepository
|
||||
*/
|
||||
public function findAllTags($userId)
|
||||
{
|
||||
return $this->createQueryBuilder('t')
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')->setParameter('userId', $userId)
|
||||
return $this->getQbForAllTags($userId)
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
|
||||
@ -3,14 +3,14 @@ services:
|
||||
class: Wallabag\CoreBundle\Helper\DetectActiveTheme
|
||||
arguments:
|
||||
- "@security.token_storage"
|
||||
- "%wallabag_core.theme%"
|
||||
- %wallabag_core.theme%
|
||||
|
||||
# custom form type
|
||||
wallabag_core.form.type.config:
|
||||
class: Wallabag\CoreBundle\Form\Type\ConfigType
|
||||
arguments:
|
||||
- "%liip_theme.themes%"
|
||||
- "%wallabag_core.languages%"
|
||||
- %liip_theme.themes%
|
||||
- %wallabag_core.languages%
|
||||
tags:
|
||||
- { name: form.type }
|
||||
|
||||
@ -32,7 +32,7 @@ services:
|
||||
wallabag_core.table_prefix_subscriber:
|
||||
class: Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber
|
||||
arguments:
|
||||
- "%database_table_prefix%"
|
||||
- %database_table_prefix%
|
||||
tags:
|
||||
- { name: doctrine.event_subscriber }
|
||||
|
||||
@ -92,10 +92,10 @@ services:
|
||||
class: Wallabag\CoreBundle\EventListener\RegistrationConfirmedListener
|
||||
arguments:
|
||||
- "@doctrine.orm.entity_manager"
|
||||
- "%wallabag_core.theme%"
|
||||
- "%wallabag_core.items_on_page%"
|
||||
- "%wallabag_core.rss_limit%"
|
||||
- "%wallabag_core.language%"
|
||||
- %wallabag_core.theme%
|
||||
- %wallabag_core.items_on_page%
|
||||
- %wallabag_core.rss_limit%
|
||||
- %wallabag_core.language%
|
||||
tags:
|
||||
- { name: kernel.event_subscriber }
|
||||
|
||||
@ -114,8 +114,3 @@ services:
|
||||
class: Wallabag\CoreBundle\Operator\Doctrine\Matches
|
||||
tags:
|
||||
- { name: rulerz.operator, executor: rulerz.executor.doctrine, operator: matches, inline: true }
|
||||
|
||||
wallabag_core.helper.redirect:
|
||||
class: Wallabag\CoreBundle\Helper\Redirect
|
||||
arguments:
|
||||
- "@router"
|
||||
|
||||
@ -512,7 +512,7 @@ img.preview {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
div.pagination ul {
|
||||
.pagination {
|
||||
text-align: right;
|
||||
margin-bottom:50px;
|
||||
}
|
||||
@ -523,25 +523,25 @@ div.pagination ul {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
div.pagination ul > * {
|
||||
.pagination > * {
|
||||
display: inline-block;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
div.pagination ul a {
|
||||
.pagination a {
|
||||
color: #999;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.pagination ul a:hover, div.pagination ul a:focus {
|
||||
.pagination a:hover, .pagination a:focus {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
div.pagination ul .disabled {
|
||||
.pagination .disabled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.pagination ul .current {
|
||||
.pagination .current {
|
||||
height: 25px;
|
||||
padding: 4px 8px;
|
||||
border: 1px solid #d5d5d5;
|
||||
|
||||
@ -80,14 +80,6 @@ main, #content, .valign-wrapper {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.pagination ul {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.pagination li {
|
||||
padding: 0;
|
||||
}
|
||||
@ -98,18 +90,6 @@ main, #content, .valign-wrapper {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.pagination li.active span {
|
||||
padding: 0px 10px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.pagination .disabled {
|
||||
margin-right: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.page-footer .footer-copyright p {
|
||||
display: inline;
|
||||
}
|
||||
@ -437,9 +417,6 @@ main ul.row {
|
||||
.indicator {
|
||||
display: none;
|
||||
}
|
||||
.pagination li.prev, .pagination li.next {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width : 400px) {
|
||||
|
||||
@ -380,6 +380,13 @@ developer:
|
||||
# paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
|
||||
# back: 'Back'
|
||||
|
||||
validator:
|
||||
password_must_match: 'De indtastede adgangskoder skal være ens'
|
||||
password_too_short: 'Adgangskoden skal være mindst 8 tegn'
|
||||
# password_wrong_value: 'Wrong value for your current password'
|
||||
# item_per_page_too_high: 'This will certainly kill the app'
|
||||
# rss_limit_too_hight: 'This will certainly kill the app'
|
||||
|
||||
flashes:
|
||||
config:
|
||||
notice:
|
||||
|
||||
@ -380,6 +380,13 @@ developer:
|
||||
paragraph_8: 'Wenn du alle API-Endpunkte sehen willst, werfe einen Blick auf die <a href="%link%">API-Dokumentation</a>.'
|
||||
back: 'Zurück'
|
||||
|
||||
validator:
|
||||
password_must_match: 'Die Kennwort-Felder müssen übereinstimmen.'
|
||||
password_too_short: 'Kennwort-Mindestlänge von acht Zeichen nicht erfüllt'
|
||||
password_wrong_value: 'Falscher Wert für dein aktuelles Kennwort'
|
||||
item_per_page_too_high: 'Dies wird die Anwendung möglicherweise beenden'
|
||||
rss_limit_too_hight: 'Dies wird die Anwendung möglicherweise beenden'
|
||||
|
||||
flashes:
|
||||
config:
|
||||
notice:
|
||||
|
||||
@ -380,6 +380,13 @@ developer:
|
||||
paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
|
||||
back: 'Back'
|
||||
|
||||
validator:
|
||||
password_must_match: 'The password fields must match.'
|
||||
password_too_short: 'Password should by at least 8 chars long'
|
||||
password_wrong_value: 'Wrong value for your current password'
|
||||
item_per_page_too_high: 'This will certainly kill the app'
|
||||
rss_limit_too_hight: 'This will certainly kill the app'
|
||||
|
||||
flashes:
|
||||
config:
|
||||
notice:
|
||||
|
||||
@ -7,7 +7,7 @@ security:
|
||||
register: 'Registrarse'
|
||||
username: 'Nombre de usuario'
|
||||
password: 'Contraseña'
|
||||
cancel: 'Cancelar'
|
||||
# cancel: 'Cancel'
|
||||
resetting:
|
||||
description: "Introduzca su dirección del correo electrónico y le enviaremos las instrucciones para reiniciar la contraseña"
|
||||
register:
|
||||
@ -43,7 +43,7 @@ footer:
|
||||
wallabag:
|
||||
elsewhere: 'Lleve wallabag consigo'
|
||||
social: 'Social'
|
||||
powered_by: 'funciona por'
|
||||
# powered_by: 'powered by'
|
||||
about: 'Acerca de'
|
||||
|
||||
config:
|
||||
@ -71,7 +71,7 @@ config:
|
||||
form_rss:
|
||||
description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero'
|
||||
token_label: 'RSS token'
|
||||
no_token: 'No token'
|
||||
# no_token: 'No token'
|
||||
token_create: 'Crear token'
|
||||
token_reset: 'Reiniciar token'
|
||||
rss_links: 'URL de su feed RSS'
|
||||
@ -100,7 +100,7 @@ config:
|
||||
tagging_rules_definition_title: '¿Qué significa reglas de etiquetado autómaticas?'
|
||||
tagging_rules_definition_description: 'Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cada vez que un nuevo artículo sea añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudándole a clasificar automáticamente los artículos.'
|
||||
how_to_use_them_title: '¿Cómo se utilizan?'
|
||||
how_to_use_them_description: 'Supongamos que quiere etiquetar nuevos artículos como « <i>lectura corta</i> » cuando el tiempo de leer sea menos de 3 minutos. <br /> En ese caso, debe poner « tiempo de leer <= 3 » en el <i>Regla</i> campo y « <i>lectura corta</i> » en el <i>Etiquetas</i> campo.<br />Algunas etiquetas se pueden ser añadidas al mismo tiempo por separarlas con una coma: « <i>lectura corta, debe leer</i> »<br />Reglas complejas se pueden ser escritas por usar operadores predefinidos: si « <i>tiempo de leer >= 5 Y nombre del dominio = "github.com"</i> » entonces etiquete como « <i>lectura larga, github </i> »'
|
||||
how_to_use_them_description: 'Supongamos que quiere etiquetar nuevos artículos como « <i>lectura corta</i> » cuando el tiempo de leer sea menos de 3 minutos. <br /> En este caso, debe poner Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
|
||||
variables_available_title: '¿Qué variables y operadores se pueden utilizar para escribir las reglas?'
|
||||
variables_available_description: 'Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:'
|
||||
meaning: 'Significado'
|
||||
@ -111,7 +111,7 @@ config:
|
||||
isArchived: 'El artículo está guardado o no'
|
||||
isStarred: 'Si el artículo es un favorito o no'
|
||||
content: "El contenido del artículo"
|
||||
language: "El idioma del artículo"
|
||||
language: "El idoma del artículo"
|
||||
mimetype: "Tipo MIME del artículo"
|
||||
readingTime: "El tiempo estimado de lectura del artículo, en minutos"
|
||||
domainName: 'El dominio del artículo'
|
||||
@ -123,9 +123,9 @@ config:
|
||||
strictly_greater_than: 'Estrictámente mas que…'
|
||||
equal_to: 'Egual a…'
|
||||
not_equal_to: 'Diferente de…'
|
||||
or: 'Una regla U otra'
|
||||
or: 'Una regla O otra'
|
||||
and: 'Una regla Y la otra'
|
||||
matches: 'Pruebe si un <i>sujeto</i> corresponde a una <i>búsqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide "football"</code>'
|
||||
matches: 'Prueba si un <i>sujeto</i> corresponde a una <i>busqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide "football"</code>'
|
||||
form_new_user:
|
||||
username_label: 'Nombre de usuario'
|
||||
password_label: 'Contraseña'
|
||||
@ -135,18 +135,18 @@ config:
|
||||
|
||||
entry:
|
||||
page_titles:
|
||||
unread: 'Artúclos no leídos'
|
||||
starred: 'Artículos favoritos'
|
||||
archived: 'Artículos archivados'
|
||||
filtered: 'Artículos filtrados'
|
||||
# unread: 'Unread entries'
|
||||
# starred: 'Starred entries'
|
||||
# archived: 'Archived entries'
|
||||
# filtered: 'Filtered entries'
|
||||
list:
|
||||
number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.'
|
||||
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"><</small> 1 min'
|
||||
original_article: 'original'
|
||||
toogle_as_read: 'Marcar como leído/ no leído'
|
||||
toogle_as_star: 'Marcar como favorito/ no favorito'
|
||||
toogle_as_read: 'Marcar cómo leído/ no leído'
|
||||
toogle_as_star: 'Marcar cómo favorito/ no favorito'
|
||||
delete: 'Suprimir'
|
||||
export_title: 'Exportar'
|
||||
filters:
|
||||
@ -158,7 +158,7 @@ entry:
|
||||
preview_picture_help: 'Foto de preview'
|
||||
language_label: 'Idioma'
|
||||
reading_time:
|
||||
label: 'Duración de lectura en minutos'
|
||||
label: 'Duración de lectura en minutos'
|
||||
from: 'de'
|
||||
to: 'a'
|
||||
domain_label: 'Nombre de dominio'
|
||||
@ -171,19 +171,19 @@ entry:
|
||||
filter: 'Filtrar'
|
||||
view:
|
||||
left_menu:
|
||||
back_to_top: 'Regrese al principio'
|
||||
back_to_homepage: 'Regrese a la página principal'
|
||||
# back_to_top: 'Back to top'
|
||||
back_to_homepage: 'Volver'
|
||||
set_as_read: 'Marcar como leído'
|
||||
set_as_unread: 'Marcar como no leído'
|
||||
set_as_favorite: 'Marcar como favorito'
|
||||
# set_as_unread: 'Mark as unread'
|
||||
set_as_favorite: 'Marcar cómo favorito'
|
||||
view_original_article: 'Artículo original'
|
||||
re_fetch_content: 'Redescargar el contenido'
|
||||
delete: 'Suprimir'
|
||||
add_a_tag: 'Añadir una etiqueta'
|
||||
share_content: 'Compartir'
|
||||
share_email_label: 'Dirección e-mail'
|
||||
share_email_label: 'Direccion e-mail'
|
||||
download: 'Descargar'
|
||||
print: 'Imprimir'
|
||||
# print: 'Print'
|
||||
problem:
|
||||
label: '¿Algún problema?'
|
||||
description: '¿Este artículo no se muestra bien?'
|
||||
@ -196,7 +196,7 @@ entry:
|
||||
form_new:
|
||||
url_label: Url
|
||||
edit:
|
||||
page_title: 'Editar un artículo'
|
||||
page_title: 'Editar una artículo'
|
||||
title_label: 'Título'
|
||||
url_label: 'Url'
|
||||
is_public_label: 'Es Público'
|
||||
@ -205,29 +205,29 @@ entry:
|
||||
about:
|
||||
page_title: 'Acerca de'
|
||||
top_menu:
|
||||
who_behind_wallabag: 'Equipo del desarrollo de wallabag'
|
||||
getting_help: 'Pedir ayuda'
|
||||
who_behind_wallabag: 'Equipo de desarrollo de wallabag'
|
||||
getting_help: 'Conseguir ayuda'
|
||||
helping: 'Ayudar a wallabag'
|
||||
contributors: 'Colaboradores'
|
||||
third_party: 'Librerías de terceros'
|
||||
contributors: 'Contribuidores'
|
||||
third_party: 'Librerías de terceeros'
|
||||
who_behind_wallabag:
|
||||
developped_by: 'Desarrollado por'
|
||||
website: 'Sitio web'
|
||||
many_contributors: 'Y muchos otros colaboradores ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">en Github</a>'
|
||||
project_website: 'Sitio web del proyecto'
|
||||
many_contributors: 'Y muchos otros contribuidores ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">en Github</a>'
|
||||
project_website: 'Web del proyecto'
|
||||
license: 'Licencia'
|
||||
version: 'Versión'
|
||||
version: 'Version'
|
||||
getting_help:
|
||||
documentation: 'Documentación'
|
||||
bug_reports: 'Reporte de errores'
|
||||
support: '<a href="https://support.wallabag.org">En nuestra web de apoyo website</a> o <a href="https://github.com/wallabag/wallabag/issues">en GitHub</a>'
|
||||
support: '<a href="https://support.wallabag.org">En nuestra web de soporte website</a> o <a href="https://github.com/wallabag/wallabag/issues">en GitHub</a>'
|
||||
helping:
|
||||
description: 'wallabag es libre y gratuito. Usted puede ayudarnos :'
|
||||
by_contributing: 'contribuyendo al proyecto :'
|
||||
by_contributing_2: 'nuestras necesidades están en un ticket'
|
||||
by_paypal: 'via Paypal'
|
||||
contributors:
|
||||
description: 'Gracias a los colaboradores de la aplicación web de wallabag'
|
||||
description: 'Gradias a los contribuidores de la aplicación web de wallabag'
|
||||
third_party:
|
||||
description: 'Aquí está la lista de las dependencias utilizadas por wallabag (con sus licencias) :'
|
||||
package: 'Paquete'
|
||||
@ -235,10 +235,10 @@ about:
|
||||
|
||||
howto:
|
||||
page_title: 'Ayuda'
|
||||
page_description: 'Hay muchas maneras para guardar un artículo:'
|
||||
# page_description: 'There are several ways to save an article:'
|
||||
top_menu:
|
||||
browser_addons: 'Extensiones de navigador'
|
||||
mobile_apps: 'Aplicaciones para smartphone'
|
||||
mobile_apps: 'Applicaciones para smartphone'
|
||||
bookmarklet: 'Bookmarklet'
|
||||
form:
|
||||
description: 'Gracias a este formulario'
|
||||
@ -249,8 +249,8 @@ howto:
|
||||
android:
|
||||
via_f_droid: 'via F-Droid'
|
||||
via_google_play: 'via Google Play'
|
||||
ios: 'por la tienda de iTunes'
|
||||
windows: 'por la tienda de Microsoft'
|
||||
# ios: 'on the iTunes Store'
|
||||
# windows: 'on the Microsoft Store'
|
||||
bookmarklet:
|
||||
description: 'Desplazar y soltar este link en la barra de marcadores :'
|
||||
|
||||
@ -259,24 +259,24 @@ quickstart:
|
||||
intro:
|
||||
title: 'Bienvenido a wallabag !'
|
||||
paragraph_1: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar."
|
||||
paragraph_2: '¡Síganos!'
|
||||
paragraph_2: '¡Siganos!'
|
||||
configure:
|
||||
title: 'Configure la aplicación'
|
||||
language: 'Cambie el idioma y el diseño de la aplicación'
|
||||
language: 'Cambie el idoma y el diseño de la aplicación'
|
||||
rss: 'Activar los feeds RSS'
|
||||
tagging_rules: 'Escribir reglas para etiquetear automaticamente sus artículos'
|
||||
# tagging_rules: 'Write rules to automatically tag your articles'
|
||||
admin:
|
||||
title: 'Administración'
|
||||
description: 'Como administrador, tiene privilegios por wallabag. Se puede:'
|
||||
new_user: 'Crear un nuevo usuario'
|
||||
analytics: 'Configure analíticas'
|
||||
sharing: 'Active unos parámetros de compartir artículos'
|
||||
export: 'Configure exportación'
|
||||
import: 'Configure importación'
|
||||
# title: 'Administration'
|
||||
# description: 'As an administrator, you have privileges on wallabag. You can:'
|
||||
# new_user: 'Create a new user'
|
||||
# analytics: 'Configure analytics'
|
||||
# sharing: 'Enable some parameters about article sharing'
|
||||
# export: 'Configure export'
|
||||
# import: 'Configure import'
|
||||
first_steps:
|
||||
title: 'Primeros pasos'
|
||||
title: 'Prieros pasos'
|
||||
new_article: 'Guarde su primer artículo'
|
||||
unread_articles: '¡Y clasifíquelo!'
|
||||
unread_articles: '¡Y clasifiquelo!'
|
||||
migrate:
|
||||
title: 'Migrar de un servicio existente'
|
||||
description: "¿Está usando otro servicio? Le ayudaremos a migrar sus datos a wallabag."
|
||||
@ -284,18 +284,18 @@ quickstart:
|
||||
wallabag_v1: 'Migrar desde wallabag v1'
|
||||
wallabag_v2: 'Migrar desde wallabag v2'
|
||||
developer:
|
||||
title: 'Promotores'
|
||||
create_application: 'Cree su tercera aplicación'
|
||||
# title: 'Developers'
|
||||
# create_application: 'Create your third application'
|
||||
docs:
|
||||
title: 'Documentación completa'
|
||||
annotate: 'Anote su artículo'
|
||||
# annotate: 'Annotate your article'
|
||||
export: 'Convierta sus artículos a ePub o a PDF'
|
||||
search_filters: 'Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese'
|
||||
fetching_errors: '¿Qué puedo hacer si un artículo encuentra errores por la búsqueda?'
|
||||
# fetching_errors: 'What can I do if an article encounters errors during fetching?'
|
||||
all_docs: '¡Y muchos más artículos!'
|
||||
support:
|
||||
title: 'Apoyo'
|
||||
description: 'Si necesita ayuda, estamos disponibles para usted.'
|
||||
title: 'Soporte'
|
||||
description: 'Sí necesita ayuda, estamos disponibles para usted.'
|
||||
github: 'En GitHub'
|
||||
email: 'Por email'
|
||||
gitter: 'En Gitter'
|
||||
@ -303,7 +303,7 @@ quickstart:
|
||||
tag:
|
||||
page_title: 'Etiquetas'
|
||||
list:
|
||||
number_on_the_page: '{0} No hay ninguna etiqueta.|{1} Hay una etiqueta.|]1,Inf[ Hay %count% etiquetas.'
|
||||
number_on_the_page: '{0} No hay ningun etiqueta.|{1} Hay un etiqueta.|]1,Inf[ Hay %count% etiquetas.'
|
||||
|
||||
import:
|
||||
page_title: 'Importar'
|
||||
@ -311,8 +311,8 @@ import:
|
||||
action:
|
||||
import_contents: 'Importar los contenidos'
|
||||
form:
|
||||
mark_as_read_title: '¿Marcar todos como leídos?'
|
||||
mark_as_read_label: 'Marcar todos artículos importados como leídos'
|
||||
# mark_as_read_title: 'Mark all as read?'
|
||||
# mark_as_read_label: 'Mark all imported entries as read'
|
||||
file_label: 'Fichero'
|
||||
save_label: 'Importar el fichero'
|
||||
pocket:
|
||||
@ -321,71 +321,78 @@ import:
|
||||
config_missing:
|
||||
description: "La importación de Pocket no está configurada."
|
||||
admin_message: 'Debe definir %keyurls%una clava del API Pocket%keyurle%.'
|
||||
user_message: 'El administrador de su servidor debe definir una clave API Pocket.'
|
||||
authorize_message: 'Puede importar sus datos desde su cuenta de Pocket. Sólo tiene que oprimir el botón para autorizar que wallabag se conecte a getpocket.com.'
|
||||
connect_to_pocket: 'Conéctese a Pocket para importar los datos'
|
||||
user_message: 'El administrador de vuestro servidor debe definir una clave API Pocket.'
|
||||
authorize_message: 'Puedes importar sus datos desde su cuenta de Pocket. Sólo tienes que pulsar en el botón para autrizar que wallabag se conecte a getpocket.com.'
|
||||
connect_to_pocket: 'Conectese a Pocket para importar los datos'
|
||||
wallabag_v1:
|
||||
page_title: 'Importar > Wallabag v1'
|
||||
description: 'Va a importar sus artículos de wallabag v1. En su configuración de wallabag v1, oprima "Exportar JSON" dentro de la sección "Exportar sus datos de wallabag". Usted tendrá un fichero "wallabag-export-1-xxxx-xx-xx.json".'
|
||||
how_to: 'Seleccione el fichero de su exportación de wallabag v1 y oprima el botón para subirlo y importarlo.'
|
||||
description: 'Va a importar sus artículos de wallabag v1. En su configuración de wallabag v1, pulse sobre "Exportar JSON" dentro de la sección "Exportar sus datos de wallabag". Usted tendrá un fichero "wallabag-export-1-xxxx-xx-xx.json".'
|
||||
how_to: 'Seleccione el fichero de su exportación de wallabag v1 y puelse en el botón para subirla y importarla.'
|
||||
wallabag_v2:
|
||||
page_title: 'Importar > Wallabag v2'
|
||||
description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, oprima en "JSON". Usted tendrá un fichero "All articles.json"'
|
||||
description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, clickee en "JSON". Usted tendrá un fichero "All articles.json"'
|
||||
|
||||
developer:
|
||||
page_title: 'Promotor'
|
||||
welcome_message: 'Bienvenido a wallabag API'
|
||||
documentation: 'Documentación'
|
||||
how_to_first_app: 'Cómo crear mi primera aplicación'
|
||||
full_documentation: 'Ver documentación de API entera'
|
||||
list_methods: 'Hacer una lista de métodos API'
|
||||
clients:
|
||||
title: 'Clientes'
|
||||
create_new: 'Crear un nuevo cliente'
|
||||
existing_clients:
|
||||
title: 'Clientes actuales'
|
||||
field_id: 'identificación del cliente'
|
||||
field_secret: 'Cliente secreto'
|
||||
field_uris: 'Redirigir los URI'
|
||||
field_grant_types: 'Conceder manera permitida'
|
||||
no_client: 'No cliente todavía.'
|
||||
remove:
|
||||
warn_message_1: 'Se puede quitar este cliente. ¡Está acción no se puede ser irreversible !'
|
||||
warn_message_2: "Si lo elimine, cada aplicación configurada con ese cliente no se puede ser autorizada por su wallbag."
|
||||
action: 'Quite este cliente'
|
||||
client:
|
||||
page_title: 'Promotor > Nuevo cliente'
|
||||
page_description: 'Va a crear un nuevo cliente. Por favor, llene el campo abajo para URI redirigido de su aplicación.'
|
||||
form:
|
||||
redirect_uris_label: 'los URI redirigidos'
|
||||
save_label: 'Crear un nuevo cliente'
|
||||
action_back: 'Atrás'
|
||||
client_parameter:
|
||||
page_title: 'Promotor > Parámetros del cliente'
|
||||
page_description: 'Aquí hay sus parámetros del cliente.'
|
||||
field_id: 'Identificación del cliente'
|
||||
field_secret: 'Cliente secreto'
|
||||
back: 'Atrás'
|
||||
read_howto: 'Leer el howto "Crear mi primera aplicación"'
|
||||
howto:
|
||||
page_title: 'Promotor > Cómo crear mi primera aplicación'
|
||||
description:
|
||||
paragraph_1: 'Los siguientes comandos se usan el <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Esté seguro de que se instalen en sus sistema antes de usarlos.'
|
||||
paragraph_2: 'Necesita un token para comunicar entre su tercera aplicación y wallabag API.'
|
||||
paragraph_3: 'Para crear este token, necesita <a href="%link%">to create a new client</a>.'
|
||||
paragraph_4: 'Ahora, cree su token (reemplace cliente_id, cliente_secreto, usuario y contraseñ con las buenas entradas):'
|
||||
paragraph_5: 'Este API devolverá una respuestas así:'
|
||||
paragraph_6: 'El acceso_token es útil para hacer una llamada al final API. Por ejempolo:'
|
||||
paragraph_7: 'Esta llamada devolverá todos los artículos para su usuario.'
|
||||
paragraph_8: 'Si quiere ver todos los fines de API, se puede ver <a href="%link%">a nuestra documentación API</a>.'
|
||||
back: 'Atrás'
|
||||
# page_title: 'Developer'
|
||||
# welcome_message: 'Welcome to the wallabag API'
|
||||
# documentation: 'Documentation'
|
||||
# how_to_first_app: 'How to create my first application'
|
||||
# full_documentation: 'View full API documentation'
|
||||
# list_methods: 'List API methods'
|
||||
# clients:
|
||||
# title: 'Clients'
|
||||
# create_new: 'Create a new client'
|
||||
# existing_clients:
|
||||
# title: 'Existing clients'
|
||||
# field_id: 'Client ID'
|
||||
# field_secret: 'Client secret'
|
||||
# field_uris: 'Redirect URIs'
|
||||
# field_grant_types: 'Grant type allowed'
|
||||
# no_client: 'No client yet.'
|
||||
# remove:
|
||||
# warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
|
||||
# warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
|
||||
# action: 'Remove this client'
|
||||
# client:
|
||||
# page_title: 'Developer > New client'
|
||||
# page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
|
||||
# form:
|
||||
# redirect_uris_label: 'Redirect URIs'
|
||||
# save_label: 'Create a new client'
|
||||
# action_back: 'Back'
|
||||
# client_parameter:
|
||||
# page_title: 'Developer > Client parameters'
|
||||
# page_description: 'Here are your client parameters.'
|
||||
# field_id: 'Client ID'
|
||||
# field_secret: 'Client secret'
|
||||
# back: 'Back'
|
||||
# read_howto: 'Read the howto "Create my first application"'
|
||||
# howto:
|
||||
# page_title: 'Developer > How to create my first application'
|
||||
# description:
|
||||
# paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
|
||||
# paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
|
||||
# paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
|
||||
# paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
|
||||
# paragraph_5: 'The API will return a response like this:'
|
||||
# paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
|
||||
# paragraph_7: 'This call will return all the entries for your user.'
|
||||
# paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
|
||||
# back: 'Back'
|
||||
|
||||
validator:
|
||||
password_must_match: 'Las contraseñas no coinciden'
|
||||
password_too_short: 'La contraseña debe tener al menos 8 carácteres'
|
||||
# password_wrong_value: 'Wrong value for your current password'
|
||||
# item_per_page_too_high: 'This will certainly kill the app'
|
||||
# rss_limit_too_hight: 'This will certainly kill the app'
|
||||
|
||||
flashes:
|
||||
config:
|
||||
notice:
|
||||
config_saved: 'Configuración guardada. Algunos parámetros serán recargados cuando se vuelva a conectar.'
|
||||
password_updated: 'Contraseña actualizada'
|
||||
password_not_updated_demo: "En modo demo, no puede cambiar la contraseña del usuario."
|
||||
password_not_updated_demo: "En modo demo, no puedes cambiar la contraseña del usuario."
|
||||
user_updated: 'Su información personal ha sido actualizada'
|
||||
rss_updated: 'La configuración de los feeds RSS ha sido actualizada'
|
||||
tagging_rules_updated: 'Regla de etiquetado borrada'
|
||||
@ -394,11 +401,11 @@ flashes:
|
||||
rss_token_updated: 'RSS token actualizado'
|
||||
entry:
|
||||
notice:
|
||||
entry_already_saved: 'Entrada ya guardada por %fecha%'
|
||||
entry_saved: 'Entrada guardada'
|
||||
entry_updated: 'Entrada actualizada'
|
||||
entry_reloaded: 'Entrada recargada'
|
||||
entry_reload_failed: 'Entrada recargada reprobada'
|
||||
# entry_already_saved: 'Entry already saved on %date%'
|
||||
# entry_saved: 'Entry saved'
|
||||
# entry_updated: 'Entry updated'
|
||||
# entry_reloaded: 'Entry reloaded'
|
||||
# entry_reload_failed: 'Failed to reload entry'
|
||||
entry_archived: 'Artículo archivado'
|
||||
entry_unarchived: 'Artículo desarchivado'
|
||||
entry_starred: 'Artículo guardado en los favoritos'
|
||||
@ -409,10 +416,10 @@ flashes:
|
||||
tag_added: 'Etiqueta añadida'
|
||||
import:
|
||||
notice:
|
||||
failed: 'Importación reprobada, por favor inténtelo de nuevo.'
|
||||
failed_on_file: 'Se ocurre un error por procesar importación. Por favor verifique su archivo importado.'
|
||||
summary: 'Resúmen importado: %importado% importado, %saltados% ya guardado.'
|
||||
# failed: 'Import failed, please try again.'
|
||||
# failed_on_file: 'Error while processing import. Please verify your import file.'
|
||||
# summary: 'Import summary: %imported% imported, %skipped% already saved.'
|
||||
developer:
|
||||
notice:
|
||||
client_created: 'Nuevo cliente creado.'
|
||||
client_deleted: 'Cliente suprimido'
|
||||
# client_created: 'New client created.'
|
||||
# client_deleted: 'Client deleted'
|
||||
|
||||
@ -380,6 +380,13 @@ developer:
|
||||
# paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
|
||||
# back: 'بازگشت'
|
||||
|
||||
validator:
|
||||
password_must_match: 'رمزها باید یکی باشند'
|
||||
password_too_short: 'رمز شما باید ۸ حرف یا بیشتر باشد'
|
||||
password_wrong_value: 'رمز فعلی را اشتباه وارد کردهاید'
|
||||
item_per_page_too_high: 'با این تعداد برنامه به فنا میرود'
|
||||
rss_limit_too_hight: 'با این تعداد برنامه به فنا میرود'
|
||||
|
||||
flashes:
|
||||
config:
|
||||
notice:
|
||||
|
||||