Skip to content

Commit 28bda1e

Browse files
authored
Merge pull request #453 from stof/support_ip_traceable
Add support for IpTraceable
2 parents 8452ab1 + 4f429de commit 28bda1e

File tree

5 files changed

+68
-0
lines changed

5 files changed

+68
-0
lines changed

src/DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ private function getVendorNode(string $name): ArrayNodeDefinition
4747
->scalarNode('sluggable')->defaultFalse()->end()
4848
->scalarNode('tree')->defaultFalse()->end()
4949
->scalarNode('loggable')->defaultFalse()->end()
50+
->scalarNode('ip_traceable')->defaultFalse()->end()
5051
->scalarNode('sortable')->defaultFalse()->end()
5152
->scalarNode('softdeleteable')->defaultFalse()->end()
5253
->scalarNode('uploadable')->defaultFalse()->end()

src/DependencyInjection/StofDoctrineExtensionsExtension.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ class StofDoctrineExtensionsExtension extends Extension
1717
'onFlush',
1818
'loadClassMetadata',
1919
),
20+
'ip_traceable' => array(
21+
'prePersist',
22+
'onFlush',
23+
'loadClassMetadata',
24+
),
2025
'loggable' => array(
2126
'loadClassMetadata',
2227
'onFlush',

src/EventListener/IpTraceListener.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Stof\DoctrineExtensionsBundle\EventListener;
4+
5+
use Gedmo\IpTraceable\IpTraceableListener;
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Symfony\Component\HttpKernel\Event\RequestEvent;
8+
use Symfony\Component\HttpKernel\HttpKernelInterface;
9+
use Symfony\Component\HttpKernel\KernelEvents;
10+
11+
/**
12+
* @internal
13+
*/
14+
final class IpTraceListener implements EventSubscriberInterface
15+
{
16+
private $ipTraceableListener;
17+
18+
public function __construct(IpTraceableListener $ipTraceableListener)
19+
{
20+
$this->ipTraceableListener = $ipTraceableListener;
21+
}
22+
23+
public function onKernelRequest(RequestEvent $event)
24+
{
25+
if (HttpKernelInterface::MAIN_REQUEST !== $event->getRequestType()) {
26+
return;
27+
}
28+
29+
$ip = $event->getRequest()->getClientIp();
30+
31+
if (null !== $ip) {
32+
$this->ipTraceableListener->setIpValue($ip);
33+
}
34+
}
35+
36+
public static function getSubscribedEvents(): array
37+
{
38+
return array(
39+
KernelEvents::REQUEST => ['onKernelRequest', 500],
40+
);
41+
}
42+
}

src/Resources/config/ip_traceable.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<service id="stof_doctrine_extensions.listener.ip_traceable" class="Gedmo\IpTraceable\IpTraceableListener" public="false">
9+
<call method="setAnnotationReader">
10+
<argument type="service" id="annotation_reader" />
11+
</call>
12+
</service>
13+
14+
<service id="stof_doctrine_extensions.event_listener.ip_trace" class="Stof\DoctrineExtensionsBundle\EventListener\IpTraceListener" public="false">
15+
<argument type="service" id="stof_doctrine_extensions.listener.ip_traceable" />
16+
<tag name="kernel.event_subscriber" />
17+
</service>
18+
</services>
19+
</container>

tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public static function provideExtensions()
1414
{
1515
return array(
1616
array('blameable'),
17+
array('ip_traceable'),
1718
array('loggable'),
1819
array('reference_integrity'),
1920
array('sluggable'),

0 commit comments

Comments
 (0)