Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 29th, 2012  |  syntax: None  |  size: 2.99 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2.  
  3. /*
  4.  * based on FOS\UserBundle\Entity
  5.  */
  6.  
  7. namespace HBK\ScavengerHuntBundle\Entity;
  8.  
  9. use Doctrine\Common\EventSubscriber;
  10. use Doctrine\ORM\Events;
  11. use Doctrine\ORM\Event\LifecycleEventArgs;
  12. use Doctrine\ORM\Event\PreUpdateEventArgs;
  13. use Doctrine\ORM\Event\OnFlushEventArgs;
  14. use Doctrine\ORM\PersistentCollection;
  15. // use FOS\UserBundle\Model\UserInterface;
  16. use Symfony\Component\DependencyInjection\ContainerInterface;
  17. use HBK\ScavengerHuntBundle\Entity\User;
  18. use HBK\ScavengerHuntBundle\Entity\Badge;
  19.  
  20.  
  21. /**
  22.  * Doctrine ORM listener
  23.  * - awards 1-up badge on User create
  24.  */
  25. class UserListener implements EventSubscriber
  26. {
  27.     /**
  28.      * @var ContainerInterface
  29.      */
  30.     private $container;
  31.  
  32.     /**
  33.      * Constructor
  34.      *
  35.      * @param ContainerInterface $container
  36.      */
  37.     public function __construct(ContainerInterface $container)
  38.     {
  39.         $this->container = $container;
  40.     }
  41.  
  42.     public function getSubscribedEvents()
  43.     {
  44.         return array(
  45.             Events::prePersist,
  46.             Events::preUpdate,
  47.             Events::onFlush
  48.         );
  49.     }
  50.  
  51.     public function prePersist(LifecycleEventArgs $args)
  52.     {
  53.         error_log( 'PRE PERSIST');
  54.         $this->award1Up($args);
  55.     }
  56.  
  57.     public function preUpdate(PreUpdateEventArgs $args)
  58.     {
  59.         error_log( 'PRE UPDATE');
  60.        
  61.         $entity = $args->getEntity();
  62.         $em = $args->getEntityManager();
  63.     }
  64.    
  65.     public function onFlush(OnFlushEventArgs $args)
  66.     {
  67.         error_log( 'ON FLUSH');
  68.         $entities = array();
  69.         $em = $args->getEntityManager();
  70.         $uow = $em->getUnitOfWork();
  71.         foreach ($uow->getScheduledEntityInsertions() AS $entity) {
  72.             $entities[] = $entity;
  73.         }
  74.         foreach ($uow->getScheduledEntityUpdates() AS $entity) {
  75.             $entities[] = $entity;
  76.         }
  77.         foreach ($uow->getScheduledCollectionUpdates() AS $entity) {
  78.             $entities[] = $entity;
  79.         }
  80.         foreach ($uow->getScheduledCollectionDeletions() AS $entity) {
  81.             $entities[] = $entity;
  82.         }
  83.         foreach ($entities as $entity) {
  84.             error_log(get_class($entity));
  85.             error_log(get_parent_class($entity));
  86.             if ($entity instanceof PersistentCollection){
  87.                 foreach($entity as $element) {
  88.                     // if( $element instanceof Badge)
  89.                     error_log("BADGE: " . $element->getName() );
  90.                 }
  91.             }
  92.             if ($entity instanceof User) {
  93.                 error_log("USER: " . $entity->getUsername() . " badges count: " . $entity->getBadges()->count());
  94.             }
  95.         }
  96.         // $this->award1Up($args);
  97.     }
  98.    
  99.     private function award1Up(LifecycleEventArgs $args)
  100.     {
  101.         $entity = $args->getEntity();
  102.         $em = $args->getEntityManager();
  103.        
  104.         if ($entity instanceof User) {
  105.             $badge1Up = $em->getRepository('HBKScavengerHuntBundle:Badge')
  106.                 ->findOneBySlug('1-up-power-up');
  107.             $entity->addBadges($badge1Up);
  108.         }
  109.     }
  110. }