diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 3be7f77da..13fb6d04e 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Want to ask something? - url: https://gitter.im/wallabag/wallabag - about: Use Gitter to ask questions. + url: https://matrix.to/#/#wallabag:matrix.org + about: Use Matrix to ask questions. diff --git a/CHANGELOG.md b/CHANGELOG.md index e90e27e84..67aac594d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [2.6.10](https://github.com/wallabag/wallabag/tree/2.6.10) +[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.9...2.6.10) + +### Improvement + +* Add Omnivore import by @nicosomb in https://github.com/wallabag/wallabag/pull/7754 + +### Fixes + +* Update site config & tests by @j0k3r in https://github.com/wallabag/wallabag/pull/7582 (fixes "Key provided is shorter + than 256 bits, only 240 bits provided" https://github.com/wallabag/wallabag/issues/7531) +* Update site config by @yguedidi in https://github.com/wallabag/wallabag/pull/7623 +* Replace gitter with matrix by @nicosomb in https://github.com/wallabag/wallabag/pull/7753 + +## [2.6.9](https://github.com/wallabag/wallabag/tree/2.6.9) +[Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.8...2.6.9) + +### Fixes +* Fix same domain pagination by @yguedidi in https://github.com/wallabag/wallabag/pull/7266 +* Upgrade PHP dependencies by @yguedidi in https://github.com/wallabag/wallabag/pull/7272 +* Use a proper "how to" for elCurator by @j0k3r in https://github.com/wallabag/wallabag/pull/7323 + ## [2.6.8](https://github.com/wallabag/wallabag/tree/2.6.8) [Full Changelog](https://github.com/wallabag/wallabag/compare/2.6.7...2.6.8) diff --git a/README.md b/README.md index 0831fb2a2..e3ec9b306 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # wallabag ![CI](https://github.com/wallabag/wallabag/workflows/CI/badge.svg) -[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/wallabag/wallabag) +[![Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#wallabag:matrix.org) [![Donation Status](https://img.shields.io/liberapay/goal/wallabag.svg?logo=liberapay)](https://liberapay.com/wallabag/donate) [![Translation status](https://hosted.weblate.org/widgets/wallabag/-/svg-badge.svg)](https://hosted.weblate.org/engage/wallabag/?utm_source=widget) ![License](https://img.shields.io/github/license/wallabag/wallabag) diff --git a/app/config/config.yml b/app/config/config.yml index 71b2aa71b..ace558c1b 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -277,6 +277,11 @@ old_sound_rabbit_mq: exchange_options: name: 'wallabag.import.elcurator' type: topic + import_omnivore: + connection: default + exchange_options: + name: 'wallabag.import.omnivore' + type: topic import_firefox: connection: default exchange_options: @@ -370,6 +375,15 @@ old_sound_rabbit_mq: name: 'wallabag.import.elcurator' callback: wallabag.consumer.amqp.elcurator qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"} + import_omnivore: + connection: default + exchange_options: + name: 'wallabag.import.omnivore' + type: topic + queue_options: + name: 'wallabag.import.omnivore' + callback: wallabag.consumer.amqp.omnivore + qos_options: {prefetch_count: "%rabbitmq_prefetch_count%"} import_firefox: connection: default exchange_options: diff --git a/app/config/services.yml b/app/config/services.yml index 2618bd8c0..0b4c91f8c 100644 --- a/app/config/services.yml +++ b/app/config/services.yml @@ -58,6 +58,11 @@ services: $rabbitMqProducer: '@old_sound_rabbit_mq.import_elcurator_producer' $redisProducer: '@wallabag.producer.redis.elcurator' + Wallabag\Controller\Import\OmnivoreController: + arguments: + $rabbitMqProducer: '@old_sound_rabbit_mq.import_omnivore_producer' + $redisProducer: '@wallabag.producer.redis.omnivore' + Wallabag\Controller\Import\FirefoxController: arguments: $rabbitMqProducer: '@old_sound_rabbit_mq.import_firefox_producer' @@ -324,6 +329,10 @@ services: tags: - { name: wallabag.import, alias: delicious } + Wallabag\Import\OmnivoreImport: + tags: + - { name: wallabag.import, alias: omnivore } + Wallabag\Import\FirefoxImport: tags: - { name: wallabag.import, alias: firefox } diff --git a/app/config/services_rabbit.yml b/app/config/services_rabbit.yml index 2c01be3bb..978624aa7 100644 --- a/app/config/services_rabbit.yml +++ b/app/config/services_rabbit.yml @@ -19,6 +19,7 @@ services: $elcuratorConsumer: '@old_sound_rabbit_mq.import_elcurator_consumer' $shaarliConsumer: '@old_sound_rabbit_mq.import_shaarli_consumer' $pocketHtmlConsumer: '@old_sound_rabbit_mq.import_pocket_html_consumer' + $omnivoreConsumer: '@old_sound_rabbit_mq.import_omnivore_consumer' wallabag.consumer.amqp.pocket: class: Wallabag\Consumer\AMQPEntryConsumer @@ -45,6 +46,11 @@ services: arguments: $import: '@Wallabag\Import\DeliciousImport' + wallabag.consumer.amqp.omnivore: + class: Wallabag\Consumer\AMQPEntryConsumer + arguments: + $import: '@Wallabag\Import\OmnivoreImport' + wallabag.consumer.amqp.wallabag_v1: class: Wallabag\Consumer\AMQPEntryConsumer arguments: diff --git a/app/config/services_redis.yml b/app/config/services_redis.yml index 0a6b5be99..2065fe4f5 100644 --- a/app/config/services_redis.yml +++ b/app/config/services_redis.yml @@ -69,6 +69,22 @@ services: arguments: $import: '@Wallabag\Import\DeliciousImport' + # Omnivore + wallabag.queue.redis.omnivore: + class: Simpleue\Queue\RedisQueue + arguments: + $queueName: "wallabag.import.omnivore" + + wallabag.producer.redis.omnivore: + class: Wallabag\Redis\Producer + arguments: + - "@wallabag.queue.redis.omnivore" + + wallabag.consumer.redis.omnivore: + class: Wallabag\Consumer\RedisEntryConsumer + arguments: + $import: '@Wallabag\Import\OmnivoreImport' + # pocket wallabag.queue.redis.pocket: class: Simpleue\Queue\RedisQueue diff --git a/app/config/wallabag.yml b/app/config/wallabag.yml index 4c26ec8a7..13abc5250 100644 --- a/app/config/wallabag.yml +++ b/app/config/wallabag.yml @@ -1,5 +1,5 @@ parameters: - wallabag.version: 2.6.8 + wallabag.version: 2.6.10 wallabag.paypal_url: "https://liberapay.com/wallabag/donate" wallabag.languages: en: 'English' diff --git a/composer.lock b/composer.lock index 35e945d2f..7201b144b 100644 --- a/composer.lock +++ b/composer.lock @@ -145,16 +145,16 @@ }, { "name": "beberlei/assert", - "version": "v3.3.2", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655" + "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655", + "url": "https://api.github.com/repos/beberlei/assert/zipball/b5fd8eacd8915a1b627b8bfc027803f1939734dd", + "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd", "shasum": "" }, "require": { @@ -162,7 +162,7 @@ "ext-json": "*", "ext-mbstring": "*", "ext-simplexml": "*", - "php": "^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", @@ -206,9 +206,9 @@ ], "support": { "issues": "https://github.com/beberlei/assert/issues", - "source": "https://github.com/beberlei/assert/tree/v3.3.2" + "source": "https://github.com/beberlei/assert/tree/v3.3.3" }, - "time": "2021-12-16T21:41:27+00:00" + "time": "2024-07-15T13:18:35+00:00" }, { "name": "behat/transliterator", @@ -413,23 +413,23 @@ }, { "name": "dasprid/enum", - "version": "1.0.5", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016" + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016", - "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", "shasum": "" }, "require": { "php": ">=7.1 <9.0" }, "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", "squizlabs/php_codesniffer": "*" }, "type": "library", @@ -457,9 +457,9 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.5" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" }, - "time": "2023-08-25T16:18:39+00:00" + "time": "2024-08-09T14:30:48+00:00" }, { "name": "defuse/php-encryption", @@ -860,16 +860,16 @@ }, { "name": "doctrine/dbal", - "version": "3.9.0", + "version": "3.9.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6" + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d8f68ea6cc00912e5313237130b8c8decf4d28c6", - "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", "shasum": "" }, "require": { @@ -885,7 +885,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.11.7", + "phpstan/phpstan": "1.12.6", "phpstan/phpstan-strict-rules": "^1.6", "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", @@ -953,7 +953,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.0" + "source": "https://github.com/doctrine/dbal/tree/3.9.3" }, "funding": [ { @@ -969,7 +969,7 @@ "type": "tidelift" } ], - "time": "2024-08-15T07:34:42+00:00" + "time": "2024-10-10T17:56:43+00:00" }, { "name": "doctrine/deprecations", @@ -1665,16 +1665,16 @@ }, { "name": "doctrine/orm", - "version": "2.19.6", + "version": "2.20.0", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073" + "reference": "8ed6c2234aba019f9737a6bcc9516438e62da27c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", - "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", + "url": "https://api.github.com/repos/doctrine/orm/zipball/8ed6c2234aba019f9737a6bcc9516438e62da27c", + "reference": "8ed6c2234aba019f9737a6bcc9516438e62da27c", "shasum": "" }, "require": { @@ -1703,7 +1703,9 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.11.1", + "phpstan/extension-installer": "~1.1.0 || ^1.4", + "phpstan/phpstan": "~1.4.10 || 1.12.6", + "phpstan/phpstan-deprecation-rules": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", @@ -1760,9 +1762,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.6" + "source": "https://github.com/doctrine/orm/tree/2.20.0" }, - "time": "2024-06-26T17:24:40+00:00" + "time": "2024-10-11T11:47:24+00:00" }, { "name": "doctrine/persistence", @@ -2655,16 +2657,16 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.16.1", + "version": "v3.17.1", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "e85560ed96f977b8c29428a99222cb2ef2f0e80d" + "reference": "eabb45018c5a4362b46c5beae3881261da89f900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/e85560ed96f977b8c29428a99222cb2ef2f0e80d", - "reference": "e85560ed96f977b8c29428a99222cb2ef2f0e80d", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/eabb45018c5a4362b46c5beae3881261da89f900", + "reference": "eabb45018c5a4362b46c5beae3881261da89f900", "shasum": "" }, "require": { @@ -2681,14 +2683,14 @@ }, "conflict": { "doctrine/annotations": "<1.13 || >=3.0", - "doctrine/dbal": "<3.2 || >=4.0", + "doctrine/dbal": "<3.7 || >=5.0", "doctrine/mongodb-odm": "<2.3 || >=3.0", "doctrine/orm": "<2.14.0 || 2.16.0 || 2.16.1 || >=4.0" }, "require-dev": { "doctrine/annotations": "^1.13 || ^2.0", "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^3.2", + "doctrine/dbal": "^3.7 || ^4.0", "doctrine/doctrine-bundle": "^2.3", "doctrine/mongodb-odm": "^2.3", "doctrine/orm": "^2.14.0 || ^3.0", @@ -2760,7 +2762,7 @@ "support": { "email": "gediminas.morkevicius@gmail.com", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.16.1", + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.17.1", "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" }, "funding": [ @@ -2781,7 +2783,7 @@ "type": "github" } ], - "time": "2024-06-25T16:22:14+00:00" + "time": "2024-10-07T22:30:27+00:00" }, { "name": "grandt/binstring", @@ -5626,16 +5628,16 @@ }, { "name": "nelmio/api-doc-bundle", - "version": "v4.33.3", + "version": "v4.33.4", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "2384711daffaf01ab30d14743a5ce3422bbe8246" + "reference": "c43171895161c8eb342bc5fc5eb21760dd91b646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/2384711daffaf01ab30d14743a5ce3422bbe8246", - "reference": "2384711daffaf01ab30d14743a5ce3422bbe8246", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/c43171895161c8eb342bc5fc5eb21760dd91b646", + "reference": "c43171895161c8eb342bc5fc5eb21760dd91b646", "shasum": "" }, "require": { @@ -5736,7 +5738,7 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioApiDocBundle/issues", - "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.33.3" + "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.33.4" }, "funding": [ { @@ -5744,7 +5746,7 @@ "type": "github" } ], - "time": "2024-11-07T15:46:45+00:00" + "time": "2024-11-08T15:00:51+00:00" }, { "name": "nelmio/cors-bundle", @@ -7014,23 +7016,23 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.9.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d", - "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -7066,9 +7068,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-11-03T20:11:34+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpseclib/phpseclib", @@ -8591,16 +8593,16 @@ }, { "name": "sentry/sentry", - "version": "4.9.0", + "version": "4.10.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d" + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/788ec170f51ebb22f2809a1e3f78b19ccd39b70d", - "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856", "shasum": "" }, "require": { @@ -8618,12 +8620,12 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.4", - "guzzlehttp/promises": "^1.0|^2.0", + "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", "monolog/monolog": "^1.6|^2.0|^3.0", "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^8.5.14|^9.4", + "phpunit/phpunit": "^8.5|^9.6", "symfony/phpunit-bridge": "^5.2|^6.0|^7.0", "vimeo/psalm": "^4.17" }, @@ -8664,7 +8666,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.9.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.10.0" }, "funding": [ { @@ -8676,7 +8678,7 @@ "type": "custom" } ], - "time": "2024-08-08T14:40:50+00:00" + "time": "2024-11-06T07:44:19+00:00" }, { "name": "sentry/sentry-symfony", @@ -8908,16 +8910,16 @@ }, { "name": "spiriitlabs/form-filter-bundle", - "version": "v10.0.0", + "version": "v10.0.2", "source": { "type": "git", "url": "https://github.com/SpiriitLabs/form-filter-bundle.git", - "reference": "7a1ab5c7f8d1890562f8a3e57796bbb8f84e5be8" + "reference": "78a8aaaf4f0e51d1ba6ffd59e371e137f9517123" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SpiriitLabs/form-filter-bundle/zipball/7a1ab5c7f8d1890562f8a3e57796bbb8f84e5be8", - "reference": "7a1ab5c7f8d1890562f8a3e57796bbb8f84e5be8", + "url": "https://api.github.com/repos/SpiriitLabs/form-filter-bundle/zipball/78a8aaaf4f0e51d1ba6ffd59e371e137f9517123", + "reference": "78a8aaaf4f0e51d1ba6ffd59e371e137f9517123", "shasum": "" }, "require": { @@ -8954,9 +8956,9 @@ "symfony" ], "support": { - "source": "https://github.com/SpiriitLabs/form-filter-bundle/tree/v10.0.0" + "source": "https://github.com/SpiriitLabs/form-filter-bundle/tree/v10.0.2" }, - "time": "2024-01-15T14:09:58+00:00" + "time": "2024-08-23T08:46:41+00:00" }, { "name": "spomky-labs/otphp", @@ -9115,16 +9117,16 @@ }, { "name": "symfony/asset", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3" + "reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/e5aa241b4914257164b39c3c2678b2c41b7671e3", - "reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3", + "url": "https://api.github.com/repos/symfony/asset/zipball/b7a18eaff1d717c321b4f13403413f8815bf9cb0", + "reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0", "shasum": "" }, "require": { @@ -9169,7 +9171,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v5.4.40" + "source": "https://github.com/symfony/asset/tree/v5.4.45" }, "funding": [ { @@ -9185,7 +9187,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/cache", @@ -9699,16 +9701,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v5.4.42", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "009d870d520f30a213a1db0e410f8edf674eda5a" + "reference": "22f9d7c3724ae10656797f10d1cb926daa612845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/009d870d520f30a213a1db0e410f8edf674eda5a", - "reference": "009d870d520f30a213a1db0e410f8edf674eda5a", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/22f9d7c3724ae10656797f10d1cb926daa612845", + "reference": "22f9d7c3724ae10656797f10d1cb926daa612845", "shasum": "" }, "require": { @@ -9795,7 +9797,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.42" + "source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.46" }, "funding": [ { @@ -9811,20 +9813,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:05:19+00:00" + "time": "2024-11-05T15:58:15+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "2ad469c3e07fdba677b278d0e266071a51aa0dac" + "reference": "89647a57db280f9f93c27271fea58babb77bb473" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2ad469c3e07fdba677b278d0e266071a51aa0dac", - "reference": "2ad469c3e07fdba677b278d0e266071a51aa0dac", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/89647a57db280f9f93c27271fea58babb77bb473", + "reference": "89647a57db280f9f93c27271fea58babb77bb473", "shasum": "" }, "require": { @@ -9870,7 +9872,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.40" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.45" }, "funding": [ { @@ -9886,7 +9888,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/error-handler", @@ -10318,16 +10320,16 @@ }, { "name": "symfony/form", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "ff45013def0a3a692e84010095e8ee5fe9a9fa43" + "reference": "c1974a723cdee8a273cb49ce13fada5c1667706a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/ff45013def0a3a692e84010095e8ee5fe9a9fa43", - "reference": "ff45013def0a3a692e84010095e8ee5fe9a9fa43", + "url": "https://api.github.com/repos/symfony/form/zipball/c1974a723cdee8a273cb49ce13fada5c1667706a", + "reference": "c1974a723cdee8a273cb49ce13fada5c1667706a", "shasum": "" }, "require": { @@ -10400,7 +10402,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v5.4.40" + "source": "https://github.com/symfony/form/tree/v5.4.45" }, "funding": [ { @@ -10416,7 +10418,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-08T07:27:17+00:00" }, { "name": "symfony/framework-bundle", @@ -10571,16 +10573,16 @@ }, { "name": "symfony/google-mailer", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/google-mailer.git", - "reference": "beca9c52ec192b32accf5ec0bcddb8cd29c81a9e" + "reference": "d49cb1463a6e9f45a2f1fd901ede8869d142f76d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/google-mailer/zipball/beca9c52ec192b32accf5ec0bcddb8cd29c81a9e", - "reference": "beca9c52ec192b32accf5ec0bcddb8cd29c81a9e", + "url": "https://api.github.com/repos/symfony/google-mailer/zipball/d49cb1463a6e9f45a2f1fd901ede8869d142f76d", + "reference": "d49cb1463a6e9f45a2f1fd901ede8869d142f76d", "shasum": "" }, "require": { @@ -10617,7 +10619,7 @@ "description": "Symfony Google Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/google-mailer/tree/v5.4.40" + "source": "https://github.com/symfony/google-mailer/tree/v5.4.45" }, "funding": [ { @@ -10633,20 +10635,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/http-client", - "version": "v5.4.41", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "87ca825717928d178de8a3458f163100925fb675" + "reference": "ebcaeeafc48b69f497f82b9700ddf54bfe975f71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/87ca825717928d178de8a3458f163100925fb675", - "reference": "87ca825717928d178de8a3458f163100925fb675", + "url": "https://api.github.com/repos/symfony/http-client/zipball/ebcaeeafc48b69f497f82b9700ddf54bfe975f71", + "reference": "ebcaeeafc48b69f497f82b9700ddf54bfe975f71", "shasum": "" }, "require": { @@ -10708,7 +10710,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v5.4.41" + "source": "https://github.com/symfony/http-client/tree/v5.4.46" }, "funding": [ { @@ -10724,7 +10726,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:25:22+00:00" + "time": "2024-10-25T11:45:42+00:00" }, { "name": "symfony/http-client-contracts", @@ -10995,16 +10997,16 @@ }, { "name": "symfony/intl", - "version": "v5.4.40", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "75482b3b0aadc7f652d99b4f543b1d21f6562ff4" + "reference": "d74763310045ccf2bf485549f8ba942184e31087" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/75482b3b0aadc7f652d99b4f543b1d21f6562ff4", - "reference": "75482b3b0aadc7f652d99b4f543b1d21f6562ff4", + "url": "https://api.github.com/repos/symfony/intl/zipball/d74763310045ccf2bf485549f8ba942184e31087", + "reference": "d74763310045ccf2bf485549f8ba942184e31087", "shasum": "" }, "require": { @@ -11065,7 +11067,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v5.4.40" + "source": "https://github.com/symfony/intl/tree/v5.4.46" }, "funding": [ { @@ -11081,20 +11083,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-11-05T14:12:18+00:00" }, { "name": "symfony/mailer", - "version": "v5.4.41", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "13f4fac7f8450381122f0f4cd750a63c2821c7fa" + "reference": "f732e1fafdf0f4a2d865e91f1018aaca174aeed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/13f4fac7f8450381122f0f4cd750a63c2821c7fa", - "reference": "13f4fac7f8450381122f0f4cd750a63c2821c7fa", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f732e1fafdf0f4a2d865e91f1018aaca174aeed9", + "reference": "f732e1fafdf0f4a2d865e91f1018aaca174aeed9", "shasum": "" }, "require": { @@ -11141,7 +11143,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v5.4.41" + "source": "https://github.com/symfony/mailer/tree/v5.4.45" }, "funding": [ { @@ -11157,20 +11159,20 @@ "type": "tidelift" } ], - "time": "2024-06-27T20:38:52+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/mime", - "version": "v5.4.41", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "c71c7a1aeed60b22d05e738197e31daf2120bd42" + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/c71c7a1aeed60b22d05e738197e31daf2120bd42", - "reference": "c71c7a1aeed60b22d05e738197e31daf2120bd42", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c1b9b3e5b52981551fc6044539af1d974e39064", + "reference": "8c1b9b3e5b52981551fc6044539af1d974e39064", "shasum": "" }, "require": { @@ -11226,7 +11228,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.41" + "source": "https://github.com/symfony/mime/tree/v5.4.45" }, "funding": [ { @@ -11242,20 +11244,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:36:24+00:00" + "time": "2024-10-23T20:18:32+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "ac6e0bf2a275e017c1dedd54dd0f1fbf252a9351" + "reference": "cf7d75d4d64a41fbb1c0e92301bec404134fa84b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/ac6e0bf2a275e017c1dedd54dd0f1fbf252a9351", - "reference": "ac6e0bf2a275e017c1dedd54dd0f1fbf252a9351", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/cf7d75d4d64a41fbb1c0e92301bec404134fa84b", + "reference": "cf7d75d4d64a41fbb1c0e92301bec404134fa84b", "shasum": "" }, "require": { @@ -11310,7 +11312,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.40" + "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.45" }, "funding": [ { @@ -11326,7 +11328,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-10T06:37:45+00:00" }, { "name": "symfony/monolog-bundle", @@ -11480,16 +11482,16 @@ }, { "name": "symfony/password-hasher", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093" + "reference": "6c5993b24505f98b90ca4896448012bbec54c7c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/21b98178ab2024e6c7d8ab72cca9ba16015c6093", - "reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/6c5993b24505f98b90ca4896448012bbec54c7c8", + "reference": "6c5993b24505f98b90ca4896448012bbec54c7c8", "shasum": "" }, "require": { @@ -11534,7 +11536,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v5.4.40" + "source": "https://github.com/symfony/password-hasher/tree/v5.4.45" }, "funding": [ { @@ -11550,7 +11552,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/polyfill-ctype", @@ -11711,20 +11713,20 @@ }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "e76343c631b453088e2260ac41dfebe21954de81" + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81", - "reference": "e76343c631b453088e2260ac41dfebe21954de81", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance and support of other locales than \"en\"" @@ -11775,7 +11777,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" }, "funding": [ { @@ -11791,26 +11793,25 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -11859,7 +11860,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -11875,7 +11876,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", @@ -12040,36 +12041,28 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "10112722600777e02d2745716b70c5db4ca70442" + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", - "reference": "10112722600777e02d2745716b70c5db4ca70442", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "type": "library", + "type": "metapackage", "extra": { "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -12093,7 +12086,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" }, "funding": [ { @@ -12109,7 +12102,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", @@ -12345,16 +12338,16 @@ }, { "name": "symfony/property-access", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "6e4834145c2231b34eafabe440aaac478a95b456" + "reference": "111e7ed617509f1a9139686055d234aad6e388e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/6e4834145c2231b34eafabe440aaac478a95b456", - "reference": "6e4834145c2231b34eafabe440aaac478a95b456", + "url": "https://api.github.com/repos/symfony/property-access/zipball/111e7ed617509f1a9139686055d234aad6e388e0", + "reference": "111e7ed617509f1a9139686055d234aad6e388e0", "shasum": "" }, "require": { @@ -12406,7 +12399,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v5.4.40" + "source": "https://github.com/symfony/property-access/tree/v5.4.45" }, "funding": [ { @@ -12422,7 +12415,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/property-info", @@ -12517,16 +12510,16 @@ }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "2ebc25e0174a6a244f7edada5a498f9728dc0d29" + "reference": "e96cd37f3de0b75ff32f6b79c180ba77c4037eec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/2ebc25e0174a6a244f7edada5a498f9728dc0d29", - "reference": "2ebc25e0174a6a244f7edada5a498f9728dc0d29", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/e96cd37f3de0b75ff32f6b79c180ba77c4037eec", + "reference": "e96cd37f3de0b75ff32f6b79c180ba77c4037eec", "shasum": "" }, "require": { @@ -12564,7 +12557,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.4.40" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.4.45" }, "funding": [ { @@ -12580,7 +12573,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -12763,23 +12756,23 @@ }, { "name": "symfony/security-bundle", - "version": "v5.4.41", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "86557f237fb152412048912660895ab86aa61494" + "reference": "d6081d1b9118f944df90bb77444a8617eba01542" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/86557f237fb152412048912660895ab86aa61494", - "reference": "86557f237fb152412048912660895ab86aa61494", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/d6081d1b9118f944df90bb77444a8617eba01542", + "reference": "d6081d1b9118f944df90bb77444a8617eba01542", "shasum": "" }, "require": { "ext-xml": "*", "php": ">=7.2.5", "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dependency-injection": "^5.4.43|^6.4.11", "symfony/deprecation-contracts": "^2.1|^3", "symfony/event-dispatcher": "^5.1|^6.0", "symfony/http-foundation": "^5.3|^6.0", @@ -12846,7 +12839,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v5.4.41" + "source": "https://github.com/symfony/security-bundle/tree/v5.4.45" }, "funding": [ { @@ -12862,20 +12855,20 @@ "type": "tidelift" } ], - "time": "2024-06-21T13:58:36+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/security-core", - "version": "v5.4.42", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "3c6b81c68a828958ae0bcec9dd44a8e6ea0a38de" + "reference": "2d324971f4a241cf538502e14f15ad32f2b16b9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/3c6b81c68a828958ae0bcec9dd44a8e6ea0a38de", - "reference": "3c6b81c68a828958ae0bcec9dd44a8e6ea0a38de", + "url": "https://api.github.com/repos/symfony/security-core/zipball/2d324971f4a241cf538502e14f15ad32f2b16b9b", + "reference": "2d324971f4a241cf538502e14f15ad32f2b16b9b", "shasum": "" }, "require": { @@ -12940,7 +12933,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v5.4.42" + "source": "https://github.com/symfony/security-core/tree/v5.4.45" }, "funding": [ { @@ -12956,20 +12949,20 @@ "type": "tidelift" } ], - "time": "2024-07-16T19:38:31+00:00" + "time": "2024-10-23T08:30:13+00:00" }, { "name": "symfony/security-csrf", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028" + "reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/9058d522c1c33d7ba13f4b3c79555cc2c4c16028", - "reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/28dcafc3220f12264bb2aabe2389a2163458c1f4", + "reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4", "shasum": "" }, "require": { @@ -13013,7 +13006,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v5.4.40" + "source": "https://github.com/symfony/security-csrf/tree/v5.4.45" }, "funding": [ { @@ -13029,20 +13022,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/security-guard", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/security-guard.git", - "reference": "d930fd327c290f451c9d8dd7889169195d4484e9" + "reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/d930fd327c290f451c9d8dd7889169195d4484e9", - "reference": "d930fd327c290f451c9d8dd7889169195d4484e9", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/f3da3dbec38aaedaf287ffeb4e3a90994af37faa", + "reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa", "shasum": "" }, "require": { @@ -13081,7 +13074,7 @@ "description": "Symfony Security Component - Guard", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-guard/tree/v5.4.40" + "source": "https://github.com/symfony/security-guard/tree/v5.4.45" }, "funding": [ { @@ -13097,20 +13090,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/security-http", - "version": "v5.4.41", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "14d271e304dce13ae77e39e6a6353c986e756b40" + "reference": "7152f0e4e292719cdeb8306076448036e025569b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/14d271e304dce13ae77e39e6a6353c986e756b40", - "reference": "14d271e304dce13ae77e39e6a6353c986e756b40", + "url": "https://api.github.com/repos/symfony/security-http/zipball/7152f0e4e292719cdeb8306076448036e025569b", + "reference": "7152f0e4e292719cdeb8306076448036e025569b", "shasum": "" }, "require": { @@ -13167,7 +13160,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v5.4.41" + "source": "https://github.com/symfony/security-http/tree/v5.4.46" }, "funding": [ { @@ -13183,20 +13176,20 @@ "type": "tidelift" } ], - "time": "2024-06-17T05:58:45+00:00" + "time": "2024-11-04T12:18:48+00:00" }, { "name": "symfony/serializer", - "version": "v5.4.41", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "c97dba58c2fb36dee0381da84952cad21c49b6fb" + "reference": "460c5df9fb6c39d10d5b7f386e4feae4b6370221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/c97dba58c2fb36dee0381da84952cad21c49b6fb", - "reference": "c97dba58c2fb36dee0381da84952cad21c49b6fb", + "url": "https://api.github.com/repos/symfony/serializer/zipball/460c5df9fb6c39d10d5b7f386e4feae4b6370221", + "reference": "460c5df9fb6c39d10d5b7f386e4feae4b6370221", "shasum": "" }, "require": { @@ -13270,7 +13263,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v5.4.41" + "source": "https://github.com/symfony/serializer/tree/v5.4.45" }, "funding": [ { @@ -13286,7 +13279,7 @@ "type": "tidelift" } ], - "time": "2024-06-27T16:09:31+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/service-contracts", @@ -13373,16 +13366,16 @@ }, { "name": "symfony/stopwatch", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625" + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e9daf3b7c805c747638b2cc48f1649e594f9625", - "reference": "0e9daf3b7c805c747638b2cc48f1649e594f9625", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fb2c199cf302eb207f8c23e7ee174c1c31a5c004", + "reference": "fb2c199cf302eb207f8c23e7ee174c1c31a5c004", "shasum": "" }, "require": { @@ -13415,7 +13408,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.40" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.45" }, "funding": [ { @@ -13431,7 +13424,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/string", @@ -13521,16 +13514,16 @@ }, { "name": "symfony/templating", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/templating.git", - "reference": "9eae6e708a65ea50e2072e99c87b193b24d3f028" + "reference": "e9e46b530d8e202071bc5efcea1a3d3174d68a9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/9eae6e708a65ea50e2072e99c87b193b24d3f028", - "reference": "9eae6e708a65ea50e2072e99c87b193b24d3f028", + "url": "https://api.github.com/repos/symfony/templating/zipball/e9e46b530d8e202071bc5efcea1a3d3174d68a9b", + "reference": "e9e46b530d8e202071bc5efcea1a3d3174d68a9b", "shasum": "" }, "require": { @@ -13569,7 +13562,7 @@ "description": "Provides all the tools needed to build any kind of template system", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/templating/tree/v5.4.40" + "source": "https://github.com/symfony/templating/tree/v5.4.45" }, "funding": [ { @@ -13585,20 +13578,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/translation", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bb51d7f183756d1ac03f50ea47dc5726518cc7e8" + "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bb51d7f183756d1ac03f50ea47dc5726518cc7e8", - "reference": "bb51d7f183756d1ac03f50ea47dc5726518cc7e8", + "url": "https://api.github.com/repos/symfony/translation/zipball/98f26acc99341ca4bab345fb14d7b1d7cb825bed", + "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed", "shasum": "" }, "require": { @@ -13666,7 +13659,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.40" + "source": "https://github.com/symfony/translation/tree/v5.4.45" }, "funding": [ { @@ -13682,7 +13675,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/translation-contracts", @@ -13764,16 +13757,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v5.4.41", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "d7b10dad12c49863c20c7f8e4cc74b9416eefbb9" + "reference": "b3d3738b4be14bf1a4544a6faeed89463fe8b60e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d7b10dad12c49863c20c7f8e4cc74b9416eefbb9", - "reference": "d7b10dad12c49863c20c7f8e4cc74b9416eefbb9", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/b3d3738b4be14bf1a4544a6faeed89463fe8b60e", + "reference": "b3d3738b4be14bf1a4544a6faeed89463fe8b60e", "shasum": "" }, "require": { @@ -13865,7 +13858,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v5.4.41" + "source": "https://github.com/symfony/twig-bridge/tree/v5.4.45" }, "funding": [ { @@ -13881,20 +13874,20 @@ "type": "tidelift" } ], - "time": "2024-06-09T18:59:35+00:00" + "time": "2024-10-24T15:46:29+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "997c002735c88b50a6325cca8ecf3d8723902666" + "reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/997c002735c88b50a6325cca8ecf3d8723902666", - "reference": "997c002735c88b50a6325cca8ecf3d8723902666", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9", + "reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9", "shasum": "" }, "require": { @@ -13955,7 +13948,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v5.4.40" + "source": "https://github.com/symfony/twig-bundle/tree/v5.4.45" }, "funding": [ { @@ -13971,20 +13964,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/validator", - "version": "v5.4.41", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "e00b2547f712a97755933db45efc03123b2d2690" + "reference": "9849c2cae17964a42a77df6823ac90414e2b451d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/e00b2547f712a97755933db45efc03123b2d2690", - "reference": "e00b2547f712a97755933db45efc03123b2d2690", + "url": "https://api.github.com/repos/symfony/validator/zipball/9849c2cae17964a42a77df6823ac90414e2b451d", + "reference": "9849c2cae17964a42a77df6823ac90414e2b451d", "shasum": "" }, "require": { @@ -14024,7 +14017,7 @@ "symfony/http-kernel": "^4.4|^5.0|^6.0", "symfony/intl": "^4.4|^5.0|^6.0", "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.3|^6.0", "symfony/translation": "^5.4.35|~6.3.12|^6.4.3", "symfony/yaml": "^4.4|^5.0|^6.0" @@ -14068,7 +14061,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.4.41" + "source": "https://github.com/symfony/validator/tree/v5.4.46" }, "funding": [ { @@ -14084,7 +14077,7 @@ "type": "tidelift" } ], - "time": "2024-06-10T09:18:21+00:00" + "time": "2024-11-04T11:03:12+00:00" }, { "name": "symfony/var-dumper", @@ -14728,16 +14721,16 @@ }, { "name": "twig/twig", - "version": "v3.11.2", + "version": "v3.11.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "5b580ec1882b54c98cbd8c0f8a3ca5d1904db6b1" + "reference": "3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/5b580ec1882b54c98cbd8c0f8a3ca5d1904db6b1", - "reference": "5b580ec1882b54c98cbd8c0f8a3ca5d1904db6b1", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e", + "reference": "3b06600ff3abefaf8ff55d5c336cd1c4253f8c7e", "shasum": "" }, "require": { @@ -14792,7 +14785,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.11.2" + "source": "https://github.com/twigphp/Twig/tree/v3.11.3" }, "funding": [ { @@ -14804,7 +14797,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T18:50:16+00:00" + "time": "2024-11-07T12:34:41+00:00" }, { "name": "wallabag/phpepub", @@ -15603,24 +15596,24 @@ }, { "name": "composer/semver", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -15664,7 +15657,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -15680,7 +15673,7 @@ "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", @@ -16843,16 +16836,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -16891,7 +16884,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -16899,20 +16892,20 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nikic/php-parser", - "version": "v4.19.1", + "version": "v4.19.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { @@ -16921,7 +16914,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -16953,9 +16946,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" }, - "time": "2024-03-17T08:10:35+00:00" + "time": "2024-09-29T15:01:53+00:00" }, { "name": "phar-io/manifest", @@ -17187,16 +17180,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.8", + "version": "1.12.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c" + "reference": "ceb937fb39a92deabc02d20709cf14b2c452502c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6a60a4d66142b8156c9da923f1972657bc4748c", - "reference": "f6a60a4d66142b8156c9da923f1972657bc4748c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ceb937fb39a92deabc02d20709cf14b2c452502c", + "reference": "ceb937fb39a92deabc02d20709cf14b2c452502c", "shasum": "" }, "require": { @@ -17241,20 +17234,20 @@ "type": "github" } ], - "time": "2024-11-06T19:06:49+00:00" + "time": "2024-11-10T17:10:04+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "1.5.5", + "version": "1.5.6", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "4e9c77fc7bc3293f773fb2d8155c99572a3c89a4" + "reference": "8ba022846e79238872e315fff61e19b42ba2f139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/4e9c77fc7bc3293f773fb2d8155c99572a3c89a4", - "reference": "4e9c77fc7bc3293f773fb2d8155c99572a3c89a4", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/8ba022846e79238872e315fff61e19b42ba2f139", + "reference": "8ba022846e79238872e315fff61e19b42ba2f139", "shasum": "" }, "require": { @@ -17311,9 +17304,9 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.5.5" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.5.6" }, - "time": "2024-10-29T12:19:49+00:00" + "time": "2024-11-09T17:34:01+00:00" }, { "name": "phpstan/phpstan-phpunit", @@ -17441,35 +17434,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -17478,7 +17471,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -17507,7 +17500,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -17515,7 +17508,7 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -17760,16 +17753,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.20", + "version": "9.6.21", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "49d7820565836236411f5dc002d16dd689cde42f" + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", - "reference": "49d7820565836236411f5dc002d16dd689cde42f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", "shasum": "" }, "require": { @@ -17784,7 +17777,7 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-code-coverage": "^9.2.32", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.4", @@ -17843,7 +17836,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21" }, "funding": [ { @@ -17859,7 +17852,7 @@ "type": "tidelift" } ], - "time": "2024-07-10T11:45:39+00:00" + "time": "2024-09-19T10:50:18+00:00" }, { "name": "react/cache", @@ -19349,16 +19342,16 @@ }, { "name": "symfony/browser-kit", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "92c8ba1e5ee12d07120744c90898516132b4e58b" + "reference": "03cce39764429e07fbab9b989a1182a24578341d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/92c8ba1e5ee12d07120744c90898516132b4e58b", - "reference": "92c8ba1e5ee12d07120744c90898516132b4e58b", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/03cce39764429e07fbab9b989a1182a24578341d", + "reference": "03cce39764429e07fbab9b989a1182a24578341d", "shasum": "" }, "require": { @@ -19401,7 +19394,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.4.40" + "source": "https://github.com/symfony/browser-kit/tree/v5.4.45" }, "funding": [ { @@ -19417,20 +19410,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ea43887e9afd2029509662d4f95e8b5ef6fc9bbb" + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ea43887e9afd2029509662d4f95e8b5ef6fc9bbb", - "reference": "ea43887e9afd2029509662d4f95e8b5ef6fc9bbb", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4f7f3c35fba88146b56d0025d20ace3f3901f097", + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097", "shasum": "" }, "require": { @@ -19467,7 +19460,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.40" + "source": "https://github.com/symfony/css-selector/tree/v5.4.45" }, "funding": [ { @@ -19483,20 +19476,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/debug-bundle", - "version": "v5.4.40", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "177f79296705823eee0d7dd79773f3a9df884fe0" + "reference": "653c7629d036ef24ac5de54a157aecdc400d2570" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/177f79296705823eee0d7dd79773f3a9df884fe0", - "reference": "177f79296705823eee0d7dd79773f3a9df884fe0", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/653c7629d036ef24ac5de54a157aecdc400d2570", + "reference": "653c7629d036ef24ac5de54a157aecdc400d2570", "shasum": "" }, "require": { @@ -19546,7 +19539,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v5.4.40" + "source": "https://github.com/symfony/debug-bundle/tree/v5.4.45" }, "funding": [ { @@ -19562,7 +19555,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/maker-bundle", @@ -19657,16 +19650,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.2", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8" + "reference": "c6b9d8f52d3e276bedb49612aa4a2a046171287f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c6b9d8f52d3e276bedb49612aa4a2a046171287f", + "reference": "c6b9d8f52d3e276bedb49612aa4a2a046171287f", "shasum": "" }, "require": { @@ -19719,7 +19712,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.2" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.6" }, "funding": [ { @@ -19735,7 +19728,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/process", @@ -19801,16 +19794,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v5.4.40", + "version": "v5.4.46", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "a29669617c4e63785f363571a190a706b9022890" + "reference": "8ce2ad95670ad50b92eb6456836d15d0cc0eeff8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/a29669617c4e63785f363571a190a706b9022890", - "reference": "a29669617c4e63785f363571a190a706b9022890", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/8ce2ad95670ad50b92eb6456836d15d0cc0eeff8", + "reference": "8ce2ad95670ad50b92eb6456836d15d0cc0eeff8", "shasum": "" }, "require": { @@ -19861,7 +19854,7 @@ "description": "Provides a development tool that gives detailed information about the execution of any request", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.40" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.46" }, "funding": [ { @@ -19877,7 +19870,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-11-04T11:02:15+00:00" }, { "name": "symfony/web-server-bundle", @@ -20034,7 +20027,7 @@ "ext-tokenizer": "*", "ext-xml": "*" }, - "platform-dev": [], + "platform-dev": {}, "platform-overrides": { "php": "7.4.29" }, diff --git a/src/Command/Import/ImportCommand.php b/src/Command/Import/ImportCommand.php index 4c2594eb0..119843a20 100644 --- a/src/Command/Import/ImportCommand.php +++ b/src/Command/Import/ImportCommand.php @@ -19,6 +19,7 @@ use Wallabag\Import\DeliciousImport; use Wallabag\Import\ElcuratorImport; use Wallabag\Import\FirefoxImport; use Wallabag\Import\InstapaperImport; +use Wallabag\Import\OmnivoreImport; use Wallabag\Import\PinboardImport; use Wallabag\Import\PocketHtmlImport; use Wallabag\Import\ReadabilityImport; @@ -42,6 +43,7 @@ class ImportCommand extends Command private InstapaperImport $instapaperImport; private PinboardImport $pinboardImport; private DeliciousImport $deliciousImport; + private OmnivoreImport $omnivoreImport; private WallabagV1Import $wallabagV1Import; private ElcuratorImport $elcuratorImport; private ShaarliImport $shaarliImport; @@ -61,7 +63,8 @@ class ImportCommand extends Command WallabagV1Import $wallabagV1Import, ElcuratorImport $elcuratorImport, ShaarliImport $shaarliImport, - PocketHtmlImport $pocketHtmlImport + PocketHtmlImport $pocketHtmlImport, + OmnivoreImport $omnivoreImport ) { $this->entityManager = $entityManager; $this->tokenStorage = $tokenStorage; @@ -73,6 +76,7 @@ class ImportCommand extends Command $this->instapaperImport = $instapaperImport; $this->pinboardImport = $pinboardImport; $this->deliciousImport = $deliciousImport; + $this->omnivoreImport = $omnivoreImport; $this->wallabagV1Import = $wallabagV1Import; $this->elcuratorImport = $elcuratorImport; $this->shaarliImport = $shaarliImport; @@ -159,6 +163,9 @@ class ImportCommand extends Command case 'pocket': $import = $this->pocketHtmlImport; break; + case 'omnivore': + $import = $this->omnivoreImport; + break; default: $import = $this->wallabagV1Import; } diff --git a/src/Command/Import/RedisWorkerCommand.php b/src/Command/Import/RedisWorkerCommand.php index f788f22a2..f5ec875aa 100644 --- a/src/Command/Import/RedisWorkerCommand.php +++ b/src/Command/Import/RedisWorkerCommand.php @@ -28,7 +28,7 @@ class RedisWorkerCommand extends Command protected function configure() { $this - ->addArgument('serviceName', InputArgument::REQUIRED, 'Service to use: wallabag_v1, wallabag_v2, pocket, readability, pinboard, delicious, firefox, chrome or instapaper') + ->addArgument('serviceName', InputArgument::REQUIRED, 'Service to use: wallabag_v1, wallabag_v2, pocket, readability, pinboard, delicious, omnivore, firefox, chrome or instapaper') ->addOption('maxIterations', '', InputOption::VALUE_OPTIONAL, 'Number of iterations before stopping', false) ; } diff --git a/src/Consumer/RabbitMQConsumerTotalProxy.php b/src/Consumer/RabbitMQConsumerTotalProxy.php index 1dadd8626..bb2f45acd 100644 --- a/src/Consumer/RabbitMQConsumerTotalProxy.php +++ b/src/Consumer/RabbitMQConsumerTotalProxy.php @@ -22,6 +22,7 @@ class RabbitMQConsumerTotalProxy private Consumer $elcuratorConsumer; private Consumer $shaarliConsumer; private Consumer $pocketHtmlConsumer; + private Consumer $omnivoreConsumer; public function __construct( Consumer $pocketConsumer, @@ -35,7 +36,8 @@ class RabbitMQConsumerTotalProxy Consumer $deliciousConsumer, Consumer $elcuratorConsumer, Consumer $shaarliConsumer, - Consumer $pocketHtmlConsumer + Consumer $pocketHtmlConsumer, + Consumer $omnivoreConsumer ) { $this->pocketConsumer = $pocketConsumer; $this->readabilityConsumer = $readabilityConsumer; @@ -49,6 +51,7 @@ class RabbitMQConsumerTotalProxy $this->elcuratorConsumer = $elcuratorConsumer; $this->shaarliConsumer = $shaarliConsumer; $this->pocketHtmlConsumer = $pocketHtmlConsumer; + $this->omnivoreConsumer = $omnivoreConsumer; } /** @@ -99,6 +102,9 @@ class RabbitMQConsumerTotalProxy case 'pocket_html': $consumer = $this->pocketHtmlConsumer; break; + case 'omnivore': + $consumer = $this->omnivoreConsumer; + break; default: return 0; } diff --git a/src/Controller/EntryController.php b/src/Controller/EntryController.php index 814ba717b..bd5fb4bad 100644 --- a/src/Controller/EntryController.php +++ b/src/Controller/EntryController.php @@ -602,7 +602,7 @@ class EntryController extends AbstractController * * @param int $page * - * @Route("/domain/{id}/{page}", requirements={"id" = ".+"}, defaults={"page" = 1}, name="same_domain") + * @Route("/domain/{id}/{page}", requirements={"id" = "\d+"}, defaults={"page" = 1}, name="same_domain") * @IsGranted("LIST_ENTRIES") * * @return Response diff --git a/src/Controller/Import/ImportController.php b/src/Controller/Import/ImportController.php index 8bd8d579e..bc506d264 100644 --- a/src/Controller/Import/ImportController.php +++ b/src/Controller/Import/ImportController.php @@ -59,6 +59,7 @@ class ImportController extends AbstractController + $this->rabbitMQConsumerTotalProxy->getTotalMessage('elcurator') + $this->rabbitMQConsumerTotalProxy->getTotalMessage('shaarli') + $this->rabbitMQConsumerTotalProxy->getTotalMessage('pocket_html') + + $this->rabbitMQConsumerTotalProxy->getTotalMessage('omnivore') ; } catch (\Exception $e) { $rabbitNotInstalled = true; @@ -79,6 +80,7 @@ class ImportController extends AbstractController + $redis->llen('wallabag.import.elcurator') + $redis->llen('wallabag.import.shaarli') + $redis->llen('wallabag.import.pocket_html') + + $redis->llen('wallabag.import.omnivore') ; } catch (\Exception $e) { $redisNotInstalled = true; diff --git a/src/Controller/Import/OmnivoreController.php b/src/Controller/Import/OmnivoreController.php new file mode 100644 index 000000000..2482c93fc --- /dev/null +++ b/src/Controller/Import/OmnivoreController.php @@ -0,0 +1,84 @@ +rabbitMqProducer = $rabbitMqProducer; + $this->redisProducer = $redisProducer; + } + + /** + * @Route("/import/omnivore", name="import_omnivore") + */ + public function indexAction(Request $request, OmnivoreImport $omnivore, Config $craueConfig, TranslatorInterface $translator) + { + $form = $this->createForm(UploadImportType::class); + $form->handleRequest($request); + + $omnivore->setUser($this->getUser()); + + if ($craueConfig->get('import_with_rabbitmq')) { + $omnivore->setProducer($this->rabbitMqProducer); + } elseif ($craueConfig->get('import_with_redis')) { + $omnivore->setProducer($this->redisProducer); + } + + if ($form->isSubmitted() && $form->isValid()) { + $file = $form->get('file')->getData(); + $markAsRead = $form->get('mark_as_read')->getData(); + $name = 'omnivore_' . $this->getUser()->getId() . '.json'; + + if (null !== $file && \in_array($file->getClientMimeType(), $this->getParameter('wallabag.allow_mimetypes'), true) && $file->move($this->getParameter('wallabag.resource_dir'), $name)) { + $res = $omnivore + ->setFilepath($this->getParameter('wallabag.resource_dir') . '/' . $name) + ->setMarkAsRead($markAsRead) + ->import(); + + $message = 'flashes.import.notice.failed'; + + if (true === $res) { + $summary = $omnivore->getSummary(); + $message = $translator->trans('flashes.import.notice.summary', [ + '%imported%' => $summary['imported'], + '%skipped%' => $summary['skipped'], + ]); + + if (0 < $summary['queued']) { + $message = $translator->trans('flashes.import.notice.summary_with_queue', [ + '%queued%' => $summary['queued'], + ]); + } + + unlink($this->getParameter('wallabag.resource_dir') . '/' . $name); + } + + $this->addFlash('notice', $message); + + return $this->redirect($this->generateUrl('homepage')); + } + + $this->addFlash('notice', 'flashes.import.notice.failed_on_file'); + } + + return $this->render('Import/Omnivore/index.html.twig', [ + 'form' => $form->createView(), + 'import' => $omnivore, + ]); + } +} diff --git a/src/Import/OmnivoreImport.php b/src/Import/OmnivoreImport.php new file mode 100644 index 000000000..1ac2a39b6 --- /dev/null +++ b/src/Import/OmnivoreImport.php @@ -0,0 +1,137 @@ +filepath = $filepath; + + return $this; + } + + public function import() + { + if (!$this->user) { + $this->logger->error('OmnivoreImport: user is not defined'); + + return false; + } + + if (!file_exists($this->filepath) || !is_readable($this->filepath)) { + $this->logger->error('OmnivoreImport: unable to read file', ['filepath' => $this->filepath]); + + return false; + } + + $data = json_decode(file_get_contents($this->filepath), true); + + if (empty($data)) { + $this->logger->error('OmnivoreImport: no entries in imported file'); + + return false; + } + + if ($this->producer) { + $this->parseEntriesForProducer($data); + + return true; + } + + $this->parseEntries($data); + + return true; + } + + public function validateEntry(array $importedEntry) + { + if (empty($importedEntry['url'])) { + return false; + } + + return true; + } + + public function parseEntry(array $importedEntry) + { + $existingEntry = $this->em + ->getRepository(Entry::class) + ->findByUrlAndUserId($importedEntry['url'], $this->user->getId()); + + if (false !== $existingEntry) { + ++$this->skippedEntries; + + return null; + } + + $data = [ + 'title' => $importedEntry['title'], + 'url' => $importedEntry['url'], + 'is_archived' => ('Archived' === $importedEntry['state']) || $this->markAsRead, + 'is_starred' => false, + 'created_at' => $importedEntry['savedAt'], + 'tags' => $importedEntry['labels'], + 'published_by' => [$importedEntry['author']], + 'published_at' => $importedEntry['publishedAt'], + 'preview_picture' => $importedEntry['thumbnail'], + ]; + + $entry = new Entry($this->user); + $entry->setUrl($data['url']); + $entry->setTitle($data['title']); + + // update entry with content (in case fetching failed, the given entry will be return) + $this->fetchContent($entry, $data['url'], $data); + + if (!empty($data['tags'])) { + $this->tagsAssigner->assignTagsToEntry( + $entry, + $data['tags'], + $this->em->getUnitOfWork()->getScheduledEntityInsertions() + ); + } + + $entry->updateArchived($data['is_archived']); + $entry->setCreatedAt(\DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data['created_at'])); + if (null !== $data['published_at']) { + $entry->setPublishedAt(\DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data['published_at'])); + } + $entry->setPublishedBy($data['published_by']); + $entry->setPreviewPicture($data['preview_picture']); + + $this->em->persist($entry); + ++$this->importedEntries; + + return $entry; + } + + protected function setEntryAsRead(array $importedEntry) + { + return $importedEntry; + } +} diff --git a/templates/Import/Elcurator/index.html.twig b/templates/Import/Elcurator/index.html.twig index bbedb4f32..7236f7be5 100644 --- a/templates/Import/Elcurator/index.html.twig +++ b/templates/Import/Elcurator/index.html.twig @@ -1,3 +1,45 @@ -{% extends "Import/WallabagV1/index.html.twig" %} +{% extends "layout.html.twig" %} {% block title %}{{ 'import.elcurator.page_title'|trans }}{% endblock %} + +{% block content %} +
+
+
+ {% include 'Import/_information.html.twig' %} + +
+
{{ import.description|trans }}
+

