Merge pull request #6053 from wallabag/2.6.0

Merge 2.6.0 into master
This commit is contained in:
Jérémy Benoist 2022-11-03 10:53:10 +01:00 committed by GitHub
commit 2e9965e41e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
342 changed files with 2714 additions and 8516 deletions

View file

@ -12,7 +12,7 @@ permissions:
jobs:
coding-standards:
name: "CS Fixer & PHPStan"
name: "CS Fixer, PHPStan & TwigCS"
runs-on: "ubuntu-20.04"
steps:
@ -24,7 +24,7 @@ jobs:
with:
coverage: "none"
php-version: "7.4"
tools: cs2pr, pecl, composer:2.2
tools: cs2pr, pecl
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
ini-values: "date.timezone=Europe/Paris"
env:
@ -46,3 +46,6 @@ jobs:
- name: "Run PHPStan"
run: "php bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr"
- name: "Run TwigCS"
run: "php bin/twigcs --severity=error --display=blocking --reporter checkstyle app/ src/ | cs2pr"

View file

@ -48,7 +48,7 @@ jobs:
with:
php-version: "${{ matrix.php }}"
coverage: none
tools: pecl, composer:2.2
tools: pecl
extensions: json, pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
ini-values: "date.timezone=Europe/Paris"

View file

@ -29,7 +29,7 @@ jobs:
with:
coverage: "none"
php-version: "${{ matrix.php }}"
tools: pecl, composer:2.2
tools: pecl
extensions: pdo, pdo_mysql, pdo_sqlite, pdo_pgsql, curl, imagick, pgsql, gd, tidy
ini-values: "date.timezone=Europe/Paris"
env:

5
.gitignore vendored
View file

@ -9,11 +9,10 @@
!/var/sessions
/var/sessions/*
!var/sessions/.gitkeep
!var/SymfonyRequirements.php
/bin/*
!/bin/console
!/bin/symfony_requirements
.php_cs.cache
.php-cs-fixer.php
.php-cs-fixer.cache
.phpunit.result.cache
phpunit.xml

View file

@ -1,6 +1,7 @@
<?php
return PhpCsFixer\Config::create()
$config = new PhpCsFixer\Config();
return $config
->setRiskyAllowed(true)
->setRules([
'@Symfony' => true,
@ -10,7 +11,8 @@ return PhpCsFixer\Config::create()
],
'combine_consecutive_unsets' => true,
'heredoc_to_nowdoc' => true,
'no_extra_consecutive_blank_lines' => [
'no_extra_blank_lines' => [
'tokens' => [
'break',
'continue',
'extra',
@ -21,6 +23,7 @@ return PhpCsFixer\Config::create()
'square_brace_block',
'curly_brace_block'
],
],
'no_unreachable_default_argument_value' => true,
'no_useless_else' => true,
'no_useless_return' => true,
@ -28,7 +31,7 @@ return PhpCsFixer\Config::create()
'ordered_imports' => true,
'php_unit_strict' => true,
'phpdoc_order' => true,
// 'psr4' => true,
// 'psr_autoloading' => true,
'strict_comparison' => true,
'strict_param' => true,
'concat_space' => [
@ -45,4 +48,5 @@ return PhpCsFixer\Config::create()
])
->in(__DIR__)
)
->setCacheFile('.php-cs-fixer.cache')
;

View file

@ -46,7 +46,7 @@ fixtures: ## Load fixtures into database
php bin/console doctrine:fixtures:load --no-interaction --env=test
test: prepare fixtures ## Launch wallabag testsuite
XDEBUG_MODE=off bin/simple-phpunit -v
XDEBUG_MODE=off php -dmemory_limit=-1 bin/simple-phpunit -v
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
ifndef VERSION

View file

@ -48,7 +48,6 @@ class AppKernel extends Kernel
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
if ('test' === $this->getEnvironment()) {

View file

@ -0,0 +1,23 @@
<?php
namespace Application\Migrations;
use Doctrine\DBAL\Migrations\SkipMigrationException;
use Doctrine\DBAL\Schema\Schema;
use Wallabag\CoreBundle\Doctrine\WallabagMigration;
/**
* Remove baggy theme.
*/
final class Version20200414120227 extends WallabagMigration
{
public function up(Schema $schema): void
{
$this->addSql('UPDATE ' . $this->getTable('config', true) . " SET theme = 'material';");
}
public function down(Schema $schema): void
{
throw new SkipMigrationException('Not possible ... ');
}
}

View file

@ -1,10 +1,8 @@
matomo_enabled: Povolit Matomo
unmark_url: Adresa URL Unmark, pokud je služba povolena
scuttle_url: Adresa URL Scuttle, pokud je služba povolena
shaarli_url: Adresa URL Shaarli, pokud je služba povolena
share_unmark: Povolit sdílení na Unmark.it
share_twitter: Povolit sdílení na Twitteru
share_scuttle: Povolit sdílení na Scuttle
share_shaarli: Povolit sdílení na Shaarli
share_mail: Povolit sdílení e-mailem
share_diaspora: Povolit sdílení na diaspora*
@ -16,7 +14,6 @@ export_csv: Povolit export do CSV
export_pdf: Povolit export do PDF
export_mobi: Povolit export do .mobi
diaspora_url: Adresa URL diaspora*, pokud je služba povolena
carrot: Povolit sdílení na Carrot
download_pictures: Stáhnout obrázky na váš server
settings_changed: Konfigurace byla aktualizována
shaarli_share_origin_url: Povolit sdílení původní adresy URL na Shaarli, pokud je služba povolena

View file

@ -1,5 +1,4 @@
download_pictures: Download billeder på din server
carrot: Aktiver deling til Carrot
diaspora_url: diaspora* URL, hvis tjenesten er aktiv
export_epub: Aktiver eksport til ePub
export_mobi: Aktiver eksport til .mobi
@ -9,12 +8,10 @@ export_json: Aktiver eksport til JSON
export_txt: Aktiver eksport til TXT
export_xml: Aktiver eksport til XML
shaarli_url: Shaarli-URL, hvis tjenesten er aktiv
scuttle_url: Scuttle-URL, hvis tjenesten er aktiv
unmark_url: Unmark-URL, hvis tjenesten er aktiv
share_diaspora: Aktiver deling til diaspora*
share_mail: Aktiver deling med email
share_shaarli: Aktiver deling gennem Shaarli
share_scuttle: Aktiver deling gennem Scuttle
share_twitter: Aktiver deling gennem Twitter
share_unmark: Aktiver deling gennem Unmark.it
show_printlink: Vis et link til print-indhold

View file

@ -1,6 +1,5 @@
settings_changed: Konfiguration aktualisiert
download_pictures: Bilder auf den Server herunterladen
carrot: Teilen zu Carrot aktivieren
diaspora_url: diaspora*-URL, sofern der Service aktiviert ist
export_epub: ePUB-Export aktivieren
export_mobi: mobi-Export aktivieren
@ -12,7 +11,6 @@ export_xml: XML-Export aktivieren
import_with_rabbitmq: Aktiviere RabbitMQ, um Artikel asynchron zu importieren
import_with_redis: Aktiviere Redis, um Artikel asynchron zu importieren
shaarli_url: Shaarli-URL, sofern der Service aktiviert ist
scuttle_url: Scuttle-URL, sofern der Service aktiviert ist
unmark_url: Unmark-URL, sofern der Service aktiviert ist
share_diaspora: Freigabe für diaspora* aktivieren
share_mail: Freigabe per E-Mail aktivieren
@ -40,4 +38,3 @@ api_user_registration: Registrierung eines Benutzers über die API ermöglichen
store_article_headers: Speichern von HTTP-Headern für jeden Artikel aktivieren
shaarli_share_origin_url: Original-URL mit Shaarli teilen, wenn der Service aktiviert
ist
share_scuttle: Freigabe für Scuttle aktivieren

View file

@ -18,12 +18,10 @@ wallabag_support_url: Υποστήριξη URL για wallabag
show_printlink: Προβολή συνδέσμου για εκτύπωση περιεχομένου
share_unmark: Ενεργοποίηση κοινοποίησης στο Unmark.it
share_twitter: Ενεργοποίηση κοινοποίησης στο Twitter
share_scuttle: Ενεργοποίηση κοινοποίησης στο Scuttle
share_shaarli: Ενεργοποίηση κοινοποίησης στο Shaarli
share_mail: Ενεργοποίηση κοινοποίησης με ηλεκτρονικό ταχυδρομείο
share_diaspora: Ενεργοποίηση κοινοποίησης στο diaspora*
unmark_url: URL του Unmark, αν είναι ενεργοποιημένη η υπηρεσία
scuttle_url: URL του Scuttle, αν είναι ενεργοποιημένη η υπηρεσία
shaarli_url: URL του Shaarli, αν είναι ενεργοποιημένη η υπηρεσία
import_with_redis: Ενεργοποίηση Redis για την ασύγχρονη εισαγωγή δεδομένων
import_with_rabbitmq: Ενεργοποίηση RabbitMQ για την ασύγχρονη εισαγωγή δεδομένων
@ -35,6 +33,5 @@ export_pdf: Ενεργοποίηση εξαγωγής PDF
export_mobi: Ενεργοποίηση εξαγωγής .mobi
export_epub: Ενεργοποίηση εξαγωγής ePub
diaspora_url: URL του diaspora*, αν είναι ενεργοποιημένη η υπηρεσία
carrot: Ενεργοποίηση κοινοποίησης στο Carrot
download_pictures: Λήψη των εικόνων στον διακομιστή σας
settings_changed: Η ρύθμιση παραμέτρων ενημερώθηκε

View file

@ -1,6 +1,5 @@
settings_changed: Configuration updated
download_pictures: Download pictures onto your server
carrot: Enable share to Carrot
diaspora_url: diaspora* URL, if the service is enabled
export_epub: Enable ePub export
export_mobi: Enable .mobi export (deprecated, will be removed soon)
@ -12,12 +11,10 @@ export_xml: Enable XML export
import_with_rabbitmq: Enable RabbitMQ to import data asynchronously
import_with_redis: Enable Redis to import data asynchronously
shaarli_url: Shaarli URL, if the service is enabled
scuttle_url: Scuttle URL, if the service is enabled
unmark_url: Unmark URL, if the service is enabled
share_diaspora: Enable share to diaspora*
share_mail: Enable share by e-mail
share_shaarli: Enable sharing to Shaarli
share_scuttle: Enable sharing to Scuttle
share_twitter: Enable sharing to Twitter
share_unmark: Enable sharing to Unmark.it
show_printlink: Display a link to print content

View file

@ -1,6 +1,5 @@
settings_changed: Configuración actualizada
download_pictures: Descargar imágenes en el servidor
carrot: Activar compartir en Carrot
diaspora_url: URL de diaspora*, si el servicio está activado
export_epub: Activar exportación a ePub
export_mobi: Activar exportación a .mobi
@ -12,12 +11,10 @@ export_xml: Activar exportación a XML
import_with_rabbitmq: Activar RabbitMQ para importar datos de forma asíncrona
import_with_redis: Activar Redis para importar datos de forma asíncrona
shaarli_url: URL de Shaarli, si el servicio está activado
scuttle_url: URL de Scuttle, si el servicio está activado
unmark_url: URL de Unmark, si el servicio está activado
share_diaspora: Activar compartir en diaspora*
share_mail: Activar compartir por correo electrónico
share_shaarli: Activar compartir en Shaarli
share_scuttle: Activar compartir en Scuttle
share_twitter: Activar compartir en Twitter
share_unmark: Activar compartir en Unmark.it
show_printlink: Mostrar un enlace para imprimir el contenido

View file

@ -1,5 +1,4 @@
download_pictures: تصاویر را در کارگزار خودتان باربگیرید
carrot: فعال‌سازی هم‌رسانی به Carrot
diaspora_url: نشانی Diaspora، اگر فعال بود
export_epub: فعال‌سازی برون‌سپاری به ePub
export_mobi: فعال‌سازی برون‌سپاری به mobi
@ -9,12 +8,10 @@ export_json: فعال‌سازی برون‌سپاری به JSON
export_txt: فعال‌سازی برون‌سپاری به TXT
export_xml: فعال‌سازی برون‌سپاری به XML
shaarli_url: نشانی Shaarli، اگر فعال بود
scuttle_url: نشانی Scuttle، اگر فعال بود
unmark_url: نشانی Unmark، اگر فعال بود
share_diaspora: فعال‌سازی هم‌رسانی به Diaspora
share_mail: فعال‌سازی هم‌رسانی با ایمیل
share_shaarli: فعال‌سازی هم‌رسانی به Shaarli
share_scuttle: فعال‌سازی هم‌رسانی به Scuttle
share_twitter: فعال‌سازی هم‌رسانی به Twitter
share_unmark: فعال‌سازی هم‌رسانی به Unmark.it
show_printlink: نمایش پیوندی برای چاپ مطلب

View file

@ -1,6 +1,5 @@
settings_changed: Configuration mise à jour
download_pictures: Télécharger les images sur le serveur
carrot: Activer le partage vers Carrot
diaspora_url: URL de diaspora*, si le service est activé
export_epub: Activer l'export ePub
export_mobi: Activer l'export .mobi (déprécié, sera supprimé prochainement)
@ -12,12 +11,10 @@ export_xml: Activer l'export XML
import_with_rabbitmq: Activer RabbitMQ pour gérer les imports de façon asynchrone
import_with_redis: Activer Redis pour gérer les imports de façon asynchrone
shaarli_url: URL de Shaarli, si le service Shaarli est activé
scuttle_url: URL de Scuttle, si le service Scuttle est activé
unmark_url: URL de Unmark, si le service Unmark est activé
share_diaspora: Activer le partage vers diaspora*
share_mail: Activer le partage par courriel
share_shaarli: Activer le partage vers Shaarli
share_scuttle: Activer le partage vers Scuttle
share_twitter: Activer le partage vers Twitter
share_unmark: Activer le partage vers Unmark.it
show_printlink: Afficher un lien pour imprimer

View file

@ -18,12 +18,10 @@ wallabag_support_url: URL de axuda de wallabag
show_printlink: Mostrar unha ligazón para imprimir o contido
share_unmark: Activar a compartición en Unmark.it
share_twitter: Activar a compartición en Twitter
share_scuttle: Activar a compartición en Scuttle
share_shaarli: Activar a compartición en Shaarli
share_mail: Activar a compartición por email
share_diaspora: Activar a compartición en diaspora*
unmark_url: URL Unmark, se o servizo está activo
scuttle_url: URL Scuttle, se o servizo está activo
shaarli_url: URL Shaarli, se o servizo está activo
import_with_redis: Activar a importación asíncrona con Redis
import_with_rabbitmq: Activar a importación asíncrona con RabbitMQ
@ -35,6 +33,5 @@ export_pdf: Activar exportación PDF
export_mobi: Activar exportación .mobi (xa non se usa, vai ser eliminada)
export_epub: Activar exportación ePub
diaspora_url: URL de diaspora*, se o servizo está activo
carrot: Activar compartir en Carrot
download_pictures: Descargar imaxes no teu servidor
settings_changed: Configuración actualizada

View file

@ -20,7 +20,6 @@ import_with_redis: Aktiviraj Redis za asinkroni uvoz podataka
restricted_access: Aktiviraj autentifikaciju za naplatne web-stranice
export_mobi: Aktiviraj .mobi izvoz (zastarjelo, uskoro će se ukloniti)
demo_mode_enabled: Aktivirati demo modus? (Koristi se samo za javnu wallabag demonstraciju)
carrot: Aktiviraj dijeljenje na Carrot
diaspora_url: diaspora* URL, ako je usluga aktivirana
import_with_rabbitmq: Aktiviraj RabbitMQ za asinkroni uvoz podataka
api_user_registration: Aktiviraj korisničku registraciju putem sučelja

View file

@ -1,6 +1,5 @@
settings_changed: Beállítások frissítve
download_pictures: Képek letöltése a kiszolgálóra
carrot: Megosztás engedélyezése a Carrot-ra
diaspora_url: diaspora* URL, ha a szolgáltatás engedélyezett
export_epub: ePub-ba exportálás engedélyezése
export_mobi: .mobi-ba exportálás engedélyezése
@ -12,12 +11,10 @@ export_xml: XML-be exportálás engedélyezése
import_with_rabbitmq: A RabbitMQ aszinkron adatimportálásának engedélyezése
import_with_redis: A Redis aszinkron adatimportálásának engedélyezése
shaarli_url: Shaarli URL, ha a szolgáltatás engedélyezett
scuttle_url: Scuttle URL, ha a szolgáltatás engedélyezett
unmark_url: Unmark URL, ha a szolgáltatás engedélyezett
share_diaspora: Megosztás engedélyezése a diaspora*-ra
share_mail: Megosztás engedélyezése e-mail-ben
share_shaarli: Megosztás engedélyezése a Shaarli-ra
share_scuttle: Megosztás engedélyezése a Scuttle-ra
share_twitter: Megosztás engedélyezése a Twitter-re
share_unmark: Megosztás engedélyezése az Unmark.it-ra
show_printlink: Hivatkozás mutatása a tartalom nyomtatására

View file

