Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 16 additions & 9 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,27 @@ jobs:
strategy:
fail-fast: false
matrix:
php: ["8.2", "8.3"]
symfony: ["^6.4", "^7.4"]
sylius: ["~2.0.0", "~2.1.0", "~2.2.0"]
node: ["22.x"]
php: ["8.3", "8.4"]
symfony: ["^6.4", "^7.4", "^8.0"]
sylius: ["~2.2.0", "~2.3.0"]
node: ["24.x"]
database: ["mysql"]
database_version: ["8.4"]
wkhtmltopdf: ["0.12.6.1-2"]
state_machine_adapter: ["symfony_workflow"]
legacy_pdf_generation: [true, false]

exclude:
# Symfony 8 requires PHP >= 8.4.1
-
php: "8.3"
symfony: "^8.0"

# Sylius 2.2 supports Symfony ^6.4.1 || ^7.4 only
-
sylius: "~2.2.0"
symfony: "^8.0"

include:
-
php: "8.3"
Expand Down Expand Up @@ -158,11 +169,6 @@ jobs:
composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^1.10"
composer config extra.symfony.require "${{ matrix.symfony }}"

-
name: Restrict Sylius version
if: matrix.sylius != ''
run: composer require "sylius/sylius:${{ matrix.sylius }}" --no-update --no-scripts --no-interaction

-
name: Require Winzou State Machine
if: "${{ matrix.state_machine_adapter == 'winzou_state_machine' }}"
Expand All @@ -183,6 +189,7 @@ jobs:
php_version: "${{ matrix.php }}"
sylius_version: "${{ matrix.sylius }}"
symfony_version: "${{ matrix.symfony }}"
composer_prefer_stable: "yes"

-
name: Run security check
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ phpspec.yml

/.phpunit.result.cache

/behat.php
/behat.yml
36 changes: 36 additions & 0 deletions UPGRADE-2.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# UPGRADE FROM 2.1 TO 2.2

1. Sylius 2.3 no longer ships `knplabs/gaufrette` and `knplabs/knp-gaufrette-bundle`, so the plugin now requires them itself.
`knplabs/knp-gaufrette-bundle` 1.0 supports Symfony 8, but it also upgrades `knplabs/gaufrette` to 1.0,
so verify that the Gaufrette adapters you use still work with it.

Make sure `Knp\Bundle\GaufretteBundle\KnpGaufretteBundle` is registered in your `config/bundles.php`.
Nothing else changes: credit memos are still stored through the `gaufrette.sylius_refund_credit_memo_filesystem` filesystem.

Gaufrette is used by the legacy PDF generator and will be removed in 3.0, together with the `sylius_refund.pdf_generator.legacy` option.
Migrating to the `SyliusPdfGenerationBundle` integration is recommended:

```yaml
sylius_refund:
pdf_generator:
legacy: false
```

With the integration enabled, the storage of credit memos is configured through the `sylius_refund` context
of `SyliusPdfGenerationBundle`, which supports the `filesystem`, `flysystem` and `gaufrette` storage types.
It defaults to the Gaufrette filesystem above. The plugin also provides the `sylius_refund.storage.credit_memo` Flysystem storage,
using the local adapter in the same `%sylius_refund.credit_memo_save_path%` directory, which will become the default in 3.0.
To switch to it already, so existing credit memos are still found:

```yaml
sylius_pdf_generation:
contexts:
sylius_refund:
storage:
type: flysystem
filesystem: sylius_refund.storage.credit_memo
```

