Skip to content

Commit

Permalink
Added support for Symfony 4 and 5
Browse files Browse the repository at this point in the history
  • Loading branch information
Nyholm committed Dec 13, 2019
1 parent aa590a2 commit 8c8f511
Show file tree
Hide file tree
Showing 12 changed files with 117 additions and 129 deletions.
11 changes: 3 additions & 8 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
language: php

php:
- 5.4
- 5.5
- 5.6
- 7.0
- hhvm

before_install:
- composer self-update
- 7.2
- 7.3
- 7.4

install:
- composer update
Expand Down
11 changes: 8 additions & 3 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@ class Configuration implements ConfigurationInterface
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$root = $treeBuilder->root('happyr_event_tracker');
$treeBuilder = new TreeBuilder('happyr_event_tracker');
// Keep compatibility with symfony/config < 4.2
if (!\method_exists($treeBuilder, 'getRootNode')) {
$rootNode = $treeBuilder->root('happyr_event_tracker');
} else {
$rootNode = $treeBuilder->getRootNode();
}

$root->children()
$rootNode->children()
->append($this->getEventNode())
->enumNode('manager')->values(array('database', 'aggressive'))->defaultValue('database')->end()
->end();
Expand Down
5 changes: 4 additions & 1 deletion DependencyInjection/HappyrEventTrackerExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Happyr\EventTrackerBundle\DependencyInjection;

use Happyr\EventTrackerBundle\Manager\EventTrackerManagerInterface;
use Happyr\EventTrackerBundle\Service\EventListener;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
Expand All @@ -21,7 +23,7 @@ public function load(array $configs, ContainerBuilder $container)
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

$listener = $container->getDefinition('happyr.event_tracker.event_listener');
$listener = $container->getDefinition(EventListener::class);

$eventMap = array();
foreach ($config['events'] as $name => $event) {
Expand All @@ -33,5 +35,6 @@ public function load(array $configs, ContainerBuilder $container)
$listener->replaceArgument(2, $eventMap);

$container->setAlias('happyr.event_tracker.manager', 'happyr.event_tracker.manager.'.$config['manager']);
$container->setAlias(EventTrackerManagerInterface::class, 'happyr.event_tracker.manager.'.$config['manager']);
}
}
4 changes: 2 additions & 2 deletions Entity/LogRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class LogRepository extends EntityRepository
*
* @return \Happyr\EventTrackerBundle\Entity\Log[]
*/
public function getEventsByTarget($namespace, $target, $action = null)
public function getEventsByTarget($namespace, $target, $action = null): array
{
$criteria = array('namespace' => $namespace, 'target' => $target);

Expand All @@ -36,7 +36,7 @@ public function getEventsByTarget($namespace, $target, $action = null)
*
* @return \Happyr\EventTrackerBundle\Entity\Log[]
*/
public function getEventsByUser($user, $namespace = null, $action = null)
public function getEventsByUser($user, $namespace = null, $action = null): array
{
$criteria = array('user' => $user);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,32 @@

namespace Happyr\EventTrackerBundle\Manager;

use Doctrine\ORM\EntityManagerInterface;
use Happyr\EventTrackerBundle\Entity\Log;

/**
* @author Tobias Nyholm
* This manager fetches all the events related to the target and store them im a memory cache.
*
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
class AggressiveManager extends DatabaseManager
final class AggressiveDatabaseManager extends EventTrackerManager
{
/**
* @var array storage A storage with previous data that we fetched
*/
private $storage;

private $em;

public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}

/**
* @param $target
* @param $action
*
* @return Log|void
* {@inheritdoc}
*/
public function getLog($target, $action)
public function getLog($target, string $action): ?Log
{
$class = $this->getNamespace($target);
$key = $this->getKey($target, $class);
Expand All @@ -30,34 +36,25 @@ public function getLog($target, $action)
$this->fetchFromDb($target, $class);
}

if (!isset($this->storage[$key][$action])) {
return;
}

$log = $this->storage[$key][$action];

return $log;
return $this->storage[$key][$action] ?? null;
}