@ -5,12 +5,10 @@ export_pdf: Aktifkan pengeksporan PDF
export_mobi: Aktifkan pengeksporan .mobi
export_epub: Aktifkan pengeksporan ePub
diaspora_url: URL diaspora*, jika layanan diaktifkan
carrot: Aktifkan bagikan ke Carrot
settings_changed: Konfigurasi diperbarui
share_unmark: Aktifkan berbagi ke Unmark.it
shaarli_share_origin_url: Aktifkan berbagi URL asal ke Shaarli, jika layanan diaktifkan
share_public: Izinkan URL publik untuk entri
share_scuttle: Aktifkan berbagi ke Scuttle
restricted_access: Aktifkan otentikasi untuk situs web berbayar
share_twitter: Aktifkan berbagi ke Twitter
demo_mode_enabled: Aktifkan mode demo? (Hanya digunakan untuk demo wallabag publik)
@ -18,7 +16,6 @@ download_images_enabled: Unduh gambar secara lokal
store_article_headers: Aktifkan jika wallabag menyimpan header HTTP untuk setiap artikel
api_user_registration: Aktifkan pendaftaran pengguna melalui API
demo_mode_username: Pengguna demo
scuttle_url: Scuttle URL, jika layanan diaktifkan
download_pictures: Unduh gambar ke server Anda
export_xml: Aktifkan ekspor XML
import_with_rabbitmq: Aktifkan RabbitMQ untuk mengimpor data secara asinkron

View file

@ -1,5 +1,4 @@
download_pictures: Scarica le immagini sul tuo server
carrot: Abilita condivisione con Carrot
diaspora_url: URL di diaspora*, se il servizio è abilitato
export_epub: Abilita esportazione ePub
export_mobi: Abilita esportazione .mobi (deprecato, verrà rimosso presto)
@ -9,12 +8,10 @@ export_json: Abilita esportazione JSON
export_txt: Abilita esportazione TXT
export_xml: Abilita esportazione XML
shaarli_url: URL Shaarli, se il servizio è abilitato
scuttle_url: URL Scuttle, se il servizio è abilitato
unmark_url: URL Unmark, se il servizio è abilitato
share_diaspora: Abilita la condivisione con diaspora*
share_mail: Abilita la condivisione via e-mail
share_shaarli: Abilita la condivisione con Shaarli
share_scuttle: Abilita la condivisione con Scuttle
share_twitter: Abilita la condivisione con Twitter
share_unmark: Abilita la condivisione con Unmark.it
show_printlink: Mostra un collegamento per stampare il contenuto

View file

@ -1,6 +1,5 @@
settings_changed: 設定を更新しました
download_pictures: サーバー上の画像をダウンロード
carrot: Carrot への共有を有効にする
diaspora_url: diaspora* URL、サービスが有効になっている場合
export_epub: ePub のエクスポートを有効にする
export_mobi: .mobi のエクスポートを有効にする(非推奨、近日中に削除されます)
@ -12,12 +11,10 @@ export_xml: XML のエクスポートを有効にする
import_with_rabbitmq: RabbitMQ を有効にして、データを非同期的にインポートする
import_with_redis: Redis を有効にして、データを非同期的にインポートする
shaarli_url: サービスが有効になっている場合、Shaarli URL
scuttle_url: Scuttle URL、サービスが有効になっている場合
unmark_url: Unmark URL、サービスが有効な場合
share_diaspora: diaspora* に共有を有効にする
share_mail: メールで共有を有効にする
share_shaarli: Shaarli に共有を有効にする
share_scuttle: Scuttle に共有を有効にする
share_twitter: Twitter に共有を有効にする
share_unmark: Unmark.it に共有を有効にする
show_printlink: 印刷するコンテンツへのリンクを表示

View file

@ -19,13 +19,11 @@ wallabag_support_url: Wallabag 지원 URL
show_printlink: 콘텐츠 인쇄 링크 표시
share_unmark: Unmark.it 공유 활성화
diaspora_url: Diaspora* URL (서비스가 활성화 된 경우)
share_scuttle: Scuttle 공유 활성화
share_shaarli: Shaarli 공유 활성화
share_mail: 이메일 공유 활성화
share_diaspora: Diaspora* 공유 활성화
share_twitter: Twitter 공유 활성화
unmark_url: Unmark URL (서비스가 활성화 된 경우)
scuttle_url: Scuttle URL (서비스가 활성화 된 경우)
shaarli_url: Shaarli URL (서비스가 활성화 된 경우)
import_with_redis: Redis가 데이터를 비동기적으로 가져오도록 설정
import_with_rabbitmq: RabbitMQ가 데이터를 비동기적으로 가져오도록 설정
@ -36,5 +34,4 @@ export_csv: CSV 내보내기 활성화
export_pdf: PDF 내보내기 활성화
export_mobi: .mobi 내보내기 활성화
export_epub: ePub 내보내기 활성화
carrot: Carrot에 공유 활성화
settings_changed: 설정을 업데이트했습니다

View file

@ -1,6 +1,5 @@
settings_changed: Oppsett oppdatert
download_pictures: Last ned bilder til tjeneren din
carrot: Skru på deling til Carrot
diaspora_url: diaspora*-nettadresse, hvis tjenesten er avskrudd
export_epub: Skru på ePub-eksport
export_mobi: Skru på .mobi-eksport
@ -32,9 +31,7 @@ demo_mode_username: Demo-bruker
share_public: Tillat offentlige nettadresser for oppføringer
download_images_enabled: Last ned bilder lokalt
restricted_access: Skru på identitetsbekreftelse for nettsider med betalingsmur
scuttle_url: Scuttle-nettadresse, hvis tjenesten er påskrudd
unmark_url: Unmark-nettadresse, hvis tjenesten er påskrudd
share_scuttle: Skru på deling til Scuttle
api_user_registration: Skru på brukerregistrering via API-et
store_article_headers: Skru på hvis wallabag lagrer HTTP-hoder for hver artikkel
shaarli_share_origin_url: Skru på deling av opprinnelsesnettadresse til Shaarli, hvis tjenesten er påskrudd

View file

@ -17,7 +17,6 @@ wallabag_support_url: Hulp URL voor wallabag
show_printlink: Toon een link naar de print inhoud
share_unmark: Schakel delen met Unmark.it in
share_twitter: Schakel delen met Twitter in
share_scuttle: Schakel delen met Scuttle in
share_shaarli: Schakel delen met Shaarli in
share_mail: Schakel delen naar e-mail in
share_diaspora: Schakel deel naar diaspora* in
@ -33,7 +32,6 @@ export_csv: Schakel CSV-export in
export_pdf: Schakel PDF-export in
export_mobi: Schakel .mobi-export in
export_epub: Schakel ePub-export in
carrot: Schakel delen naar Carrot in
download_pictures: Download foto's naar jouw server
settings_changed: Instellingen bijgewerkt
diaspora_url: diaspora* URL, als de dienst is aangezet

View file

@ -1,6 +1,5 @@
settings_changed: Configuracion mesa a jorn
download_pictures: Telecargar los imatges sul servidor
carrot: Activar lo partatge cap a Carrot
diaspora_url: URL de diaspora*, se lo servici diaspora* es activat
export_epub: Activar l'expòrt ePub
export_mobi: Activar l'expòrt .mobi
@ -12,7 +11,6 @@ export_xml: Activar l'expòrt XML
import_with_rabbitmq: Activar RabbitMQ per importar de donadas de manièra asincròna
import_with_redis: Activar Redis per importar de donadas de manièra asincròna
shaarli_url: URL de Shaarli, se lo servici Shaarli es activat
scuttle_url: URL de Scuttle, se lo servici Scuttle es activat
unmark_url: URL de Unmark, se lo servici Scuttle es activat
share_diaspora: Activar lo partatge cap a Diaspora*
share_mail: Activar lo partatge per corrièl

View file

@ -1,6 +1,5 @@
settings_changed: Konfiguracja zaktualizowana
download_pictures: Pobierz obrazy na swój serwer
carrot: Włącz udostępnianie dla Carrot
diaspora_url: Adres URL Diaspora, jeżeli usługa jest włączona
export_epub: Włącz eksport do ePub
export_mobi: Włącz eksport do plików .mobi (przestarzałe, zostanie wkrótce usunięte)
@ -12,11 +11,9 @@ export_xml: Włącz eksport do XML
import_with_rabbitmq: Włącz RabbitMQ dla asynchronicznego importu danych
import_with_redis: Włącz Redis dla asynchronicznego importu danych
shaarli_url: Adress URL Shaarli, jeżeli usługa jest włączona
scuttle_url: Adress URL Scuttle, jeżeli usługa jest włączona
share_diaspora: Włącz udostępnianie dla Diaspora
share_mail: Włącz udostępnianie przez e-mail
share_shaarli: Włącz udostępnianie dla Shaarli
share_scuttle: Włącz udostępnianie dla Scuttle
share_twitter: Włącz udostępnianie dla Twitter
share_unmark: Włącz udostępnianie dla Unmark.it
show_printlink: Pokaż link do wydrukowania zawartości

View file

@ -1,5 +1,4 @@
download_pictures: Descarregar imagens ao seu servidor
carrot: Habilitar compartilhamento para o Carrot
diaspora_url: URL de diaspora* caso o serviço esteja ativado
export_epub: Habilita exportação para ePub
export_mobi: Habilita exportação para .mobi
@ -9,13 +8,11 @@ export_json: Habilita exportação para JSON
export_txt: Habilita exportação para TXT
export_xml: Habilita exportação para XML
shaarli_url: URL de Shaarli caso o serviço esteja ativado
scuttle_url: URL de Scuttle caso o serviço esteja ativado
unmark_url: URL de Unmark caso o serviço esteja ativado
pocket_consumer_key: Chave de consumidor do Pocket para importar conteúdo (https://getpocket.com/developer/docs/authentication)
share_diaspora: Habilitar compartilhamento para o diaspora*
share_mail: Habilitar compartilhamento por e-mail
share_shaarli: Habilitar compartilhamento para o Shaarli
share_scuttle: Habilitar compartilhamento para o Scuttle
share_twitter: Habilitar compartilhamento para o Twitter
share_unmark: Habilitar compartilhamento para o Unmark.it
show_printlink: Mostrar um link para imprimir o conteúdo

View file

@ -1,5 +1,4 @@
download_pictures: Descarcă poze pe server
carrot: Permite share către Carrot
diaspora_url: diaspora* URL, dacă serviciul este permis
export_epub: Permite exportare ePub
export_mobi: Permite exportare .mobi
@ -9,12 +8,10 @@ export_json: Permite exportare JSON
export_txt: Permite exportare TXT
export_xml: Permite exportare XML
shaarli_url: Shaarli URL, dacă serviciul este permis
scuttle_url: Scuttle URL, dacă serviciul este permis
unmark_url: Unmark URL, dacă serviciul este permis
share_diaspora: Permite share către diaspora*
share_mail: Permite share prin email
share_shaarli: Permite share către Shaarli
share_scuttle: Permite share către Scuttle
share_twitter: Permite share către Twitter
share_unmark: Permite share către Unmark.it
show_printlink: Afișează un link pentru a printa content-ul

View file

@ -1,6 +1,5 @@
settings_changed: "Настройки обновлены"
download_pictures: "Скачивать картинки на Ваш сервер"
carrot: "Включить возможность отслеживания событий через Carrot"
diaspora_url: "Diaspora URL, если сервис включен"
export_epub: "Включить ePub экспорт"
export_mobi: "Включить .mobi экспорт"
@ -12,7 +11,6 @@ export_xml: "Включить XML экспорт"
import_with_rabbitmq: "Включить RabbitMQ для импорта данных(асинхронно)"
import_with_redis: "Включить Redis для импорта данных(асинхронно)"
shaarli_url: "Shaarli URL, если сервис включен"
scuttle_url: "Scuttle URL, если сервис включен"
unmark_url: "Unmark URL, если сервис включен"
share_diaspora: "Включить возможность поделиться в соц.сети Diaspora"
share_mail: "Включить возможность поделиться по email"
@ -38,4 +36,3 @@ restricted_access: "Включить авторизацию на сайте с
shaarli_share_origin_url: Включите отправку URL-адреса источника для Shaarli, если услуга включена
store_article_headers: Включите, если wallabag хранит заголовки HTTP для каждой статьи
api_user_registration: Разрешить пользователю регистрироваться с помощью API
share_scuttle: Включить возможность поделиться в Shaarli

View file

@ -1,6 +1,5 @@
settings_changed: ปรับปรุงองค์ประกอบ
download_pictures: ดาวน์โหลดรูปภาพผ่านเซิฟเวอร์ของคุณ
carrot: เปิดการแชร์ Carrot
diaspora_url: Diaspora-URL, ถ้าเซิฟเวอร์ถูกเปิดใช้งาน
export_epub: เปิดใช้งานการนำเข้าข้อมูลแบบ ePub
export_mobi: เปิดใช้งานการนำเข้าข้อมูลแบบ .mobi
@ -15,7 +14,6 @@ shaarli_url: Shaarli-URL, ถ้าเซิฟเวอร์ถูกเปิ
share_diaspora: เปิดการแชร์ Diaspora
share_mail: เปิดการแชร์ผ่าน email
share_shaarli: เปิดการแชร์ Shaarli
share_scuttle: เปิดการแชร์ Scuttle
share_twitter: เปิดการแชร์ Twitter
share_unmark: เปิดการแชร์ Unmark.it
show_printlink: แสดงลิงค์เพื่อปรินท์เนื้อหา

View file

@ -1,6 +1,5 @@
settings_changed: Ayarlar güncellendi
download_pictures: Resimleri sunucuya indir
carrot: Carrot'a paylaşımı etkinleştir
diaspora_url: hizmet etkinse diaspora* URL'si
export_epub: ePub dışa aktarımını etkinleştir
export_mobi: .mobi dışa aktarımını etkinleştir (kullanım dışı, yakında kaldırılacak)
@ -12,12 +11,10 @@ export_xml: XML dışa aktarımını etkinleştir
import_with_rabbitmq: Verileri eşzamansız olarak içe aktarmak için RabbitMQ'yu etkinleştir
import_with_redis: Verileri eşzamansız olarak içe aktarmak için Redis'i etkinleştir
shaarli_url: Hizmet etkinse Shaarli URL'si
scuttle_url: Hizmet etkinse Scuttle URL'si
unmark_url: Hizmet etkinse Unmark URL'si
share_diaspora: diaspora*'ya paylaşımı etkinleştir
share_mail: E-posta ile paylaşımı etkinleştir
share_shaarli: Shaarli'ye paylaşımı etkinleştir
share_scuttle: Scuttle'a paylaşımı etkinleştir
share_twitter: Twitter'a paylaşımı etkinleştir
share_unmark: Unmark.it'e paylaşımı etkinleştir
show_printlink: İçeriği yazdırabilmek için bir bağlantı görüntüle

View file

@ -1,6 +1,5 @@
settings_changed: Конфігурацію оновлено
download_pictures: Завантажити картинки на ваш сервер
carrot: Дозволити ділитися в Carrot
diaspora_url: diaspora* адреса, якщо сервіс увімкнено
export_epub: Увімкнути експорт в ePub
export_mobi: Увімкнути експорт в .mobi
@ -12,12 +11,10 @@ export_xml: Увімкнути експорт в XML
import_with_rabbitmq: Увімкнути можливість асинхронного імпорту через RabbitMQ
import_with_redis: Увімкнути можливість асинхронного імпорту через Redis
shaarli_url: Shaarli URL, якщо сервіс увімкнено
scuttle_url: Scuttle URL, якщо сервіс увімкнено
unmark_url: Unmark URL, якщо сервіс увімкнено
share_diaspora: Дозволити ділитися в diaspora*
share_mail: Дозволити ділитись електронною поштою
share_shaarli: Дозволити ділитися в Shaarli
share_scuttle: Дозволити ділитися в Scuttle
share_twitter: Дозволити ділитися в Twitter
share_unmark: Дозволити ділитися в Unmark.it
show_printlink: Показувати лінк для друку

View file

@ -1,6 +1,5 @@
settings_changed: 配置已更新
download_pictures: 在你的服务器上缓存图片
carrot: 启用分享到 Carrot
diaspora_url: diaspora* 链接,如果该服务已被启用
export_epub: 启用 ePub 导出
export_mobi: 启用 .mobi 导出(已废弃,不久后将移除)
@ -12,12 +11,10 @@ export_xml: 启用 XML 导出
import_with_rabbitmq: 启用 RabbitMQ 来异步导入数据
import_with_redis: 启用 Redis 来异步导入数据
shaarli_url: Shaarli 链接,如果该服务已被启用
scuttle_url: Scuttle 链接,如果该服务已被启用
unmark_url: Unmark 链接,如果该服务已被启用
share_diaspora: 启用分享到 diaspora*
share_mail: 启用邮件分享
share_shaarli: 启用分享到 Shaarli
share_scuttle: 启用分享到 Scuttle
share_twitter: 启用分享到 Twitter
share_unmark: 启用分享到 Unmark.it
show_printlink: 展示一个用于打印内容的链接

View file

@ -2,4 +2,3 @@ download_pictures: 下載圖片至你的服務器上
diaspora_url: diaspora* URL(如果該服務已啟用)
settings_changed: 已更新設定
export_epub: 啟用 ePub 輸出
carrot: 啟用分享至 Carrot

View file

@ -1,4 +1,4 @@
{% extends "WallabagCoreBundle::layout.html.twig" %}
{% extends "@WallabagCore/layout.html.twig" %}
{% block title %}{{ 'menu.left.internal_settings'|trans }}{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "FOSUserBundle::layout.html.twig" %}
{% extends "@FOSUser/layout.html.twig" %}
{% trans_default_domain 'FOSUserBundle' %}

View file

@ -1,4 +1,4 @@
{% extends "FOSUserBundle::layout.html.twig" %}
{% extends "@FOSUser/layout.html.twig" %}
{% trans_default_domain 'FOSUserBundle' %}

View file

@ -5,8 +5,8 @@
<div class="row">
{{ form_widget(form._token) }}
{% for flashMessage in app.session.flashbag.get('notice') %}
<span class="black-text"><p>{{ flashMessage }}</p></span>
{% for flash_message in app.session.flashbag.get('notice') %}
<span class="black-text"><p>{{ flash_message }}</p></span>
{% endfor %}
<div class="input-field col s12">

View file

@ -1,4 +1,4 @@
{% extends "FOSUserBundle::layout.html.twig" %}
{% extends "@FOSUser/layout.html.twig" %}
{% trans_default_domain 'FOSUserBundle' %}

View file

@ -5,8 +5,8 @@
<div class="row">
<p>{{ 'security.resetting.description'|trans({}, "messages") }}</p>
{% for flashMessage in app.session.flashbag.get('notice') %}
<span class="black-text"><p>{{ flashMessage }}</p></span>
{% for flash_message in app.session.flashbag.get('notice') %}
<span class="black-text"><p>{{ flash_message }}</p></span>
{% endfor %}
{% if invalid_username is defined %}

View file

@ -1,4 +1,4 @@
{% extends "FOSUserBundle::layout.html.twig" %}
{% extends "@FOSUser/layout.html.twig" %}
{% block fos_user_content %}
<form action="{{ path('fos_user_security_check') }}" method="post" name="loginform">
@ -8,8 +8,8 @@
<script>Materialize.toast('{{ error.messageKey|trans(error.messageData, 'security') }}', 4000)</script>
{% endif %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<script>Materialize.toast('{{ flashMessage }}')</script>
{% for flash_message in app.session.flashbag.get('notice') %}
<script>Materialize.toast('{{ flash_message }}')</script>
{% endfor %}
<div class="row">

View file

@ -1,4 +1,4 @@
{% extends "WallabagCoreBundle::layout.html.twig" %}
{% extends "@WallabagCore/layout.html.twig" %}
{% block title %}{{ 'security.login.page_title'|trans }}{% endblock %}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

View file

@ -1,164 +0,0 @@
#article {
width: 70%;
margin-bottom: 3em;
text-align: justify;
.tags {
margin-bottom: 1em;
}
i {
font-style: normal;
}
h1 {
text-align: left;
}
h2::after {
content: none;
}
h2,
h3,
h4 {
text-transform: none;
}
}
blockquote {
border: 1px solid #999;
background-color: #fff;
padding: 1em;
margin: 0;
}
.topPosF {
position: fixed;
right: 20%;
bottom: 2em;
font-size: 1.5em;
}
#article_toolbar {
margin-bottom: 1em;
li {
display: inline-block;
margin: 3px auto;
}
a {
background-color: #000;
padding: 0.3em 0.5em 0.2em;
color: #fff;
text-decoration: none;
&:hover,
&:focus {
background-color: #999;
}
}
}
#nav-btn-add-tag {
cursor: pointer;
}
.shaarli::before {
content: "*";
}
.return {
text-decoration: none;
margin-top: 1em;
display: block;
}
.return::before {
margin-right: 0.5em;
}
.notags {
font-style: italic;
color: #999;
}
.icon-feed {
background-color: #000;
color: #fff;
padding: 0.2em 0.5em;
&::before {
position: relative;
top: 2px;
}
}
.list-tags {
li {
margin-bottom: 0.5em;
}
.icon-feed:hover,
.icon-feed:focus {
background-color: #fff;
color: #000;
text-decoration: none;
}
a {
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
}
}
}
pre code {
font-family: "Courier New", Courier, monospace;
}
#filters {
position: fixed;
width: 20%;
height: 100%;
top: 0;
right: 0;
background-color: #fff;
padding: 30px 30px 15px 15px;
border-left: 1px #333 solid;
z-index: 12;
min-width: 300px;
form .filter-group {
margin: 5px;
}
}
#download-form {
position: fixed;
width: 10%;
height: 100%;
top: 0;
right: 0;
background-color: #fff;
padding: 30px 30px 15px 15px;
border-left: 1px #333 solid;
z-index: 12;
min-width: 200px;
li {
display: block;
padding: 0.5em 2em 0.5em 1em;
color: #fff;
position: relative;
text-transform: uppercase;
text-decoration: none;
font-weight: 400;
font-family: "PT Sans", sans-serif;
transition: all 0.5s ease;
}
}

