diff --git a/.docker/php/Dockerfile b/.docker/php/Dockerfile
index 33dd796..82be215 100644
--- a/.docker/php/Dockerfile
+++ b/.docker/php/Dockerfile
@@ -1,4 +1,4 @@
-FROM php:8.4-fpm-alpine
+FROM php:8.5-fpm-alpine
ARG UID
ARG GID
@@ -13,8 +13,7 @@ RUN apk update && apk add \
bash \
icu-dev \
&& docker-php-ext-configure intl \
- && docker-php-ext-install intl opcache \
- && docker-php-ext-enable opcache
+ && docker-php-ext-install intl
RUN ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime \
&& sed -i "s/^;date.timezone =.*/date.timezone = Europe\/Paris/" $PHP_INI_DIR/php.ini
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 0e07db0..f2b0431 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -23,13 +23,14 @@ jobs:
- '8.2'
- '8.3'
- '8.4'
- dependencies: [highest]
+ - '8.5'
+ dependencies: [highest, lowest]
allowed-to-fail: [false]
symfony-require: ['']
variant: [normal]
include:
- - php-version: '8.1'
- dependencies: highest
+ - php-version: '8.2'
+ dependencies: lowest
allowed-to-fail: false
symfony-require: 6.4.*
variant: symfony/symfony:"6.4.*"
@@ -41,8 +42,8 @@ jobs:
- php-version: '8.2'
dependencies: highest
allowed-to-fail: false
- symfony-require: 7.3.*
- variant: symfony/symfony:"7.3.*"
+ symfony-require: 7.4.*
+ variant: symfony/symfony:"7.4.*"
- php-version: '8.3'
dependencies: highest
allowed-to-fail: false
@@ -51,8 +52,8 @@ jobs:
- php-version: '8.3'
dependencies: highest
allowed-to-fail: false
- symfony-require: 7.3.*
- variant: symfony/symfony:"7.3.*"
+ symfony-require: 7.4.*
+ variant: symfony/symfony:"7.4.*"
- php-version: '8.4'
dependencies: highest
allowed-to-fail: false
@@ -61,12 +62,31 @@ jobs:
- php-version: '8.4'
dependencies: highest
allowed-to-fail: false
- symfony-require: 7.3.*
- variant: symfony/symfony:"7.3.*"
-
+ symfony-require: 7.4.*
+ variant: symfony/symfony:"7.4.*"
+ - php-version: '8.4'
+ dependencies: highest
+ allowed-to-fail: false
+ symfony-require: 8.*
+ variant: symfony/symfony:"8.*"
+ - php-version: '8.5'
+ dependencies: highest
+ allowed-to-fail: false
+ symfony-require: 6.4.*
+ variant: symfony/symfony:"6.4.*"
+ - php-version: '8.5'
+ dependencies: highest
+ allowed-to-fail: false
+ symfony-require: 7.4.*
+ variant: symfony/symfony:"7.4.*"
+ - php-version: '8.5'
+ dependencies: highest
+ allowed-to-fail: false
+ symfony-require: 8.*
+ variant: symfony/symfony:"8.*"
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
@@ -87,4 +107,4 @@ jobs:
#- name: Send coverage to Codecov
# uses: codecov/codecov-action@v4
# with:
- # files: build/logs/clover.xml
+ # files: build/logs/clover.xml
\ No newline at end of file
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index ed5c8c5..d097551 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -24,9 +24,8 @@
return (new PhpCsFixer\Config())
->setRules([
- '@PHP71Migration' => true,
- '@PHP82Migration' => true,
- '@PHPUnit75Migration:risky' => true,
+ '@PHP8x2Migration' => true,
+ '@PHPUnit7x5Migration:risky' => true,
'@Symfony' => true,
'@Symfony:risky' => true,
'@DoctrineAnnotation' => true,
diff --git a/composer.json b/composer.json
index cb0eff3..630fa34 100644
--- a/composer.json
+++ b/composer.json
@@ -22,7 +22,7 @@
{
"name": "Xavier Marchegay",
"email": "xmarchegay@clever-age.com",
- "role": "Developer"
+ "role": "Lead Developer"
}
],
"autoload": {
@@ -36,41 +36,41 @@
}
},
"require": {
- "php": ">=8.1",
+ "php": ">=8.2",
"ext-ctype": "*",
"ext-iconv": "*",
- "cleverage/process-bundle": "^4.0",
- "doctrine/common": "^3.0",
- "doctrine/dbal": "^2.9 || ^3.0",
- "doctrine/doctrine-bundle": "^2.5",
- "doctrine/doctrine-migrations-bundle": "^3.2",
- "doctrine/orm": "^2.9 || ^3.0",
- "dragonmantank/cron-expression": "^3.4",
- "easycorp/easyadmin-bundle": "^4.8",
- "symfony/doctrine-messenger": "^6.4|^7.3",
- "symfony/dotenv": "^6.4|^7.3",
- "symfony/messenger": "^6.4|^7.3",
- "symfony/runtime": "^6.4|^7.3",
- "symfony/scheduler": "^6.4|^7.3",
- "symfony/string": "^6.4|^7.3",
- "symfony/uid": "^6.4|^7.3"
+ "cleverage/process-bundle": "^5.0",
+ "doctrine/common": "^3.5",
+ "doctrine/dbal": "^3.10 || ^4.4",
+ "doctrine/doctrine-bundle": "^2.18 || ^3.1",
+ "doctrine/doctrine-migrations-bundle": "^3.7 || ^4",
+ "doctrine/orm": "^2.20 || ^3.5",
+ "dragonmantank/cron-expression": "^3.6",
+ "easycorp/easyadmin-bundle": "^4.27",
+ "symfony/doctrine-messenger": "^6.4 || ^7.4 || ^8",
+ "symfony/dotenv": "^6.4 || ^7.4 || ^8",
+ "symfony/messenger":"^6.4 || ^7.4 || ^8",
+ "symfony/runtime": "^6.4 || ^7.4 || ^8",
+ "symfony/scheduler": "^6.4 || ^7.4 || ^8",
+ "symfony/string":"^6.4 || ^7.4 || ^8",
+ "symfony/uid": "^6.4 || ^7.4 || ^8"
},
"require-dev": {
- "doctrine/doctrine-fixtures-bundle": "^3.4",
+ "doctrine/doctrine-fixtures-bundle": "^3 || ^4",
"friendsofphp/php-cs-fixer": "*",
"phpstan/extension-installer": "*",
"phpstan/phpstan": "*",
"phpstan/phpstan-doctrine": "*",
"phpstan/phpstan-symfony": "*",
- "phpunit/phpunit": "<10.0",
+ "phpunit/phpunit": "*",
"rector/rector": "*",
"roave/security-advisories": "dev-latest",
- "symfony/browser-kit": "^6.4|^7.3",
- "symfony/css-selector": "^6.4|^7.3",
- "symfony/debug-bundle": "^6.4|^7.3",
+ "symfony/browser-kit": "^6.4 || ^7.4 || ^8",
+ "symfony/css-selector": "^6.4 || ^7.4 || ^8",
+ "symfony/debug-bundle": "^6.4 || ^7.4 || ^8",
"symfony/maker-bundle": "^1.31",
- "symfony/web-profiler-bundle": "^6.4|^7.3",
- "vincentlanglet/twig-cs-fixer": "^3.3"
+ "symfony/web-profiler-bundle": "^6.4 || ^7.4 || ^8",
+ "vincentlanglet/twig-cs-fixer": "^3.11"
},
"conflict": {
"symfony/twig-bridge": "7.2.0",
diff --git a/config/routes/easyadmin.yaml b/config/routes/easyadmin.yaml
new file mode 100644
index 0000000..a88552e
--- /dev/null
+++ b/config/routes/easyadmin.yaml
@@ -0,0 +1,3 @@
+easyadmin:
+ resource: .
+ type: easyadmin.routes
\ No newline at end of file
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 766495c..c3e7947 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,27 +1,22 @@
+ failOnWarning="true">
tests
-
-
+
src
-
-
+
+
\ No newline at end of file
diff --git a/rector.php b/rector.php
index 9f9d327..46168ac 100644
--- a/rector.php
+++ b/rector.php
@@ -8,18 +8,18 @@
use Rector\ValueObject\PhpVersion;
return RectorConfig::configure()
- ->withPhpVersion(PhpVersion::PHP_84)
+ ->withPhpVersion(PhpVersion::PHP_85)
->withPaths([
__DIR__.'/src',
__DIR__.'/tests',
])
- ->withPhpSets(php81: true)
+ ->withPhpSets(php82: true)
// here we can define, what prepared sets of rules will be applied
->withComposerBased(doctrine: true)
->withPreparedSets(deadCode: true, codeQuality: true, doctrineCodeQuality: true, symfonyCodeQuality: true)
->withAttributesSets(symfony: true, doctrine: true)
->withSets([
- LevelSetList::UP_TO_PHP_81,
+ LevelSetList::UP_TO_PHP_82,
SymfonySetList::SYMFONY_64,
SymfonySetList::SYMFONY_CODE_QUALITY,
SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION,
diff --git a/src/Controller/Admin/Process/LaunchAction.php b/src/Controller/Admin/Process/LaunchAction.php
index 8f6bed5..fffc32c 100644
--- a/src/Controller/Admin/Process/LaunchAction.php
+++ b/src/Controller/Admin/Process/LaunchAction.php
@@ -40,21 +40,18 @@
#[IsGranted('ROLE_USER')]
class LaunchAction extends AbstractController
{
- public function __construct(private readonly MessageBusInterface $messageBus)
+ public function __construct(private readonly MessageBusInterface $messageBus, private readonly RequestStack $requestStack, private readonly ProcessConfigurationsManager $processConfigurationsManager, private readonly AdminContext $context)
{
}
public function __invoke(
- RequestStack $requestStack,
string $uploadDirectory,
- ProcessConfigurationsManager $processConfigurationsManager,
- AdminContext $context,
): Response {
- $processCode = $requestStack->getMainRequest()?->get('process');
- if (null === $processCode) {
+ $processCode = (string) $this->requestStack->getMainRequest()?->request->get('process');
+ if ('' === $processCode) {
throw new MissingProcessException();
}
- $uiOptions = $processConfigurationsManager->getUiOptions($processCode);
+ $uiOptions = $this->processConfigurationsManager->getUiOptions($processCode);
if (null === $uiOptions) {
throw new \InvalidArgumentException('Missing UI Options');
}
@@ -84,7 +81,7 @@ public function __invoke(
}
$form->setData($default);
}
- $form->handleRequest($requestStack->getMainRequest());
+ $form->handleRequest($this->requestStack->getMainRequest());
if ($form->isSubmitted() && $form->isValid()) {
$input = $form->get('input')->getData();
if ($input instanceof UploadedFile) {
@@ -104,7 +101,7 @@ public function __invoke(
return $this->redirectToRoute('process', ['routeName' => 'process_list']);
}
- $context->getAssets()->addJsAsset(Asset::fromEasyAdminAssetPackage('field-collection.js')->getAsDto());
+ $this->context->getAssets()->addJsAsset(Asset::fromEasyAdminAssetPackage('field-collection.js')->getAsDto());
return $this->render(
'@CleverAgeUiProcess/admin/process/launch.html.twig',
diff --git a/src/Controller/Admin/Process/ListAction.php b/src/Controller/Admin/Process/ListAction.php
index 4857c75..7caa193 100644
--- a/src/Controller/Admin/Process/ListAction.php
+++ b/src/Controller/Admin/Process/ListAction.php
@@ -24,16 +24,16 @@
#[IsGranted('ROLE_USER')]
class ListAction extends AbstractController
{
- public function __construct(private readonly IntlFormatterInterface $intlFormatter)
+ public function __construct(private readonly IntlFormatterInterface $intlFormatter, private readonly ProcessConfigurationsManager $processConfigurationsManager)
{
}
- public function __invoke(ProcessConfigurationsManager $processConfigurationsManager): Response
+ public function __invoke(): Response
{
return $this->render(
'@CleverAgeUiProcess/admin/process/list.html.twig',
[
- 'processes' => $processConfigurationsManager->getPublicProcesses(),
+ 'processes' => $this->processConfigurationsManager->getPublicProcesses(),
'IntlFormatterService' => $this->intlFormatter,
]
);
diff --git a/src/Controller/Admin/Process/UploadAndExecuteAction.php b/src/Controller/Admin/Process/UploadAndExecuteAction.php
index 8392263..8f0691f 100644
--- a/src/Controller/Admin/Process/UploadAndExecuteAction.php
+++ b/src/Controller/Admin/Process/UploadAndExecuteAction.php
@@ -37,9 +37,11 @@
#[IsGranted('ROLE_USER')]
class UploadAndExecuteAction extends AbstractController
{
+ public function __construct(private readonly RequestStack $requestStack, private readonly MessageBusInterface $messageBus)
+ {
+ }
+
public function __invoke(
- RequestStack $requestStack,
- MessageBusInterface $messageBus,
string $uploadDirectory,
#[ValueResolver('process')] ProcessConfiguration $processConfiguration,
): Response {
@@ -49,15 +51,15 @@ public function __invoke(
$form = $this->createForm(
ProcessUploadFileType::class,
null,
- ['process_code' => $requestStack->getMainRequest()?->get('process')]
+ ['process_code' => $this->requestStack->getMainRequest()?->request->get('process')]
);
- $form->handleRequest($requestStack->getMainRequest());
+ $form->handleRequest($this->requestStack->getMainRequest());
if ($form->isSubmitted() && $form->isValid()) {
/** @var UploadedFile $file */
$file = $form->getData();
$savedFilepath = \sprintf('%s/%s.%s', $uploadDirectory, Uuid::v4(), $file->getClientOriginalExtension());
(new Filesystem())->dumpFile($savedFilepath, $file->getContent());
- $messageBus->dispatch(
+ $this->messageBus->dispatch(
new ProcessExecuteMessage(
$form->getConfig()->getOption('process_code'),
$savedFilepath
diff --git a/src/Controller/Admin/ProcessExecutionCrudController.php b/src/Controller/Admin/ProcessExecutionCrudController.php
index 1fa21b2..22e482d 100644
--- a/src/Controller/Admin/ProcessExecutionCrudController.php
+++ b/src/Controller/Admin/ProcessExecutionCrudController.php
@@ -46,6 +46,7 @@ public function __construct(
private readonly ProcessExecutionRepository $processExecutionRepository,
private readonly string $logDirectory,
private readonly TranslatorInterface $translator,
+ private readonly AdminContext $context,
) {
}
@@ -109,7 +110,7 @@ public function configureActions(Actions $actions): Actions
);
}
- public function showLogs(AdminContext $adminContext): RedirectResponse
+ public function showLogs(): RedirectResponse
{
/** @var AdminUrlGenerator $adminUrlGenerator */
$adminUrlGenerator = $this->container->get(AdminUrlGenerator::class);
@@ -133,11 +134,10 @@ public function showLogs(AdminContext $adminContext): RedirectResponse
return $this->redirect($url);
}
- public function downloadLogFile(
- AdminContext $context,
- ): Response {
+ public function downloadLogFile(): Response
+ {
/** @var ProcessExecution $processExecution */
- $processExecution = $context->getEntity()->getInstance();
+ $processExecution = $this->context->getEntity()->getInstance();
$filepath = $this->getLogFilePath($processExecution);
$basename = basename($filepath);
$content = file_get_contents($filepath);
diff --git a/src/Controller/Admin/Security/LogoutController.php b/src/Controller/Admin/Security/LogoutController.php
index 9ddd963..ecfd5ce 100644
--- a/src/Controller/Admin/Security/LogoutController.php
+++ b/src/Controller/Admin/Security/LogoutController.php
@@ -20,10 +20,14 @@
class LogoutController extends AbstractController
{
+ public function __construct(private readonly Security $security)
+ {
+ }
+
#[Route('/process/logout', name: 'process_logout')]
- public function __invoke(Security $security): Response
+ public function __invoke(): Response
{
- $security->logout();
+ $this->security->logout();
return $this->redirectToRoute('process_login');
}
diff --git a/src/Controller/Admin/UserCrudController.php b/src/Controller/Admin/UserCrudController.php
index 02ccdd3..50b2504 100644
--- a/src/Controller/Admin/UserCrudController.php
+++ b/src/Controller/Admin/UserCrudController.php
@@ -41,7 +41,7 @@
class UserCrudController extends AbstractCrudController
{
/** @param array $roles */
- public function __construct(private readonly array $roles)
+ public function __construct(private readonly array $roles, private readonly AdminContext $adminContext, private readonly AdminUrlGenerator $adminUrlGenerator)
{
}
@@ -103,20 +103,20 @@ public function configureActions(Actions $actions): Actions
->addCssClass(''))->add(Crud::PAGE_EDIT, Action::new('generateToken')->linkToCrudAction('generateToken'));
}
- public function generateToken(AdminContext $adminContext, AdminUrlGenerator $adminUrlGenerator): Response
+ public function generateToken(): Response
{
/** @var User $user */
- $user = $adminContext->getEntity()->getInstance();
+ $user = $this->adminContext->getEntity()->getInstance();
$token = md5(uniqid(date('YmdHis')));
$user->setToken((new Pbkdf2PasswordHasher())->hash($token));
$this->persistEntity(
- $this->container->get('doctrine')->getManagerForClass($adminContext->getEntity()->getFqcn()),
+ $this->container->get('doctrine')->getManagerForClass($this->adminContext->getEntity()->getFqcn()),
$user
);
$this->addFlash('success', 'New token generated '.$token.' (keep it in secured area. This token will never be displayed anymore)');
return $this->redirect(
- $adminUrlGenerator
+ $this->adminUrlGenerator
->setController(self::class)
->setAction(Action::EDIT)
->setEntityId($user->getId())
diff --git a/src/Controller/ProcessExecuteController.php b/src/Controller/ProcessExecuteController.php
index dc36f94..b20de45 100644
--- a/src/Controller/ProcessExecuteController.php
+++ b/src/Controller/ProcessExecuteController.php
@@ -28,13 +28,14 @@
#[Route(path: '/http/process/execute', name: 'http_process_execute', methods: ['POST'])]
class ProcessExecuteController extends AbstractController
{
+ public function __construct(private readonly ValidatorInterface $validator, private readonly MessageBusInterface $bus, private readonly ProcessManager $processManager)
+ {
+ }
+
public function __invoke(
#[ValueResolver('http_process_execution')] HttpProcessExecution $httpProcessExecution,
- ValidatorInterface $validator,
- MessageBusInterface $bus,
- ProcessManager $processManager,
): JsonResponse {
- $violations = $validator->validate($httpProcessExecution);
+ $violations = $this->validator->validate($httpProcessExecution);
if ($violations->count() > 0) {
$violationsMessages = [];
foreach ($violations as $violation) {
@@ -43,7 +44,7 @@ public function __invoke(
throw new UnprocessableEntityHttpException(implode('. ', $violationsMessages));
}
if ($httpProcessExecution->queue) {
- $bus->dispatch(
+ $this->bus->dispatch(
new ProcessExecuteMessage(
$httpProcessExecution->code ?? '',
$httpProcessExecution->input,
@@ -56,7 +57,7 @@ public function __invoke(
return new JsonResponse('Process has been added to queue. It will start as soon as possible.');
} else {
try {
- $processManager->execute(
+ $this->processManager->execute(
$httpProcessExecution->code ?? '',
$httpProcessExecution->input,
\is_string($httpProcessExecution->context)
diff --git a/src/Entity/LogRecord.php b/src/Entity/LogRecord.php
index 2a9c25f..808ce1f 100644
--- a/src/Entity/LogRecord.php
+++ b/src/Entity/LogRecord.php
@@ -51,7 +51,7 @@ public function getId(): ?int
public function __construct(
\Monolog\LogRecord $record,
#[ORM\ManyToOne(targetEntity: ProcessExecution::class, cascade: ['all'])]
- #[ORM\JoinColumn(name: 'process_execution_id', referencedColumnName: 'id', onDelete: 'CASCADE', nullable: false)]
+ #[ORM\JoinColumn(name: 'process_execution_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
private readonly ProcessExecution $processExecution,
) {
$this->channel = (string) (new UnicodeString($record->channel))->truncate(64);
diff --git a/src/Entity/ProcessSchedule.php b/src/Entity/ProcessSchedule.php
index 2132202..8eea928 100644
--- a/src/Entity/ProcessSchedule.php
+++ b/src/Entity/ProcessSchedule.php
@@ -87,12 +87,7 @@ public function setContext(array $context): void
$this->context = $context;
}
- /**
- * PHP 8.1 Fatal error: Null can not be used as a standalone type.
- *
- * @phpstan-ignore missingType.return
- */
- public function getNextExecution()
+ public function getNextExecution(): null
{
return null;
}
diff --git a/src/EventSubscriber/ProcessEventSubscriber.php b/src/EventSubscriber/ProcessEventSubscriber.php
index 66e3f4f..ed90faa 100644
--- a/src/EventSubscriber/ProcessEventSubscriber.php
+++ b/src/EventSubscriber/ProcessEventSubscriber.php
@@ -22,15 +22,12 @@
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Uid\Uuid;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
-final class ProcessEventSubscriber implements EventSubscriberInterface
+final readonly class ProcessEventSubscriber implements EventSubscriberInterface
{
public function __construct(
- private readonly ProcessHandler $processHandler,
- private readonly DoctrineProcessHandler $doctrineProcessHandler,
- private readonly ProcessExecutionManager $processExecutionManager,
+ private ProcessHandler $processHandler,
+ private DoctrineProcessHandler $doctrineProcessHandler,
+ private ProcessExecutionManager $processExecutionManager,
) {
}
diff --git a/src/Http/Model/HttpProcessExecution.php b/src/Http/Model/HttpProcessExecution.php
index 7ae3e92..3c78a4a 100644
--- a/src/Http/Model/HttpProcessExecution.php
+++ b/src/Http/Model/HttpProcessExecution.php
@@ -20,21 +20,18 @@
use Symfony\Component\Validator\Constraints\Sequentially;
use Symfony\Component\Validator\Constraints\Type;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
-final class HttpProcessExecution
+final readonly class HttpProcessExecution
{
/**
* @param string|array $context
*/
public function __construct(
#[Sequentially(constraints: [new NotNull(message: 'Process code is required.'), new IsValidProcessCode()])]
- public readonly ?string $code = null,
- public readonly ?string $input = null,
+ public ?string $code = null,
+ public ?string $input = null,
#[AtLeastOneOf(constraints: [new Json(), new Type('array')])]
- public readonly string|array $context = [],
- public readonly bool $queue = true,
+ public string|array $context = [],
+ public bool $queue = true,
) {
}
}
diff --git a/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php b/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php
index d1689b2..fd31642 100644
--- a/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php
+++ b/src/Http/ValueResolver/HttpProcessExecuteValueResolver.php
@@ -22,14 +22,13 @@
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
use Symfony\Component\Serializer\SerializerInterface;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
#[AsTargetedValueResolver('http_process_execution')]
-class HttpProcessExecuteValueResolver implements ValueResolverInterface
+readonly class HttpProcessExecuteValueResolver implements ValueResolverInterface
{
- public function __construct(private readonly string $storageDir, private readonly SerializerInterface $serializer)
- {
+ public function __construct(
+ private string $storageDir,
+ private SerializerInterface $serializer,
+ ) {
}
/**
@@ -37,26 +36,46 @@ public function __construct(private readonly string $storageDir, private readonl
*/
public function resolve(Request $request, ArgumentMetadata $argument): iterable
{
- $all = $request->request->all();
try {
- if ([] === $all) {
+ $hasRequestData = $request->request->count() > 0 || $request->files->count() > 0;
+
+ if (!$hasRequestData) {
+ $content = $request->getContent();
+ if (empty($content)) {
+ return [new HttpProcessExecution()];
+ }
+
$httpProcessExecution = $this->serializer->deserialize(
- $request->getContent(),
+ $content,
HttpProcessExecution::class,
'json'
);
} else {
- $input = $request->get('input', $request->files->get('input'));
+ $input = $request->request->get('input') ?? $request->query->get('input');
+
+ if (null === $input) {
+ $input = $request->files->get('input');
+ }
+
if ($input instanceof UploadedFile) {
$uploadFileName = $this->storageDir.\DIRECTORY_SEPARATOR.date('YmdHis').'_'.uniqid().'_'.$input->getClientOriginalName();
(new Filesystem())->dumpFile($uploadFileName, $input->getContent());
$input = $uploadFileName;
}
+
+ $code = $request->request->get('code') ?? $request->query->get('code');
+ $context = $request->request->all('context');
+ if ([] === $context) {
+ $context = $request->query->all('context');
+ }
+
+ $queue = $request->request->getBoolean('queue', true);
+
$httpProcessExecution = new HttpProcessExecution(
- $request->get('code'),
+ (string) $code,
$input,
- $request->get('context', []),
- $request->request->getBoolean('queue', true),
+ $context,
+ $queue
);
}
diff --git a/src/Http/ValueResolver/ProcessConfigurationValueResolver.php b/src/Http/ValueResolver/ProcessConfigurationValueResolver.php
index ef06496..9412d3f 100644
--- a/src/Http/ValueResolver/ProcessConfigurationValueResolver.php
+++ b/src/Http/ValueResolver/ProcessConfigurationValueResolver.php
@@ -20,13 +20,10 @@
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
#[AsTargetedValueResolver('process')]
-class ProcessConfigurationValueResolver implements ValueResolverInterface
+readonly class ProcessConfigurationValueResolver implements ValueResolverInterface
{
- public function __construct(private readonly ProcessConfigurationRegistry $registry)
+ public function __construct(private ProcessConfigurationRegistry $registry)
{
}
@@ -35,6 +32,6 @@ public function __construct(private readonly ProcessConfigurationRegistry $regis
*/
public function resolve(Request $request, ArgumentMetadata $argument): iterable
{
- return [$this->registry->getProcessConfiguration($request->get('process'))];
+ return [$this->registry->getProcessConfiguration((string) $request->request->get('process'))];
}
}
diff --git a/src/Manager/ProcessConfigurationsManager.php b/src/Manager/ProcessConfigurationsManager.php
index 00ad111..ff8b8de 100644
--- a/src/Manager/ProcessConfigurationsManager.php
+++ b/src/Manager/ProcessConfigurationsManager.php
@@ -20,9 +20,6 @@
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraint;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
/**
* @phpstan-type UiOptions array{
* 'source': ?string,
@@ -35,9 +32,9 @@
* 'default': array{'input': mixed, 'context': array{array{'key': 'int|text', 'value':'int|text'}}}
* }
*/
-final class ProcessConfigurationsManager
+final readonly class ProcessConfigurationsManager
{
- public function __construct(private readonly ProcessConfigurationRegistry $registry)
+ public function __construct(private ProcessConfigurationRegistry $registry)
{
}
diff --git a/src/Message/CronProcessMessage.php b/src/Message/CronProcessMessage.php
index a8449d7..8e94c09 100644
--- a/src/Message/CronProcessMessage.php
+++ b/src/Message/CronProcessMessage.php
@@ -15,12 +15,9 @@
use CleverAge\UiProcessBundle\Entity\ProcessSchedule;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
-final class CronProcessMessage
+final readonly class CronProcessMessage
{
- public function __construct(public readonly ProcessSchedule $processSchedule)
+ public function __construct(public ProcessSchedule $processSchedule)
{
}
}
diff --git a/src/Message/CronProcessMessageHandler.php b/src/Message/CronProcessMessageHandler.php
index 285742a..a517ece 100644
--- a/src/Message/CronProcessMessageHandler.php
+++ b/src/Message/CronProcessMessageHandler.php
@@ -16,13 +16,10 @@
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
use Symfony\Component\Messenger\MessageBusInterface;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
#[AsMessageHandler]
-final class CronProcessMessageHandler
+final readonly class CronProcessMessageHandler
{
- public function __construct(private readonly MessageBusInterface $bus)
+ public function __construct(private MessageBusInterface $bus)
{
}
diff --git a/src/Message/ProcessExecuteHandler.php b/src/Message/ProcessExecuteHandler.php
index 3443541..a76c0e1 100644
--- a/src/Message/ProcessExecuteHandler.php
+++ b/src/Message/ProcessExecuteHandler.php
@@ -17,13 +17,10 @@
use CleverAge\UiProcessBundle\Monolog\Handler\ProcessHandler;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
#[AsMessageHandler]
-class ProcessExecuteHandler
+readonly class ProcessExecuteHandler
{
- public function __construct(private readonly ProcessManager $manager, private readonly ProcessHandler $processHandler)
+ public function __construct(private ProcessManager $manager, private ProcessHandler $processHandler)
{
}
diff --git a/src/Message/ProcessExecuteMessage.php b/src/Message/ProcessExecuteMessage.php
index 39c45bb..84fddb0 100644
--- a/src/Message/ProcessExecuteMessage.php
+++ b/src/Message/ProcessExecuteMessage.php
@@ -13,15 +13,12 @@
namespace CleverAge\UiProcessBundle\Message;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
-class ProcessExecuteMessage
+readonly class ProcessExecuteMessage
{
/**
* @param mixed[] $context
*/
- public function __construct(public readonly string $code, public readonly mixed $input, public readonly array $context = [])
+ public function __construct(public string $code, public mixed $input, public array $context = [])
{
}
}
diff --git a/src/Scheduler/CronScheduler.php b/src/Scheduler/CronScheduler.php
index 48bc202..b12fd20 100644
--- a/src/Scheduler/CronScheduler.php
+++ b/src/Scheduler/CronScheduler.php
@@ -22,15 +22,12 @@
use Symfony\Component\Scheduler\ScheduleProviderInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
-class CronScheduler implements ScheduleProviderInterface
+readonly class CronScheduler implements ScheduleProviderInterface
{
public function __construct(
- private readonly ProcessScheduleRepository $repository,
- private readonly ValidatorInterface $validator,
- private readonly LoggerInterface $logger,
+ private ProcessScheduleRepository $repository,
+ private ValidatorInterface $validator,
+ private LoggerInterface $logger,
) {
}
diff --git a/src/Security/HttpProcessExecutionAuthenticator.php b/src/Security/HttpProcessExecutionAuthenticator.php
index 85734f9..cfb91c9 100644
--- a/src/Security/HttpProcessExecutionAuthenticator.php
+++ b/src/Security/HttpProcessExecutionAuthenticator.php
@@ -34,7 +34,7 @@ public function __construct(private readonly EntityManagerInterface $entityManag
public function supports(Request $request): ?bool
{
- return 'http_process_execute' === $request->get('_route') && $request->isMethod(Request::METHOD_POST);
+ return 'http_process_execute' === $request->request->get('_route') && $request->isMethod(Request::METHOD_POST);
}
public function authenticate(Request $request): Passport
diff --git a/src/Twig/Runtime/ProcessExecutionExtensionRuntime.php b/src/Twig/Runtime/ProcessExecutionExtensionRuntime.php
index 90e4967..592f1e4 100644
--- a/src/Twig/Runtime/ProcessExecutionExtensionRuntime.php
+++ b/src/Twig/Runtime/ProcessExecutionExtensionRuntime.php
@@ -18,14 +18,11 @@
use CleverAge\UiProcessBundle\Repository\ProcessExecutionRepository;
use Twig\Extension\RuntimeExtensionInterface;
-/**
- * PHP 8.2 : Replace by readonly class.
- */
-class ProcessExecutionExtensionRuntime implements RuntimeExtensionInterface
+readonly class ProcessExecutionExtensionRuntime implements RuntimeExtensionInterface
{
public function __construct(
- private readonly ProcessExecutionRepository $processExecutionRepository,
- private readonly ProcessConfigurationsManager $processConfigurationsManager,
+ private ProcessExecutionRepository $processExecutionRepository,
+ private ProcessConfigurationsManager $processConfigurationsManager,
) {
}
diff --git a/templates/admin/process/launch.html.twig b/templates/admin/process/launch.html.twig
index 88d0f7b..7e4e560 100644
--- a/templates/admin/process/launch.html.twig
+++ b/templates/admin/process/launch.html.twig
@@ -1,5 +1,5 @@
-{% extends ea.templatePath('layout') %}
-{% trans_default_domain ea.i18n.translationDomain %}
+{% extends ea().templatePath('layout') %}
+{% trans_default_domain ea().i18n.translationDomain %}
{% block main %}
{% form_theme form '@EasyAdmin/crud/form_theme.html.twig' %}
diff --git a/templates/admin/process/list.html.twig b/templates/admin/process/list.html.twig
index 2a34372..6a1432c 100644
--- a/templates/admin/process/list.html.twig
+++ b/templates/admin/process/list.html.twig
@@ -1,6 +1,6 @@
{# @var urlGenerator \EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator #}
-{% extends ea.templatePath('layout') %}
-{% trans_default_domain ea.i18n.translationDomain %}
+{% extends ea().templatePath('layout') %}
+{% trans_default_domain ea().i18n.translationDomain %}
{% block content_title %}{{ 'Processes'|trans }}{% endblock %}