From ce7def66fe9b7ff9c9f3e8f123e3bfee2c096e80 Mon Sep 17 00:00:00 2001 From: Damien Harper Date: Thu, 18 Apr 2019 14:46:51 +0200 Subject: [PATCH] Fix a Windows compatibility issue regarding URLs including namespaced entity class name (so backslashes) (#62) (#63) --- src/DoctrineAuditBundle/Controller/AuditController.php | 4 ++++ src/DoctrineAuditBundle/Helper/AuditHelper.php | 10 ++++++++++ .../Resources/views/Audit/audits.html.twig | 3 ++- .../Resources/views/Audit/entity_history.html.twig | 4 ++-- .../views/Audit/entity_history_entry.html.twig | 4 ++-- .../Resources/views/Audit/helper.html.twig | 8 ++++++-- tests/DoctrineAuditBundle/Helper/AuditHelperTest.php | 10 ++++++++++ 7 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/DoctrineAuditBundle/Controller/AuditController.php b/src/DoctrineAuditBundle/Controller/AuditController.php index c599a0aa..0d7711c1 100644 --- a/src/DoctrineAuditBundle/Controller/AuditController.php +++ b/src/DoctrineAuditBundle/Controller/AuditController.php @@ -2,6 +2,7 @@ namespace DH\DoctrineAuditBundle\Controller; +use DH\DoctrineAuditBundle\Helper\AuditHelper; use DH\DoctrineAuditBundle\Reader\AuditReader; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -36,6 +37,7 @@ public function listAuditsAction(): Response public function showEntityHistoryAction(Request $request, string $entity, $id = null): Response { $page = (int) $request->query->get('page', 1); + $entity = AuditHelper::paramToNamespace($entity); $reader = $this->container->get('dh_doctrine_audit.reader'); $entries = $reader->getAuditsPager($entity, $id, $page, AuditReader::PAGE_SIZE); @@ -57,6 +59,8 @@ public function showEntityHistoryAction(Request $request, string $entity, $id = */ public function showAuditEntryAction(string $entity, $id): Response { + $entity = AuditHelper::paramToNamespace($entity); + $reader = $this->container->get('dh_doctrine_audit.reader'); $data = $reader->getAudit($entity, $id); diff --git a/src/DoctrineAuditBundle/Helper/AuditHelper.php b/src/DoctrineAuditBundle/Helper/AuditHelper.php index 9d795333..e057fc99 100644 --- a/src/DoctrineAuditBundle/Helper/AuditHelper.php +++ b/src/DoctrineAuditBundle/Helper/AuditHelper.php @@ -342,4 +342,14 @@ public function getAuditTableIndices(string $tablename): array return $indices; } + + public static function paramToNamespace(string $entity): string + { + return str_replace('-', '\\', $entity); + } + + public static function namespaceToParam(string $entity): string + { + return str_replace('\\', '-', $entity); + } } diff --git a/src/DoctrineAuditBundle/Resources/views/Audit/audits.html.twig b/src/DoctrineAuditBundle/Resources/views/Audit/audits.html.twig index 58980cbc..4cd99b5b 100644 --- a/src/DoctrineAuditBundle/Resources/views/Audit/audits.html.twig +++ b/src/DoctrineAuditBundle/Resources/views/Audit/audits.html.twig @@ -1,6 +1,7 @@ {% extends "@DHDoctrineAudit/layout.html.twig" %} {% import '@DHDoctrineAudit/Audit/bootstrap.html.twig' as bootstrap %} +{% import '@DHDoctrineAudit/Audit/helper.html.twig' as helper %} {% block dh_doctrine_audit_content %}
@@ -25,7 +26,7 @@ {{ table|escape }} {{ bootstrap.badge(reader.getAuditsCount(entity) ~ ' operations') }} - View audits + View audits {% endfor %} diff --git a/src/DoctrineAuditBundle/Resources/views/Audit/entity_history.html.twig b/src/DoctrineAuditBundle/Resources/views/Audit/entity_history.html.twig index 8006f7dc..ba5cef06 100644 --- a/src/DoctrineAuditBundle/Resources/views/Audit/entity_history.html.twig +++ b/src/DoctrineAuditBundle/Resources/views/Audit/entity_history.html.twig @@ -9,9 +9,9 @@ diff --git a/src/DoctrineAuditBundle/Resources/views/Audit/entity_history_entry.html.twig b/src/DoctrineAuditBundle/Resources/views/Audit/entity_history_entry.html.twig index c8c34e2b..9f9b94a0 100644 --- a/src/DoctrineAuditBundle/Resources/views/Audit/entity_history_entry.html.twig +++ b/src/DoctrineAuditBundle/Resources/views/Audit/entity_history_entry.html.twig @@ -9,8 +9,8 @@ diff --git a/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig b/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig index fd3f88af..ec4c243a 100644 --- a/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig +++ b/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig @@ -13,6 +13,10 @@ {% endfilter %} {% endmacro dump %} +{% macro namespaceToParam(entity) %} +{{- entity|replace({'\\': '-'}) -}} +{% endmacro namespaceToParam %} + {% macro humanize(entity, entry) %} {% import _self as helper %} @@ -40,14 +44,14 @@ {% set action = '???' %} {% endif %} - {{ subject }} + {{ subject }} {% if source is defined and subject != source.label %} ({{ source.label }}) {% endif %} has been {{ action }} {% if target is defined %} {% set subject = target.class~'#'~target.id %} - {{ direction }} {{ subject }} + {{ direction }} {{ subject }} {% if subject != target.label %} ({{ helper.dump(target) }}) {% endif %} diff --git a/tests/DoctrineAuditBundle/Helper/AuditHelperTest.php b/tests/DoctrineAuditBundle/Helper/AuditHelperTest.php index 1bb34d4b..ec8348f6 100644 --- a/tests/DoctrineAuditBundle/Helper/AuditHelperTest.php +++ b/tests/DoctrineAuditBundle/Helper/AuditHelperTest.php @@ -424,6 +424,16 @@ public function testBlameWhenNoUser(): void $this->assertSame($expected, $helper->blame(), 'AuditHelper::blame() is ok.'); } + public function testParamToNamespace(): void + { + $this->assertSame(Author::class, AuditHelper::paramToNamespace('DH-DoctrineAuditBundle-Tests-Fixtures-Core-Author'), 'AuditHelper::paramToNamespace() is ok.'); + } + + public function testNamespaceToParam(): void + { + $this->assertSame('DH-DoctrineAuditBundle-Tests-Fixtures-Core-Author', AuditHelper::namespaceToParam(Author::class), 'AuditHelper::namespaceToParam() is ok.'); + } + public function testGetConfiguration(): void { $em = $this->getEntityManager();