View file

@ -1,258 +0,0 @@
::selection {
color: #fff;
background-color: #000;
}
.desktopHide {
display: none;
}
.logo {
position: fixed;
z-index: 20;
top: 0.4em;
left: 0.6em;
}
h2,
h3,
h4 {
font-family: "PT Sans", sans-serif;
text-transform: uppercase;
}
p,
li,
label {
color: #666;
}
a {
color: #000;
font-weight: bold;
&.nostyle {
text-decoration: none;
}
&:hover,
&:focus {
text-decoration: none;
}
}
form fieldset {
border: 0;
padding: 0;
margin: 0;
}
form input[type="text"],
form input[type="number"],
select,
form input[type="password"],
form input[type="url"],
form input[type="email"] {
border: 1px solid #999;
padding: 0.5em 1em;
min-width: 12em;
color: #666;
}
@media screen {
select {
appearance: none;
border-radius: 0;
background: #fff url("../../_global/img/bg-select.png") no-repeat right center;
}
}
.inline {
.row {
display: inline-block;
margin-right: 0.5em;
}
label {
min-width: 6em;
}
}
fieldset label {
display: inline-block;
min-width: 12.5em;
color: #666;
}
label {
margin-right: 0.5em;
}
form .row {
margin-bottom: 0.5em;
}
form button,
input[type="submit"] {
cursor: pointer;
background-color: #000;
color: #fff;
padding: 0.5em 1em;
display: inline-block;
border: 1px solid #000;
}
form button:hover,
form button:focus,
input[type="submit"]:hover,
input[type="submit"]:focus {
background-color: #fff;
color: #000;
transition: all 0.5s ease;
}
#bookmarklet {
cursor: move;
}
h2::after {
content: "";
height: 4px;
width: 20%;
background-color: #000;
display: block;
}
.links {
padding: 0;
margin: 0;
li {
list-style: none;
margin: 0;
padding: 0;
}
}
#links {
position: fixed;
top: 0;
width: 10em;
left: 0;
text-align: right;
background-color: #333;
padding-top: 9.5em;
height: 100%;
box-shadow: inset -4px 0 20px rgb(0 0 0 / 60%);
z-index: 15;
> li > a {
display: block;
padding: 0.5em 2em 0.5em 1em;
color: #fff;
position: relative;
text-transform: uppercase;
text-decoration: none;
font-weight: normal;
font-family: "PT Sans", sans-serif;
transition: all 0.5s ease;
&:hover,
&:focus {
background-color: #999;
color: #000;
}
}
.current::after {
content: "";
width: 0;
height: 0;
position: absolute;
border: 10px solid transparent;
border-right-color: #eee;
right: 0;
top: 50%;
margin-top: -10px;
}
li:last-child {
position: fixed;
bottom: 1em;
width: 10em;
a::before {
font-size: 1.2em;
position: relative;
top: 2px;
}
}
}
#main {
margin-left: 12em;
position: relative;
z-index: 10;
padding-right: 5%;
padding-bottom: 1em;
}
#sort {
padding: 0;
list-style-type: none;
opacity: 0.5;
display: inline-block;
li {
display: inline;
font-size: 0.9em;
& + li {
margin-left: 10px;
}
}
a {
padding: 2px 2px 0;
vertical-align: middle;
}
img {
vertical-align: baseline;
:hover {
cursor: pointer;
}
}
}
#display-mode {
float: right;
margin-top: 10px;
margin-bottom: 10px;
opacity: 0.5;
}
#listmode {
width: 16px;
display: inline-block;
text-decoration: none;
&.tablemode {
background: url("../../_global/img/table.png") no-repeat bottom;
}
.listmode {
background: url("../../_global/img/list.png") no-repeat bottom;
}
}
#warning_message {
position: fixed;
background-color: #ff6347;
z-index: 1000;
bottom: 0;
left: 0;
width: 100%;
color: #000;
}

View file

@ -1,13 +0,0 @@
/* Style */
@import "guide";
@import "layout";
@import "article";
@import "pictos";
@import "login";
@import "save";
@import "messages";
/* Tools */
@import "media_queries";
@import "print";
@import "ratatouille";

View file

@ -1,309 +0,0 @@
#content {
margin-top: 2em;
min-height: 30em;
}
footer {
text-align: right;
position: relative;
bottom: 0;
right: 5em;
color: #999;
font-size: 0.8em;
font-style: italic;
z-index: 20;
a {
color: #999;
font-weight: normal;
}
}
.list-entries {
letter-spacing: -5px;
}
.listmode.entry {
width: 100%;
height: inherit;
}
.card-entry-tags {
max-height: 2em;
overflow-y: hidden;
padding: 0;
margin: 0;
}
.card-entry-tags li,
.card-entry-tags span {
display: inline-block;
margin: 0 5px;
padding: 5px 12px;
background-color: rgb(0 0 0 / 60%);
border-radius: 3px;
max-height: 2em;
overflow: hidden;
text-overflow: ellipsis;
}
.card-entry-tags a,
.card-entry-labels a {
text-decoration: none;
font-weight: normal;
color: #fff;
}
.nav-panel-add-tag {
margin-top: 10px;
}
.list-entries + .results {
margin-bottom: 2em;
}
.reading-time,
.created-at {
color: #999;
font-style: italic;
font-weight: normal;
font-size: 0.9em;
}
.estimatedTime small {
position: relative;
top: -1px;
}
.entry {
background-color: #fff;
letter-spacing: normal;
box-shadow: 0 3px 7px rgb(0 0 0 / 30%);
display: inline-block;
width: 32%;
margin-bottom: 1.5em;
vertical-align: top;
margin-right: 1%;
position: relative;
overflow: hidden;
padding: 1.5em 0 3em;
height: 440px;
img.preview {
width: 100%;
object-fit: cover;
height: 100%;
}
&::before {
content: "";
width: 0;
height: 0;
border: 10px solid transparent;
border-bottom-color: #000;
position: absolute;
bottom: 0.7em;
z-index: 10;
right: 1.5em;
transition: all 0.5s ease;
}
&::after {
content: "";
position: absolute;
height: 7px;
width: 100%;
bottom: 0;
left: 0;
background-color: #000;
transition: all 0.5s ease;
}
&:hover {
box-shadow: 0 3px 10px rgb(0 0 0 / 100%);
&::after {
height: 40px;
}
&::before {
bottom: 2.3em;
}
h2 a {
color: #666;
}
.tools {
bottom: 0;
}
}
h2 {
text-transform: none;
margin-bottom: 0;
line-height: 1.2;
margin-left: 5px;
}
&::after {
content: none;
}
a {
display: block;
text-decoration: none;
color: #000;
word-wrap: break-word;
transition: all 0.5s ease;
}
p {
color: #666;
font-size: 0.9em;
line-height: 1.7;
margin: 5px 5px auto;
}
h2 a::first-letter {
text-transform: uppercase;
}
.tools {
position: absolute;
bottom: -40px;
left: 0;
background: #000;
width: 100%;
z-index: 10;
padding-right: 0.5em;
text-align: right;
transition: all 0.5s ease;
a {
color: #666;
text-decoration: none;
display: block;
padding: 0.4em;
&:hover {
color: #fff;
}
}
li {
display: inline-block;
margin-top: 10px;
}
li:first-child {
float: left;
font-size: 0.9em;
max-width: calc(100% - 40px * 4);
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
max-height: 2em;
margin-left: 10px;
}
}
.card-entry-labels {
position: absolute;
top: 100px;
left: -1em;
z-index: 90;
max-width: 50%;
padding-left: 0;
li {
margin: 10px 10px 10px auto;
padding: 5px 12px 5px 25px;
background-color: rgb(0 0 0 / 60%);
border-radius: 0 3px 3px 0;
color: #fff;
cursor: default;
max-height: 2em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
a {
color: #fff;
}
}
}
}
.entry:nth-child(3n+1) {
margin-left: 0;
}
.results {
letter-spacing: -5px;
padding: 0 0 0.5em;
> * {
display: inline-block;
vertical-align: top;
letter-spacing: normal;
width: 50%;
text-align: right;
}
}
div.pagination ul {
text-align: right;
}
.nb-results {
text-align: left;
font-style: italic;
color: #999;
display: inline-flex;
}
div.pagination ul {
a {
color: #999;
text-decoration: none;
&:hover,
&:focus {
text-decoration: underline;
}
}
> * {
display: inline-block;
margin-left: 0.5em;
}
.prev.disabled,
.next.disabled {
display: none;
}
.current {
height: 25px;
padding: 4px 8px;
border: 1px solid #d5d5d5;
text-decoration: none;
font-weight: bold;
color: #000;
background-color: #ccc;
}
}
.card-tag-form {
display: inline-block;
}
.card-tag-form input[type="text"] {
min-width: 20em;
}
.hide,
.hidden {
display: none;
}

View file

@ -1,26 +0,0 @@
.login {
background-color: #333;
#main {
padding: 0;
margin: 0;
}
form {
background-color: #fff;
padding: 1.5em;
box-shadow: 0 1px 8px rgb(0 0 0 / 90%);
width: 20em;
position: absolute;
top: 8em;
left: 50%;
margin-left: -10em;
}
.logo {
position: absolute;
top: 2em;
left: 50%;
margin-left: -55px;
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,177 +0,0 @@
@media screen and (max-width: 1050px) {
.entry {
width: 49%;
}
.entry:nth-child(3n+1) {
margin-left: 1.5%;
}
.entry:nth-child(2n+1) {
margin-left: 0;
}
}
@media screen and (max-width: 900px) {
#article {
width: 80%;
}
.topPosF {
right: 2.5em;
}
}
@media screen and (max-width: 700px) {
.entry {
width: 100%;
margin-left: 0;
}
#display-mode {
display: none;
}
}
@media screen and (max-height: 770px) {
.menu.users,
.menu.internal,
.menu.developer {
display: none;
}
}
@media screen and (max-width: 500px) {
.entry {
width: 100%;
margin-left: 0;
}
body > header {
background-color: #333;
position: fixed;
top: 0;
width: 100%;
height: 3em;
z-index: 11;
}
#links li:last-child {
position: static;
width: auto;
}
#links li:last-child a::before {
content: none;
}
.logo {
width: 1.25em;
height: 1.25em;
left: 0;
top: 0;
}
.login > header {
position: static;
}
.login form {
width: 100%;
position: static;
margin-left: 0;
}
.login .logo {
height: auto;
top: 0.5em;
width: 75px;
margin-left: -37.5px;
}
.desktopHide {
display: block;
position: fixed;
z-index: 20;
top: 0;
right: 0;
border: 0;
width: 2.5em;
height: 2.5em;
cursor: pointer;
background-color: #999;
font-size: 1.2em;
}
.desktopHide:hover,
.desktopHide:focus {
background-color: #fff;
}
#links {
display: none;
width: 100%;
height: auto;
padding-top: 3em;
}
#links.menu--open {
display: block;
}
footer {
position: static;
margin-right: 3em;
}
#main {
margin-left: 1.5em;
padding-right: 1.5em;
position: static;
margin-top: 3em;
}
.card-entry-labels {
display: none;
}
#article_toolbar .topPosF {
display: none;
}
#article {
width: 100%;
}
#article h1 {
font-size: 1.5em;
}
#article_toolbar a {
padding: 0.3em 0.4em 0.2em;
}
#display-mode {
display: none;
}
.popup-form,
#bagit-form,
#search-form {
left: 0;
width: 100%;
border-left: none;
}
.popup-form form,
#bagit-form form,
#search-form form {
width: 100%;
}
}
@media only print {
header h1.logo {
display: none;
}
}

View file

@ -1,50 +0,0 @@
/* ==========================================================================
Messages
========================================================================== */
.messages {
text-align: left;
width: 60%;
margin: auto 17%;
> * {
display: inline-block;
}
.install {
text-align: left;
&.error {
border: 1px solid #c42608;
color: #c00 !important;
background: #fff0ef;
}
&.notice {
border: 1px solid #ebcd41;
color: #000;
background: #fffcd3;
}
&.success {
border: 1px solid #6dc70c;
background: #e0fbcc !important;
}
}
}
.warning {
font-weight: bold;
display: block;
width: 100%;
}
.more-info {
font-size: 0.85em;
line-height: 1.5;
color: #aaa;
a {
color: #aaa;
}
}

View file