To store credit memos elsewhere (e.g. on S3), redefine the `sylius_refund.storage.credit_memo` storage under `flysystem.storages`,
see the [FlysystemBundle documentation](https://github.com/thephpleague/flysystem-bundle/blob/3.x/docs/2-cloud-storage-providers.md).
See the [SyliusPdfGenerationBundle documentation](https://github.com/Sylius/PdfGenerationBundle#configuration) for the other storage types.
59 changes: 59 additions & 0 deletions behat.dist.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

// This file is part of the Sylius package.
// (c) Sylius Sp. z o.o.

declare(strict_types=1);

use Behat\Config\Config;
use Behat\Config\Extension;
use Behat\Config\Profile;
use Behat\MinkExtension\ServiceContainer\MinkExtension;
use DMore\ChromeExtension\Behat\ServiceContainer\ChromeExtension;
use FriendsOfBehat\MinkDebugExtension\ServiceContainer\MinkDebugExtension;
use FriendsOfBehat\SymfonyExtension\ServiceContainer\SymfonyExtension;
use FriendsOfBehat\VariadicExtension\ServiceContainer\VariadicExtension;

$syliusSuitesPath = 'vendor/sylius/sylius/src/Sylius/Behat/Resources/config/suites';

return (new Config())
->import([
// Sylius 2.3 ships its suites as a PHP config, earlier versions ship YAML.
is_file(__DIR__ . '/' . $syliusSuitesPath . '.php') ? $syliusSuitesPath . '.php' : $syliusSuitesPath . '.yml',
'tests/Behat/Resources/suites.php',
])
->withProfile(
(new Profile('default'))
->withExtension(new Extension(ChromeExtension::class))
->withExtension(new Extension(MinkDebugExtension::class, [
'directory' => 'etc/build',
'clean_start' => false,
'screenshot' => true,
]))
->withExtension(new Extension(MinkExtension::class, [
'files_path' => '%paths.base%/vendor/sylius/sylius/src/Sylius/Behat/Resources/fixtures/',
'base_url' => 'http://127.0.0.1:8080/',
'default_session' => 'symfony',
'javascript_session' => 'chrome',
'sessions' => [
'symfony' => [
'symfony' => null,
],
'chrome' => [
'chrome' => [
'api_url' => 'http://127.0.0.1:9222',
'validate_certificate' => false,
],
],
],
'show_auto' => false,
]))
->withExtension(new Extension(SymfonyExtension::class, [
'bootstrap' => 'vendor/sylius/test-application/config/bootstrap.php',
'kernel' => [
'class' => 'Sylius\TestApplication\Kernel',
],
]))
->withExtension(new Extension(VariadicExtension::class)),
)
;
40 changes: 0 additions & 40 deletions behat.yml.dist

This file was deleted.

41 changes: 21 additions & 20 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,39 +20,40 @@
],
"require": {
"php": "^8.2",
"knplabs/gaufrette": "^0.11 || ^1.0",
"knplabs/knp-gaufrette-bundle": "^0.9 || ^1.0",
"knplabs/knp-snappy-bundle": "^1.10",
"myclabs/php-enum": "^1.8",
"php-http/discovery": "^1.20",
"sylius/pdf-generation-bundle": "^1.0",
"sylius/resource-bundle": "^1.12",
"sylius/sylius": "^2.0",
"sylius/telemetry": "^1.0",
"symfony/messenger": "^6.4 || ^7.4",
"php-http/discovery": "^1.20"
"symfony/messenger": "^6.4 || ^7.4 || ^8.0"
},
"require-dev": {
"behat/behat": "^3.6.1",
"dmore/behat-chrome-extension": "^1.3",
"behat/behat": "^3.22 || 4.0.0-alpha1",
"behat/mink": "^1.10 || ^1.13",
"dmore/chrome-mink-driver": "^2.7",
"friends-of-behat/mink": "^1.8",
"friends-of-behat/mink-browserkit-driver": "^1.4",
"friends-of-behat/mink-debug-extension": "^2.0",
"friends-of-behat/mink-extension": "^2.4",
"friends-of-behat/mink-browserkit-driver": "^1.6.3",
"friends-of-behat/mink-debug-extension": "^2.2",
"friends-of-behat/mink-extension": "^2.7 || 3.0.0-alpha1",
"friends-of-behat/page-object-extension": "^0.3",
"friends-of-behat/suite-settings-extension": "^1.0",
"friends-of-behat/symfony-extension": "^2.1",
"friends-of-behat/variadic-extension": "^1.3",
"matthiasnoback/symfony-config-test": "^5.1",
"matthiasnoback/symfony-dependency-injection-test": "^5.1",
"phpstan/phpstan": "^1.6",
"phpstan/phpstan-webmozart-assert": "^1.1",
"friends-of-behat/symfony-extension": "^2.6.2",
"friends-of-behat/variadic-extension": "^1.6",
"matthiasnoback/symfony-config-test": "^6.1",
"matthiasnoback/symfony-dependency-injection-test": "^6.2",
"phpstan/phpstan": "^2.2",
"phpstan/phpstan-webmozart-assert": "^2.0",
"phpunit/phpunit": "^10.5",
"sylius-labs/behat-chrome-extension": "^1.5",
"sylius-labs/coding-standard": "^4.2",
"sylius/test-application": "^2.0.0@alpha",
"symfony/browser-kit": "^6.4 || ^7.4",
"symfony/debug-bundle": "^6.4 || ^7.4",
"symfony/dotenv": "^6.4 || ^7.4",
"symfony/intl": "^6.4 || ^7.4",
"symfony/web-profiler-bundle": "^6.4 || ^7.4",
"symfony/browser-kit": "^6.4 || ^7.4 || ^8.0",
"symfony/debug-bundle": "^6.4 || ^7.4 || ^8.0",
"symfony/dotenv": "^6.4 || ^7.4 || ^8.0",
"symfony/intl": "^6.4 || ^7.4 || ^8.0",
"symfony/web-profiler-bundle": "^6.4 || ^7.4 || ^8.0",
"symfony/webpack-encore-bundle": "^2.2"
},
"autoload": {
Expand Down
7 changes: 7 additions & 0 deletions config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,10 @@ knp_gaufrette:
filesystems:
sylius_refund_credit_memo:
adapter: "%sylius_refund.filesystem_adapter.credit_memo%"

flysystem:
storages:
sylius_refund.storage.credit_memo:
adapter: "local"
options:
directory: "%sylius_refund.credit_memo_save_path%"
91 changes: 91 additions & 0 deletions config/services.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?php

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

use Doctrine\ORM\EntityRepository;
use Sylius\RefundPlugin\Calculator\UnitRefundTotalCalculator;
use Sylius\RefundPlugin\Calculator\UnitRefundTotalCalculatorInterface;
use Sylius\RefundPlugin\Entity\CreditMemoSequence;
use Sylius\RefundPlugin\Manager\CreditMemoFileManager;
use Sylius\RefundPlugin\Manager\CreditMemoFileManagerInterface;
use Sylius\RefundPlugin\Provider\UnitRefundedTotalProviderInterface;
use Sylius\RefundPlugin\Refunder\OrderItemUnitsRefunder;
use Sylius\RefundPlugin\Refunder\OrderShipmentsRefunder;
use Sylius\RefundPlugin\ResponseBuilder\CreditMemoFileResponseBuilder;
use Sylius\RefundPlugin\ResponseBuilder\CreditMemoFileResponseBuilderInterface;
use Sylius\RefundPlugin\Sender\CreditMemoEmailSender;
use Sylius\RefundPlugin\Sender\CreditMemoEmailSenderInterface;
use Sylius\RefundPlugin\Twig\OrderRefundAvailabilityExtension;
use Sylius\RefundPlugin\Twig\OrderRefundsExtension;

return static function (ContainerConfigurator $container) {
$services = $container->services();
$parameters = $container->parameters();
$container->import('services/**/*.php');

$parameters->set('sylius_refund.default_logo_file', '@SyliusRefundPlugin/assets/sylius-logo.png');
$parameters->set('sylius_refund.template.logo_file', '%env(default:sylius_refund.default_logo_file:resolve:SYLIUS_REFUND_LOGO_FILE)%');

$services->defaults()
->public();

$services->set('sylius_refund.calculator.unit_refund_total', UnitRefundTotalCalculator::class)
->args([service('sylius_refund.provider.remaining_total')]);

$services->alias(UnitRefundTotalCalculatorInterface::class, 'sylius_refund.calculator.unit_refund_total');

$services->set('sylius_refund.refunder.order_item_units', OrderItemUnitsRefunder::class)
->args([
service('sylius_refund.creator.refund'),
service('sylius.event_bus'),
service('sylius_refund.filter.unit_refund'),
])
->tag('sylius_refund.refunder');

$services->set('sylius_refund.refunder.order_shipments', OrderShipmentsRefunder::class)
->args([
service('sylius_refund.creator.refund'),
service('sylius.event_bus'),
service('sylius_refund.filter.unit_refund'),
])
->tag('sylius_refund.refunder');

$services->set('sylius_refund.twig.extension.order_refunds', OrderRefundsExtension::class)
->args([
service('sylius_refund.provider.order_refunded_total'),
service(UnitRefundedTotalProviderInterface::class),
service('sylius_refund.checker.unit_refunding_availability'),
service('sylius.repository.order'),
service('sylius_refund.repository.refund_payment'),
service('sylius_refund.factory.refund_type'),
])
->tag('twig.extension');

$services->set('sylius_refund.twig.extension.order_refund_availability', OrderRefundAvailabilityExtension::class)
->args([service('sylius_refund.checker.order_refunds_list_availability')])
->tag('twig.extension');

$services->set('sylius_refund.repository.credit_memo_sequence', EntityRepository::class)
->args([CreditMemoSequence::class])
->factory([service('doctrine.orm.entity_manager'), 'getRepository']);

$services->set('sylius_refund.email_sender.credit_memo', CreditMemoEmailSender::class)
->args([
service('sylius.email_sender'),
'%sylius_refund.pdf_generator.enabled%',
service('sylius_refund.resolver.credit_memo_file'),
service('sylius_refund.resolver.credit_memo_file_path'),
]);

$services->alias(CreditMemoEmailSenderInterface::class, 'sylius_refund.email_sender.credit_memo');

$services->set('sylius_refund.response_builder.credit_memo_file', CreditMemoFileResponseBuilder::class);

$services->alias(CreditMemoFileResponseBuilderInterface::class, 'sylius_refund.response_builder.credit_memo_file');

$services->set('sylius_refund.manager.credit_memo_file', CreditMemoFileManager::class)
->args([service('gaufrette.sylius_refund_credit_memo_filesystem')])
->deprecate('sylius/refund-plugin', '2.1', 'The "%service_id%" service is deprecated. Use Sylius\PdfGenerationBundle\Core\Filesystem\Manager\PdfFileManagerInterface from sylius/pdf-generation-bundle instead.');

$services->alias(CreditMemoFileManagerInterface::class, 'sylius_refund.manager.credit_memo_file');
};
Loading
Loading