@@ -44,7 +45,7 @@
New value
- {% for key, values in entry.diffs %}
+ {% for key, values in diffs %}
@@ -95,6 +96,12 @@
{% endfor %}
+
+ {% if entries.haveToPaginate() %}
+
{{ key }}
+ {{ pagerfanta(entries, 'twitter_bootstrap4') }}
+
+ {% endif %}
{% endblock dh_doctrine_audit_content %}
diff --git a/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig b/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig
index 88d9a7d3..fd3f88af 100644
--- a/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig
+++ b/src/DoctrineAuditBundle/Resources/views/Audit/helper.html.twig
@@ -16,7 +16,8 @@
{% macro humanize(entity, entry) %}
{% import _self as helper %}
- {% set subject = entity~'#'~entry.getObjectId() %}
+ {% set diffs = entry.diffs|json_decode(true) %}
+ {% set subject = entity~'#'~entry.object_id %}
{% if entry.type == 'insert' %}
{% set action = 'inserted' %}
@@ -24,22 +25,22 @@
{% set action = 'updated' %}
{% elseif entry.type == 'remove' %}
{% set action = 'deleted' %}
- {% set source = entry.diffs %}
+ {% set source = diffs %}
{% elseif entry.type == 'associate' %}
{% set action = 'associated' %}
- {% set source = entry.diffs.source %}
- {% set target = entry.diffs.target %}
+ {% set source = diffs.source %}
+ {% set target = diffs.target %}
{% set direction = 'to' %}
{% elseif entry.type == 'dissociate' %}
{% set action = 'dissociated' %}
- {% set source = entry.diffs.source %}
- {% set target = entry.diffs.target %}
+ {% set source = diffs.source %}
+ {% set target = diffs.target %}
{% set direction = 'from' %}
{% else %}
{% set action = '???' %}
{% endif %}
- {{ subject }}
+ {{ subject }}
{% if source is defined and subject != source.label %}
({{ source.label }})
{% endif %}
@@ -51,8 +52,8 @@
({{ helper.dump(target) }})
{% endif %}
{% endif %}
- by {{ entry.getUsername() is null ? 'unknown user' : entry.getUsername() }}
- {% if entry.getIp() is not empty %}
- , IP: {{ entry.getIp() }}
+ by {{ entry.blame_user is null ? 'unknown user' : entry.blame_user }}
+ {% if entry.ip is not empty %}
+ , IP: {{ entry.ip }}
{% endif %}
{% endmacro %}
diff --git a/src/DoctrineAuditBundle/Twig/Extension/TwigExtension.php b/src/DoctrineAuditBundle/Twig/Extension/TwigExtension.php
index c940c2dc..3010accf 100644
--- a/src/DoctrineAuditBundle/Twig/Extension/TwigExtension.php
+++ b/src/DoctrineAuditBundle/Twig/Extension/TwigExtension.php
@@ -4,6 +4,7 @@
use Symfony\Bridge\Doctrine\RegistryInterface;
use Twig\Extension\AbstractExtension;
+use Twig\TwigFilter;
use Twig\TwigFunction;
class TwigExtension extends AbstractExtension
@@ -19,6 +20,13 @@ public function getFunctions(): array
];
}
+ public function getFilters(): array
+ {
+ return [
+ new TwigFilter('json_decode', 'json_decode'),
+ ];
+ }
+
public function __construct(RegistryInterface $doctrine)
{
$this->doctrine = $doctrine;
diff --git a/tests/DoctrineAuditBundle/Reader/AuditReaderTest.php b/tests/DoctrineAuditBundle/Reader/AuditReaderTest.php
index f3a4b77d..a56ee340 100644
--- a/tests/DoctrineAuditBundle/Reader/AuditReaderTest.php
+++ b/tests/DoctrineAuditBundle/Reader/AuditReaderTest.php
@@ -10,6 +10,7 @@
use DH\DoctrineAuditBundle\Tests\Fixtures\Core\Comment;
use DH\DoctrineAuditBundle\Tests\Fixtures\Core\Post;
use DH\DoctrineAuditBundle\Tests\Fixtures\Core\Tag;
+use Pagerfanta\Pagerfanta;
/**
* @covers \DH\DoctrineAuditBundle\AuditConfiguration
@@ -179,6 +180,27 @@ public function testGetAudits(): void
$reader->getAudits(Post::class, null, -1, 50);
}
+ public function testGetAuditsPager(): void
+ {
+ $reader = $this->getReader($this->getAuditConfiguration());
+
+ /** @var AuditEntry[] $audits */
+ $pager = $reader->getAuditsPager(Author::class, null, 1, 3);
+
+ $this->assertInstanceOf(Pagerfanta::class, $pager, 'pager is a Pagerfanta instance.');
+ $this->assertTrue($pager->haveToPaginate(), 'pager has to paginate.');
+ }
+
+ public function testGetAuditsCount(): void
+ {
+ $reader = $this->getReader($this->getAuditConfiguration());
+
+ /** @var AuditEntry[] $audits */
+ $count = $reader->getAuditsCount(Author::class, null);
+
+ $this->assertSame(5, $count, 'count is ok.');
+ }
+
/**
* @depends testGetAudits
*/
diff --git a/tests/DoctrineAuditBundle/Twig/Extension/TwigExtensionTest.php b/tests/DoctrineAuditBundle/Twig/Extension/TwigExtensionTest.php
index fe2932cc..996dc098 100644
--- a/tests/DoctrineAuditBundle/Twig/Extension/TwigExtensionTest.php
+++ b/tests/DoctrineAuditBundle/Twig/Extension/TwigExtensionTest.php
@@ -61,7 +61,19 @@ public function testGetFunctions(): void
$this->assertNotEmpty($functions, 'extension has at least 1 function.');
foreach ($functions as $function) {
- $this->assertInstanceOf('Twig_SimpleFunction', $function, 'function instanceof Twig_SimpleFunction');
+ $this->assertInstanceOf('Twig\TwigFunction', $function, 'function instanceof Twig\TwigFunction');
+ }
+ }
+
+ public function testGetFilters(): void
+ {
+ $extension = new TwigExtension($this->container->get('doctrine'));
+ $filters = $extension->getFilters();
+
+ $this->assertNotEmpty($filters, 'extension has at least 1 filter.');
+
+ foreach ($filters as $filter) {
+ $this->assertInstanceOf('Twig\TwigFilter', $filter, 'filter instanceof Twig\TwigFilter');
}
}
diff --git a/tests/README.md b/tests/README.md
index ec7356d7..c361e0ae 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -11,12 +11,14 @@ Then you can run the test suite with different configuration (SQLite, MySQL or P
### Default configuration (SQLite)
-This configuration uses an in memory sqlite database, it's the fastest configuration.
+This configuration uses an in memory SQLite database and generates code coverage report in `tests/coverage` folder (requires [Xdebug extension](https://xdebug.org/docs/install#configure-php)).
```bash
./vendor/bin/phpunit
```
-or
+
+You can also run tests using an in memory SQLite database and without generating code coverage report, it's the fastest configuration.
+
```bash
./vendor/bin/phpunit -c tests/travis/sqlite.travis.xml
```