@ -1,205 +0,0 @@
/* ==========================================================================
Pictos
========================================================================== */
@font-face {
font-family: icomoon;
src: url("~icomoon-free-npm/Font/IcoMoon-Free.ttf");
font-weight: normal;
font-style: normal;
}
.material-icons {
font-family: "Material Icons";
font-weight: normal;
font-style: normal;
font-size: 1em; /* Preferred icon size */
width: 1em;
height: 1em;
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
/* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
/* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: "liga";
.md-18 { font-size: 18px; }
.md-24 { font-size: 24px; }
.md-36 { font-size: 36px; }
.md-48 { font-size: 48px; }
.vertical-align-middle {
vertical-align: middle !important;
}
}
.icon span,
.icon-image span {
position: absolute;
top: -9999px;
}
[class^="icon-"]::before,
[class*=" icon-"]::before {
font-family: icomoon;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Enable Ligatures ================ */
letter-spacing: 0;
font-feature-settings: "liga";
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-flattr::before {
content: "\ead4";
}
.icon-mail::before {
content: "\ea86";
}
.icon-up-open::before {
content: "\e80b";
}
.icon-star::before {
content: "\e9d9";
}
.icon-check::before {
content: "\ea10";
}
.icon-link::before {
content: "\e9cb";
}
.icon-reply::before {
content: "\e806";
}
.icon-menu::before {
content: "\e9bd";
}
.icon-clock::before {
content: "\e803";
}
.icon-twitter::before {
content: "\ea96";
}
.icon-down-open::before {
content: "\e809";
}
.icon-trash::before {
content: "\e9ac";
}
.icon-delete::before {
content: "\ea0d";
}
.icon-power::before {
content: "\ea14";
}
.icon-arrow-up-thick::before {
content: "\ea3a";
}
.icon-feed::before {
content: "\e808";
}
.icon-print::before {
content: "\e954";
}
.icon-reload::before {
content: "\ea2e";
}
.icon-price-tags::before {
content: "\e936";
}
.icon-eye::before {
content: "\e9ce";
}
.icon-no-eye::before {
content: "\e9d1";
}
.icon-calendar::before {
content: "\e953";
}
.icon-time::before {
content: "\e952";
}
/* .icon-image class, for image-based icons
========================================================================== */
.icon-image {
background: no-repeat center/80%;
padding-right: 1em !important;
padding-left: 1em !important;
}
/* Carrot (http://carrot.org) */
.icon-image--carrot {
background-image: url("../../_global/img/icons/carrot-icon--white.png");
}
/* Diaspora */
.icon-image--diaspora {
background-image: url("../../_global/img/icons/Diaspora-asterisk.svg");
}
/* Unmark.it */
.icon-image--unmark {
background-image: url("../../_global/img/icons/unmark-icon--black.png");
}
/* shaarli */
.icon-image--shaarli {
background-image: url("../../_global/img/icons/shaarli.png");
}
/* ==========================================================================
Icon selected
========================================================================== */
.icon-star.fav::before {
color: #fff;
}
.icon-check.archive::before {
color: #fff;
}

View file

@ -1,63 +0,0 @@
@media print {
/* ### Layout ### */
body {
font-family: serif;
background-color: #fff;
}
@page {
margin: 1cm;
}
img {
max-width: 100% !important;
}
/* ### Content ### */
/* Hide useless blocks */
body > .logo,
#article_toolbar,
#links,
#sort,
body > footer,
.top_link,
div.tools,
header div,
.messages,
.entrie + .results,
#article .mbm a,
#article-informations {
display: none !important;
}
article {
border: none !important;
}
/* Add URL after links */
.vieworiginal a::after {
content: " (" attr(href) ")";
}
/* Add explanation after abbr */
abbr[title]::after {
content: " (" attr(title) ")";
}
/* Change border on current pager item */
.pagination span.current {
border-style: dashed;
}
#main {
width: 100%;
margin: 0;
padding: 0;
}
#article {
width: 100%;
}
}

View file

@ -1,223 +0,0 @@
/*
Ratatouille mini Framework css by Thomas LEBEAU
Base on KNACSS => www.KNACSS.com (2013-10) @author: Raphael Goetter, Alsacreations
and normalize.css
*/
* {
box-sizing: border-box;
}
html {
font-family: sans-serif; /* 1 */
text-size-adjust: 100%; /* 2 */
}
body {
font-size: 1em;
line-height: 1.5;
margin: 0;
}
/* ==========================================================================
Mise en forme
========================================================================== */
h1:first-child,
h2:first-child,
h3:first-child,
h4:first-child,
h5:first-child,
h6:first-child,
p:first-child,
ul:first-child,
ol:first-child,
dl:first-child {
margin-top: 0;
}
code,
kbd,
pre,
samp {
font-family: monospace, serif;
}
pre {
white-space: pre-wrap;
}
.upper {
text-transform: uppercase;
}
.bold {
font-weight: bold;
}
.inner {
margin: 0 auto;
max-width: 61.25em; /* 980px */
}
table,
img,
figure {
max-width: 100%;
height: auto;
}
iframe {
max-width: 100%;
}
.fl {
float: left;
}
.fr {
float: right;
}
table {
border-collapse: collapse;
}
figure {
margin: 0;
}
button,
input,
select,
textarea {
font-family: inherit;
font-size: 100%;
margin: 0;
}
input[type="search"] {
appearance: textfield;
}
/* ==========================================================================
Mise en page
========================================================================== */
.dib {
display: inline-block;
vertical-align: middle;
}
.dnone {
display: none;
}
.dtable {
display: table;
}
.dtable > * {
display: table-row;
}
.dtable > * > * {
display: table-cell;
}
.element-invisible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.small {
font-size: 0.8em;
}
.big {
font-size: 1.2em;
}
/* Width */
.w100 {
width: 100%;
}
.w90 {
width: 90%;
}
.w80 {
width: 80%;
}
.w70 {
width: 70%;
}
.w60 {
width: 60%;
}
.w50 {
width: 50%;
}
.w40 {
width: 40%;
}
.w30 {
width: 30%;
}
.w20 {
width: 20%;
}
.w10 {
width: 10%;
}
/* ==========================================================================
Internet Explorer
========================================================================== */
/* IE8 and IE9 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/* IE8 and IE9 */
audio,
canvas,
video {
display: inline-block;
}
@media screen {
select {
appearance: none;
border-radius: 0;
}
}

View file

@ -1,115 +0,0 @@
/* ==========================================================================
"save a link" related styles
========================================================================== */
.popup-form {
background: rgb(0 0 0 / 50%);
position: absolute;
top: 0;
left: 10em;
z-index: 20;
height: 100%;
width: 100%;
margin: 0;
margin-top: -30% !important;
padding: 2em;
display: none;
border-left: 1px #eee solid;
form {
background-color: #fff;
position: absolute;
top: 0;
left: 0;
z-index: 20;
border: 10px solid #000;
width: 400px;
height: 200px;
padding: 2em;
}
}
#bagit-form-form .addurl {
margin-left: 0;
}
.closeMessage,
.close-button {
background-color: #000;
color: #fff;
font-size: 1.2em;
line-height: 1.6;
width: 1.6em;
height: 1.6em;
text-align: center;
text-decoration: none;
&:hover,
&:focus {
background-color: #999;
color: #000;
}
}
.close-button--popup {
display: inline-block;
position: absolute;
top: 0;
right: 0;
font-size: 1.4em;
}
.active-current {
background-color: #999;
&::after {
content: "";
width: 0;
height: 0;
position: absolute;
border: 10px solid transparent;
border-right-color: #eee;
right: 0;
top: 50%;
margin-top: -10px;
}
}
.opacity03 {
opacity: 0.3;
}
.add-to-wallabag-link-after {
background-color: #000;
color: #fff;
padding: 0 3px 2px;
}
a.add-to-wallabag-link-after {
visibility: hidden;
position: absolute;
opacity: 0;
transition-duration: 2s;
transition-timing-function: ease-out;
}
#article article a:hover + a.add-to-wallabag-link-after,
a.add-to-wallabag-link-after:hover {
opacity: 1;
visibility: visible;
transition-duration: 0.3s;
transition-timing-function: ease-in;
}
a.add-to-wallabag-link-after::after {
content: "w";
}
#add-link-result {
font-weight: bold;
font-size: 0.9em;
}
.btn-clickable {
cursor: pointer;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 B

View file

@ -1,266 +0,0 @@
import $ from 'jquery';
/* Global imports */
import '../_global/index';
/* Shortcuts */
import './js/shortcuts/main';
import './js/shortcuts/entry';
/* Tools */
import toggleSaveLinkForm from './js/uiTools';
/* Theme style */
import './css/index.scss';
$(document).ready(() => {
/* ==========================================================================
Menu
========================================================================== */
$('#menu').click(() => {
$('#links').toggleClass('menu--open');
const content = $('#content');
if (content.hasClass('opacity03')) {
content.removeClass('opacity03');
}
});
/* ==========================================================================
Add tag panel
========================================================================== */
$('#nav-btn-add-tag').on('click', () => {
$('.baggy-add-tag').toggle(100);
$('.nav-panel-menu').addClass('hidden');
$('#tag_label').focus();
return false;
});
/**
* Filters & Export
*/
// no display if filters not available
if ($('div').is('#filters')) {
$('#button_filters').show();
$('#clear_form_filters').on('click', () => {
$('#filters input').val('');
$('#filters :checked').removeAttr('checked');
return false;
});
}
/**
* Close window after adding entry if popup
*/
const currentUrl = window.location.href;
if (currentUrl.match('&closewin=true')) {
window.close();
}
/**
if ($('article').size() > 0) {
const waypoint = new Waypoint({
element: $('.wallabag-title').get(0),
handler: (direction) => {
console.log(direction);
if (direction === 'down') {
$('aside.tags').fadeIn('slow');
} else {
$('aside.tags').fadeOut('slow');
}
},
offset: 250,
});
}
*/
/**
* Tags autocomplete
*/
/**
* Not working on v2
*
$('#value').bind('keydown', (event) => {
if (event.keyCode === $.ui.keyCode.TAB && $(this).data('ui-autocomplete').menu.active) {
event.preventDefault();
}
}).autocomplete({
source: function source(request, response) {
$.getJSON('./?view=tags', {
term: extractLast(request.term),
//id: $(':hidden#entry_id').val()
}, response);
},
search: function search() {
// custom minLength
const term = extractLast(this.value);
return term.length >= 1;
},
focus: function focus() {
// prevent value inserted on focus
return false;
},
select: function select(event, ui) {
const terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push('');
this.value = terms.join(', ');
return false;
},
});
*/
//---------------------------------------------------------------------------
// Close the message box when the user clicks the close icon
//---------------------------------------------------------------------------
$('a.closeMessage').on('click', () => {
$(this).parents('div.messages').slideUp(300, () => { $(this).remove(); });
return false;
});
$('#search-form').hide();
$('#bagit-form').hide();
$('#filters').hide();
$('#download-form').hide();
//---------------------------------------------------------------------------
// Toggle the 'Search' popup in the sidebar
//---------------------------------------------------------------------------
function toggleSearch() {
$('#search-form').toggle();
$('#search').toggleClass('current');
$('#search').toggleClass('active-current');
$('#search-arrow').toggleClass('arrow-down');
if ($('#search').hasClass('current')) {
$('#content').addClass('opacity03');
} else {
$('#content').removeClass('opacity03');
}
}
//---------------------------------------------------------------------------
// Toggle the 'Filter' popup on entries list
//---------------------------------------------------------------------------
function toggleFilter() {
$('#filters').toggle();
}
//---------------------------------------------------------------------------
// Toggle the 'Download' popup on entries list
//---------------------------------------------------------------------------
function toggleDownload() {
$('#download-form').toggle();
}
//---------------------------------------------------------------------------
// Toggle the 'Save a Link' popup in the sidebar
//---------------------------------------------------------------------------
function toggleBagit() {
$('#bagit-form').toggle();
$('#bagit').toggleClass('current');
$('#bagit').toggleClass('active-current');
$('#bagit-arrow').toggleClass('arrow-down');
if ($('#bagit').hasClass('current')) {
$('#content').addClass('opacity03');
} else {
$('#content').removeClass('opacity03');
}
}
//---------------------------------------------------------------------------
// Close all #links popups in the sidebar
//---------------------------------------------------------------------------
function closePopups() {
$('#links .messages').hide();
$('#links > li > a').removeClass('active-current');
$('#links > li > a').removeClass('current');
$('[id$=-arrow]').removeClass('arrow-down');
$('#content').removeClass('opacity03');
}
$('#search').click(() => {
closePopups();
toggleSearch();
$('#searchfield').focus();
});
$('.filter-btn').click(() => {
closePopups();
toggleFilter();
});
$('.download-btn').click(() => {
closePopups();
toggleDownload();
});
$('#bagit').click(() => {
closePopups();
toggleBagit();
$('#plainurl').focus();
});
$('#search-form-close').click(() => {
toggleSearch();
});
$('#filter-form-close').click(() => {
toggleFilter();
});
$('#download-form-close').click(() => {
toggleDownload();
});
$('#bagit-form-close').click(() => {
toggleBagit();
});
const bagitFormForm = $('#bagit-form-form');
/* ==========================================================================
bag it link and close button
========================================================================== */
// send 'bag it link' form request via ajax
bagitFormForm.submit((event) => {
$('body').css('cursor', 'wait');
$('#add-link-result').empty();
$.ajax({
type: bagitFormForm.attr('method'),
url: bagitFormForm.attr('action'),
data: bagitFormForm.serialize(),
success: function success() {
$('#add-link-result').html('Done!');
$('#plainurl').val('').blur('');
$('body').css('cursor', 'auto');
},
error: function error() {
$('#add-link-result').html('Failed!');
$('body').css('cursor', 'auto');
},
});
event.preventDefault();
});
/* ==========================================================================
Process all links inside an article
========================================================================== */
$('article a[href^="http"]').after(
() => `<a href="${$(this).attr('href')}" class="add-to-wallabag-link-after" title="add to wallabag"></a>`,
);
$('.add-to-wallabag-link-after').click((event) => {
toggleSaveLinkForm($(this).attr('href'), event);
event.preventDefault();
});
});

View file

@ -1,8 +0,0 @@
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
export default { split, extractLast };

View file

@ -1,26 +0,0 @@
import Mousetrap from 'mousetrap';
import $ from 'jquery';
$(document).ready(() => {
if ($('#article').length > 0) {
/* Article view */
Mousetrap.bind('o', () => {
$('div#article_toolbar ul.links a.original')[0].click();
});
/* mark as favorite */
Mousetrap.bind('f', () => {
$('div#article_toolbar ul.links a.favorite')[0].click();
});
/* mark as read */
Mousetrap.bind('a', () => {
$('div#article_toolbar ul.links a.markasread')[0].click();
});
/* delete */
Mousetrap.bind('del', () => {
$('div#article_toolbar ul.links a.delete')[0].click();
});
}
});

View file

@ -1,10 +0,0 @@
import $ from 'jquery';
import Mousetrap from 'mousetrap';
$(document).ready(() => {
Mousetrap.bind('s', () => {
$('#search').trigger('click');
$('#search_entry_term').focus();
return false;
});
});

View file

@ -1,35 +0,0 @@
import $ from 'jquery';
function toggleSaveLinkForm(url, event) {
$('#add-link-result').empty();
const $bagit = $('#bagit');
const $bagitForm = $('#bagit-form');
$bagit.toggleClass('active-current');
// only if bag-it link is not presented on page
if ($bagit.length === 0) {
if (event !== 'undefined' && event) {
$bagitForm.css({ position: 'absolute', top: event.pageY, left: event.pageX - 200 });
} else {
$bagitForm.css({ position: 'relative', top: 'auto', left: 'auto' });
}
}
const searchForm = $('#search-form');
const plainUrl = $('#plainurl');
if (searchForm.length !== 0) {
$('#search').removeClass('current');
$('#search-arrow').removeClass('arrow-down');
searchForm.hide();
}
$bagitForm.toggle();
$('#content').toggleClass('opacity03');
if (url !== 'undefined' && url) {
plainUrl.val(url);
}
plainUrl.focus();
}
export default toggleSaveLinkForm;

View file

@ -211,6 +211,10 @@ a.original:not(.waves-effect) {
display: flex;
}
.card-tag-delete {
margin-left: 10px;
}
.card-tag-labels {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));

View file

@ -123,10 +123,6 @@ a.icon-image {
margin: 7px 1.5px 0 0;
}
&.carrot::before {
background: url("../../_global/img/icons/carrot-icon--black.png") no-repeat center/90%;
}
&.diaspora::before {
background: url("../../_global/img/icons/diaspora-icon--black.png") no-repeat center/80%;
}

View file

@ -222,4 +222,10 @@ $(document).ready(() => {
});
});
}
$('form[name="form_mass_action"] input[name="tags"]').on('keydown', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
$('form[name="form_mass_action"] button[name="tag"]').trigger('click');
}
});
});

View file

@ -39,8 +39,10 @@ twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
form_themes:
- "LexikFormFilterBundle:Form:form_div_layout.html.twig"
exception_controller: wallabag_core.exception_controller:showAction
- "@LexikFormFilter/Form/form_div_layout.html.twig"
exception_controller: Wallabag\CoreBundle\Controller\ExceptionController:showAction
globals:
registration_enabled: '%fosuser_registration%'
# Doctrine Configuration
doctrine:
@ -167,9 +169,8 @@ nelmio_cors:
liip_theme:
load_controllers: false
themes:
- baggy
- material
autodetect_theme: wallabag_core.helper.detect_active_theme
autodetect_theme: Wallabag\CoreBundle\Helper\DetectActiveTheme
path_patterns:
bundle_resource:
@ -210,14 +211,14 @@ scheb_two_factor:
google:
enabled: "%twofactor_auth%"
issuer: "%server_name%"
template: WallabagUserBundle:Authentication:form.html.twig
template: "@WallabagUser/Authentication/form.html.twig"
email:
enabled: "%twofactor_auth%"
sender_email: "%twofactor_sender%"
digits: 6
template: WallabagUserBundle:Authentication:form.html.twig
mailer: wallabag_user.auth_code_mailer
template: "@WallabagUser/Authentication/form.html.twig"
mailer: Wallabag\UserBundle\Mailer\AuthCodeMailer
kphoen_rulerz:
targets:
@ -404,7 +405,7 @@ sensio_framework_extra:
httplug:
clients:
wallabag_core:
factory: 'wallabag_core.http_client_factory'
factory: Wallabag\CoreBundle\Helper\HttpClientFactory
config:
defaults:
timeout: 10

View file

@ -33,7 +33,7 @@ rest :
homepage:
path: "/{page}"
defaults:
_controller: WallabagCoreBundle:Entry:showUnread
_controller: 'Wallabag\CoreBundle\Controller\EntryController::showUnreadAction'
page : 1
requirements:
page: \d+
@ -41,25 +41,13 @@ homepage:
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
fos_user_security_login:
path: /login
defaults:
_controller: Wallabag\UserBundle\Controller\SecurityController::loginAction
methods: [GET, POST]
fos_user_registration_register:
path: /register
defaults:
_controller: Wallabag\UserBundle\Controller\RegistrationController::registerAction
methods: [GET, POST]
fos_oauth_server_token:
resource: "@FOSOAuthServerBundle/Resources/config/routing/token.xml"
craue_config_settings_modify:
path: /settings
defaults:
_controller: CraueConfigBundle:Settings:modify
_controller: 'Craue\ConfigBundle\Controller\SettingsController::modifyAction'
fos_js_routing:
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"
@ -76,34 +64,34 @@ fos_js_routing:
rss_to_atom_unread:
path: /{username}/{token}/unread.xml
defaults:
_controller: FrameworkBundle:Redirect:redirect
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
route: unread_feed
permanent: true
rss_to_atom_archive:
path: /{username}/{token}/archive.xml
defaults:
_controller: FrameworkBundle:Redirect:redirect
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
route: archive_feed
permanent: true
rss_to_atom_starred:
path: /{username}/{token}/starred.xml
defaults:
_controller: FrameworkBundle:Redirect:redirect
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
route: starred_feed
permanent: true
rss_to_atom_all:
path: /{username}/{token}/all.xml
defaults:
_controller: FrameworkBundle:Redirect:redirect
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
route: all_feed
permanent: true
rss_to_atom_tags:
path: /{username}/{token}/tags/{slug}.xml
defaults:
_controller: FrameworkBundle:Redirect:redirect
_controller: 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction'
route: tag_feed
permanent: true

