forked from cleverage/processuibundle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogRecordCrudController.php
100 lines (89 loc) · 3.62 KB
/
LogRecordCrudController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
declare(strict_types=1);
/*
* This file is part of the CleverAge/UiProcessBundle package.
*
* Copyright (c) Clever-Age
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CleverAge\UiProcessBundle\Controller\Admin;
use CleverAge\ProcessBundle\Configuration\ProcessConfiguration;
use CleverAge\UiProcessBundle\Admin\Field\ContextField;
use CleverAge\UiProcessBundle\Admin\Field\LogLevelField;
use CleverAge\UiProcessBundle\Admin\Filter\LogProcessFilter;
use CleverAge\UiProcessBundle\Entity\LogRecord;
use CleverAge\UiProcessBundle\Manager\ProcessConfigurationsManager;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter;
use Monolog\Level;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Http\Attribute\IsGranted;
#[IsGranted('ROLE_USER')]
class LogRecordCrudController extends AbstractCrudController
{
public function __construct(
private readonly ProcessConfigurationsManager $processConfigurationsManager,
private readonly RequestStack $requestStack,
) {
}
public static function getEntityFqcn(): string
{
return LogRecord::class;
}
public function configureFields(string $pageName): iterable
{
return [
LogLevelField::new('level'),
TextField::new('message')->setMaxLength(512),
DateTimeField::new('createdAt')->setFormat('short', 'medium'),
ContextField::new('context')
->onlyOnDetail(),
BooleanField::new('contextIsEmpty', 'Has context info ?')
->onlyOnIndex()
->renderAsSwitch(false),
];
}
public function configureCrud(Crud $crud): Crud
{
return $crud->showEntityActionsInlined()->setPaginatorPageSize(250);
}
public function configureActions(Actions $actions): Actions
{
return Actions::new()
->add(Crud::PAGE_INDEX, Action::new('detail', false, 'fas fa-eye')
->setHtmlAttributes(
[
'data-bs-toggle' => 'tooltip',
'data-bs-placement' => 'top',
'title' => 'Show details',
]
)
->linkToCrudAction('detail'))
->add(Crud::PAGE_DETAIL, 'index');
}
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);
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)
))
->setFormTypeOption('translation_domain', 'enums'),
)->add('message')->add('context')->add('createdAt');
}
}