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
41 changes: 36 additions & 5 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,18 @@ jobs:
tests:
runs-on: ubuntu-latest

name: "PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}"
name: "PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, MySQL ${{ matrix.mysql }}"

strategy:
fail-fast: false
matrix:
php: ["8.3"]
symfony: ["^6.4", "^7.3"]
mysql: ["8.4"]

env:
APP_ENV: test
APP_ENV: test_minimal
DATABASE_URL: "mysql://root:root@127.0.0.1/sylius?serverVersion=${{ matrix.mysql }}"

steps:
-
Expand All @@ -35,6 +37,17 @@ jobs:
tools: symfony
coverage: none

-
name: Shutdown default MySQL
run: sudo service mysql stop

-
name: Setup MySQL
uses: mirromutth/mysql-action@v1.1
with:
mysql version: "${{ matrix.mysql }}"
mysql root password: "root"

-
name: Get Composer cache directory
id: composer-cache
Expand Down Expand Up @@ -74,6 +87,24 @@ jobs:
name: Run PHPStan
run: vendor/bin/phpstan analyse

# -
# name: Run PHPUnit
# run: vendor/bin/phpunit --colors=always
-
name: Warmup cache
run: vendor/bin/console cache:warmup

-
name: Validate container
run: vendor/bin/console lint:container

-
name: Warmup cache
run: vendor/bin/console cache:warmup

-
name: Setup database
run: |
vendor/bin/console doctrine:database:create
vendor/bin/console doctrine:schema:create

