ORM.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace Gedmo\Loggable\Mapping\Event\Adapter;
  3. use Gedmo\Mapping\Event\Adapter\ORM as BaseAdapterORM;
  4. use Doctrine\ORM\EntityManager;
  5. use Doctrine\ORM\Mapping\ClassMetadataInfo;
  6. /**
  7. * Doctrine event adapter for ORM adapted
  8. * for Loggable behavior
  9. *
  10. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  11. * @package Gedmo\Loggable\Mapping\Event\Adapter
  12. * @subpackage ORM
  13. * @link http://www.gediminasm.org
  14. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  15. */
  16. final class ORM extends BaseAdapterORM
  17. {
  18. /**
  19. * Get default LogEntry class used to store the logs
  20. *
  21. * @return string
  22. */
  23. public function getDefaultLogEntryClass()
  24. {
  25. return 'Gedmo\\Loggable\\Entity\\LogEntry';
  26. }
  27. /**
  28. * Get new version number
  29. *
  30. * @param ClassMetadataInfo $meta
  31. * @param EntityManager $em
  32. * @param object $object
  33. * @return integer
  34. */
  35. public function getNewVersion(ClassMetadataInfo $meta, EntityManager $em, $object)
  36. {
  37. $objectMeta = $em->getClassMetadata(get_class($object));
  38. $identifierField = $this->getSingleIdentifierFieldName($objectMeta);
  39. $objectId = $objectMeta->getReflectionProperty($identifierField)->getValue($object);
  40. $dql = "SELECT MAX(log.version) FROM {$meta->name} log";
  41. $dql .= " WHERE log.objectId = :objectId";
  42. $dql .= " AND log.objectClass = :objectClass";
  43. $q = $em->createQuery($dql);
  44. $q->setParameters(array(
  45. 'objectId' => $objectId,
  46. 'objectClass' => $objectMeta->name
  47. ));
  48. return $q->getSingleScalarResult() + 1;
  49. }
  50. }