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
8 changes: 8 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -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"
3 changes: 3 additions & 0 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?php

declare(strict_types=1);

/*
* This file is part of the CleverAge/UiProcessBundle package.
*
Expand Down Expand Up @@ -35,6 +37,7 @@
'header_comment' => ['header' => $fileHeaderComment],
'modernize_strpos' => true,
'get_class_to_class_keyword' => true,
'declare_strict_types' => true,
])
->setRiskyAllowed(true)
->setFinder(
Expand Down
1 change: 1 addition & 0 deletions src/CleverAgeUiProcessBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

class CleverAgeUiProcessBundle extends Bundle
{
#[\Override]
public function getPath(): string
{
return \dirname(__DIR__);
Expand Down
8 changes: 6 additions & 2 deletions src/Controller/Admin/LogRecordCrudController.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public static function getEntityFqcn(): string
return LogRecord::class;
}

#[\Override]
public function configureFields(string $pageName): iterable
{
return [
Expand All @@ -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()
Expand All @@ -85,19 +88,20 @@ 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)
)->add(
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');
Expand Down
24 changes: 13 additions & 11 deletions src/Controller/Admin/Process/LaunchAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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');
}
Expand Down Expand Up @@ -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) {
Expand All @@ -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',
Expand All @@ -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 */
Expand Down
10 changes: 6 additions & 4 deletions src/Controller/Admin/Process/ListAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
]
);
Expand Down
14 changes: 9 additions & 5 deletions src/Controller/Admin/Process/UploadAndExecuteAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
Expand Down
4 changes: 4 additions & 0 deletions src/Controller/Admin/ProcessDashboardController.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,23 @@ public function __construct(
}

#[Route('/process', name: 'process')]
#[\Override]
public function index(): Response
{
$adminUrlGenerator = $this->container->get(AdminUrlGenerator::class);

return $this->redirect($adminUrlGenerator->setController(ProcessExecutionCrudController::class)->generateUrl());
}

#[\Override]
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->renderContentMaximized()
->setTitle('<img src="'.$this->logoPath.'" />');
}

#[\Override]
public function configureMenuItems(): iterable
{
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
Expand All @@ -71,6 +74,7 @@ public function configureMenuItems(): iterable
}
}

#[\Override]
public function configureCrud(): Crud
{
/** @var ?User $user */
Expand Down
14 changes: 8 additions & 6 deletions src/Controller/Admin/ProcessExecutionCrudController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -54,6 +53,7 @@ public static function getEntityFqcn(): string
return ProcessExecution::class;
}

#[\Override]
public function configureFields(string $pageName): iterable
{
return [
Expand All @@ -71,6 +71,7 @@ public function configureFields(string $pageName): iterable
];
}

#[\Override]
public function configureCrud(Crud $crud): Crud
{
$crud->showEntityActionsInlined();
Expand All @@ -79,6 +80,7 @@ public function configureCrud(Crud $crud): Crud
return $crud;
}

#[\Override]
public function configureActions(Actions $actions): Actions
{
return Actions::new()
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -151,6 +152,7 @@ public function downloadLogFile(
return $response;
}

#[\Override]
public function configureFilters(Filters $filters): Filters
{
return $filters
Expand Down
16 changes: 10 additions & 6 deletions src/Controller/Admin/ProcessScheduleCrudController.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,23 +47,25 @@ public function __construct(private readonly ProcessConfigurationsManager $proce
{
}

#[\Override]
public function configureCrud(Crud $crud): Crud
{
return parent::configureCrud($crud)
->setPageTitle('index', 'Scheduler')
->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(''));
}

Expand All @@ -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'),
Expand All @@ -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')
Expand All @@ -107,6 +110,7 @@ public function configureFields(string $pageName): iterable
];
}

#[\Override]
public function index(AdminContext $context): KeyValueStore|RedirectResponse|Response
{
if (false === $this->schedulerIsRunning()) {
Expand Down
8 changes: 6 additions & 2 deletions src/Controller/Admin/Security/LogoutController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
}
Expand Down
Loading
Loading