Passed
Push — master ( 2806bf...564d8f )
by Damien
02:40
created

ViewerController::renderView()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 2
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace DH\AuditorBundle\Controller;
4
5
use DH\Auditor\Exception\AccessDeniedException;
6
use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Security;
7
use DH\Auditor\Provider\Doctrine\Persistence\Reader\Reader;
8
use DH\Auditor\Provider\Doctrine\Persistence\Schema\SchemaManager;
9
use DH\Auditor\Provider\Doctrine\Service\AuditingService;
10
use DH\AuditorBundle\Helper\UrlHelper;
11
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
12
use Symfony\Component\HttpFoundation\Request;
13
use Symfony\Component\HttpFoundation\Response;
14
use Symfony\Component\Routing\Annotation\Route;
15
16
class ViewerController extends AbstractController
17
{
18
    private $environment;
19
20
    public function __construct(\Twig\Environment $environment)
21
    {
22
        $this->environment = $environment;
23
    }
24
25
    /**
26
     * @Route("/audit", name="dh_auditor_list_audits", methods={"GET"})
27
     */
28
    public function listAuditsAction(Reader $reader): Response
29
    {
30
        $schemaManager = new SchemaManager($reader->getProvider());
31
32
        /** @var AuditingService[] $auditingServices */
33
        $auditingServices = $reader->getProvider()->getAuditingServices();
34
        $audited = [];
35
        $scope = Security::VIEW_SCOPE;
36
        foreach ($auditingServices as $name => $auditingService) {
37
            $audited = array_merge(
38
                $audited,
39
                array_filter(
40
                    $schemaManager->getAuditableTableNames($auditingService->getEntityManager()),
41
                    function ($entity) use ($reader, $scope) {
42
                        $roleChecker = $reader->getProvider()->getAuditor()->getConfiguration()->getRoleChecker();
43
44
                        return null === $roleChecker ? true : $roleChecker($entity, $scope);
45
                    },
46
                    ARRAY_FILTER_USE_KEY
47
                )
48
            );
49
        }
50
51
        return $this->render('@DHAuditor/Audit/audits.html.twig', [
52
            'audited' => $audited,
53
            'reader' => $reader,
54
        ]);
55
    }
56
57
    /**
58
     * @Route("/audit/transaction/{hash}", name="dh_auditor_show_transaction", methods={"GET"})
59
     */
60
    public function showTransactionAction(Reader $reader, string $hash): Response
61
    {
62
        $audits = $reader->getAuditsByTransactionHash($hash);
63
64
        return $this->render('@DHAuditor/Audit/transaction.html.twig', [
65
            'hash' => $hash,
66
            'audits' => $audits,
67
        ]);
68
    }
69
70
    /**
71
     * @Route("/audit/{entity}/{id}", name="dh_auditor_show_entity_history", methods={"GET"})
72
     *
73
     * @param int|string $id
74
     */
75
    public function showEntityHistoryAction(Request $request, Reader $reader, string $entity, $id = null): Response
76
    {
77
        $page = (int) $request->query->get('page', '1');
78
        $entity = UrlHelper::paramToNamespace($entity);
79
80
        if (!$reader->getProvider()->isAuditable($entity)) {
81
            throw $this->createNotFoundException();
82
        }
83
84
        try {
85
            $pager = $reader->paginate($reader->createQuery($entity, [
86
                'object_id' => $id,
87
                'page' => $page,
88
                'page_size' => Reader::PAGE_SIZE,
89
            ]), $page, Reader::PAGE_SIZE);
90
        } catch (AccessDeniedException $e) {
91
            throw $this->createAccessDeniedException();
92
        }
93
94
        return $this->render('@DHAuditor/Audit/entity_history.html.twig', [
95
            'id' => $id,
96
            'entity' => $entity,
97
            'paginator' => $pager,
98
        ]);
99
    }
100
101
    protected function renderView(string $view, array $parameters = []): string
102
    {
103
        return $this->environment->render($view, $parameters);
104
    }
105
}
106