Esempio n. 1
0
 public function preUpdate(Show $show, PreUpdateEventArgs $event)
 {
     $this->updateFields($show, $event->getObjectManager());
     $em = $event->getObjectManager();
     $uow = $em->getUnitOfWork();
     $meta = $em->getClassMetadata(get_class($show));
     $uow->recomputeSingleEntityChangeSet($meta, $show);
     //ensure all the associated performances are also saved
     $performanceMeta = $em->getClassMetadata('ActsCamdramBundle:Performance');
     foreach ($show->getPerformances() as $performance) {
         $performance->setShow($show);
         $uow->recomputeSingleEntityChangeSet($performanceMeta, $performance);
     }
     $this->sendChangeEmails($show, $event);
 }
Esempio n. 2
0
 /**
  * @ORM\PreUpdate()
  */
 public function preUpdate(PreUpdateEventArgs $event)
 {
     $this->dealWithAtLeastOneTranslation($event->getObjectManager());
 }
 /**
  * Listen a preUpdate lifecycle event. Checking and encrypt entities fields
  * which have @Encrypted annotation. Using changesets to avoid preUpdate event
  * restrictions
  * 
  * @param LifecycleEventArgs $args 
  * 
  * @return void
  * @access public
  * @author etienne de Longeaux <*****@*****.**>
  */
 public function preUpdate(PreUpdateEventArgs $args)
 {
     if ($this->_update_enabled == true) {
         $entity = $args->getEntity();
         $em = $args->getEntityManager();
         $uow = $em->getUnitOfWork();
         $reflectionClass = new ReflectionClass($args->getEntity());
         $properties = $reflectionClass->getProperties();
         $className = get_class($entity);
         foreach ($properties as $refProperty) {
             foreach ($this->options as $key => $encrypter) {
                 if (isset($encrypter['encryptor_annotation_name']) && isset($encrypter['encryptor_class']) && isset($encrypter['encryptor_options'])) {
                     $this->encryptor = $this->getEncryptorService($key);
                     if ($this->annReader->getPropertyAnnotation($refProperty, $encrypter['encryptor_annotation_name'])) {
                         // we have annotation and if it decrypt operation, we must avoid duble decryption
                         $propName = $refProperty->getName();
                         // we encrypt the field
                         if ($refProperty->isPublic()) {
                             $entity->{$propName} = $this->encryptor->encrypt($refProperty->getValue());
                         } else {
                             $methodName = \Sfynx\ToolBundle\Util\PiStringManager::capitalize($propName);
                             if ($reflectionClass->hasMethod($getter = 'get' . $methodName) && $reflectionClass->hasMethod($setter = 'set' . $methodName)) {
                                 // we get the locale value
                                 $locale = false;
                                 $om = $args->getObjectManager();
                                 $object = $args->getObject();
                                 $meta = $om->getClassMetadata(get_class($object));
                                 $config = $this->getConfiguration($om, $meta->name);
                                 if (isset($config['fields'])) {
                                     $locale = $this->getTranslatableLocale($object, $meta);
                                 }
                                 // we set the encrypt value
                                 $currentPropValue = $entity->{$getter}();
                                 if (!empty($currentPropValue)) {
                                     $currentPropValue = $this->encryptor->encrypt($currentPropValue);
                                 }
                                 // we set locale value
                                 if ($locale) {
                                     //                                        if ($locale == $this->locale) {
                                     //                                            $entity->$setter($currentPropValue);
                                     //                                        }
                                     $entity->{$setter}($currentPropValue);
                                     $entity->translate($locale)->{$setter}($currentPropValue);
                                     //$uow->persist($entity);
                                     //$uow->computeChangeSets();
                                 }
                             } else {
                                 throw new \RuntimeException(sprintf("Property %s isn't public and doesn't has getter/setter"));
                             }
                         }
                     }
                 } else {
                     throw new \RuntimeException(sprintf("encrypter is not correctly configured"));
                 }
             }
         }
     }
 }