View file

@ -9,7 +9,7 @@ security:
providers:
administrators:
entity:
class: WallabagUserBundle:User
class: 'Wallabag\UserBundle\Entity\User'
property: username
fos_userbundle:
id: fos_user.user_provider.username_email

View file

@ -1,40 +1,113 @@
imports:
- { resource: services_rabbit.yml }
- { resource: services_redis.yml }
- { resource: parameters_addons.yml }
parameters:
lexik_form_filter.get_filter.doctrine_orm.class: Wallabag\CoreBundle\Event\Subscriber\CustomDoctrineORMSubscriber
services:
twig.extension.text:
_defaults:
autowire: true
autoconfigure: true
public: true
bind:
$rootDir: '%kernel.root_dir%'
$debug: '%kernel.debug%'
$defaultLocale: '%kernel.default_locale%'
$wallabagUrl: '%domain_name%'
$tablePrefix: "%database_table_prefix%"
$defaultTheme: '%wallabag_core.theme%'
$encryptionKeyPath: "%wallabag_core.site_credentials.encryption_key_path%"
$fetchingErrorMessageTitle: "%wallabag_core.fetching_error_message_title%"
$fetchingErrorMessage: '%wallabag_core.fetching_error_message%'
$languages: '%wallabag_core.languages%'
$lifeTime: '%wallabag_core.cache_lifetime%'
$cookieFile: "%kernel.cache_dir%/cookiejar.json"
$logoPath: 'web/img/appicon/apple-touch-icon-152.png'
$registrationEnabled: '%fosuser_registration%'
$restrictedAccess: '@=service(''craue_config'').get(''restricted_access'')'
$senderEmail: "%scheb_two_factor.email.sender_email%"
$senderName: "%scheb_two_factor.email.sender_name%"
$storeArticleHeaders: '@=service(''craue_config'').get(''store_article_headers'')'
$supportUrl: '@=service(''craue_config'').get(''wallabag_support_url'')'
$themes: '%liip_theme.themes%'
Wallabag\AnnotationBundle\:
resource: '../../src/Wallabag/AnnotationBundle/*'
exclude: '../../src/Wallabag/AnnotationBundle/{Controller,Entity}'
Wallabag\ApiBundle\:
resource: '../../src/Wallabag/ApiBundle/*'
exclude: '../../src/Wallabag/ApiBundle/{Controller,Entity}'
Wallabag\CoreBundle\:
resource: '../../src/Wallabag/CoreBundle/*'
exclude: '../../src/Wallabag/CoreBundle/{Controller,Entity}'
Wallabag\ImportBundle\:
resource: '../../src/Wallabag/ImportBundle/*'
exclude: '../../src/Wallabag/ImportBundle/{Consumer,Controller,Redis}'
Wallabag\UserBundle\:
resource: '../../src/Wallabag/UserBundle/*'
exclude: '../../src/Wallabag/UserBundle/{Controller,Entity}'
Doctrine\DBAL\Connection:
alias: doctrine.dbal.default_connection
Doctrine\ORM\EntityManagerInterface:
alias: doctrine.orm.entity_manager
Doctrine\Persistence\ManagerRegistry:
alias: doctrine
Craue\ConfigBundle\Util\Config:
alias: craue_config
JMS\Serializer\SerializerInterface:
alias: jms_serializer
Lexik\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface:
alias: lexik_form_filter.query_builder_updater
Liip\ThemeBundle\ActiveTheme:
alias: liip_theme.active_theme
Scheb\TwoFactorBundle\Security\TwoFactor\Provider\Google\GoogleAuthenticatorInterface:
alias: scheb_two_factor.security.google_authenticator
Symfony\Component\HttpFoundation\Session\SessionInterface:
alias: session
Symfony\Component\EventDispatcher\EventDispatcherInterface:
alias: event_dispatcher
Symfony\Component\Form\FormFactoryInterface:
alias: form.factory
Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface:
alias: security.token_storage
Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface:
alias: security.authorization_checker
Symfony\Component\Translation\TranslatorInterface:
alias: translator
Symfony\Component\Validator\Validator\ValidatorInterface:
alias: validator
FOS\UserBundle\Model\UserManagerInterface:
alias: fos_user.user_manager
Twig_Extensions_Extension_Text:
class: Twig_Extensions_Extension_Text
tags:
- { name: twig.extension }
wallabag.twig_extension:
class: Wallabag\CoreBundle\Twig\WallabagExtension
MatomoTwigExtension\MatomoTwigExtension:
public: false
arguments:
- "@wallabag_core.entry_repository"
- "@wallabag_core.tag_repository"
- "@security.token_storage"
- "%wallabag_core.cache_lifetime%"
- "@translator"
- "%kernel.root_dir%"
tags:
- { name: twig.extension }
wallabag.twig_matomo_extension:
class: MatomoTwigExtension\MatomoTwigExtension
public: false
tags:
- { name: twig.extension }
wallabag.locale_listener:
class: Wallabag\CoreBundle\Event\Listener\LocaleListener
arguments: ["%kernel.default_locale%"]
tags:
- { name: kernel.event_subscriber }
wallabag.user_locale_listener:
class: Wallabag\CoreBundle\Event\Listener\UserLocaleListener
arguments: ["@session"]
Wallabag\CoreBundle\Event\Listener\UserLocaleListener:
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
@ -42,6 +115,148 @@ services:
class: Symfony\Component\Cache\Adapter\FilesystemAdapter
public: false
arguments:
- 'craue_config'
- 0
- '%kernel.cache_dir%'
$namespace: 'craue_config'
$defaultLifetime: 0
$directory: '%kernel.cache_dir%'
Wallabag\CoreBundle\ParamConverter\UsernameFeedTokenConverter:
tags:
- { name: request.param_converter, converter: username_feed_token_converter }
Wallabag\CoreBundle\Event\Subscriber\TablePrefixSubscriber:
tags:
- { name: doctrine.event_subscriber }
Graby\Graby:
arguments:
$config:
error_message: '%wallabag_core.fetching_error_message%'
error_message_title: '%wallabag_core.fetching_error_message_title%'
calls:
- [ setLogger, [ "@logger" ] ]
tags:
- { name: monolog.logger, channel: graby }
Graby\SiteConfig\ConfigBuilder:
arguments:
$config: {}
wallabag_core.http_client:
alias: 'httplug.client.wallabag_core'
Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder:
tags:
- { name: monolog.logger, channel: graby }
# service alias override
bd_guzzle_site_authenticator.site_config_builder:
alias: Wallabag\CoreBundle\GuzzleSiteAuthenticator\GrabySiteConfigBuilder
Wallabag\CoreBundle\Helper\HttpClientFactory:
calls:
- ["addSubscriber", ["@bd_guzzle_site_authenticator.authenticator_subscriber"]]
Wallabag\CoreBundle\Operator\PHP\Matches:
tags:
- { name: rulerz.operator, target: native, operator: matches }
Wallabag\CoreBundle\Operator\Doctrine\Matches:
tags:
- { name: rulerz.operator, target: doctrine, operator: matches, inline: true }
Wallabag\CoreBundle\Operator\PHP\NotMatches:
tags:
- { name: rulerz.operator, target: native, operator: notmatches }
Wallabag\CoreBundle\Operator\Doctrine\NotMatches:
tags:
- { name: rulerz.operator, target: doctrine, operator: notmatches, inline: true }
Wallabag\CoreBundle\Operator\PHP\PatternMatches:
tags:
- { name: rulerz.operator, target: native, operator: "~" }
Predis\Client:
arguments:
$parameters:
scheme: '%redis_scheme%'
host: '%redis_host%'
port: '%redis_port%'
path: '%redis_path%'
password: '%redis_password%'
Wallabag\CoreBundle\Controller\ExceptionController: ~
Wallabag\CoreBundle\Event\Subscriber\SQLiteCascadeDeleteSubscriber:
tags:
- { name: doctrine.event_subscriber }
Wallabag\CoreBundle\Event\Subscriber\DownloadImagesSubscriber:
arguments:
$enabled: '@=service(''craue_config'').get(''download_images_enabled'')'
Wallabag\CoreBundle\Helper\DownloadImages:
arguments:
$baseFolder: "%kernel.project_dir%/web/assets/images"
wallabag_core.entry.download_images.client:
alias: 'httplug.client.wallabag_core.entry.download_images'
Wallabag\UserBundle\EventListener\CreateConfigListener:
arguments:
$theme: "%wallabag_core.theme%"
$itemsOnPage: "%wallabag_core.items_on_page%"
$feedLimit: "%wallabag_core.feed_limit%"
$language: "%wallabag_core.language%"
$readingSpeed: "%wallabag_core.reading_speed%"
$actionMarkAsRead: "%wallabag_core.action_mark_as_read%"
$listMode: "%wallabag_core.list_mode%"
Wallabag\UserBundle\EventListener\AuthenticationFailureListener:
tags:
- { name: kernel.event_listener, event: security.authentication.failure, method: onAuthenticationFailure }
wallabag_import.pocket.client:
alias: 'httplug.client.wallabag_import.pocket.client'
Wallabag\ImportBundle\Import\PocketImport:
calls:
- [ setClient, [ "@wallabag_import.pocket.client" ] ]
tags:
- { name: wallabag_import.import, alias: pocket }
Wallabag\ImportBundle\Import\WallabagV1Import:
tags:
- { name: wallabag_import.import, alias: wallabag_v1 }
Wallabag\ImportBundle\Import\WallabagV2Import:
tags:
- { name: wallabag_import.import, alias: wallabag_v2 }
Wallabag\ImportBundle\Import\ElcuratorImport:
tags:
- { name: wallabag_import.import, alias: elcurator }
Wallabag\ImportBundle\Import\ReadabilityImport:
tags:
- { name: wallabag_import.import, alias: readability }
Wallabag\ImportBundle\Import\InstapaperImport:
tags:
- { name: wallabag_import.import, alias: instapaper }
Wallabag\ImportBundle\Import\PinboardImport:
tags:
- { name: wallabag_import.import, alias: pinboard }
Wallabag\ImportBundle\Import\DeliciousImport:
tags:
- { name: wallabag_import.import, alias: delicious }
Wallabag\ImportBundle\Import\FirefoxImport:
tags:
- { name: wallabag_import.import, alias: firefox }
Wallabag\ImportBundle\Import\ChromeImport:
tags:
- { name: wallabag_import.import, alias: chrome }

View file

@ -0,0 +1,56 @@
# RabbitMQ stuff
services:
_defaults:
autowire: true
autoconfigure: true
public: true
wallabag_import.consumer.amqp.pocket:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\PocketImport'
wallabag_import.consumer.amqp.readability:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\ReadabilityImport'
wallabag_import.consumer.amqp.instapaper:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\InstapaperImport'
wallabag_import.consumer.amqp.pinboard:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\PinboardImport'
wallabag_import.consumer.amqp.delicious:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\DeliciousImport'
wallabag_import.consumer.amqp.wallabag_v1:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\WallabagV1Import'
wallabag_import.consumer.amqp.wallabag_v2:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\WallabagV2Import'
wallabag_import.consumer.amqp.elcurator:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\ElcuratorImport'
wallabag_import.consumer.amqp.firefox:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\FirefoxImport'
wallabag_import.consumer.amqp.chrome:
class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
arguments:
$import: '@Wallabag\ImportBundle\Import\ChromeImport'

View file

@ -1,11 +1,15 @@
# Redis stuff
services:
_defaults:
autowire: true
autoconfigure: true
public: true
# readability
wallabag_import.queue.redis.readability:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.readability"
$queueName: "wallabag.import.readability"
wallabag_import.producer.redis.readability:
class: Wallabag\ImportBundle\Redis\Producer
@ -15,18 +19,13 @@ services:
wallabag_import.consumer.redis.readability:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.readability.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\ReadabilityImport'
# instapaper
wallabag_import.queue.redis.instapaper:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.instapaper"
$queueName: "wallabag.import.instapaper"
wallabag_import.producer.redis.instapaper:
class: Wallabag\ImportBundle\Redis\Producer
@ -36,18 +35,13 @@ services:
wallabag_import.consumer.redis.instapaper:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.instapaper.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\InstapaperImport'
# pinboard
wallabag_import.queue.redis.pinboard:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.pinboard"
$queueName: "wallabag.import.pinboard"
wallabag_import.producer.redis.pinboard:
class: Wallabag\ImportBundle\Redis\Producer
@ -57,18 +51,13 @@ services:
wallabag_import.consumer.redis.pinboard:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.pinboard.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\PinboardImport'
# delicious
wallabag_import.queue.redis.delicious:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.delicious"
$queueName: "wallabag.import.delicious"
wallabag_import.producer.redis.delicious:
class: Wallabag\ImportBundle\Redis\Producer
@ -78,18 +67,13 @@ services:
wallabag_import.consumer.redis.delicious:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.delicious.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\DeliciousImport'
# pocket
wallabag_import.queue.redis.pocket:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.pocket"
$queueName: "wallabag.import.pocket"
wallabag_import.producer.redis.pocket:
class: Wallabag\ImportBundle\Redis\Producer
@ -99,18 +83,13 @@ services:
wallabag_import.consumer.redis.pocket:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.pocket.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\PocketImport'
# wallabag v1
wallabag_import.queue.redis.wallabag_v1:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.wallabag_v1"
$queueName: "wallabag.import.wallabag_v1"
wallabag_import.producer.redis.wallabag_v1:
class: Wallabag\ImportBundle\Redis\Producer
@ -120,18 +99,13 @@ services:
wallabag_import.consumer.redis.wallabag_v1:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.wallabag_v1.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\WallabagV1Import'
# wallabag v2
wallabag_import.queue.redis.wallabag_v2:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.wallabag_v2"
$queueName: "wallabag.import.wallabag_v2"
wallabag_import.producer.redis.wallabag_v2:
class: Wallabag\ImportBundle\Redis\Producer
@ -141,18 +115,13 @@ services:
wallabag_import.consumer.redis.wallabag_v2:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.wallabag_v2.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\WallabagV2Import'
# elcurator
wallabag_import.queue.redis.elcurator:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.elcurator"
$queueName: "wallabag.import.elcurator"
wallabag_import.producer.redis.elcurator:
class: Wallabag\ImportBundle\Redis\Producer
@ -162,18 +131,13 @@ services:
wallabag_import.consumer.redis.elcurator:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.elcurator.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\ElcuratorImport'
# firefox
wallabag_import.queue.redis.firefox:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.firefox"
$queueName: "wallabag.import.firefox"
wallabag_import.producer.redis.firefox:
class: Wallabag\ImportBundle\Redis\Producer
@ -183,18 +147,13 @@ services:
wallabag_import.consumer.redis.firefox:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.firefox.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\FirefoxImport'
# chrome
wallabag_import.queue.redis.chrome:
class: Simpleue\Queue\RedisQueue
arguments:
- "@wallabag_core.redis.client"
- "wallabag.import.chrome"
$queueName: "wallabag.import.chrome"
wallabag_import.producer.redis.chrome:
class: Wallabag\ImportBundle\Redis\Producer
@ -204,8 +163,4 @@ services:
wallabag_import.consumer.redis.chrome:
class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
arguments:
- "@doctrine.orm.entity_manager"
- "@wallabag_user.user_repository"
- "@wallabag_import.chrome.import"
- "@event_dispatcher"
- "@logger"
$import: '@Wallabag\ImportBundle\Import\ChromeImport'

View file

@ -9,11 +9,11 @@ services:
public: true
wallabag_core.entry_repository.test:
alias: wallabag_core.entry_repository
alias: Wallabag\CoreBundle\Repository\EntryRepository
public: true
wallabag_user.user_repository.test:
alias: wallabag_user.user_repository
alias: Wallabag\UserBundle\Repository\UserRepository
public: true
filesystem_cache:

View file

@ -41,10 +41,6 @@ wallabag_core:
name: share_public
value: 1
section: entry
-
name: carrot
value: 1
section: entry
-
name: share_diaspora
value: 1
@ -65,18 +61,10 @@ wallabag_core:
name: share_shaarli
value: 1
section: entry
-
name: share_scuttle
value: 1
section: entry
-
name: shaarli_url
value: https://myshaarli.com
section: entry
-
name: scuttle_url
value: https://scuttle.org
section: entry
-
name: share_mail
value: 1
@ -178,9 +166,6 @@ wallabag_core:
-
rule: _all ~ "https?://www\.lemonde\.fr/tiny.*"
wallabag_user:
registration_enabled: "%fosuser_registration%"
wallabag_import:
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain', 'text/csv']
resource_dir: "%kernel.project_dir%/web/uploads/import"

View file

