PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/gedmo/doctrine-extensions/tests/Gedmo/Mapping/Mock/Extension/Encoder/EncoderListener.php

https://bitbucket.org/iiic/iszp
PHP | 75 lines | 58 code | 9 blank | 8 comment | 2 complexity | 45b6db42282bd2532bfc1842cf5a7a91 MD5 | raw file
  1. <?php
  2. // file: vendor/Extension/Encoder/EncoderListener.php
  3. namespace Gedmo\Mapping\Mock\Extension\Encoder;
  4. use Doctrine\Common\EventArgs;
  5. use Gedmo\Mapping\MappedEventSubscriber;
  6. use Gedmo\Mapping\Event\AdapterInterface as EventAdapterInterface;
  7. class EncoderListener extends MappedEventSubscriber
  8. {
  9. public function getSubscribedEvents()
  10. {
  11. return array(
  12. 'onFlush',
  13. 'loadClassMetadata'
  14. );
  15. }
  16. public function loadClassMetadata(EventArgs $args)
  17. {
  18. $ea = $this->getEventAdapter($args);
  19. // this will check for our metadata
  20. $this->loadMetadataForObjectClass(
  21. $ea->getObjectManager(),
  22. $args->getClassMetadata()
  23. );
  24. }
  25. public function onFlush(EventArgs $args)
  26. {
  27. $ea = $this->getEventAdapter($args);
  28. $om = $ea->getObjectManager();
  29. $uow = $om->getUnitOfWork();
  30. // check all pending updates
  31. foreach ($ea->getScheduledObjectUpdates($uow) as $object) {
  32. $meta = $om->getClassMetadata(get_class($object));
  33. // if it has our metadata lets encode the properties
  34. if ($config = $this->getConfiguration($om, $meta->name)) {
  35. $this->encode($ea, $object, $config);
  36. }
  37. }
  38. // check all pending insertions
  39. foreach ($ea->getScheduledObjectInsertions($uow) as $object) {
  40. $meta = $om->getClassMetadata(get_class($object));
  41. // if it has our metadata lets encode the properties
  42. if ($config = $this->getConfiguration($om, $meta->name)) {
  43. $this->encode($ea, $object, $config);
  44. }
  45. }
  46. }
  47. protected function getNamespace()
  48. {
  49. // mapper must know the namespace of extension
  50. return __NAMESPACE__;
  51. }
  52. private function encode(EventAdapterInterface $ea, $object, $config)
  53. {
  54. $om = $ea->getObjectManager();
  55. $meta = $om->getClassMetadata(get_class($object));
  56. $uow = $om->getUnitOfWork();
  57. foreach ($config['encode'] as $field => $options) {
  58. $value = $meta->getReflectionProperty($field)->getValue($object);
  59. $method = $options['type'];
  60. $encoded = $method($options['secret'].$value);
  61. $meta->getReflectionProperty($field)->setValue($object, $encoded);
  62. }
  63. // recalculate changeset
  64. $ea->recomputeSingleObjectChangeSet($uow, $meta, $object);
  65. }
  66. }