/**
* fetch all actions on this target.
*
* @param $target
* @param $class
*
* @return Log
* @param mixed $target
*/
private function fetchFromDb($target, $class)
private function fetchFromDb($target, string $class)
{
$key = $this->getKey($target, $class);

$logs = $this->em->getRepository('HappyrEventTrackerBundle:Log')
$logs = $this->em->getRepository(Log::class)
->findBy(
array(
[
'namespace' => $class,
'target' => $target->getId(),
),
array('time' => 'DESC')
],
['time' => 'DESC']
);

foreach ($logs as $log) {
Expand All @@ -68,12 +65,9 @@ private function fetchFromDb($target, $class)
}

/**
* @param $target
* @param $class
*
* @return string
*/
private function getKey($target, $class)
private function getKey($target, string $class): string
{
return $class.$target->getId();
}
Expand Down
44 changes: 11 additions & 33 deletions Manager/DatabaseManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,59 +6,37 @@
use Happyr\EventTrackerBundle\Entity\Log;

/**
* @author Tobias Nyholm
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
class DatabaseManager extends EventTrackerManager
final class DatabaseManager extends EventTrackerManager
{
/**
* @var EntityManagerInterface em
*/
protected $em;
private $em;

/**
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}

/**
* @param $target
* @param $action
*
* @return Log|void
* {@inheritdoc}
*/
public function getLog($target, $action)
public function getLog($target, string $action): ?Log
{
$class = $this->getNamespace($target);

if (null === $log = $this->em->getRepository('HappyrEventTrackerBundle:Log')
->findOneBy(
array(
if (null === $log = $this->em->getRepository(Log::class)
->findOneBy(
[
'namespace' => $class,
'target' => $target->getId(),
'action' => $action,
),
array('time' => 'DESC')
],
['time' => 'DESC']
)
) {
return;
return null;
}

return $log;
}

/**
* @param $target
*
* @return string
*/
protected function getNamespace($target)
{
$fqn = get_class($target);
$class = strtolower(substr($fqn, strrpos($fqn, '\\') + 1));

return $class;
}
}
41 changes: 20 additions & 21 deletions Manager/EventTrackerManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,47 @@
use Happyr\EventTrackerBundle\Entity\Log;

/**
* @author Tobias Nyholm
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
abstract class EventTrackerManager
abstract class EventTrackerManager implements EventTrackerManagerInterface
{
/**
* @param $target
*
* @return Log
* @param mixed $target
*/
abstract public function getLog($target, $action);

/**
* @param $target
*
* @return Log
*/
public function getCreatedLog($target)
public function getCreatedLog($target): Log
{
return $this->getLog($target, 'created');
}

/**
* @param $target
*
* @return \Happyr\EventTrackerBundle\Entity\EventUserInterface|void
* @param mixed $target
*/
public function getCreator($target)
public function getCreator($target): ?EventUserInterface
{
if (null === $log = $this->getCreatedLog($target)) {
return;
return null;
}

return $log->getUser();
}

/**
* @param mixed $target
*/
public function getUpdatedLog($target): Log
{
return $this->getLog($target, 'updated');
}

/**
* @param $target
*
* @return Log
* @return string
*/
public function getUpdatedLog($target)
protected function getNamespace($target)
{
return $this->getLog($target, 'updated');
$fqn = \get_class($target);

return \mb_strtolower(\mb_substr($fqn, \mb_strrpos($fqn, '\\') + 1));
}
}
18 changes: 18 additions & 0 deletions Manager/EventTrackerManagerInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace Happyr\EventTrackerBundle\Manager;

use Happyr\EventTrackerBundle\Entity\Log;

/**
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
interface EventTrackerManagerInterface
{
/**
* @param mixed $target
*/
public function getLog($target, string $action): ?Log;
}
28 changes: 14 additions & 14 deletions Resources/config/services.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
parameters:

services:
happyr.event_tracker.event_listener:
class: Happyr\EventTrackerBundle\Service\EventListener
happyr.event_tracker.event_listener: '@Happyr\EventTrackerBundle\Service\EventListener'
Happyr\EventTrackerBundle\Service\EventListener:
arguments:
- "@doctrine.orm.entity_manager"
- "@security.token_storage"
- '@doctrine.orm.entity_manager'
- '@security.token_storage'
- []

happyr.event_tracker.manager.aggressive:
class: Happyr\EventTrackerBundle\Manager\AggressiveManager
happyr.event_tracker.manager.aggressive: '@Happyr\EventTrackerBundle\Manager\AggressiveDatabaseManager'
Happyr\EventTrackerBundle\Manager\AggressiveDatabaseManager:
arguments:
- "@doctrine.orm.entity_manager"
- '@doctrine.orm.entity_manager'

happyr.event_tracker.manager.database:
class: Happyr\EventTrackerBundle\Manager\DatabaseManager
happyr.event_tracker.manager.database: '@Happyr\EventTrackerBundle\Manager\DatabaseManager'
Happyr\EventTrackerBundle\Manager\DatabaseManager:
arguments:
- "@doctrine.orm.entity_manager"
- '@doctrine.orm.entity_manager'

happyr.event_tracker.twig:
class: Happyr\EventTrackerBundle\Twig\EventTrackerExtension
arguments: [ "@happyr.event_tracker.manager" ]
happyr.event_tracker.twig: '@Happyr\EventTrackerBundle\Twig\EventTrackerExtension'
Happyr\EventTrackerBundle\Twig\EventTrackerExtension:
arguments: [ '@Happyr\EventTrackerBundle\Manager\EventTrackerManagerInterface' ]
tags:
- { name: twig.extension }
- { name: twig.extension }
Loading

0 comments on commit 8c8f511

Please sign in to comment.