{{ 'import.elcurator.how_to'|trans }}

+ +
+ {{ form_start(form, {'method': 'POST'}) }} + {{ form_errors(form) }} +
+
+ {{ form_errors(form.file) }} +
+ {{ form.file.vars.label|trans }} + {{ form_widget(form.file) }} +
+
+ +
+
+
+
{{ 'import.form.mark_as_read_title'|trans }}
+ {{ form_widget(form.mark_as_read) }} + {{ form_label(form.mark_as_read) }} +
+
+ + {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} + + {{ form_rest(form) }} + +
+
+
+
+
+{% endblock %} diff --git a/templates/Import/Omnivore/index.html.twig b/templates/Import/Omnivore/index.html.twig new file mode 100644 index 000000000..045668321 --- /dev/null +++ b/templates/Import/Omnivore/index.html.twig @@ -0,0 +1,45 @@ +{% extends "layout.html.twig" %} + +{% block title %}{{ 'import.omnivore.page_title'|trans }}{% endblock %} + +{% block content %} +
+
+
+ {% include 'Import/_information.html.twig' %} + +
+
{{ import.description|trans }}
+

{{ 'import.omnivore.how_to'|trans }}

+ +
+ {{ form_start(form, {'method': 'POST'}) }} + {{ form_errors(form) }} +
+
+ {{ form_errors(form.file) }} +
+ {{ form.file.vars.label|trans }} + {{ form_widget(form.file) }} +
+
+ +
+
+
+
{{ 'import.form.mark_as_read_title'|trans }}
+ {{ form_widget(form.mark_as_read) }} + {{ form_label(form.mark_as_read) }} +
+
+ + {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} + + {{ form_rest(form) }} + +
+
+
+
+
+{% endblock %} diff --git a/templates/Static/quickstart.html.twig b/templates/Static/quickstart.html.twig index bf5f2e047..91c091fbf 100644 --- a/templates/Static/quickstart.html.twig +++ b/templates/Static/quickstart.html.twig @@ -104,7 +104,7 @@ diff --git a/tests/Controller/Import/ImportControllerTest.php b/tests/Controller/Import/ImportControllerTest.php index f2cadb421..8624292f9 100644 --- a/tests/Controller/Import/ImportControllerTest.php +++ b/tests/Controller/Import/ImportControllerTest.php @@ -24,6 +24,6 @@ class ImportControllerTest extends WallabagTestCase $crawler = $client->request('GET', '/import/'); $this->assertSame(200, $client->getResponse()->getStatusCode()); - $this->assertSame(12, $crawler->filter('blockquote')->count()); + $this->assertSame(13, $crawler->filter('blockquote')->count()); } } diff --git a/tests/Controller/Import/OmnivoreControllerTest.php b/tests/Controller/Import/OmnivoreControllerTest.php new file mode 100644 index 000000000..1832bc01e --- /dev/null +++ b/tests/Controller/Import/OmnivoreControllerTest.php @@ -0,0 +1,203 @@ +logInAs('admin'); + $client = $this->getTestClient(); + + $crawler = $client->request('GET', '/import/omnivore'); + + $this->assertSame(200, $client->getResponse()->getStatusCode()); + $this->assertSame(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count()); + $this->assertSame(1, $crawler->filter('input[type=file]')->count()); + } + + public function testImportOmnivoreWithRabbitEnabled() + { + $this->logInAs('admin'); + $client = $this->getTestClient(); + + $client->getContainer()->get(Config::class)->set('import_with_rabbitmq', 1); + + $crawler = $client->request('GET', '/import/omnivore'); + + $this->assertSame(200, $client->getResponse()->getStatusCode()); + $this->assertSame(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count()); + $this->assertSame(1, $crawler->filter('input[type=file]')->count()); + + $client->getContainer()->get(Config::class)->set('import_with_rabbitmq', 0); + } + + public function testImportOmnivoreBadFile() + { + $this->logInAs('admin'); + $client = $this->getTestClient(); + + $crawler = $client->request('GET', '/import/omnivore'); + $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); + + $data = [ + 'upload_import_file[file]' => '', + ]; + + $client->submit($form, $data); + + $this->assertSame(200, $client->getResponse()->getStatusCode()); + } + + public function testImportOmnivoreWithRedisEnabled() + { + $this->checkRedis(); + $this->logInAs('admin'); + $client = $this->getTestClient(); + $client->getContainer()->get(Config::class)->set('import_with_redis', 1); + + $crawler = $client->request('GET', '/import/omnivore'); + + $this->assertSame(200, $client->getResponse()->getStatusCode()); + $this->assertSame(1, $crawler->filter('form[name=upload_import_file] > button[type=submit]')->count()); + $this->assertSame(1, $crawler->filter('input[type=file]')->count()); + + $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); + + $file = new UploadedFile(__DIR__ . '/../../fixtures/Import/omnivore.json', 'omnivore.json'); + + $data = [ + 'upload_import_file[file]' => $file, + ]; + + $client->submit($form, $data); + + $this->assertSame(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertStringContainsString('flashes.import.notice.summary', $body[0]); + + $this->assertNotEmpty($client->getContainer()->get(Client::class)->lpop('wallabag.import.omnivore')); + + $client->getContainer()->get(Config::class)->set('import_with_redis', 0); + } + + public function testImportOmnivoreWithFile() + { + $this->logInAs('admin'); + $client = $this->getTestClient(); + + $crawler = $client->request('GET', '/import/omnivore'); + $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); + + $file = new UploadedFile(__DIR__ . '/../../fixtures/Import/omnivore.json', 'omnivore.json'); + + $data = [ + 'upload_import_file[file]' => $file, + ]; + + $client->submit($form, $data); + + $this->assertSame(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $content = $client->getContainer() + ->get(EntityManagerInterface::class) + ->getRepository(Entry::class) + ->findByUrlAndUserId( + 'https://www.lemonde.fr/economie/article/2024/10/29/malgre-la-crise-du-marche-des-montres-breitling-etend-son-reseau-commercial-et-devoile-ses-ambitions_6365425_3234.html', + $this->getLoggedInUserId() + ); + + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertStringContainsString('flashes.import.notice.summary', $body[0]); + + $this->assertInstanceOf(Entry::class, $content); + + $tags = $content->getTagsLabel(); + $this->assertContains('rss', $tags, 'It includes the "rss" tag'); + $this->assertGreaterThanOrEqual(2, \count($tags)); + + $this->assertInstanceOf(\DateTime::class, $content->getCreatedAt()); + $this->assertSame('2024-10-29', $content->getCreatedAt()->format('Y-m-d')); + } + + public function testImportOmnivoreWithFileAndMarkAllAsRead() + { + $this->logInAs('admin'); + $client = $this->getTestClient(); + + $crawler = $client->request('GET', '/import/omnivore'); + $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); + + $file = new UploadedFile(__DIR__ . '/../../fixtures/Import/omnivore.json', 'omnivore-read.json'); + + $data = [ + 'upload_import_file[file]' => $file, + 'upload_import_file[mark_as_read]' => 1, + ]; + + $client->submit($form, $data); + + $this->assertSame(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $content1 = $client->getContainer() + ->get(EntityManagerInterface::class) + ->getRepository(Entry::class) + ->findByUrlAndUserId( + 'https://www.lemonde.fr/economie/article/2024/10/29/l-union-europeenne-adopte-jusqu-a-35-de-surtaxes-sur-les-voitures-electriques-importees-de-chine_6365258_3234.html', + $this->getLoggedInUserId() + ); + + $this->assertInstanceOf(Entry::class, $content1); + + $content2 = $client->getContainer() + ->get(EntityManagerInterface::class) + ->getRepository(Entry::class) + ->findByUrlAndUserId( + 'https://www.lemonde.fr/les-decodeurs/article/2024/10/29/presidentielle-americaine-2024-comment-le-calendrier-de-l-election-et-des-affaires-judiciaires-de-trump-s-entremelent_6210916_3211.html', + $this->getLoggedInUserId() + ); + + $this->assertInstanceOf(Entry::class, $content2); + + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertStringContainsString('flashes.import.notice.summary', $body[0]); + } + + public function testImportOmnivoreWithEmptyFile() + { + $this->logInAs('admin'); + $client = $this->getTestClient(); + + $crawler = $client->request('GET', '/import/omnivore'); + $form = $crawler->filter('form[name=upload_import_file] > button[type=submit]')->form(); + + $file = new UploadedFile(__DIR__ . '/../../fixtures/Import/test.txt', 'test.txt'); + + $data = [ + 'upload_import_file[file]' => $file, + ]; + + $client->submit($form, $data); + + $this->assertSame(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertStringContainsString('flashes.import.notice.failed', $body[0]); + } +} diff --git a/tests/fixtures/Import/omnivore.json b/tests/fixtures/Import/omnivore.json new file mode 100644 index 000000000..6e36e7150 --- /dev/null +++ b/tests/fixtures/Import/omnivore.json @@ -0,0 +1,343 @@ +[ + { + "id": "20db074a-34e1-4f55-b0e9-161e367946f6", + "slug": "malgre-la-crise-du-marche-des-montres-breitling-etend-son-reseau-192daf3a84e", + "title": "Malgré la crise du marché des montres, Breitling étend son réseau commercial et dévoile ses ambitions", + "description": "La marque suisse – peu présente en Chine – veut s’étendre ailleurs en Asie et n’exclut pas des acquisitions. En France, après s’être installée sur les Champs-Elysées, elle ouvre boutique à Lille et à Monaco.", + "author": "Juliette Garnier", + "url": "https://www.lemonde.fr/economie/article/2024/10/29/malgre-la-crise-du-marche-des-montres-breitling-etend-son-reseau-commercial-et-devoile-ses-ambitions_6365425_3234.html", + "state": "Archived", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/234/0/6192/3096/1440/720/60/0/5ee3f32_1730201062245-063-1432929408.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T16:30:11.000Z", + "updatedAt": "2024-10-31T13:01:28.320Z", + "publishedAt": "2024-10-29T16:30:11.000Z" + }, + { + "id": "5ace624c-ba30-48cc-82ba-5a4d585e0cd4", + "slug": "espagne-l-enquete-visant-l-epouse-de-pedro-sanchez-elargie-ce-de-192d9fe5ee4", + "title": "Espagne : l’enquête visant l’épouse de Pedro Sanchez élargie, ce dernier fait part de sa « tranquillité absolue »", + "description": "Begoña Gomez fait l’objet d’une enquête pour corruption et trafic d’influence, ouverte après des plaintes déposées par deux associations réputées proches de l’extrême droite.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/international/article/2024/10/29/espagne-l-enquete-visant-l-epouse-de-pedro-sanchez-elargie-ce-dernier-fait-part-de-sa-tranquillite-absolue_6365392_3210.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/385/0/3266/1633/1440/720/60/0/54ca5e3_2024-10-29t141242z-866115530-rc2g8aaxq4l9-rtrmadp-3-spain-argentina.JPG", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T16:21:32.000Z", + "updatedAt": "2024-10-29T20:36:19.400Z", + "publishedAt": "2024-10-29T16:21:32.000Z" + }, + { + "id": "1d72bb2e-2b3d-4d2d-8f17-90f441024358", + "slug": "montpellier-enquete-ouverte-apres-la-mort-d-une-jeune-femme-des--192d9fe4e61", + "title": "Montpellier : enquête ouverte après la mort d’une jeune femme des suites d’une méningite, malgré des appels au SAMU et aux pompiers", + "description": "Malgré deux appels aux secours, l’un au 15 et l’autre au 18, ce sont deux amis qui ont conduit la femme de 25 ans à une clinique montpelliéraine, avant qu’elle ne soit transférée au CHU et ne meure.", + "author": "Le Monde", + "url": "https://www.lemonde.fr/societe/article/2024/10/29/montpellier-enquete-ouverte-apres-la-mort-d-une-jeune-femme-des-suites-d-une-meningite-malgre-des-appels-au-samu-et-aux-pompiers_6365359_3224.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/24/187/0/2250/1125/1440/720/60/0/4e171be_1729786778722-frame-159.jpg", + "labels": [ + "RSS", + "TEST" + ], + "savedAt": "2024-10-29T16:09:19.000Z", + "updatedAt": "2024-10-31T13:03:21.779Z", + "publishedAt": "2024-10-29T16:09:19.000Z" + }, + { + "id": "5ac06f9c-52e8-47df-984c-038c501819cb", + "slug": "tuberculose-le-nombre-de-cas-dans-le-monde-se-stabilise-apres-le-192daa35669", + "title": "Tuberculose : le nombre de cas dans le monde se stabilise après le regain des années Covid", + "description": "L’incidence de la maladie est en baisse de 8,3 % par rapport aux chiffres de 2015, mais reste loin de l’objectif initialement fixé de diviser par deux le nombre de malades d’ici à 2025.", + "author": "Delphine Roucaute", + "url": "https://www.lemonde.fr/planete/article/2024/10/29/tuberculose-le-nombre-de-cas-dans-le-monde-se-stabilise-apres-le-regain-des-annees-covid_6365326_3244.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/501/0/6009/3004/1440/720/60/0/01bc1cc_1730215288364-000-34ne6t2.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T16:02:03.000Z", + "updatedAt": "2024-10-29T23:36:30.655Z", + "publishedAt": "2024-10-29T16:02:03.000Z" + }, + { + "id": "2f870f6d-79a9-45a4-8a64-e4cd3e7c4488", + "slug": "l-union-europeenne-adopte-jusqu-a-35-de-surtaxes-sur-les-voiture-192d9fe4fa0", + "title": "L’Union européenne adopte jusqu’à 35 % de surtaxes sur les voitures électriques importées de Chine", + "description": "L’objectif affiché est de rétablir des conditions de concurrence équitables avec des constructeurs accusés de profiter de subventions publiques massives.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/economie/article/2024/10/29/l-union-europeenne-adopte-jusqu-a-35-de-surtaxes-sur-les-voitures-electriques-importees-de-chine_6365258_3234.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/03/131/0/2405/1202/1440/720/60/0/9f89e19_5860742-01-06.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T15:36:53.000Z", + "updatedAt": "2024-10-29T20:36:15.460Z", + "publishedAt": "2024-10-29T15:36:53.000Z" + }, + { + "id": "fe9efcb1-1782-46c3-805d-c9b8074bee3b", + "slug": "l-ex-patron-de-la-dgse-bernard-bajolet-sera-juge-pour-complicite-192da0f4619", + "title": "L’ex-patron de la DGSE Bernard Bajolet sera jugé pour complicité de tentative d’extorsion", + "description": "L’homme d’affaires Alain Duménil accuse le service de renseignement d’avoir fait usage de la contrainte pour lui réclamer de l’argent en 2016.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/societe/article/2024/10/29/l-ex-patron-de-la-dgse-bernard-bajolet-sera-juge-pour-complicite-de-tentative-d-extorsion_6365225_3224.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/99/0/4804/2402/1440/720/60/0/e26408c_1730213831930-000-32hg2qa.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T15:32:35.000Z", + "updatedAt": "2024-10-29T20:54:47.245Z", + "publishedAt": "2024-10-29T15:32:35.000Z" + }, + { + "id": "885df5b1-b564-4535-8ad7-f65bb934375d", + "slug": "la-cour-d-appel-de-paris-confirme-le-proces-pour-viol-du-rappeur-192da4a24d7", + "title": "La cour d’appel de Paris confirme le procès pour viol du rappeur Naps", + "description": "L’artiste est soupçonné d’avoir violé une jeune femme pendant son sommeil à l’automne 2021.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/societe/article/2024/10/29/la-cour-d-appel-de-paris-confirme-le-proces-pour-viol-du-rappeur-naps_6365192_3224.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/369/0/4430/2215/1440/720/60/0/78d02d3_1730214584579-000-9t294r.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T15:26:15.000Z", + "updatedAt": "2024-10-29T21:59:05.276Z", + "publishedAt": "2024-10-29T15:26:15.000Z" + }, + { + "id": "647e36c0-2782-42b0-8694-8599b61e912a", + "slug": "les-serbes-apres-leur-medaille-de-bronze-aux-jo-on-a-bu-pendant--192d9ed5eef", + "title": "Les Serbes après leur médaille de bronze aux JO : \"On a bu pendant huit heures !\"", + "description": "Lors de la cérémonie de remise de médailles des Jeux Olympiques de Paris, les Serbes se sont fait remarquer en titubant sur le podium. La raison est simple...", + "author": "La rédaction", + "url": "https://www.basketeurope.com/les-serbes-apres-leur-medaille-de-bronze-aux-j0-on-a-bu-pendant-huit-heures/", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://www.basketeurope.com/content/images/2024/10/Marinkovic.webp", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T13:59:23.000Z", + "updatedAt": "2024-10-29T20:17:45.252Z", + "publishedAt": "2024-10-29T13:59:23.000Z" + }, + { + "id": "40c17460-d4bc-4408-aafb-3f6ffbe8d413", + "slug": "a-quoi-ressemble-le-parcours-du-tour-de-france-2025-192d9fe6f1d", + "title": "A quoi ressemble le parcours du Tour de France 2025 ?", + "description": "Le parcours de la prochaine Grande Boucle cycliste a été dévoilé mardi. Le peloton s’élancera de Lille pour retrouver, trois semaines plus tard, la traditionnelle arrivée sur les Champs-Elysées, à Paris. Entre-temps, il lui faudra enchaîner les cols mythiques.", + "author": "Valentin Moinard", + "url": "https://www.lemonde.fr/sport/article/2024/10/29/cyclisme-le-tour-de-france-2025-fera-la-part-belle-aux-grimpeurs_6364955_3242.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/07/07/410/0/5994/2997/1440/720/60/0/1df95b2_5013615-01-06.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T13:12:05.000Z", + "updatedAt": "2024-10-29T20:36:23.653Z", + "publishedAt": "2024-10-29T13:12:05.000Z" + }, + { + "id": "d4eb58ef-1cab-4aef-aee1-89dca60b8a80", + "slug": "arrets-maladie-des-fonctionnaires-les-arguments-discutables-du-g-192d9fe680a", + "title": "Arrêts maladie des fonctionnaires : les arguments discutables du gouvernement pour justifier sa réforme", + "description": "Alors que l’exécutif souhaite ne plus payer les trois premiers jours d’absence des agents publics, le fait qu’il prenne peu en compte l’amélioration de la qualité de vie au travail lui vaut de vives critiques, de la part des syndicats, mais aussi de personnalités ayant l’expérience du terrain.", + "author": "Bertrand Bissuel", + "url": "https://www.lemonde.fr/politique/article/2024/10/29/arrets-maladie-des-fonctionnaires-les-arguments-discutables-du-gouvernement-pour-justifier-sa-reforme_6364919_823448.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/265/0/6720/3360/1440/720/60/0/2f2f937_1730191618529-cbi1223010.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T13:00:08.000Z", + "updatedAt": "2024-10-29T20:36:21.703Z", + "publishedAt": "2024-10-29T13:00:08.000Z" + }, + { + "id": "ff9c411a-e91f-424b-a570-f92b311026a5", + "slug": "premium-jean-denys-choulet-selectionneur-du-kosovo-ma-nationalit-192db836507", + "title": "[Premium] Jean-Denys Choulet, sélectionneur du Kosovo : \"Ma nationalité, c'est le basket\"", + "description": "Huit mois après son licenciement de la Chorale de Roanne, Jean-Denys Choulet a retrouvé un poste en tant que sélectionneur du Kosovo. À 66 ans, il ne se voyait pas quitter le milieu du basket et reste ouvert à l'idée de diriger un club.", + "author": "Morgan Parmentier", + "url": "https://www.basketeurope.com/premium-jean-denys-choulet-ma-nationalite-cest-le-basket/", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://www.basketeurope.com/content/images/size/w1200/2024/10/choulet-jd-chorale-roanne-tuan-nguyen.webp", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T12:31:47.000Z", + "updatedAt": "2024-10-30T03:41:14.412Z", + "publishedAt": "2024-10-29T12:31:47.000Z" + }, + { + "id": "54ae4346-03c0-407e-b204-b09351174365", + "slug": "pedocriminalite-l-eglise-doit-mieux-sanctionner-les-auteurs-et-a-192da2d8b8f", + "title": "Pédocriminalité : l’Eglise doit mieux sanctionner les auteurs et aider les victimes, selon un rapport du Vatican", + "description": "En avril 2022, le pape François avait demandé à une commission pontificale un rapport sur la protection des mineurs dans l’Eglise. Très attendu, il vient d’être publié par le Saint-Siège.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/international/article/2024/10/29/pedocriminalite-l-eglise-doit-mieux-sanctionner-les-auteurs-et-aider-les-victimes-selon-un-rapport-du-vatican_6364916_3210.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/27/688/0/8256/4128/1440/720/60/0/a7b4e07_5084272-01-06.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T12:26:36.000Z", + "updatedAt": "2024-10-29T21:27:50.999Z", + "publishedAt": "2024-10-29T12:26:36.000Z" + }, + { + "id": "b2d30e8c-c344-4460-a583-4a2955fdc197", + "slug": "cybercriminalite-les-stealers-redline-et-meta-vises-par-une-oper-192d90d1624", + "title": "Cybercriminalité : les « stealers » Redline et META visés par une opération policière internationale", + "description": "Le marché des identifiants dérobés est devenu un secteur central de la cybercriminalité. Les deux virus visés par cette opération policière, baptisée « Magnus », ont permis le vol de plus de 227 millions de mots de passe en 2024.", + "author": "Florian Reynaud", + "url": "https://www.lemonde.fr/pixels/article/2024/10/29/cybercriminalite-les-stealers-redline-et-meta-vises-par-une-operation-policiere-internationale_6364915_4408996.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/10/252/0/3008/1504/1440/720/60/0/b3dbd8e_1728546840972-papier-271-16.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T12:21:06.000Z", + "updatedAt": "2024-10-29T16:12:46.658Z", + "publishedAt": "2024-10-29T12:21:06.000Z" + }, + { + "id": "a4a6e509-beab-4577-99db-2f1db819d669", + "slug": "au-maroc-emmanuel-macron-appelle-a-plus-de-resultats-contre-l-im-192d90d159a", + "title": "Au Maroc, Emmanuel Macron appelle à plus de « résultats » contre l’immigration illégale et réaffirme son soutien à la « souveraineté marocaine » au Sahara occidental", + "description": "Le chef de l’Etat français a également proposé au roi du Maroc, Mohammed VI, de signer un nouveau « cadre stratégique » bilatéral en 2025 à Paris, soixante-dix ans après la déclaration de la Celle-Saint-Cloud qui scella l’indépendance du Maroc de la France.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/international/article/2024/10/29/au-maroc-emmanuel-macron-appelle-a-plus-de-resultats-contre-l-immigration-illegale-et-reaffirme-son-soutien-a-la-souverainete-marocaine-au-sahara-occidental_6364914_3210.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/350/0/4201/2100/1440/720/60/0/c37301c_5103313-01-06.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T12:14:53.000Z", + "updatedAt": "2024-10-29T16:12:46.456Z", + "publishedAt": "2024-10-29T12:14:53.000Z" + }, + { + "id": "0ab9e8c7-c88b-4a31-af3e-62ec4766b99d", + "slug": "prison-de-noumea-l-etat-condamne-car-trop-lent-a-ameliorer-les-c-192d90d0722", + "title": "Prison de Nouméa : l’Etat condamné car trop lent à améliorer les conditions de détention", + "description": "En 2020, le Conseil d’Etat avait exigé des mesures urgentes pour les droits des détenus au Camp-Est, mais l’administration a pris du retard et les travaux n’auront pas lieu avant 2028, selon l’Observatoire international des prisons.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/societe/article/2024/10/29/prison-de-noumea-l-etat-condamne-car-trop-lent-a-ameliorer-les-conditions-de-detention_6364912_3224.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/520/0/4160/2080/1440/720/60/0/9ec59fb_1730203377797-cdo-cellule-case-g-cp-nouma-a-2.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T12:08:18.000Z", + "updatedAt": "2024-10-29T16:12:42.744Z", + "publishedAt": "2024-10-29T12:08:18.000Z" + }, + { + "id": "fe79a70e-d1e1-43fe-8555-094209d1b48d", + "slug": "tour-de-france-femmes-2025-la-course-traversera-l-hexagone-d-oue-192da131a9a", + "title": "Tour de France Femmes 2025 : la course traversera l’Hexagone d’Ouest en Est, de la Bretagne aux Alpes", + "description": "Le parcours de la quatrième édition de la course cycliste a été présenté mardi. Du 26 juillet au 3 août, il fera la part belle aux grimpeuses, qui auront trois étapes finales dans le massif alpin pour s’illustrer.", + "author": "Valentin Moinard", + "url": "https://www.lemonde.fr/sport/article/2024/10/29/tour-de-france-femmes-2025-de-la-bretagne-aux-alpes-la-course-traversera-la-france-d-ouest-en-est_6364908_3242.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/08/17/1194/0/7268/3634/1440/720/60/0/8bafa27_5442255-01-06.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T11:52:45.000Z", + "updatedAt": "2024-10-29T20:58:58.164Z", + "publishedAt": "2024-10-29T11:52:45.000Z" + }, + { + "id": "54687e28-21e1-42b4-bb92-cc5f39716464", + "slug": "en-direct-guerre-au-proche-orient-le-bombardement-israelien-sur--192da214287", + "title": "En direct, guerre au Proche-Orient : le bombardement israélien sur le nord de la bande de Gaza a fait 93 morts, selon un nouveau bilan de la défense civile", + "description": "Un précédent bilan, établi par la même source, faisait état de 55 morts. L’attaque aérienne, qui a eu lieu dans la nuit de lundi à mardi, a visé la ville de Beit Lahya, dans le nord de la bande de Gaza.", + "author": "Seb2000", + "url": "https://www.lemonde.fr/international/live/2024/10/29/en-direct-guerre-au-proche-orient-le-bombardement-israelien-sur-le-nord-de-la-bande-de-gaza-a-fait-93-morts-selon-un-nouveau-bilan-de-la-defense-civile_6362390_3210.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/303/0/3644/1822/1440/720/60/0/6b6faba_1730210101426-468617.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T11:52:34.000Z", + "updatedAt": "2024-10-29T21:14:26.095Z", + "publishedAt": "2024-10-29T11:52:34.000Z" + }, + { + "id": "a2b54509-62ad-4ab7-a68a-2a970ac25952", + "slug": "au-chili-le-gouvernement-de-gauche-malmene-aux-elections-locales-192da0e7d74", + "title": "Au Chili, le gouvernement de gauche malmené aux élections locales", + "description": "La droite de la coalition Chile Vamos sort renforcée des élections municipales et régionales, tandis que l’extrême droite progresse, sans enregistrer la percée qu’elle espérait.", + "author": "Flora Genoux", + "url": "https://www.lemonde.fr/international/article/2024/10/29/au-chili-le-gouvernement-de-gauche-malmene-aux-elections-locales_6364875_3210.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/720/0/8640/4320/1440/720/60/0/3632d71_1730193220296-852876.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T11:31:53.000Z", + "updatedAt": "2024-10-29T20:53:55.779Z", + "publishedAt": "2024-10-29T11:31:53.000Z" + }, + { + "id": "9c68ff83-1927-4377-a3b0-a048516a725d", + "slug": "en-isere-lyes-louffok-est-le-candidat-insoumis-investi-a-l-elect-192d90d319e", + "title": "En Isère, Lyes Louffok est le candidat « insoumis » investi à l’élection législative partielle", + "description": "Le siège est vacant depuis la démission d’Hugo Prevost (LFI), accusé de violences sexistes et sexuelles.", + "author": "Le Monde avec AFP", + "url": "https://www.lemonde.fr/politique/article/2024/10/29/en-isere-lyes-louffok-est-le-candidat-insoumis-investi-a-l-election-legislative-partielle_6364842_823448.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/10/29/552/0/6628/3314/1440/720/60/0/607f0f6_1730199775062-000-34r33w7.jpg", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T11:24:36.000Z", + "updatedAt": "2024-10-29T16:12:53.630Z", + "publishedAt": "2024-10-29T11:24:36.000Z" + }, + { + "id": "1015c224-bd79-4ed9-9268-8fa9803a52cd", + "slug": "presidentielle-americaine-2024-comment-le-calendrier-de-l-electi-192d90d3440", + "title": "Présidentielle américaine 2024 : comment le calendrier de l’élection et des affaires judiciaires de Trump s’entremêlent", + "description": "Le verdict du procès visant l’ancien président ne devrait être connu qu’après l’élection, et le reste des poursuites pénales reste incertain. « Le Monde » vous propose de suivre le déroulé, mis à jour continuellement, de cette année décisive pour les Etats-Unis.", + "author": "Gary Dagorn, Jean-Philippe Lefief", + "url": "https://www.lemonde.fr/les-decodeurs/article/2024/10/29/presidentielle-americaine-2024-comment-le-calendrier-de-l-election-et-des-affaires-judiciaires-de-trump-s-entremelent_6210916_3211.html", + "state": "Active", + "readingProgress": 0, + "thumbnail": "https://img.lemde.fr/2024/01/12/0/0/1500/750/1440/720/60/0/e9367e3_1705065713486-chrono-media-appel.png", + "labels": [ + "RSS" + ], + "savedAt": "2024-10-29T11:17:19.000Z", + "updatedAt": "2024-10-29T16:12:54.352Z", + "publishedAt": "2024-10-29T11:17:19.000Z" + } +] \ No newline at end of file diff --git a/translations/messages.cs.yml b/translations/messages.cs.yml index fb699d338..5885b9054 100644 --- a/translations/messages.cs.yml +++ b/translations/messages.cs.yml @@ -354,7 +354,6 @@ tag: quickstart: support: title: Podpora - gitter: Na Gitteru email: E-mailem github: Na GitHubu description: Pokud potřebujete pomoc, jsme tu pro vás. diff --git a/translations/messages.de.yml b/translations/messages.de.yml index b8cb13db9..04852afbf 100644 --- a/translations/messages.de.yml +++ b/translations/messages.de.yml @@ -467,7 +467,7 @@ quickstart: description: Wenn du Hilfe brauchst, wir sind für dich da. github: Auf GitHub email: Über E-Mail - gitter: Auf Gitter + matrix: Auf Matrix tag: page_title: Tags list: diff --git a/translations/messages.el.yml b/translations/messages.el.yml index 220c573a8..052a5aa5f 100644 --- a/translations/messages.el.yml +++ b/translations/messages.el.yml @@ -248,7 +248,7 @@ tag: page_title: Ετικέτες quickstart: support: - gitter: Στο Gitter + matrix: Στο Matrix email: Με email github: Στο GitHub description: Αν χρειάζεστε βοήθεια, είμαστε εδώ για εσάς. diff --git a/translations/messages.en.yml b/translations/messages.en.yml index 8ac2732d6..ea9d08698 100644 --- a/translations/messages.en.yml +++ b/translations/messages.en.yml @@ -468,7 +468,7 @@ quickstart: description: If you need some help, we are here for you. github: On GitHub email: By email - gitter: On Gitter + matrix: On Matrix tag: confirm: delete: Delete the %name% tag @@ -513,6 +513,11 @@ import: elcurator: page_title: 'Import > elCurator' description: 'This importer will import all your elCurator articles.' + how_to: Please select your elCurator export and click on the button below to upload and import it. + omnivore: + page_title: 'Import > Omnivore' + description: 'This importer will import all your Omnivore articles.' + how_to: Please unzip your Omnivore export, then upload each JSON file named "metadata_x_to_y.json" one by one. readability: page_title: Import > Readability description: This importer will import all your Readability articles. diff --git a/translations/messages.es.yml b/translations/messages.es.yml index 9acb7b626..6bd457f54 100644 --- a/translations/messages.es.yml +++ b/translations/messages.es.yml @@ -485,7 +485,7 @@ quickstart: description: 'Si necesitas ayuda, estamos a tu disposición.' github: 'En GitHub' email: 'Por correo electrónico' - gitter: 'En Gitter' + matrix: 'En Matrix' tag: page_title: 'Etiquetas' list: diff --git a/translations/messages.fa.yml b/translations/messages.fa.yml index 3a8787000..0b4aa2dc2 100644 --- a/translations/messages.fa.yml +++ b/translations/messages.fa.yml @@ -282,7 +282,6 @@ quickstart: description: به کمک نیاز دارید؟ ما پشتیبان شما هستیم. github: روی گیت‌هاب email: با ایمیل - gitter: روی گیتر tag: page_title: برچسب‌ها list: diff --git a/translations/messages.fr.yml b/translations/messages.fr.yml index 5b70ab3f3..367a835db 100644 --- a/translations/messages.fr.yml +++ b/translations/messages.fr.yml @@ -469,7 +469,7 @@ quickstart: description: Parce que vous avez peut-être besoin de nous poser une question, nous sommes disponibles pour vous. github: Sur GitHub email: Par courriel - gitter: Sur Gitter + matrix: Sur Matrix tag: confirm: delete: Supprimer le tag %name% @@ -507,7 +507,7 @@ import: wallabag_v1: page_title: Importer > wallabag v1 description: Cet outil va importer toutes vos données de wallabag v1. Sur votre page de configuration de wallabag v1, cliquez sur « Export JSON » dans la section « Exporter vos données de wallabag ». Vous allez récupérer un fichier « wallabag-export-1-xxxx-xx-xx.json ». - how_to: Choisissez le fichier de votre export wallabag v1 et cliquez sur le bouton ci-dessous pour l’importer. + how_to: Choisissez le fichier de votre export wallabag et cliquez sur le bouton ci-dessous pour l’importer. wallabag_v2: page_title: Importer > wallabag v2 description: Cet outil va importer tous vos articles d’une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur « JSON ». Vous allez récupérer un fichier « All articles.json ». @@ -537,6 +537,7 @@ import: elcurator: description: Cet outil va importer tous vos articles depuis elCurator. page_title: Importer > elCurator + how_to: Choisissez le fichier de votre export elCurator et cliquez sur le bouton ci-dessous pour l’importer. delicious: page_title: Importer > del.icio.us how_to: Choisissez le fichier de votre export Delicious et cliquez sur le bouton ci-dessous pour l'importer. diff --git a/translations/messages.gl.yml b/translations/messages.gl.yml index 617adcd18..0d72bcdbe 100644 --- a/translations/messages.gl.yml +++ b/translations/messages.gl.yml @@ -497,7 +497,7 @@ tag: delete: Eliminar a etiqueta %name% quickstart: support: - gitter: En Gitter + matrix: En Matrix email: Por email github: En GitHub description: Se precisas axuda, aquí estamos para ti. diff --git a/translations/messages.hr.yml b/translations/messages.hr.yml index 8ef5478eb..43d379463 100644 --- a/translations/messages.hr.yml +++ b/translations/messages.hr.yml @@ -647,7 +647,6 @@ quickstart: use_docker: Koristi Docker za instliranje wallabaga support: github: Na GitHubu - gitter: Na Gitteru title: Podrška email: Putem e-maila description: Ako trebaš pomoć, spremni smo ti pomoći. diff --git a/translations/messages.hu.yml b/translations/messages.hu.yml index d3eb49732..570f051da 100644 --- a/translations/messages.hu.yml +++ b/translations/messages.hu.yml @@ -382,7 +382,7 @@ quickstart: description: Ha segítségre van szüksége, itt vagyunk az Ön számára. github: A GitHub-on email: E-mailben - gitter: A Gitter-en + matrix: A Matrix-en tag: page_title: Címkék list: diff --git a/translations/messages.it.yml b/translations/messages.it.yml index bc2726cfe..9fbeb7e28 100644 --- a/translations/messages.it.yml +++ b/translations/messages.it.yml @@ -401,7 +401,7 @@ quickstart: description: Se hai bisogno di aiuto, siamo qui per te. github: Su GitHub email: Per e-mail - gitter: Su Gitter + matrix: Su Matrix tag: page_title: Etichette list: diff --git a/translations/messages.ja.yml b/translations/messages.ja.yml index c2dd14828..dde0e1147 100644 --- a/translations/messages.ja.yml +++ b/translations/messages.ja.yml @@ -462,7 +462,7 @@ quickstart: description: 何か助けが必要な場合は、私たちがお役に立ちます。 github: GitHub 上で email: メールで - gitter: Gitter 上で + matrix: Matrix 上で tag: list: number_on_the_page: '{0} タグはありません。|{1} 1 つタグがあります。|]1,Inf[ %count% タグがあります。' diff --git a/translations/messages.ko.yml b/translations/messages.ko.yml index 6882221bc..17f1131d6 100644 --- a/translations/messages.ko.yml +++ b/translations/messages.ko.yml @@ -642,7 +642,7 @@ quickstart: more: 더보기… page_title: 빠른시작 support: - gitter: Gitter 에서 + matrix: Matrix 에서 email: 이메일로 github: GitHub에서 description: 도움이 필요하시면 저희가 도와 드리겠습니다. diff --git a/translations/messages.nb.yml b/translations/messages.nb.yml index f85940522..c54ed5934 100644 --- a/translations/messages.nb.yml +++ b/translations/messages.nb.yml @@ -526,7 +526,7 @@ quickstart: title: Sett opp programmet description: For å få applikasjon til og passe deg, ta en titt på konfigurasjonen til wallabag. support: - gitter: På Gitter + matrix: På Matrix email: Per e-post github: På GitHub title: Støtte diff --git a/translations/messages.nl.yml b/translations/messages.nl.yml index 52b0edc3a..7e63a09e6 100644 --- a/translations/messages.nl.yml +++ b/translations/messages.nl.yml @@ -463,7 +463,7 @@ quickstart: support: description: Wij zijn er voor u als u hulp nodig heeft. title: Ondersteuning - gitter: Op Gitter + matrix: Op Matrix email: Per e-mail github: Op GitHub docs: diff --git a/translations/messages.oc.yml b/translations/messages.oc.yml index 6f579d04b..a5b853a66 100644 --- a/translations/messages.oc.yml +++ b/translations/messages.oc.yml @@ -484,7 +484,7 @@ quickstart: description: Perque avètz benlèu besonh de nos pausar una question, sèm disponibles per vosautres. github: Sus GitHub email: Per e-mail - gitter: Sus Gitter + matrix: Sus Matrix tag: page_title: Etiquetas list: diff --git a/translations/messages.pl.yml b/translations/messages.pl.yml index 2e4a77264..635dcb835 100644 --- a/translations/messages.pl.yml +++ b/translations/messages.pl.yml @@ -485,7 +485,6 @@ quickstart: description: Jeżeli potrzebujesz pomocy, jesteśmy tutaj dla ciebie. github: na GitHubie email: przez e-mail - gitter: na Gitterze tag: page_title: Tagi list: diff --git a/translations/messages.pt.yml b/translations/messages.pt.yml index 0f957aa99..d2bdeeb07 100644 --- a/translations/messages.pt.yml +++ b/translations/messages.pt.yml @@ -322,7 +322,7 @@ quickstart: description: 'Se você precisa de ajuda, nós estamos aqui.' github: 'No GitHub' email: 'Por e-mail' - gitter: 'No Gitter' + matrix: 'No Matrix' tag: page_title: 'Tags' list: diff --git a/translations/messages.ru.yml b/translations/messages.ru.yml index a349c4b83..9a324b9b1 100644 --- a/translations/messages.ru.yml +++ b/translations/messages.ru.yml @@ -469,7 +469,7 @@ quickstart: description: 'Если Вам нужна помощь, мы здесь чтобы помочь Вам.' github: 'На GitHub' email: 'По email' - gitter: 'На Gitter' + matrix: 'На Matrix' tag: page_title: 'Теги' list: diff --git a/translations/messages.th.yml b/translations/messages.th.yml index ec0ec0708..c8b1ffded 100644 --- a/translations/messages.th.yml +++ b/translations/messages.th.yml @@ -370,7 +370,7 @@ quickstart: description: 'ถ้าคุณต้องการการชวยเหลอบางอย่าง, พวกเราจะอยู่ที่นี้เพื่อคุณ' github: 'บน GitHub' email: 'โดยอีเมล' - gitter: 'บน Gitter' + matrix: 'บน Matrix' tag: page_title: 'แท็ก' list: diff --git a/translations/messages.tr.yml b/translations/messages.tr.yml index 31437428f..dc283ab10 100644 --- a/translations/messages.tr.yml +++ b/translations/messages.tr.yml @@ -471,7 +471,7 @@ quickstart: description: Eğer yardıma ihtiyacınız varsa, biz her daim senin için burada olacağız. github: GitHub email: E-posta - gitter: Gitter + matrix: Matrix more: Daha fazlası… admin: title: Yönetim diff --git a/translations/messages.uk.yml b/translations/messages.uk.yml index 486d0a120..5b3bea4f6 100644 --- a/translations/messages.uk.yml +++ b/translations/messages.uk.yml @@ -421,7 +421,7 @@ quickstart: description: Якщо вам потрібна допомога, ми завжди поруч. github: На GitHub email: Електронною поштою - gitter: В Gitter + matrix: В Matrix tag: page_title: Теги list: diff --git a/translations/messages.zh.yml b/translations/messages.zh.yml index 37c1bb4d8..59c9ba9b7 100644 --- a/translations/messages.zh.yml +++ b/translations/messages.zh.yml @@ -484,7 +484,7 @@ quickstart: description: '如果你需要帮助,我们在这里。' github: 'GitHub 上' email: '通过 Email' - gitter: 'Gitter 上' + matrix: 'Matrix 上' tag: page_title: '标签' list: diff --git a/web/wallassets/41a1d465797f51702171.otf b/web/wallassets/41a1d465797f51702171.otf new file mode 100644 index 000000000..1a3027223 Binary files /dev/null and b/web/wallassets/41a1d465797f51702171.otf differ