-
name: Run PHPUnit
run: vendor/bin/phpunit --testsuite=functional --colors=always
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ Symfony Flex, it's much quicker!
resources:
sylius.order: ~
app.brand:
serialization_group: 'app:brand:export'
sections:
- 'Sylius\Bundle\AdminBundle\SectionResolver\AdminSection'
provider: 'sylius_import_export.provider.resource_data.dbal'
provider: 'sylius_import_export.provider.resource_data.orm'
```
For a more detailed overview check the [configuration reference](docs/configuration_reference.md).

Expand Down
14 changes: 11 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@
"Sylius\\ImportExport\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\Sylius\\ImportExport\\": [
"tests/",
"tests/TestApplication/src/"
]
}
},
"require": {
"php": "^8.2",
"doctrine/orm": "^2.18 || ^3.3",
Expand All @@ -24,12 +32,12 @@
"symfony/uid": "^6.4 || ^7.3"
},
"require-dev": {
"phpstan/phpstan": "^1.12",
"phpstan/phpstan-doctrine": "^1.5",
"phpunit/phpunit": "^10.5",
"webmozart/assert": "^1.11",
"sylius-labs/coding-standard": "^4.4",
"sylius/test-application": "*",
"phpstan/phpstan": "^1.12",
"phpstan/phpstan-doctrine": "^1.5"
"webmozart/assert": "^1.11"
},
"config": {
"allow-plugins": {
Expand Down
1 change: 0 additions & 1 deletion config/doctrine/ExportProcess.orm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

<field name="status" column="status" type="string" />
<field name="resource" column="resource" type="string" />
<field name="grid" column="grid" type="string" />
<field name="output" column="output" type="text" nullable="true" />
<field name="errorMessage" column="error_message" type="text" nullable="true" />
<field name="format" column="format" type="string" />
Expand Down
12 changes: 10 additions & 2 deletions config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,8 @@

<service id="sylius_import_export.controller.export_action" class="Sylius\ImportExport\Controller\ExportAction" public="true">
<argument type="service" id="sylius.resource_registry" />
<argument type="service" id="sylius.grid.chain_provider" />
<argument type="service" id="sylius.resource_controller.parameters_parser" />
<argument type="service" id="sylius_import_export.provider.resources_ids" />
<argument type="service" id="sylius_import_export.provider.grid_export_parameters" />
<argument type="service" id="form.factory" />
<argument type="service" id="sylius.command_bus" />
<argument>%sylius_import_export.export.form_class%</argument>
Expand Down Expand Up @@ -99,5 +98,14 @@
</service>

<service id="sylius_import_export.menu.reorder" class="Sylius\ImportExport\Menu\MenuReorder" />

<service
id="sylius_import_export.normalizer.item"
class="Sylius\ImportExport\Serializer\ExportAwareItemNormalizer"
decorates="api_platform.serializer.normalizer.item"
parent="api_platform.serializer.normalizer.item"
>
<argument type="service" id=".inner" />
</service>
</services>
</container>
12 changes: 9 additions & 3 deletions config/services/provider.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
<tag name="sylius_import_export.resource_data_provider" />
</service>

<service id="sylius_import_export.provider.resource_data.grid" class="Sylius\ImportExport\Provider\ResourceData\GridResourceDataProvider">
<service id="sylius_import_export.provider.resource_data.orm" class="Sylius\ImportExport\Provider\ResourceData\ORMResourceDataProvider">
<argument type="service" id="sylius_import_export.provider.resource_identifier" />
<argument type="service" id="sylius.grid.chain_provider" />
<argument type="service" id="sylius.grid.data_source_provider" />
<argument type="service" id="doctrine.orm.entity_manager" />
<argument type="service" id="serializer" />

<tag name="sylius_import_export.resource_data_provider" />
</service>
Expand All @@ -48,5 +48,11 @@
<service id="sylius_import_export.provider.resources_ids.static" class="Sylius\ImportExport\Provider\ResourceIds\StaticResourceIdsProvider">
<tag name="sylius_import_export.resource_ids_provider" priority="512" />
</service>

<service id="sylius_import_export.provider.grid_export_parameters" class="Sylius\ImportExport\Provider\Parameters\GridExportParametersProvider">
<argument type="service" id="sylius.grid.chain_provider" />
<argument type="service" id="sylius.resource_controller.parameters_parser" />
<argument>%sylius_import_export.export.resources%</argument>
</service>
</services>
</container>
6 changes: 5 additions & 1 deletion docs/configuration_reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ sylius_import_export:
export:
resources:
app.brand:
serialization_group: 'app:brand:export'
provider: 'sylius_import_export.provider.resource_data.dbal'
sections:
- 'admin'
Expand All @@ -30,7 +31,7 @@ Reference:
sylius_import_export:
export:
# The provider used by default when none is configured on a specific resource;
# defaults to 'sylius_import_export.provider.resource_data.grid'.
# defaults to 'sylius_import_export.provider.resource_data.orm'.
default_provider: <service_id>
# The section in which the actions are added to the grid.
# Can be either an FQCN of a class implementing the Sylius\Bundle\CoreBundle\SectionResolver\SectionInterface,
Expand All @@ -41,10 +42,13 @@ sylius_import_export:
# The alias of a resource as configured within the ResourceBundle
# It can be retried by using the `console/bin sylius:debug:resource` console command.
<resource_alias>:
# The group used for data serialization, when not specified, defaults to "sylius_import_export:export"
serialization_group: <string>
# Resource specific overwrite of the default_provider
provider: <service_id>
# Resource specific overwrite of the default section
sections:
- <string>
- ...

```
2 changes: 2 additions & 0 deletions ecs.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
return function (ECSConfig $ecsConfig): void {
$ecsConfig->paths([
__DIR__ . '/src',
__DIR__ . '/tests/Functional',
__DIR__ . '/tests/TestApplication/src',
]);

$ecsConfig->import('vendor/sylius-labs/coding-standard/ecs.php');
Expand Down
1 change: 1 addition & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ parameters:

excludePaths:
- '%currentWorkingDirectory%/src/DependencyInjection/Configuration.php'
- '%currentWorkingDirectory%/src/Serializer/ExportAwareItemNormalizer.php'
21 changes: 11 additions & 10 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/8.5/phpunit.xsd"
colors="true"
bootstrap="tests/Application/config/bootstrap.php">
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/8.5/phpunit.xsd"
colors="true"
bootstrap="vendor/sylius/test-application/config/bootstrap.php"
>
<testsuites>
<testsuite name="AcmeSyliusExamplePlugin Test Suite">
<directory>tests/Integration</directory>
<directory>tests/Api</directory>
<directory>tests/Unit</directory>
<testsuite name="functional">
<directory>tests/Functional</directory>
</testsuite>
</testsuites>

<php>
<ini name="error_reporting" value="-1" />

<server name="KERNEL_CLASS_PATH" value="/tests/Application/Kernel.php" />
<server name="KERNEL_CLASS" value="Sylius\TestApplication\Kernel" />
<server name="IS_DOCTRINE_ORM_SUPPORTED" value="true" />
<env name="APP_ENV" value="test"/>

<env name="APP_ENV" value="test_minimal" />
<env name="SHELL_VERBOSITY" value="-1" />
</php>
</phpunit>
13 changes: 3 additions & 10 deletions src/Controller/ExportAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@

namespace Sylius\ImportExport\Controller;

use Sylius\Bundle\ResourceBundle\Controller\ParametersParserInterface;
use Sylius\Component\Grid\Provider\GridProviderInterface;
use Sylius\ImportExport\Messenger\Command\CreateExportProcess;
use Sylius\ImportExport\Provider\Parameters\GridExportParametersProviderInterface;
use Sylius\ImportExport\Provider\ResourceIds\ResourcesIdsProviderInterface;
use Sylius\Resource\Metadata\RegistryInterface;
use Symfony\Component\Form\FormFactoryInterface;
Expand All @@ -29,9 +28,8 @@ final class ExportAction
{
public function __construct(
private RegistryInterface $metadataRegistry,
private GridProviderInterface $gridProvider,
private ParametersParserInterface $parametersParser,
private ResourcesIdsProviderInterface $resourcesIdsProvider,
private GridExportParametersProviderInterface $parametersProvider,
private FormFactoryInterface $formFactory,
private MessageBusInterface $commandBus,
private string $exportForm,
Expand All @@ -50,22 +48,17 @@ public function __invoke(Request $request, string $grid): Response
$resourceClass = $data['resourceClass'];

$metadata = $this->metadataRegistry->getByClass($resourceClass);
$gridConfiguration = $this->gridProvider->get($grid);

$resourceIds = $this->resourcesIdsProvider->getResourceIds(
metadata: $metadata,
context: ['request' => $request, 'ids' => $data['ids'] ?? []],
);

$parameters = $this->parametersParser->parseRequestValues(
$gridConfiguration->getDriverConfiguration(),
$request,
);
$parameters = $this->parametersProvider->getParameters($metadata, $grid, $request);

$this->commandBus->dispatch(new CreateExportProcess(
resource: $metadata->getAlias(),
format: $format,
grid: $grid,
parameters: $parameters,
resourceIds: $resourceIds,
));
Expand Down
7 changes: 6 additions & 1 deletion src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

namespace Sylius\ImportExport\DependencyInjection;

use Sylius\ImportExport\Serializer\DefaultSerializationGroups;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
Expand All @@ -39,7 +40,7 @@ private function addExportConfiguration(ArrayNodeDefinition $node): void
->isRequired()
->children()
->scalarNode('default_provider')
->defaultValue('sylius_import_export.provider.resource_data.grid')
->defaultValue('sylius_import_export.provider.resource_data.orm')
->cannotBeEmpty()
->end()
->scalarNode('default_section')
Expand All @@ -57,6 +58,10 @@ private function addExportConfiguration(ArrayNodeDefinition $node): void
})
->end()
->children()
->scalarNode('serialization_group')
->cannotBeEmpty()
->defaultValue(DefaultSerializationGroups::EXPORT_GROUP)
->end()
->scalarNode('provider')
->defaultNull()
->end()
Expand Down
12 changes: 0 additions & 12 deletions src/Entity/ExportProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ class ExportProcess extends Process implements ExportProcessInterface
{
protected string $format;

protected string $grid;

protected array $parameters = [];

protected array $resourceIds = [];
Expand All @@ -42,16 +40,6 @@ public function setFormat(string $format): void
$this->format = $format;
}

public function getGrid(): string
{
return $this->grid;
}

public function setGrid(string $grid): void
{
$this->grid = $grid;
}

public function getParameters(): array
{
return $this->parameters;
Expand Down
4 changes: 0 additions & 4 deletions src/Entity/ExportProcessInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ public function getResourceIds(): array;

public function setResourceIds(array $resourceIds): void;

public function getGrid(): string;

public function setGrid(string $grid): void;

public function getParameters(): array;

public function setParameters(array $parameters): void;
Expand Down
1 change: 0 additions & 1 deletion src/Factory/ProcessFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public function createExportProcess(CreateExportProcess $command): ExportProcess
$process = $this->exportFactory->createNew();
$process->setUuid(Uuid::v7()->toRfc4122());
$process->setResource($command->resource);
$process->setGrid($command->grid);
$process->setFormat($command->format);
$process->setParameters($command->parameters);
$process->setResourceIds($command->resourceIds);
Expand Down
1 change: 0 additions & 1 deletion src/Messenger/Command/CreateExportProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ class CreateExportProcess
public function __construct(
public string $resource,
public string $format,
public string $grid,
public array $parameters,
public array $resourceIds,
) {
Expand Down
2 changes: 1 addition & 1 deletion src/Messenger/Handler/ExportCommandHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function __invoke(ExportCommand $command): void

$data = $this->dataProviderRegistry
->getProvider($resourceMetadata)
->getData($resourceMetadata, $process->getGrid(), $command->resourceIds, $process->getParameters())
->getData($resourceMetadata, $command->resourceIds, $process->getParameters())
;

$process->setBatchesCount($process->getBatchesCount() - 1);
Expand Down
2 changes: 1 addition & 1 deletion src/Messenger/Handler/ExportCompletedHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function __invoke(ExportProcessCompleted $event): void
}

$batchedData = $this->batchedDataManager->getBatchedData($process);
$data = iterator_to_array($batchedData);
$data = iterator_to_array(...$batchedData);

if ([] !== $data) {
try {
Expand Down
Loading