diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..f5fcaf5
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+# This keeps updated the GitHub actions used in .github/workflows/*.yaml
+# See https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
\ No newline at end of file
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index ed5c8c5..631db26 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -1,5 +1,7 @@
['header' => $fileHeaderComment],
'modernize_strpos' => true,
'get_class_to_class_keyword' => true,
+ 'declare_strict_types' => true,
])
->setRiskyAllowed(true)
->setFinder(
diff --git a/src/CleverAgeUiProcessBundle.php b/src/CleverAgeUiProcessBundle.php
index 8acf1d7..c2035d2 100644
--- a/src/CleverAgeUiProcessBundle.php
+++ b/src/CleverAgeUiProcessBundle.php
@@ -17,6 +17,7 @@
class CleverAgeUiProcessBundle extends Bundle
{
+ #[\Override]
public function getPath(): string
{
return \dirname(__DIR__);
diff --git a/src/Controller/Admin/LogRecordCrudController.php b/src/Controller/Admin/LogRecordCrudController.php
index 40ea6cb..78dbac4 100644
--- a/src/Controller/Admin/LogRecordCrudController.php
+++ b/src/Controller/Admin/LogRecordCrudController.php
@@ -51,6 +51,7 @@ public static function getEntityFqcn(): string
return LogRecord::class;
}
+ #[\Override]
public function configureFields(string $pageName): iterable
{
return [
@@ -65,11 +66,13 @@ public function configureFields(string $pageName): iterable
];
}
+ #[\Override]
public function configureCrud(Crud $crud): Crud
{
return $crud->showEntityActionsInlined()->setPaginatorPageSize(250);
}
+ #[\Override]
public function configureActions(Actions $actions): Actions
{
return Actions::new()
@@ -85,11 +88,12 @@ public function configureActions(Actions $actions): Actions
->add(Crud::PAGE_DETAIL, 'index');
}
+ #[\Override]
public function configureFilters(Filters $filters): Filters
{
$id = $this->requestStack->getMainRequest()?->query->all('filters')['process']['value'] ?? null;
$processList = $this->processConfigurationsManager->getPublicProcesses();
- $processList = array_map(fn (ProcessConfiguration $cfg) => $cfg->getCode(), $processList);
+ $processList = array_map(static fn (ProcessConfiguration $cfg) => $cfg->getCode(), $processList);
return $filters->add(
LogProcessFilter::new('Process', $processList, $id)
@@ -97,7 +101,7 @@ public function configureFilters(Filters $filters): Filters
ChoiceFilter::new('level')
->setTranslatableChoices(array_combine(
Level::VALUES,
- array_map(fn ($value) => 'enum.log_level.'.strtolower((string) $value), Level::NAMES)
+ array_map(static fn ($value) => 'enum.log_level.'.strtolower((string) $value), Level::NAMES)
))
->setFormTypeOption('translation_domain', 'enums'),
)->add('message')->add('context')->add('createdAt');
diff --git a/src/Controller/Admin/Process/LaunchAction.php b/src/Controller/Admin/Process/LaunchAction.php
index 8f6bed5..b8e2fbd 100644
--- a/src/Controller/Admin/Process/LaunchAction.php
+++ b/src/Controller/Admin/Process/LaunchAction.php
@@ -19,7 +19,7 @@
use CleverAge\UiProcessBundle\Manager\ProcessConfigurationsManager;
use CleverAge\UiProcessBundle\Message\ProcessExecuteMessage;
use EasyCorp\Bundle\EasyAdminBundle\Config\Asset;
-use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
+use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Form\Extension\Core\Type\TextType;
@@ -40,21 +40,22 @@
#[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 AdminContextProvider $adminContextProvider,
+ ) {
}
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()?->query->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 +85,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 +105,7 @@ public function __invoke(
return $this->redirectToRoute('process', ['routeName' => 'process_list']);
}
- $context->getAssets()->addJsAsset(Asset::fromEasyAdminAssetPackage('field-collection.js')->getAsDto());
+ $this->adminContextProvider->getContext()?->getAssets()->addJsAsset(Asset::fromEasyAdminAssetPackage('field-collection.js')->getAsDto());
return $this->render(
'@CleverAgeUiProcess/admin/process/launch.html.twig',
@@ -130,6 +131,7 @@ protected function dispatch(string $processCode, mixed $input = null, array $con
$this->messageBus->dispatch($message);
}
+ #[\Override]
protected function getUser(): ?User
{
/** @var User $user */
diff --git a/src/Controller/Admin/Process/ListAction.php b/src/Controller/Admin/Process/ListAction.php
index 4857c75..78880ff 100644
--- a/src/Controller/Admin/Process/ListAction.php
+++ b/src/Controller/Admin/Process/ListAction.php
@@ -24,16 +24,18 @@
#[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..573b136 100644
--- a/src/Controller/Admin/Process/UploadAndExecuteAction.php
+++ b/src/Controller/Admin/Process/UploadAndExecuteAction.php
@@ -37,9 +37,13 @@
#[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 +53,15 @@ public function __invoke(
$form = $this->createForm(
ProcessUploadFileType::class,
null,
- ['process_code' => $requestStack->getMainRequest()?->get('process')]
+ ['process_code' => $this->requestStack->getMainRequest()?->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/ProcessDashboardController.php b/src/Controller/Admin/ProcessDashboardController.php
index 9ec0908..203d0a8 100644
--- a/src/Controller/Admin/ProcessDashboardController.php
+++ b/src/Controller/Admin/ProcessDashboardController.php
@@ -37,6 +37,7 @@ public function __construct(
}
#[Route('/process', name: 'process')]
+ #[\Override]
public function index(): Response
{
$adminUrlGenerator = $this->container->get(AdminUrlGenerator::class);
@@ -44,6 +45,7 @@ public function index(): Response
return $this->redirect($adminUrlGenerator->setController(ProcessExecutionCrudController::class)->generateUrl());
}
+ #[\Override]
public function configureDashboard(): Dashboard
{
return Dashboard::new()
@@ -51,6 +53,7 @@ public function configureDashboard(): Dashboard
->setTitle('
');
}
+ #[\Override]
public function configureMenuItems(): iterable
{
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
@@ -71,6 +74,7 @@ public function configureMenuItems(): iterable
}
}
+ #[\Override]
public function configureCrud(): Crud
{
/** @var ?User $user */
diff --git a/src/Controller/Admin/ProcessExecutionCrudController.php b/src/Controller/Admin/ProcessExecutionCrudController.php
index 1fa21b2..16a2c70 100644
--- a/src/Controller/Admin/ProcessExecutionCrudController.php
+++ b/src/Controller/Admin/ProcessExecutionCrudController.php
@@ -22,7 +22,6 @@
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
-use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
@@ -54,6 +53,7 @@ public static function getEntityFqcn(): string
return ProcessExecution::class;
}
+ #[\Override]
public function configureFields(string $pageName): iterable
{
return [
@@ -71,6 +71,7 @@ public function configureFields(string $pageName): iterable
];
}
+ #[\Override]
public function configureCrud(Crud $crud): Crud
{
$crud->showEntityActionsInlined();
@@ -79,6 +80,7 @@ public function configureCrud(Crud $crud): Crud
return $crud;
}
+ #[\Override]
public function configureActions(Actions $actions): Actions
{
return Actions::new()
@@ -109,7 +111,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 +135,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->getContext()?->getEntity()->getInstance();
$filepath = $this->getLogFilePath($processExecution);
$basename = basename($filepath);
$content = file_get_contents($filepath);
@@ -151,6 +152,7 @@ public function downloadLogFile(
return $response;
}
+ #[\Override]
public function configureFilters(Filters $filters): Filters
{
return $filters
diff --git a/src/Controller/Admin/ProcessScheduleCrudController.php b/src/Controller/Admin/ProcessScheduleCrudController.php
index 5501aff..218cfb9 100644
--- a/src/Controller/Admin/ProcessScheduleCrudController.php
+++ b/src/Controller/Admin/ProcessScheduleCrudController.php
@@ -47,6 +47,7 @@ public function __construct(private readonly ProcessConfigurationsManager $proce
{
}
+ #[\Override]
public function configureCrud(Crud $crud): Crud
{
return parent::configureCrud($crud)
@@ -54,16 +55,17 @@ public function configureCrud(Crud $crud): Crud
->showEntityActionsInlined();
}
+ #[\Override]
public function configureActions(Actions $actions): Actions
{
return $actions
- ->update(Crud::PAGE_INDEX, Action::NEW, fn (Action $action) => $action->setIcon('fa fa-plus')
+ ->update(Crud::PAGE_INDEX, Action::NEW, static fn (Action $action) => $action->setIcon('fa fa-plus')
->setLabel(false)
- ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::EDIT, fn (Action $action) => $action->setIcon('fa fa-edit')
+ ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::EDIT, static fn (Action $action) => $action->setIcon('fa fa-edit')
->setLabel(false)
- ->addCssClass('text-warning'))->update(Crud::PAGE_INDEX, Action::DELETE, fn (Action $action) => $action->setIcon('fa fa-trash-o')
+ ->addCssClass('text-warning'))->update(Crud::PAGE_INDEX, Action::DELETE, static fn (Action $action) => $action->setIcon('fa fa-trash-o')
->setLabel(false)
- ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::BATCH_DELETE, fn (Action $action) => $action->setLabel('Delete')
+ ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::BATCH_DELETE, static fn (Action $action) => $action->setLabel('Delete')
->addCssClass(''));
}
@@ -72,9 +74,10 @@ public static function getEntityFqcn(): string
return ProcessSchedule::class;
}
+ #[\Override]
public function configureFields(string $pageName): iterable
{
- $choices = array_map(fn (ProcessConfiguration $configuration) => [$configuration->getCode()], $this->processConfigurationsManager->getPublicProcesses());
+ $choices = array_map(static fn (ProcessConfiguration $configuration) => [$configuration->getCode()], $this->processConfigurationsManager->getPublicProcesses());
return [
FormField::addTab('General'),
@@ -90,7 +93,7 @@ public function configureFields(string $pageName): iterable
->setVirtual(true)
->hideOnForm()
->hideOnDetail()
- ->formatValue(fn ($value, ProcessSchedule $entity) => ProcessScheduleType::CRON === $entity->getType()
+ ->formatValue(static fn ($value, ProcessSchedule $entity) => ProcessScheduleType::CRON === $entity->getType()
? CronExpressionTrigger::fromSpec($entity->getExpression() ?? '')
->getNextRunDate(new \DateTimeImmutable())
?->format('c')
@@ -107,6 +110,7 @@ public function configureFields(string $pageName): iterable
];
}
+ #[\Override]
public function index(AdminContext $context): KeyValueStore|RedirectResponse|Response
{
if (false === $this->schedulerIsRunning()) {
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..bb6ef24 100644
--- a/src/Controller/Admin/UserCrudController.php
+++ b/src/Controller/Admin/UserCrudController.php
@@ -17,7 +17,6 @@
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
-use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
@@ -41,10 +40,13 @@
class UserCrudController extends AbstractCrudController
{
/** @param array $roles */
- public function __construct(private readonly array $roles)
- {
+ public function __construct(
+ private readonly array $roles,
+ private readonly AdminUrlGenerator $adminUrlGenerator,
+ ) {
}
+ #[\Override]
public function configureCrud(Crud $crud): Crud
{
$crud->showEntityActionsInlined();
@@ -58,6 +60,7 @@ public static function getEntityFqcn(): string
return User::class;
}
+ #[\Override]
public function configureFields(string $pageName): iterable
{
yield FormField::addTab('Credentials')->setIcon('fa fa-key');
@@ -90,33 +93,35 @@ public function configureFields(string $pageName): iterable
yield LocaleField::new('locale');
}
+ #[\Override]
public function configureActions(Actions $actions): Actions
{
return $actions
- ->update(Crud::PAGE_INDEX, Action::NEW, fn (Action $action) => $action->setIcon('fa fa-plus')
+ ->update(Crud::PAGE_INDEX, Action::NEW, static fn (Action $action) => $action->setIcon('fa fa-plus')
->setLabel(false)
- ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::EDIT, fn (Action $action) => $action->setIcon('fa fa-edit')
+ ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::EDIT, static fn (Action $action) => $action->setIcon('fa fa-edit')
->setLabel(false)
- ->addCssClass('text-warning'))->update(Crud::PAGE_INDEX, Action::DELETE, fn (Action $action) => $action->setIcon('fa fa-trash-o')
+ ->addCssClass('text-warning'))->update(Crud::PAGE_INDEX, Action::DELETE, static fn (Action $action) => $action->setIcon('fa fa-trash-o')
->setLabel(false)
- ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::BATCH_DELETE, fn (Action $action) => $action->setLabel('Delete')
+ ->addCssClass(''))->update(Crud::PAGE_INDEX, Action::BATCH_DELETE, static fn (Action $action) => $action->setLabel('Delete')
->addCssClass(''))->add(Crud::PAGE_EDIT, Action::new('generateToken')->linkToCrudAction('generateToken'));
}
- public function generateToken(AdminContext $adminContext, AdminUrlGenerator $adminUrlGenerator): Response
+ public function generateToken(): Response
{
+ $adminContext = $this->getContext();
/** @var User $user */
- $user = $adminContext->getEntity()->getInstance();
+ $user = $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($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..3b04cbe 100644
--- a/src/Controller/ProcessExecuteController.php
+++ b/src/Controller/ProcessExecuteController.php
@@ -28,13 +28,17 @@
#[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 +47,7 @@ public function __invoke(
throw new UnprocessableEntityHttpException(implode('. ', $violationsMessages));
}
if ($httpProcessExecution->queue) {
- $bus->dispatch(
+ $this->bus->dispatch(
new ProcessExecuteMessage(
$httpProcessExecution->code ?? '',
$httpProcessExecution->input,
@@ -54,20 +58,19 @@ public function __invoke(
);
return new JsonResponse('Process has been added to queue. It will start as soon as possible.');
- } else {
- try {
- $processManager->execute(
- $httpProcessExecution->code ?? '',
- $httpProcessExecution->input,
- \is_string($httpProcessExecution->context)
- ? json_decode($httpProcessExecution->context, true)
- : $httpProcessExecution->context
- );
- } catch (\Throwable $e) {
- return new JsonResponse($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
- }
-
- return new JsonResponse('Process has been proceed well.');
}
+ try {
+ $this->processManager->execute(
+ $httpProcessExecution->code ?? '',
+ $httpProcessExecution->input,
+ \is_string($httpProcessExecution->context)
+ ? json_decode($httpProcessExecution->context, true)
+ : $httpProcessExecution->context
+ );
+ } catch (\Throwable $e) {
+ return new JsonResponse($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
+ }
+
+ return new JsonResponse('Process has been proceed well.');
}
}
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/Form/Type/LaunchType.php b/src/Form/Type/LaunchType.php
index 3c876bc..5018b06 100644
--- a/src/Form/Type/LaunchType.php
+++ b/src/Form/Type/LaunchType.php
@@ -59,8 +59,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
]
);
$builder->get('context')->addModelTransformer(new CallbackTransformer(
- fn ($data) => $data ?? [],
- fn ($data) => array_column($data ?? [], 'value', 'key'),
+ static fn ($data) => $data ?? [],
+ static fn ($data) => array_column($data ?? [], 'value', 'key'),
));
}
@@ -69,6 +69,7 @@ public function configureOptions(OptionsResolver $resolver): void
$resolver->setRequired('process_code');
}
+ #[\Override]
public function getParent(): string
{
return FormType::class;
diff --git a/src/Form/Type/ProcessUploadFileType.php b/src/Form/Type/ProcessUploadFileType.php
index 57619ff..94beef2 100644
--- a/src/Form/Type/ProcessUploadFileType.php
+++ b/src/Form/Type/ProcessUploadFileType.php
@@ -25,6 +25,7 @@ public function configureOptions(OptionsResolver $resolver): void
$resolver->setRequired('process_code');
}
+ #[\Override]
public function getParent(): string
{
return FileType::class;
diff --git a/src/Manager/ProcessConfigurationsManager.php b/src/Manager/ProcessConfigurationsManager.php
index 00ad111..8075a37 100644
--- a/src/Manager/ProcessConfigurationsManager.php
+++ b/src/Manager/ProcessConfigurationsManager.php
@@ -44,13 +44,13 @@ public function __construct(private readonly ProcessConfigurationRegistry $regis
/** @return ProcessConfiguration[] */
public function getPublicProcesses(): array
{
- return array_filter($this->getConfigurations(), fn (ProcessConfiguration $cfg) => $cfg->isPublic());
+ return array_filter($this->getConfigurations(), static fn (ProcessConfiguration $cfg) => $cfg->isPublic());
}
/** @return ProcessConfiguration[] */
public function getPrivateProcesses(): array
{
- return array_filter($this->getConfigurations(), fn (ProcessConfiguration $cfg) => !$cfg->isPublic());
+ return array_filter($this->getConfigurations(), static fn (ProcessConfiguration $cfg) => !$cfg->isPublic());
}
/**
@@ -75,7 +75,7 @@ public function getUiOptions(string $processCode): ?array
private function resolveUiOptions(array $options): array
{
$resolver = new OptionsResolver();
- $resolver->setDefault('ui', function (OptionsResolver $uiResolver): void {
+ $resolver->setDefault('ui', static function (OptionsResolver $uiResolver): void {
$uiResolver->setDefaults(
[
'source' => null,
@@ -84,9 +84,9 @@ private function resolveUiOptions(array $options): array
'ui_launch_mode' => 'modal',
'constraints' => [],
'run' => null,
- 'default' => function (OptionsResolver $defaultResolver) {
+ 'default' => static function (OptionsResolver $defaultResolver) {
$defaultResolver->setDefault('input', null);
- $defaultResolver->setDefault('context', function (OptionsResolver $contextResolver) {
+ $defaultResolver->setDefault('context', static function (OptionsResolver $contextResolver) {
$contextResolver->setPrototype(true);
$contextResolver->setRequired(['key', 'value']);
});
@@ -100,7 +100,7 @@ private function resolveUiOptions(array $options): array
'run ui option is deprecated. Use public option instead to hide a process from UI'
);
$uiResolver->setAllowedValues('entrypoint_type', ['text', 'file']);
- $uiResolver->setNormalizer('constraints', fn (Options $options, array $values): array => (new ConstraintLoader())->buildConstraints($values));
+ $uiResolver->setNormalizer('constraints', static fn (Options $options, array $values): array => (new ConstraintLoader())->buildConstraints($values));
$uiResolver->setAllowedValues('ui_launch_mode', ['modal', null, 'form']);
});
/**
diff --git a/src/Message/CronProcessMessageHandler.php b/src/Message/CronProcessMessageHandler.php
index 285742a..3f27a0a 100644
--- a/src/Message/CronProcessMessageHandler.php
+++ b/src/Message/CronProcessMessageHandler.php
@@ -29,7 +29,7 @@ public function __construct(private readonly MessageBusInterface $bus)
public function __invoke(CronProcessMessage $message): void
{
$schedule = $message->processSchedule;
- $context = array_merge(...array_map(fn ($ctx) => [$ctx['key'] => $ctx['value']], $schedule->getContext()));
+ $context = array_merge(...array_map(static fn ($ctx) => [$ctx['key'] => $ctx['value']], $schedule->getContext()));
$this->bus->dispatch(
new ProcessExecuteMessage($schedule->getProcess() ?? '', $schedule->getInput(), $context)
);
diff --git a/src/Migrations/Version20231006111525.php b/src/Migrations/Version20231006111525.php
index 5d8619f..3d0a294 100644
--- a/src/Migrations/Version20231006111525.php
+++ b/src/Migrations/Version20231006111525.php
@@ -21,6 +21,7 @@
final class Version20231006111525 extends AbstractMigration
{
+ #[\Override]
public function getDescription(): string
{
return 'Create tables log_record, process_execution and process_user';
@@ -70,6 +71,7 @@ public function up(Schema $schema): void
}
}
+ #[\Override]
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE log_record DROP CONSTRAINT FK_8ECECC333DAC0075');
diff --git a/src/Migrations/Version20240729151928.php b/src/Migrations/Version20240729151928.php
index d1635b8..be39996 100644
--- a/src/Migrations/Version20240729151928.php
+++ b/src/Migrations/Version20240729151928.php
@@ -24,6 +24,7 @@
*/
final class Version20240729151928 extends AbstractMigration
{
+ #[\Override]
public function getDescription(): string
{
return 'Create table process_schedule';
@@ -41,6 +42,7 @@ public function up(Schema $schema): void
}
}
+ #[\Override]
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE process_schedule');
diff --git a/src/Migrations/Version20240730090403.php b/src/Migrations/Version20240730090403.php
index 101395a..29ab1a9 100644
--- a/src/Migrations/Version20240730090403.php
+++ b/src/Migrations/Version20240730090403.php
@@ -21,6 +21,7 @@
*/
final class Version20240730090403 extends AbstractMigration
{
+ #[\Override]
public function getDescription(): string
{
return 'Add process_user.token';
@@ -31,6 +32,7 @@ public function up(Schema $schema): void
$this->addSql('ALTER TABLE process_user ADD token VARCHAR(255) DEFAULT NULL');
}
+ #[\Override]
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE process_user DROP token');
diff --git a/src/Migrations/Version20241007134542.php b/src/Migrations/Version20241007134542.php
index 1599e1b..40b4866 100644
--- a/src/Migrations/Version20241007134542.php
+++ b/src/Migrations/Version20241007134542.php
@@ -21,6 +21,7 @@
*/
final class Version20241007134542 extends AbstractMigration
{
+ #[\Override]
public function getDescription(): string
{
return 'Add process_user.timezone';
@@ -33,6 +34,7 @@ public function up(Schema $schema): void
}
}
+ #[\Override]
public function down(Schema $schema): void
{
if ($schema->hasTable('process_user') && $schema->getTable('process_user')->hasColumn('timezone')) {
diff --git a/src/Migrations/Version20241007152613.php b/src/Migrations/Version20241007152613.php
index 5b8cf45..3992e70 100644
--- a/src/Migrations/Version20241007152613.php
+++ b/src/Migrations/Version20241007152613.php
@@ -21,6 +21,7 @@
*/
final class Version20241007152613 extends AbstractMigration
{
+ #[\Override]
public function getDescription(): string
{
return 'Add process_execution.context';
@@ -33,6 +34,7 @@ public function up(Schema $schema): void
}
}
+ #[\Override]
public function down(Schema $schema): void
{
if ($schema->hasTable('process_execution') && $schema->getTable('process_execution')->hasColumn('context')) {
diff --git a/src/Migrations/Version20241009075733.php b/src/Migrations/Version20241009075733.php
index b66faee..cfecff0 100644
--- a/src/Migrations/Version20241009075733.php
+++ b/src/Migrations/Version20241009075733.php
@@ -18,6 +18,7 @@
final class Version20241009075733 extends AbstractMigration
{
+ #[\Override]
public function getDescription(): string
{
return 'Add process_user.locale';
@@ -30,6 +31,7 @@ public function up(Schema $schema): void
}
}
+ #[\Override]
public function down(Schema $schema): void
{
if ($schema->hasTable('process_user') && $schema->getTable('process_user')->hasColumn('locale')) {
diff --git a/src/Monolog/Handler/DoctrineProcessHandler.php b/src/Monolog/Handler/DoctrineProcessHandler.php
index 0a178b5..3c47678 100644
--- a/src/Monolog/Handler/DoctrineProcessHandler.php
+++ b/src/Monolog/Handler/DoctrineProcessHandler.php
@@ -50,6 +50,7 @@ public function disable(): void
$this->enabled = false;
}
+ #[\Override]
public function __destruct()
{
$this->flush();
diff --git a/src/Monolog/Handler/ProcessHandler.php b/src/Monolog/Handler/ProcessHandler.php
index b1f94da..a57eab0 100644
--- a/src/Monolog/Handler/ProcessHandler.php
+++ b/src/Monolog/Handler/ProcessHandler.php
@@ -48,6 +48,7 @@ public function setFilename(string $filename): void
$this->url = \sprintf('%s/%s', $this->directory, $filename);
}
+ #[\Override]
public function close(): void
{
$this->url = $this->directory;
@@ -59,6 +60,7 @@ public function getFilename(): ?string
return $this->url;
}
+ #[\Override]
public function write(LogRecord $record): void
{
parent::write($record);
diff --git a/src/Twig/Components/BootstrapModal.php b/src/Twig/Components/BootstrapModal.php
index 1e8c362..1149b7c 100644
--- a/src/Twig/Components/BootstrapModal.php
+++ b/src/Twig/Components/BootstrapModal.php
@@ -1,5 +1,7 @@