@ -7,7 +7,6 @@ const rootDir = path.resolve(__dirname, '../../../');
module.exports = {
entry: {
material: path.join(rootDir, './app/Resources/static/themes/material/index.js'),
baggy: path.join(rootDir, './app/Resources/static/themes/baggy/index.js'),
public: path.join(rootDir, './app/Resources/static/themes/_global/share.js'),
},
output: {

View file

@ -1,146 +0,0 @@
#!/usr/bin/env php
<?php
require_once dirname(__FILE__).'/../var/SymfonyRequirements.php';
$lineSize = 70;
$symfonyRequirements = new SymfonyRequirements();
$iniPath = $symfonyRequirements->getPhpIniConfigPath();
echo_title('Symfony Requirements Checker');
echo '> PHP is using the following php.ini file:'.PHP_EOL;
if ($iniPath) {
echo_style('green', ' '.$iniPath);
} else {
echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!');
}
echo PHP_EOL.PHP_EOL;
echo '> Checking Symfony requirements:'.PHP_EOL.' ';
$messages = array();
foreach ($symfonyRequirements->getRequirements() as $req) {
if ($helpText = get_error_message($req, $lineSize)) {
echo_style('red', 'E');
$messages['error'][] = $helpText;
} else {
echo_style('green', '.');
}
}
$checkPassed = empty($messages['error']);
foreach ($symfonyRequirements->getRecommendations() as $req) {
if ($helpText = get_error_message($req, $lineSize)) {
echo_style('yellow', 'W');
$messages['warning'][] = $helpText;
} else {
echo_style('green', '.');
}
}
if ($checkPassed) {
echo_block('success', 'OK', 'Your system is ready to run Symfony projects');
} else {
echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects');
echo_title('Fix the following mandatory requirements', 'red');
foreach ($messages['error'] as $helpText) {
echo ' * '.$helpText.PHP_EOL;
}
}
if (!empty($messages['warning'])) {
echo_title('Optional recommendations to improve your setup', 'yellow');
foreach ($messages['warning'] as $helpText) {
echo ' * '.$helpText.PHP_EOL;
}
}
echo PHP_EOL;
echo_style('title', 'Note');
echo ' The command console could use a different php.ini file'.PHP_EOL;
echo_style('title', '~~~~');
echo ' than the one used with your web server. To be on the'.PHP_EOL;
echo ' safe side, please check the requirements from your web'.PHP_EOL;
echo ' server using the ';
echo_style('yellow', 'web/config.php');
echo ' script.'.PHP_EOL;
echo PHP_EOL;
exit($checkPassed ? 0 : 1);
function get_error_message(Requirement $requirement, $lineSize)
{
if ($requirement->isFulfilled()) {
return;
}
$errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL;
$errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL;
return $errorMessage;
}
function echo_title($title, $style = null)
{
$style = $style ?: 'title';
echo PHP_EOL;
echo_style($style, $title.PHP_EOL);
echo_style($style, str_repeat('~', strlen($title)).PHP_EOL);
echo PHP_EOL;
}
function echo_style($style, $message)
{
// ANSI color codes
$styles = array(
'reset' => "\033[0m",
'red' => "\033[31m",
'green' => "\033[32m",
'yellow' => "\033[33m",
'error' => "\033[37;41m",
'success' => "\033[37;42m",
'title' => "\033[34m",
);
$supports = has_color_support();
echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : '');
}
function echo_block($style, $title, $message)
{
$message = ' '.trim($message).' ';
$width = strlen($message);
echo PHP_EOL.PHP_EOL;
echo_style($style, str_repeat(' ', $width));
echo PHP_EOL;
echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT));
echo PHP_EOL;
echo_style($style, $message);
echo PHP_EOL;
echo_style($style, str_repeat(' ', $width));
echo PHP_EOL;
}
function has_color_support()
{
static $support;
if (null === $support) {
if (DIRECTORY_SEPARATOR == '\\') {
$support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
} else {
$support = function_exists('posix_isatty') && @posix_isatty(STDOUT);
}
}
return $support;
}

View file

@ -37,6 +37,7 @@
"ext-ctype": "*",
"ext-curl": "*",
"ext-dom": "*",
"ext-filter": "*",
"ext-gd": "*",
"ext-hash": "*",
"ext-iconv": "*",
@ -50,26 +51,34 @@
"ext-tidy": "*",
"ext-tokenizer": "*",
"ext-xml": "*",
"composer": "< 2.3",
"babdev/pagerfanta-bundle": "^2.5",
"bdunogier/guzzle-site-authenticator": "^1.0.0",
"craue/config-bundle": "^2.3.0",
"defuse/php-encryption": "^2.1",
"doctrine/collections": "^1.6",
"doctrine/common": "^2.13",
"doctrine/dbal": "^2.13",
"doctrine/doctrine-bundle": "^1.9",
"doctrine/doctrine-cache-bundle": "^1.3",
"doctrine/doctrine-migrations-bundle": "^1.3",
"doctrine/event-manager": "^1.1",
"doctrine/migrations": "^1.8",
"doctrine/orm": "^2.6",
"doctrine/persistence": "^1.3",
"enshrined/svg-sanitize": "^0.15.4",
"friendsofsymfony/jsrouting-bundle": "^2.2",
"friendsofsymfony/oauth-server-bundle": "^1.5",
"friendsofsymfony/rest-bundle": "~2.1",
"friendsofsymfony/user-bundle": "2.0.*",
"friendsofsymfony/user-bundle": "2.1.*",
"guzzlehttp/guzzle": "^5.3.1",
"guzzlehttp/psr7": "^1.8",
"html2text/html2text": "^4.1",
"incenteev/composer-parameter-handler": "^2.1",
"j0k3r/graby": "^2.0",
"javibravo/simpleue": "^2.0",
"jms/serializer": "^3.17",
"jms/serializer-bundle": "~3.6",
"kphoen/rulerz": "^0.21",
"kphoen/rulerz-bundle": "~0.13",
"laminas/laminas-code": "^3.4",
"laminas/laminas-diactoros": "^2.3",
@ -81,31 +90,41 @@
"nelmio/cors-bundle": "~1.5",
"ocramius/proxy-manager": "^2.1.1",
"pagerfanta/pagerfanta": "^2.4",
"php-amqplib/php-amqplib": "^2.12",
"php-amqplib/rabbitmq-bundle": "^1.14",
"php-http/client-common": "^2.4",
"php-http/discovery": "^1.14",
"php-http/guzzle5-adapter": "^2.0",
"php-http/httplug": "^2.3",
"php-http/httplug-bundle": "^1.14",
"php-http/message": "^1.13",
"php-http/message-factory": "^1.0",
"pragmarx/recovery": "^0.2.0",
"predis/predis": "^1.1.3",
"psr/http-message": "^1.0",
"psr/log": "^1.1",
"scheb/two-factor-bundle": "^4.11.0",
"sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^5.2",
"sentry/sentry-symfony": "3.5.3",
"stof/doctrine-extensions-bundle": "^1.2",
"swiftmailer/swiftmailer": "^6.3",
"symfony/dom-crawler": "^3.4",
"symfony/monolog-bundle": "^3.1",
"symfony/swiftmailer-bundle": "^3.2",
"symfony/symfony": "3.4.*",
"tecnickcom/tcpdf": "^6.3.0",
"twig/extensions": "^1.5",
"twig/twig": "^2.15",
"wallabag/php-mobi": "~1.0",
"wallabag/phpepub": "^4.0.10",
"willdurand/hateoas": "^3.8",
"willdurand/hateoas-bundle": "~2.1"
},
"require-dev": {
"dama/doctrine-test-bundle": "^6.0",
"doctrine/doctrine-fixtures-bundle": "~3.0",
"friendsofphp/php-cs-fixer": "~2.13",
"guzzlehttp/psr7": "^1.0",
"friendsoftwig/twigcs": "^4.1",
"m6web/redis-mock": "^5.0",
"php-http/mock-client": "^1.0",
"phpstan/extension-installer": "^1.0",
@ -122,10 +141,8 @@
"scripts": {
"post-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
"bin/console cache:clear --no-warmup",
"bin/console assets:install web --symlink --relative"
],
"post-install-cmd": [
"@post-cmd"
@ -135,12 +152,6 @@
]
},
"extra": {
"symfony-app-dir": "app",
"symfony-bin-dir": "bin",
"symfony-var-dir": "var",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
}

353
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "5aec7c6af1a3c05510db2e1243da8db5",
"content-hash": "e01063964db1acb5dd93d6d0a8d309d8",
"packages": [
{
"name": "babdev/pagerfanta-bundle",
@ -2549,26 +2549,27 @@
},
{
"name": "friendsofsymfony/user-bundle",
"version": "v2.0.2",
"version": "v2.1.2",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfSymfony/FOSUserBundle.git",
"reference": "2fc8a023d7ab482321cf7ec810ed49eab40eb50f"
"reference": "1049935edd24ec305cc6cfde1875372fa9600446"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/2fc8a023d7ab482321cf7ec810ed49eab40eb50f",
"reference": "2fc8a023d7ab482321cf7ec810ed49eab40eb50f",
"url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/1049935edd24ec305cc6cfde1875372fa9600446",
"reference": "1049935edd24ec305cc6cfde1875372fa9600446",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1 || ^2",
"php": "^5.5.9 || ^7.0",
"symfony/form": "^2.7 || ^3.0",
"symfony/framework-bundle": "^2.7 || ^3.0",
"symfony/security-bundle": "^2.7 || ^3.0",
"symfony/templating": "^2.7 || ^3.0",
"symfony/twig-bundle": "^2.7 || ^3.0",
"symfony/form": "^2.8 || ^3.0 || ^4.0",
"symfony/framework-bundle": "^2.8 || ^3.0 || ^4.0",
"symfony/security-bundle": "^2.8 || ^3.0 || ^4.0",
"symfony/templating": "^2.8 || ^3.0 || ^4.0",
"symfony/twig-bundle": "^2.8 || ^3.0 || ^4.0",
"symfony/validator": "^2.8 || ^3.0 || ^4.0",
"twig/twig": "^1.28 || ^2.0"
},
"conflict": {
@ -2577,18 +2578,17 @@
},
"require-dev": {
"doctrine/doctrine-bundle": "^1.3",
"friendsofphp/php-cs-fixer": "^1.11",
"phpunit/phpunit": "~4.8|~5.0",
"friendsofphp/php-cs-fixer": "^2.2",
"phpunit/phpunit": "^4.8.35|^5.7.11|^6.5",
"swiftmailer/swiftmailer": "^4.3 || ^5.0 || ^6.0",
"symfony/console": "^2.7 || ^3.0",
"symfony/phpunit-bridge": "^2.7 || ^3.0",
"symfony/validator": "^2.7 || ^3.0",
"symfony/yaml": "^2.7 || ^3.0"
"symfony/console": "^2.8 || ^3.0 || ^4.0",
"symfony/phpunit-bridge": "^2.8 || ^3.0 || ^4.0",
"symfony/yaml": "^2.8 || ^3.0 || ^4.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
"dev-master": "2.1.x-dev"
}
},
"autoload": {
@ -2613,8 +2613,7 @@
"homepage": "https://github.com/friendsofsymfony/FOSUserBundle/contributors"
},
{
"name": "Thibault Duplessis",
"email": "thibault.duplessis@gmail.com"
"name": "Thibault Duplessis"
}
],
"description": "Symfony FOSUserBundle",
@ -2625,9 +2624,9 @@
"support": {
"docs": "https://symfony.com/doc/master/bundles/FOSUserBundle/index.html",
"issues": "https://github.com/FriendsOfSymfony/FOSUserBundle/issues",
"source": "https://github.com/FriendsOfSymfony/FOSUserBundle/tree/2.0.x"
"source": "https://github.com/FriendsOfSymfony/FOSUserBundle/tree/v2.1.2"
},
"time": "2017-11-29T17:01:21+00:00"
"time": "2018-03-08T08:59:27+00:00"
},
{
"name": "gedmo/doctrine-extensions",
@ -4492,16 +4491,16 @@
},
{
"name": "j0k3r/graby-site-config",
"version": "1.0.158",
"version": "1.0.159",
"source": {
"type": "git",
"url": "https://github.com/j0k3r/graby-site-config.git",
"reference": "980c2aadf60f067f5eae34d10d3b194a91434394"
"reference": "e5bfb9d608f0ce6390d6791ede196c769216ee84"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/980c2aadf60f067f5eae34d10d3b194a91434394",
"reference": "980c2aadf60f067f5eae34d10d3b194a91434394",
"url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/e5bfb9d608f0ce6390d6791ede196c769216ee84",
"reference": "e5bfb9d608f0ce6390d6791ede196c769216ee84",
"shasum": ""
},
"require": {
@ -4530,9 +4529,9 @@
"description": "Graby site config files",
"support": {
"issues": "https://github.com/j0k3r/graby-site-config/issues",
"source": "https://github.com/j0k3r/graby-site-config/tree/1.0.158"
"source": "https://github.com/j0k3r/graby-site-config/tree/1.0.159"
},
"time": "2022-10-20T13:53:08+00:00"
"time": "2022-11-01T02:53:54+00:00"
},
{
"name": "j0k3r/httplug-ssrf-plugin",
@ -7398,16 +7397,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.16",
"version": "3.0.17",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "7181378909ed8890be4db53d289faac5b77f8b05"
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7181378909ed8890be4db53d289faac5b77f8b05",
"reference": "7181378909ed8890be4db53d289faac5b77f8b05",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/dbc2307d5c69aeb22db136c52e91130d7f2ca761",
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761",
"shasum": ""
},
"require": {
@ -7488,7 +7487,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.16"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.17"
},
"funding": [
{
@ -7504,20 +7503,20 @@
"type": "tidelift"
}
],
"time": "2022-09-05T18:03:08+00:00"
"time": "2022-10-24T10:51:50+00:00"
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.12.0",
"version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "5f13698464773fa6f5392a9e311f81e23e9c3ba7"
"reference": "33aefcdab42900e36366d0feab6206e2dd68f947"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5f13698464773fa6f5392a9e311f81e23e9c3ba7",
"reference": "5f13698464773fa6f5392a9e311f81e23e9c3ba7",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/33aefcdab42900e36366d0feab6206e2dd68f947",
"reference": "33aefcdab42900e36366d0feab6206e2dd68f947",
"shasum": ""
},
"require": {
@ -7547,9 +7546,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.12.0"
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.13.0"
},
"time": "2022-10-20T07:49:58+00:00"
"time": "2022-10-21T09:57:39+00:00"
},
{
"name": "phpzip/phpzip",
@ -8421,63 +8420,6 @@
"abandoned": "scheb/2fa-bundle",
"time": "2020-10-30T19:24:18+00:00"
},
{
"name": "sensio/distribution-bundle",
"version": "v5.0.25",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
"reference": "80a38234bde8321fb92aa0b8c27978a272bb4baf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/80a38234bde8321fb92aa0b8c27978a272bb4baf",
"reference": "80a38234bde8321fb92aa0b8c27978a272bb4baf",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"sensiolabs/security-checker": "~5.0|~6.0",
"symfony/class-loader": "~2.3|~3.0",
"symfony/config": "~2.3|~3.0",
"symfony/dependency-injection": "~2.3|~3.0",
"symfony/filesystem": "~2.3|~3.0",
"symfony/http-kernel": "~2.3|~3.0",
"symfony/process": "~2.3|~3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "5.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Sensio\\Bundle\\DistributionBundle\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Base bundle for Symfony Distributions",
"keywords": [
"configuration",
"distribution"
],
"support": {
"issues": "https://github.com/sensiolabs/SensioDistributionBundle/issues",
"source": "https://github.com/sensiolabs/SensioDistributionBundle/tree/master"
},
"abandoned": true,
"time": "2019-06-18T15:43:58+00:00"
},
{
"name": "sensio/framework-extra-bundle",
"version": "v5.4.1",
@ -8555,59 +8497,6 @@
},
"time": "2019-07-08T08:31:25+00:00"
},
{
"name": "sensiolabs/security-checker",
"version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sensiolabs/security-checker.git",
"reference": "a576c01520d9761901f269c4934ba55448be4a54"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/a576c01520d9761901f269c4934ba55448be4a54",
"reference": "a576c01520d9761901f269c4934ba55448be4a54",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
"symfony/console": "^2.8|^3.4|^4.2|^5.0",
"symfony/http-client": "^4.3|^5.0",
"symfony/mime": "^4.3|^5.0",
"symfony/polyfill-ctype": "^1.11"
},
"bin": [
"security-checker"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.0-dev"
}
},
"autoload": {
"psr-4": {
"SensioLabs\\Security\\": "SensioLabs/Security"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien.potencier@gmail.com"
}
],
"description": "A security checker for your composer.lock",
"support": {
"issues": "https://github.com/sensiolabs/security-checker/issues",
"source": "https://github.com/sensiolabs/security-checker/tree/master"
},
"abandoned": "https://github.com/fabpot/local-php-security-checker",
"time": "2019-11-01T13:20:14+00:00"
},
{
"name": "sentry/sdk",
"version": "2.2.0",
@ -9277,16 +9166,16 @@
},
{
"name": "symfony/http-client",
"version": "v5.4.14",
"version": "v5.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "8a3929c814cba77db93de61c22759e0dbeaa4c87"
"reference": "8f29b0f06c9ff48c8431e78eb90c8bd6f82cb12b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/8a3929c814cba77db93de61c22759e0dbeaa4c87",
"reference": "8a3929c814cba77db93de61c22759e0dbeaa4c87",
"url": "https://api.github.com/repos/symfony/http-client/zipball/8f29b0f06c9ff48c8431e78eb90c8bd6f82cb12b",
"reference": "8f29b0f06c9ff48c8431e78eb90c8bd6f82cb12b",
"shasum": ""
},
"require": {
@ -9344,7 +9233,7 @@
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-client/tree/v5.4.14"
"source": "https://github.com/symfony/http-client/tree/v5.4.15"
},
"funding": [
{
@ -9360,7 +9249,7 @@
"type": "tidelift"
}
],
"time": "2022-10-11T15:16:01+00:00"
"time": "2022-10-25T16:22:13+00:00"
},
{
"name": "symfony/http-client-contracts",
@ -9440,89 +9329,6 @@
],
"time": "2022-04-12T15:48:08+00:00"
},
{
"name": "symfony/mime",
"version": "v5.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd",
"reference": "bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"egulias/email-validator": "~3.0.0",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/mailer": "<4.4"
},
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/property-access": "^4.4|^5.1|^6.0",
"symfony/property-info": "^4.4|^5.1|^6.0",
"symfony/serializer": "^5.2|^6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Mime\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Allows manipulating MIME messages",
"homepage": "https://symfony.com",
"keywords": [
"mime",
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v5.4.13"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-09-01T18:18:29+00:00"
},
{
"name": "symfony/monolog-bundle",
"version": "v3.6.0",
@ -12337,6 +12143,55 @@
],
"time": "2021-11-15T17:17:55+00:00"
},
{
"name": "friendsoftwig/twigcs",
"version": "v4.1.0",
"source": {
"type": "git",
"url": "https://github.com/friendsoftwig/twigcs.git",
"reference": "ad7e235fe3cc7842b5919f109afaacc56bb3ff49"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/friendsoftwig/twigcs/zipball/ad7e235fe3cc7842b5919f109afaacc56bb3ff49",
"reference": "ad7e235fe3cc7842b5919f109afaacc56bb3ff49",
"shasum": ""
},
"require": {
"php": "^7.0",
"symfony/console": "^3.4 || ^4.3 || ^5.0",
"symfony/filesystem": "^3.4 || ^4.3 || ^5.0",
"symfony/finder": "^3.4 || ^4.3 || ^5.0"
},
"require-dev": {
"phpunit/phpunit": "^6.5 || ^7.2"
},
"bin": [
"bin/twigcs"
],
"type": "library",
"autoload": {
"psr-4": {
"FriendsOfTwig\\Twigcs\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Tristan Maindron",
"email": "tmaindron@gmail.com"
}
],
"description": "Checkstyle automation for Twig",
"support": {
"issues": "https://github.com/friendsoftwig/twigcs/issues",
"source": "https://github.com/friendsoftwig/twigcs/tree/v4.1.0"
},
"time": "2021-02-04T13:07:32+00:00"
},
{
"name": "m6web/redis-mock",
"version": "v5.3.0",
@ -12613,16 +12468,16 @@
},
{
"name": "phpstan/phpstan",
"version": "0.12.99",
"version": "0.12.100",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7"
"reference": "48236ddf823547081b2b153d1cd2994b784328c3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7",
"reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3",
"reference": "48236ddf823547081b2b153d1cd2994b784328c3",
"shasum": ""
},
"require": {
@ -12653,7 +12508,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/0.12.99"
"source": "https://github.com/phpstan/phpstan/tree/0.12.100"
},
"funding": [
{
@ -12664,16 +12519,12 @@
"url": "https://github.com/phpstan",
"type": "github"
},
{
"url": "https://www.patreon.com/phpstan",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
"type": "tidelift"
}
],
"time": "2021-09-12T20:09:55+00:00"
"time": "2022-11-01T09:52:08+00:00"
},
{
"name": "phpstan/phpstan-doctrine",
@ -13048,6 +12899,7 @@
"ext-ctype": "*",
"ext-curl": "*",
"ext-dom": "*",
"ext-filter": "*",
"ext-gd": "*",
"ext-hash": "*",
"ext-iconv": "*",
@ -13060,12 +12912,11 @@
"ext-simplexml": "*",
"ext-tidy": "*",
"ext-tokenizer": "*",
"ext-xml": "*",
"composer": "< 2.3"
"ext-xml": "*"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.4.29"
},
"plugin-api-version": "2.2.0"
"plugin-api-version": "2.3.0"
}

