AddAuditEntityCompilerPass.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /*
  3. * This file is part of the Sonata project.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\DoctrineORMAdminBundle\DependencyInjection\Compiler;
  11. use Symfony\Component\DependencyInjection\Definition;
  12. use Symfony\Component\DependencyInjection\ContainerBuilder;
  13. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  14. use Symfony\Component\DependencyInjection\Reference;
  15. use Symfony\Component\DependencyInjection\ContainerInterface;
  16. /*
  17. *
  18. * @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
  19. */
  20. class AddAuditEntityCompilerPass implements CompilerPassInterface
  21. {
  22. /**
  23. * {@inheritDoc}
  24. */
  25. public function process(ContainerBuilder $container)
  26. {
  27. if (!$container->getParameter('sonata.admin_doctrine_orm.versioning') ||
  28. !$container->hasDefinition('simplethings_entityaudit.config')) {
  29. return;
  30. }
  31. $auditedEntities = $container->getParameter('simplethings.entityaudit.audited_entities');
  32. foreach ($container->findTaggedServiceIds('sonata.admin') as $id => $attributes) {
  33. if ($attributes[0]['manager_type'] != 'orm') {
  34. continue;
  35. }
  36. if (isset($attributes[0]['audit']) && $attributes[0]['audit'] == false) {
  37. continue;
  38. }
  39. $definition = $container->getDefinition($id);
  40. $auditedEntities[] = $this->getModelName($container, $definition->getArgument(1));
  41. }
  42. $auditedEntities = array_unique($auditedEntities);
  43. $container->setParameter('simplethings.entityaudit.audited_entities', $auditedEntities);
  44. $container->getDefinition('sonata.admin.audit.manager')->addMethodCall('setReader', array('sonata.admin.audit.orm.reader', $auditedEntities));
  45. }
  46. /**
  47. * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
  48. * @param string $name
  49. *
  50. * @return string
  51. */
  52. private function getModelName(ContainerBuilder $container, $name)
  53. {
  54. if ($name[0] == '%') {
  55. return $container->getParameter(substr($name, 1, -1));
  56. }
  57. return $name;
  58. }
  59. }