View file

@ -65,7 +65,7 @@ RUN npm install -g yarn
RUN curl -L -o /usr/local/bin/envsubst https://github.com/a8m/envsubst/releases/download/v1.1.0/envsubst-`uname -s`-`uname -m`; \
chmod +x /usr/local/bin/envsubst
COPY --from=composer:2.2.12 /usr/bin/composer /usr/local/bin/composer
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
COPY entrypoint.sh /entrypoint.sh
COPY config/ /opt/wallabag/config/

View file

@ -2,8 +2,10 @@
namespace Wallabag\AnnotationBundle\Controller;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use JMS\Serializer\SerializerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Wallabag\AnnotationBundle\Entity\Annotation;
@ -11,7 +13,7 @@ use Wallabag\AnnotationBundle\Form\EditAnnotationType;
use Wallabag\AnnotationBundle\Form\NewAnnotationType;
use Wallabag\CoreBundle\Entity\Entry;
class WallabagAnnotationController extends FOSRestController
class WallabagAnnotationController extends AbstractFOSRestController
{
/**
* Retrieve annotations for an entry.
@ -24,12 +26,12 @@ class WallabagAnnotationController extends FOSRestController
{
$annotationRows = $this
->getDoctrine()
->getRepository('WallabagAnnotationBundle:Annotation')
->getRepository(Annotation::class)
->findAnnotationsByPageId($entry->getId(), $this->getUser()->getId());
$total = \count($annotationRows);
$annotations = ['total' => $total, 'rows' => $annotationRows];
$json = $this->get('jms_serializer')->serialize($annotations, 'json');
$json = $this->get(SerializerInterface::class)->serialize($annotations, 'json');
return (new JsonResponse())->setJson($json);
}
@ -49,7 +51,7 @@ class WallabagAnnotationController extends FOSRestController
$annotation = new Annotation($this->getUser());
$annotation->setEntry($entry);
$form = $this->get('form.factory')->createNamed('', NewAnnotationType::class, $annotation, [
$form = $this->get(FormFactoryInterface::class)->createNamed('', NewAnnotationType::class, $annotation, [
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
@ -59,7 +61,7 @@ class WallabagAnnotationController extends FOSRestController
$em->persist($annotation);
$em->flush();
$json = $this->get('jms_serializer')->serialize($annotation, 'json');
$json = $this->get(SerializerInterface::class)->serialize($annotation, 'json');
return JsonResponse::fromJsonString($json);
}
@ -72,7 +74,7 @@ class WallabagAnnotationController extends FOSRestController
*
* @see Wallabag\ApiBundle\Controller\WallabagRestController
*
* @ParamConverter("annotation", class="WallabagAnnotationBundle:Annotation")
* @ParamConverter("annotation", class="Wallabag\AnnotationBundle\Entity\Annotation")
*
* @return JsonResponse
*/
@ -80,7 +82,7 @@ class WallabagAnnotationController extends FOSRestController
{
$data = json_decode($request->getContent(), true);
$form = $this->get('form.factory')->createNamed('', EditAnnotationType::class, $annotation, [
$form = $this->get(FormFactoryInterface::class)->createNamed('', EditAnnotationType::class, $annotation, [
'csrf_protection' => false,
'allow_extra_fields' => true,
]);
@ -91,7 +93,7 @@ class WallabagAnnotationController extends FOSRestController
$em->persist($annotation);
$em->flush();
$json = $this->get('jms_serializer')->serialize($annotation, 'json');
$json = $this->get(SerializerInterface::class)->serialize($annotation, 'json');
return JsonResponse::fromJsonString($json);
}
@ -104,7 +106,7 @@ class WallabagAnnotationController extends FOSRestController
*
* @see Wallabag\ApiBundle\Controller\WallabagRestController
*
* @ParamConverter("annotation", class="WallabagAnnotationBundle:Annotation")
* @ParamConverter("annotation", class="Wallabag\AnnotationBundle\Entity\Annotation")
*
* @return JsonResponse
*/
@ -114,7 +116,7 @@ class WallabagAnnotationController extends FOSRestController
$em->remove($annotation);
$em->flush();
$json = $this->get('jms_serializer')->serialize($annotation, 'json');
$json = $this->get(SerializerInterface::class)->serialize($annotation, 'json');
return (new JsonResponse())->setJson($json);
}

View file

@ -2,15 +2,21 @@
namespace Wallabag\AnnotationBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
use Wallabag\AnnotationBundle\Entity\Annotation;
/**
* AnnotationRepository.
*/
class AnnotationRepository extends EntityRepository
class AnnotationRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Annotation::class);
}
/**
* Retrieves all annotations for a user.
*

View file

@ -1,4 +1,4 @@
annotations:
type: rest
resource: "WallabagAnnotationBundle:WallabagAnnotation"
resource: 'Wallabag\AnnotationBundle\Controller\WallabagAnnotationController'
name_prefix: annotations_

View file

@ -26,7 +26,7 @@ class AnnotationRestController extends WallabagRestController
{
$this->validateAuthentication();
return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:getAnnotations', [
return $this->forward('Wallabag\AnnotationBundle\Controller\WallabagAnnotationController::getAnnotationsAction', [
'entry' => $entry,
]);
}
@ -48,7 +48,7 @@ class AnnotationRestController extends WallabagRestController
{
$this->validateAuthentication();
return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:postAnnotation', [
return $this->forward('Wallabag\AnnotationBundle\Controller\WallabagAnnotationController::postAnnotationAction', [
'request' => $request,
'entry' => $entry,
]);
@ -63,7 +63,7 @@ class AnnotationRestController extends WallabagRestController
* }
* )
*
* @ParamConverter("annotation", class="WallabagAnnotationBundle:Annotation")
* @ParamConverter("annotation", class="Wallabag\AnnotationBundle\Entity\Annotation")
*
* @return JsonResponse
*/
@ -71,7 +71,7 @@ class AnnotationRestController extends WallabagRestController
{
$this->validateAuthentication();
return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:putAnnotation', [
return $this->forward('Wallabag\AnnotationBundle\Controller\WallabagAnnotationController::putAnnotationAction', [
'annotation' => $annotation,
'request' => $request,
]);
@ -86,7 +86,7 @@ class AnnotationRestController extends WallabagRestController
* }
* )
*
* @ParamConverter("annotation", class="WallabagAnnotationBundle:Annotation")
* @ParamConverter("annotation", class="Wallabag\AnnotationBundle\Entity\Annotation")
*
* @return JsonResponse
*/
@ -94,7 +94,7 @@ class AnnotationRestController extends WallabagRestController
{
$this->validateAuthentication();
return $this->forward('WallabagAnnotationBundle:WallabagAnnotation:deleteAnnotation', [
return $this->forward('Wallabag\AnnotationBundle\Controller\WallabagAnnotationController::deleteAnnotationAction', [
'annotation' => $annotation,
]);
}

View file

@ -3,6 +3,7 @@
namespace Wallabag\ApiBundle\Controller;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerInterface;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\JsonResponse;
@ -19,7 +20,7 @@ class ConfigRestController extends WallabagRestController
{
$this->validateAuthentication();
$json = $this->get('jms_serializer')->serialize(
$json = $this->get(SerializerInterface::class)->serialize(
$this->getUser()->getConfig(),
'json',
SerializationContext::create()->setGroups(['config_api'])

View file

@ -3,8 +3,12 @@
namespace Wallabag\ApiBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Translation\TranslatorInterface;
use Wallabag\ApiBundle\Entity\Client;
use Wallabag\ApiBundle\Form\Type\ClientType;
@ -15,11 +19,11 @@ class DeveloperController extends Controller
*
* @Route("/developer", name="developer")
*
* @return \Symfony\Component\HttpFoundation\Response
* @return Response
*/
public function indexAction()
{
$clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findByUser($this->getUser()->getId());
$clients = $this->getDoctrine()->getRepository(Client::class)->findByUser($this->getUser()->getId());
return $this->render('@WallabagCore/themes/common/Developer/index.html.twig', [
'clients' => $clients,
@ -31,7 +35,7 @@ class DeveloperController extends Controller
*
* @Route("/developer/client/create", name="developer_create_client")
*
* @return \Symfony\Component\HttpFoundation\Response
* @return Response
*/
public function createClientAction(Request $request)
{
@ -45,9 +49,9 @@ class DeveloperController extends Controller
$em->persist($client);
$em->flush();
$this->get('session')->getFlashBag()->add(
$this->get(SessionInterface::class)->getFlashBag()->add(
'notice',
$this->get('translator')->trans('flashes.developer.notice.client_created', ['%name%' => $client->getName()])
$this->get(TranslatorInterface::class)->trans('flashes.developer.notice.client_created', ['%name%' => $client->getName()])
);
return $this->render('@WallabagCore/themes/common/Developer/client_parameters.html.twig', [
@ -67,7 +71,7 @@ class DeveloperController extends Controller
*
* @Route("/developer/client/delete/{id}", requirements={"id" = "\d+"}, name="developer_delete_client")
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* @return RedirectResponse
*/
public function deleteClientAction(Client $client)
{
@ -79,9 +83,9 @@ class DeveloperController extends Controller
$em->remove($client);
$em->flush();
$this->get('session')->getFlashBag()->add(
$this->get(SessionInterface::class)->getFlashBag()->add(
'notice',
$this->get('translator')->trans('flashes.developer.notice.client_deleted', ['%name%' => $client->getName()])
$this->get(TranslatorInterface::class)->trans('flashes.developer.notice.client_deleted', ['%name%' => $client->getName()])
);
return $this->redirect($this->generateUrl('developer'));
@ -92,7 +96,7 @@ class DeveloperController extends Controller
*
* @Route("/developer/howto/first-app", name="developer_howto_firstapp")
*
* @return \Symfony\Component\HttpFoundation\Response
* @return Response
*/
public function howtoFirstAppAction()
{

View file

@ -5,6 +5,8 @@ namespace Wallabag\ApiBundle\Controller;
use Hateoas\Configuration\Route;
use Hateoas\Representation\Factory\PagerfantaFactory;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Pagerfanta\Pagerfanta;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@ -14,7 +16,11 @@ use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Entity\Tag;
use Wallabag\CoreBundle\Event\EntryDeletedEvent;
use Wallabag\CoreBundle\Event\EntrySavedEvent;
use Wallabag\CoreBundle\Helper\ContentProxy;
use Wallabag\CoreBundle\Helper\EntriesExport;
use Wallabag\CoreBundle\Helper\TagsAssigner;
use Wallabag\CoreBundle\Helper\UrlHasher;
use Wallabag\CoreBundle\Repository\EntryRepository;
class EntryRestController extends WallabagRestController
{
@ -40,7 +46,7 @@ class EntryRestController extends WallabagRestController
public function getEntriesExistsAction(Request $request)
{
$this->validateAuthentication();
$repo = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry');
$repo = $this->getDoctrine()->getRepository(Entry::class);
$returnId = (null === $request->query->get('return_id')) ? false : (bool) $request->query->get('return_id');
@ -136,8 +142,8 @@ class EntryRestController extends WallabagRestController
$domainName = (null === $request->query->get('domain_name')) ? '' : (string) $request->query->get('domain_name');
try {
/** @var \Pagerfanta\Pagerfanta $pager */
$pager = $this->get('wallabag_core.entry_repository')->findEntries(
/** @var Pagerfanta $pager */
$pager = $this->get(EntryRepository::class)->findEntries(
$this->getUser()->getId(),
$isArchived,
$isStarred,
@ -215,7 +221,7 @@ class EntryRestController extends WallabagRestController
$this->validateAuthentication();
$this->validateUserAccess($entry->getUser()->getId());
return $this->get('wallabag_core.helper.entries_export')
return $this->get(EntriesExport::class)
->setEntries($entry)
->updateTitle('entry')
->updateAuthor('entry')
@ -247,7 +253,7 @@ class EntryRestController extends WallabagRestController
// handle multiple urls
foreach ($urls as $key => $url) {
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId(
$entry = $this->get(EntryRepository::class)->findByUrlAndUserId(
$url,
$this->getUser()->getId()
);
@ -256,7 +262,7 @@ class EntryRestController extends WallabagRestController
if (false !== $entry) {
// entry deleted, dispatch event about it!
$this->get('event_dispatcher')->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry));
$this->get(EventDispatcherInterface::class)->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry));
$em = $this->getDoctrine()->getManager();
$em->remove($entry);
@ -301,7 +307,7 @@ class EntryRestController extends WallabagRestController
// handle multiple urls
foreach ($urls as $key => $url) {
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId(
$entry = $this->get(EntryRepository::class)->findByUrlAndUserId(
$url,
$this->getUser()->getId()
);
@ -311,7 +317,7 @@ class EntryRestController extends WallabagRestController
if (false === $entry) {
$entry = new Entry($this->getUser());
$this->get('wallabag_core.content_proxy')->updateEntry($entry, $url);
$this->get(ContentProxy::class)->updateEntry($entry, $url);
}
$em = $this->getDoctrine()->getManager();
@ -321,7 +327,7 @@ class EntryRestController extends WallabagRestController
$results[$key]['entry'] = $entry instanceof Entry ? $entry->getId() : false;
// entry saved, dispatch event about it!
$this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
$this->get(EventDispatcherInterface::class)->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
}
return $this->sendResponse($results);
@ -358,7 +364,7 @@ class EntryRestController extends WallabagRestController
$url = $request->request->get('url');
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId(
$entry = $this->get(EntryRepository::class)->findByUrlAndUserId(
$url,
$this->getUser()->getId()
);
@ -371,7 +377,7 @@ class EntryRestController extends WallabagRestController
$data = $this->retrieveValueFromRequest($request);
try {
$this->get('wallabag_core.content_proxy')->updateEntry(
$this->get(ContentProxy::class)->updateEntry(
$entry,
$entry->getUrl(),
[
@ -401,7 +407,7 @@ class EntryRestController extends WallabagRestController
}
if (!empty($data['tags'])) {
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $data['tags']);
$this->get(TagsAssigner::class)->assignTagsToEntry($entry, $data['tags']);
}
if (!empty($data['origin_url'])) {
@ -417,11 +423,11 @@ class EntryRestController extends WallabagRestController
}
if (empty($entry->getDomainName())) {
$this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
$this->get(ContentProxy::class)->setEntryDomainName($entry);
}
if (empty($entry->getTitle())) {
$this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
$this->get(ContentProxy::class)->setDefaultEntryTitle($entry);
}
$em = $this->getDoctrine()->getManager();
@ -429,7 +435,7 @@ class EntryRestController extends WallabagRestController
$em->flush();
// entry saved, dispatch event about it!
$this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
$this->get(EventDispatcherInterface::class)->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
return $this->sendResponse($entry);
}
@ -463,7 +469,7 @@ class EntryRestController extends WallabagRestController
$this->validateAuthentication();
$this->validateUserAccess($entry->getUser()->getId());
$contentProxy = $this->get('wallabag_core.content_proxy');
$contentProxy = $this->get(ContentProxy::class);
$data = $this->retrieveValueFromRequest($request);
@ -518,7 +524,7 @@ class EntryRestController extends WallabagRestController
if (!empty($data['tags'])) {
$entry->removeAllTags();
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $data['tags']);
$this->get(TagsAssigner::class)->assignTagsToEntry($entry, $data['tags']);
}
if (null !== $data['isPublic']) {
@ -534,11 +540,11 @@ class EntryRestController extends WallabagRestController
}
if (empty($entry->getDomainName())) {
$this->get('wallabag_core.content_proxy')->setEntryDomainName($entry);
$this->get(ContentProxy::class)->setEntryDomainName($entry);
}
if (empty($entry->getTitle())) {
$this->get('wallabag_core.content_proxy')->setDefaultEntryTitle($entry);
$this->get(ContentProxy::class)->setDefaultEntryTitle($entry);
}
$em = $this->getDoctrine()->getManager();
@ -546,7 +552,7 @@ class EntryRestController extends WallabagRestController
$em->flush();
// entry saved, dispatch event about it!
$this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
$this->get(EventDispatcherInterface::class)->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
return $this->sendResponse($entry);
}
@ -569,7 +575,7 @@ class EntryRestController extends WallabagRestController
$this->validateUserAccess($entry->getUser()->getId());
try {
$this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl());
$this->get(ContentProxy::class)->updateEntry($entry, $entry->getUrl());
} catch (\Exception $e) {
$this->get('logger')->error('Error while saving an entry', [
'exception' => $e,
@ -589,7 +595,7 @@ class EntryRestController extends WallabagRestController
$em->flush();
// entry saved, dispatch event about it!
$this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
$this->get(EventDispatcherInterface::class)->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
return $this->sendResponse($entry);
}
@ -627,7 +633,7 @@ class EntryRestController extends WallabagRestController
}
// entry deleted, dispatch event about it!
$this->get('event_dispatcher')->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry));
$this->get(EventDispatcherInterface::class)->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry));
$em = $this->getDoctrine()->getManager();
$em->remove($entry);
@ -676,7 +682,7 @@ class EntryRestController extends WallabagRestController
$tags = $request->request->get('tags', '');
if (!empty($tags)) {
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
$this->get(TagsAssigner::class)->assignTagsToEntry($entry, $tags);
}
$em = $this->getDoctrine()->getManager();
@ -736,7 +742,7 @@ class EntryRestController extends WallabagRestController
$results = [];
foreach ($list as $key => $element) {
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId(
$entry = $this->get(EntryRepository::class)->findByUrlAndUserId(
$element->url,
$this->getUser()->getId()
);
@ -752,7 +758,7 @@ class EntryRestController extends WallabagRestController
$label = trim($label);
$tag = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Tag')
->getRepository(Tag::class)
->findOneByLabel($label);
if (false !== $tag) {
@ -794,7 +800,7 @@ class EntryRestController extends WallabagRestController
// handle multiple urls
foreach ($list as $key => $element) {
$entry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId(
$entry = $this->get(EntryRepository::class)->findByUrlAndUserId(
$element->url,
$this->getUser()->getId()
);
@ -805,7 +811,7 @@ class EntryRestController extends WallabagRestController
$tags = $element->tags;
if (false !== $entry && !(empty($tags))) {
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry($entry, $tags);
$this->get(TagsAssigner::class)->assignTagsToEntry($entry, $tags);
$em = $this->getDoctrine()->getManager();
$em->persist($entry);

View file

@ -9,6 +9,7 @@ use Pagerfanta\Doctrine\ORM\QueryAdapter as DoctrineORMAdapter;
use Pagerfanta\Pagerfanta;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Wallabag\CoreBundle\Repository\EntryRepository;
class SearchRestController extends WallabagRestController
{
@ -33,7 +34,7 @@ class SearchRestController extends WallabagRestController
$page = (int) $request->query->get('page', 1);
$perPage = (int) $request->query->get('perPage', 30);
$qb = $this->get('wallabag_core.entry_repository')
$qb = $this->get(EntryRepository::class)
->getBuilderForSearchByUser(
$this->getUser()->getId(),
$term,

View file

@ -2,6 +2,7 @@
namespace Wallabag\ApiBundle\Controller;
use JMS\Serializer\SerializerInterface;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
@ -22,10 +23,10 @@ class TagRestController extends WallabagRestController
$this->validateAuthentication();
$tags = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Tag')
->getRepository(Tag::class)
->findAllFlatTagsWithNbEntries($this->getUser()->getId());
$json = $this->get('jms_serializer')->serialize($tags, 'json');
$json = $this->get(SerializerInterface::class)->serialize($tags, 'json');
return (new JsonResponse())->setJson($json);
}
@ -46,7 +47,7 @@ class TagRestController extends WallabagRestController
$this->validateAuthentication();
$label = $request->get('tag', '');
$tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser([$label], $this->getUser()->getId());
$tags = $this->getDoctrine()->getRepository(Tag::class)->findByLabelsAndUser([$label], $this->getUser()->getId());
if (empty($tags)) {
throw $this->createNotFoundException('Tag not found');
@ -55,12 +56,12 @@ class TagRestController extends WallabagRestController
$tag = $tags[0];
$this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
->getRepository(Entry::class)
->removeTag($this->getUser()->getId(), $tag);
$this->cleanOrphanTag($tag);
$json = $this->get('jms_serializer')->serialize($tag, 'json');
$json = $this->get(SerializerInterface::class)->serialize($tag, 'json');
return (new JsonResponse())->setJson($json);
}
@ -82,19 +83,19 @@ class TagRestController extends WallabagRestController
$tagsLabels = $request->get('tags', '');
$tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser(explode(',', $tagsLabels), $this->getUser()->getId());
$tags = $this->getDoctrine()->getRepository(Tag::class)->findByLabelsAndUser(explode(',', $tagsLabels), $this->getUser()->getId());
if (empty($tags)) {
throw $this->createNotFoundException('Tags not found');
}
$this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
->getRepository(Entry::class)
->removeTags($this->getUser()->getId(), $tags);
$this->cleanOrphanTag($tags);
$json = $this->get('jms_serializer')->serialize($tags, 'json');
$json = $this->get(SerializerInterface::class)->serialize($tags, 'json');
return (new JsonResponse())->setJson($json);
}
@ -114,19 +115,19 @@ class TagRestController extends WallabagRestController
{
$this->validateAuthentication();
$tagFromDb = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findByLabelsAndUser([$tag->getLabel()], $this->getUser()->getId());
$tagFromDb = $this->getDoctrine()->getRepository(Tag::class)->findByLabelsAndUser([$tag->getLabel()], $this->getUser()->getId());
if (empty($tagFromDb)) {
throw $this->createNotFoundException('Tag not found');
}
$this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
->getRepository(Entry::class)
->removeTag($this->getUser()->getId(), $tag);
$this->cleanOrphanTag($tag);
$json = $this->get('jms_serializer')->serialize($tag, 'json');
$json = $this->get(SerializerInterface::class)->serialize($tag, 'json');
return (new JsonResponse())->setJson($json);
}

View file

@ -2,14 +2,20 @@
namespace Wallabag\ApiBundle\Controller;
use Craue\ConfigBundle\Util\Config;
use FOS\UserBundle\Event\UserEvent;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Model\UserManagerInterface;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerInterface;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Translation\TranslatorInterface;
use Wallabag\ApiBundle\Entity\Client;
use Wallabag\UserBundle\Entity\User;
use Wallabag\UserBundle\Form\NewUserType;
class UserRestController extends WallabagRestController
{
@ -45,20 +51,20 @@ class UserRestController extends WallabagRestController
*/
public function putUserAction(Request $request)
{
if (!$this->container->getParameter('fosuser_registration') || !$this->get('craue_config')->get('api_user_registration')) {
$json = $this->get('jms_serializer')->serialize(['error' => "Server doesn't allow registrations"], 'json');
if (!$this->container->getParameter('fosuser_registration') || !$this->get(Config::class)->get('api_user_registration')) {
$json = $this->get(SerializerInterface::class)->serialize(['error' => "Server doesn't allow registrations"], 'json');
return (new JsonResponse())
->setJson($json)
->setStatusCode(JsonResponse::HTTP_FORBIDDEN);
}
$userManager = $this->get('fos_user.user_manager');
$userManager = $this->get(UserManagerInterface::class);
$user = $userManager->createUser();
// user will be disabled BY DEFAULT to avoid spamming account to be enabled
$user->setEnabled(false);
$form = $this->createForm('Wallabag\UserBundle\Form\NewUserType', $user, [
$form = $this->createForm(NewUserType::class, $user, [
'csrf_protection' => false,
]);
@ -92,7 +98,7 @@ class UserRestController extends WallabagRestController
$errors['password'] = $this->translateErrors($data['plainPassword']['children']['first']['errors']);
}
$json = $this->get('jms_serializer')->serialize(['error' => $errors], 'json');
$json = $this->get(SerializerInterface::class)->serialize(['error' => $errors], 'json');
return (new JsonResponse())
->setJson($json)
@ -111,7 +117,7 @@ class UserRestController extends WallabagRestController
// dispatch a created event so the associated config will be created
$event = new UserEvent($user, $request);
$this->get('event_dispatcher')->dispatch(FOSUserEvents::USER_CREATED, $event);
$this->get(EventDispatcherInterface::class)->dispatch(FOSUserEvents::USER_CREATED, $event);
return $this->sendUser($user, 'user_api_with_client', JsonResponse::HTTP_CREATED);
}
@ -126,7 +132,7 @@ class UserRestController extends WallabagRestController
*/
private function sendUser(User $user, $group = 'user_api', $status = JsonResponse::HTTP_OK)
{
$json = $this->get('jms_serializer')->serialize(
$json = $this->get(SerializerInterface::class)->serialize(
$user,
'json',
SerializationContext::create()->setGroups([$group])
@ -148,7 +154,7 @@ class UserRestController extends WallabagRestController
{
$translatedErrors = [];
foreach ($errors as $error) {
$translatedErrors[] = $this->get('translator')->trans($error);
$translatedErrors[] = $this->get(TranslatorInterface::class)->trans($error);
}
return $translatedErrors;

View file

@ -4,8 +4,11 @@ namespace Wallabag\ApiBundle\Controller;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerInterface;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class WallabagRestController extends AbstractFOSRestController
@ -22,7 +25,7 @@ class WallabagRestController extends AbstractFOSRestController
public function getVersionAction()
{
$version = $this->container->getParameter('wallabag_core.version');
$json = $this->get('jms_serializer')->serialize($version, 'json');
$json = $this->get(SerializerInterface::class)->serialize($version, 'json');
return (new JsonResponse())->setJson($json);
}
@ -39,15 +42,15 @@ class WallabagRestController extends AbstractFOSRestController
$info = [
'appname' => 'wallabag',
'version' => $this->container->getParameter('wallabag_core.version'),
'allowed_registration' => $this->container->getParameter('wallabag_user.registration_enabled'),
'allowed_registration' => $this->container->getParameter('fosuser_registration'),
];
return (new JsonResponse())->setJson($this->get('jms_serializer')->serialize($info, 'json'));
return (new JsonResponse())->setJson($this->get(SerializerInterface::class)->serialize($info, 'json'));
}
protected function validateAuthentication()
{
if (false === $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
if (false === $this->get(AuthorizationCheckerInterface::class)->isGranted('IS_AUTHENTICATED_FULLY')) {
throw new AccessDeniedException();
}
}
@ -60,7 +63,7 @@ class WallabagRestController extends AbstractFOSRestController
*/
protected function validateUserAccess($requestUserId)
{
$user = $this->get('security.token_storage')->getToken()->getUser();
$user = $this->get(TokenStorageInterface::class)->getToken()->getUser();
if ($requestUserId !== $user->getId()) {
throw $this->createAccessDeniedException('Access forbidden. Entry user id: ' . $requestUserId . ', logged user id: ' . $user->getId());
}
@ -79,7 +82,7 @@ class WallabagRestController extends AbstractFOSRestController
$context = new SerializationContext();
$context->setSerializeNull(true);
$json = $this->get('jms_serializer')->serialize($data, 'json', $context);
$json = $this->get(SerializerInterface::class)->serialize($data, 'json', $context);
return (new JsonResponse())->setJson($json);
}

View file

@ -9,6 +9,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Wallabag\ApiBundle\Entity\Client;
class ClientType extends AbstractType
{
@ -40,7 +41,7 @@ class ClientType extends AbstractType
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'Wallabag\ApiBundle\Entity\Client',
'data_class' => Client::class,
]);
}

View file

@ -2,10 +2,17 @@
namespace Wallabag\ApiBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Wallabag\ApiBundle\Entity\Client;
class ClientRepository extends EntityRepository
class ClientRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Client::class);
}
public function findOneBy(array $criteria, array $orderBy = null)
{
if (!empty($criteria['id'])) {

View file

@ -1,39 +1,39 @@
entry:
type: rest
resource: "WallabagApiBundle:EntryRest"
resource: 'Wallabag\ApiBundle\Controller\EntryRestController'
name_prefix: api_
search:
type: rest
resource: "WallabagApiBundle:SearchRest"
resource: 'Wallabag\ApiBundle\Controller\SearchRestController'
name_prefix: api_
tag:
type: rest
resource: "WallabagApiBundle:TagRest"
resource: 'Wallabag\ApiBundle\Controller\TagRestController'
name_prefix: api_
tagging_rule:
type: rest
resource: "WallabagApiBundle:TaggingRuleRest"
resource: 'Wallabag\ApiBundle\Controller\TaggingRuleRestController'
name_prefix: api_
annotation:
type: rest
resource: "WallabagApiBundle:AnnotationRest"
resource: 'Wallabag\ApiBundle\Controller\AnnotationRestController'
name_prefix: api_
misc:
type: rest
resource: "WallabagApiBundle:WallabagRest"
resource: 'Wallabag\ApiBundle\Controller\WallabagRestController'
name_prefix: api_
user:
type: rest
resource: "WallabagApiBundle:UserRest"
resource: 'Wallabag\ApiBundle\Controller\UserRestController'
name_prefix: api_
config:
type: rest
resource: "WallabagApiBundle:ConfigRest"
resource: 'Wallabag\ApiBundle\Controller\ConfigRestController'
name_prefix: api_

View file

@ -8,6 +8,8 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Finder\Finder;
use Wallabag\CoreBundle\Helper\DownloadImages;
use Wallabag\CoreBundle\Repository\EntryRepository;
class CleanDownloadedImagesCommand extends ContainerAwareCommand
{
@ -34,7 +36,7 @@ class CleanDownloadedImagesCommand extends ContainerAwareCommand
$io->text('Dry run mode <info>enabled</info> (no images will be removed)');
}
$downloadImages = $this->getContainer()->get('wallabag_core.entry.download_images');
$downloadImages = $this->getContainer()->get(DownloadImages::class);
$baseFolder = $downloadImages->getBaseFolder();
$io->text('Retrieve existing images');
@ -56,7 +58,7 @@ class CleanDownloadedImagesCommand extends ContainerAwareCommand
$io->text('Retrieve valid folders attached to a user');
$entries = $this->getContainer()->get('wallabag_core.entry_repository')->findAllEntriesIdByUserId();
$entries = $this->getContainer()->get(EntryRepository::class)->findAllEntriesIdByUserId();
// retrieve _valid_ folders from existing entries
$validPaths = [];

View file

@ -2,6 +2,7 @@
namespace Wallabag\CoreBundle\Command;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\NoResultException;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
@ -9,7 +10,9 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Repository\EntryRepository;
use Wallabag\UserBundle\Entity\User;
use Wallabag\UserBundle\Repository\UserRepository;
class CleanDuplicatesCommand extends ContainerAwareCommand
{
@ -49,7 +52,7 @@ class CleanDuplicatesCommand extends ContainerAwareCommand
$this->io->success('Finished cleaning.');
} else {
$users = $this->getContainer()->get('wallabag_user.user_repository')->findAll();
$users = $this->getContainer()->get(UserRepository::class)->findAll();
$this->io->text(sprintf('Cleaning through <info>%d</info> user accounts', \count($users)));
@ -65,8 +68,8 @@ class CleanDuplicatesCommand extends ContainerAwareCommand
private function cleanDuplicates(User $user)
{
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
$repo = $this->getContainer()->get('wallabag_core.entry_repository');
$em = $this->getContainer()->get(EntityManagerInterface::class);
$repo = $this->getContainer()->get(EntryRepository::class);
$entries = $repo->findAllEntriesIdAndUrlByUserId($user->getId());
@ -105,10 +108,10 @@ class CleanDuplicatesCommand extends ContainerAwareCommand
*
* @param string $username
*
* @return \Wallabag\UserBundle\Entity\User
* @return User
*/
private function getUser($username)
{
return $this->getContainer()->get('wallabag_user.user_repository')->findOneByUserName($username);
return $this->getContainer()->get(UserRepository::class)->findOneByUserName($username);
}
}

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