Exemplo n.º 1
0
 /**
  * @param $text
  * @return string
  */
 public function run($text)
 {
     $args = new ContentEditorArgs();
     $args->setValue($text);
     $this->eventManager->dispatchEvent(ContentEditorEvents::onContentEditorRender, $args);
     return $args->getValue();
 }
Exemplo n.º 2
0
 public function getValue()
 {
     $args = new ContentEditorArgs();
     $args->setValue(parent::getValue());
     $this->eventManager->dispatchEvent(ContentEditorEvents::onContentEditorSave, $args);
     $value = $args->getValue();
     return $value;
 }
 /**
  * @param PostFlushEventArgs $event
  */
 public function postFlush(PostFlushEventArgs $event)
 {
     foreach ($this->entities as $entity) {
         foreach ($entity->popEvents() as $entityEvent) {
             $name = new EventName($entityEvent);
             $this->eventManager->dispatchEvent("on" . (string) $name, $entityEvent);
         }
     }
     $this->entities = [];
 }
 /**
  * Executes the queued restorations.
  */
 private function executeRestores()
 {
     $deletedFieldName = $this->configuration->getDeletedFieldName();
     $persisters = array();
     foreach ($this->restoreBy as $className => $criterias) {
         $persister = $this->getDocumentPersister($className);
         $persisters[$className] = $persister;
         foreach ($criterias as $criteria) {
             $persister->addRestoreBy($criteria);
         }
     }
     $documentRestores = array();
     foreach ($this->documentRestores as $document) {
         $className = get_class($document);
         $documentRestores[$className][] = $document;
         $persister = $this->getDocumentPersister($className);
         $persisters[$className] = $persister;
         $persister->addRestore($document);
     }
     foreach ($persisters as $className => $persister) {
         $persister->executeRestores();
         $class = $this->dm->getClassMetadata($className);
         if (isset($documentRestores[$className])) {
             $documents = $documentRestores[$className];
             foreach ($documents as $document) {
                 $class->setFieldValue($document, $deletedFieldName, null);
                 if ($this->eventManager->hasListeners(Events::postRestore)) {
                     $this->eventManager->dispatchEvent(Events::postRestore, new Event\LifecycleEventArgs($document, $this));
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
 /**
  * Creates a new database.
  *
  * @param string $name The database name
  *
  * @return Database
  *
  * @throws Exception If the database could not be created.
  */
 public function createDatabase($name)
 {
     if (preg_match('@[^a-z0-9\\_\\$\\(\\)+\\-]@', $name)) {
         throw new InvalidDatabasenameException(sprintf('The database name %s is invalid. The database name must match the following pattern (a-z0-9_$()+-)', $name));
     }
     if ($this->eventManager->hasListeners(Events::PRE_CREATE_DATABASE)) {
         // @codeCoverageIgnoreStart
         $this->eventManager->dispatchEvent(Events::PRE_CREATE_DATABASE, new EventArgs($this, $name));
         // @codeCoverageIgnoreEnd
     }
     $response = $this->client->request('PUT', sprintf('/%s', $name));
     if (412 === $response->getStatusCode()) {
         throw new Exception(sprintf('The database "%s" already exist', $name));
     }
     $json = (string) $response->getBody();
     $value = JSONEncoder::decode($json);
     if (isset($value['error'])) {
         throw new Exception(sprintf('[%s] Failed to create database "%s". (%s)', $value['error'], $name, $value['reason']));
     }
     $database = $this->wrapDatabase($name);
     if ($this->eventManager->hasListeners(Events::POST_CREATE_DATABASE)) {
         // @codeCoverageIgnoreStart
         $this->eventManager->dispatchEvent(Events::POST_CREATE_DATABASE, new EventArgs($database));
         // @codeCoverageIgnoreEnd
     }
     return $database;
 }
 /**
  * {@inheritDoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     /* @var $class \Doctrine\OXM\Mapping\ClassMetadata */
     /* @var $parent \Doctrine\OXM\Mapping\ClassMetadata */
     if ($parent) {
         $class->setIdGeneratorType($parent->generatorType);
         $this->addInheritedFields($class, $parent);
         $class->setXmlNamespaces($parent->xmlNamespaces);
         $class->setIdentifier($parent->identifier);
         $class->setLifecycleCallbacks($parent->lifecycleCallbacks);
         $class->setChangeTrackingPolicy($parent->changeTrackingPolicy);
         $class->parent = $parent->getName();
     }
     // Invoke driver
     try {
         $this->driver->loadMetadataForClass($class->getName(), $class);
     } catch (ReflectionException $e) {
         throw MappingException::reflectionFailure($class->getName(), $e);
     }
     $xmlNamespace = empty($class->xmlNamespaces) ? '' : $class->xmlNamespaces[0]['url'];
     foreach ($class->xmlNamespaces as $namespaceData) {
         if (empty($namespaceData['prefix'])) {
             $xmlNamespace = $namespaceData['url'];
         }
     }
     $xmlName = $class->getXmlName();
     // Ignore duplicate binding issues -- at least for now
     /*
     if ( $this->isEntity($class) && array_key_exists($xmlName, $this->xmlToClassMap) && array_key_exists($xmlNamespace, $this->xmlToClassMap[$xmlName])) {
     			if ($this->xmlToClassMap[$xmlName][$xmlNamespace] == $class->getName() || $this->xmlToClassMap[$xmlName][$xmlNamespace] == '\\' . $class->getName()) {
     				// Ignore
     	        } else {
     		throw MappingException::duplicateXmlNameBinding($class->getName(), $class->getXmlName());
     	        }
     }
     */
     // The previous test should be sufficent for us to just assume that the namespace/alternative is fine
     if (!empty($parent)) {
         $this->alternativeClassMap[$parent->getName()][$xmlNamespace] = $class->getName();
     }
     if (!$class->isMappedSuperclass) {
         $this->xmlToClassMap[$xmlName][$xmlNamespace] = $class->getName();
     }
     if ($parent && !$parent->isMappedSuperclass) {
         if ($parent->generatorType) {
             $class->setIdGeneratorType($parent->generatorType);
         }
         if ($parent->idGenerator) {
             $class->setIdGenerator($parent->idGenerator);
         }
     } else {
         $this->completeIdGeneratorMapping($class);
     }
     $class->setParentClasses($nonSuperclassParents);
     // Todo - ensure that root elements have an ID mapped
     if ($this->evm->hasListeners(Events::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this);
         $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs);
     }
 }
Exemplo n.º 7
0
 /**
  * Construct an entity object
  *
  * @param ClassMetadata $class
  * @param object $document
  */
 public function hydrateEntity(ClassMetadata $class, $document)
 {
     // TODO: add support for different result set types from different clients
     // perhaps by wrapping documents in a layer of abstraction
     $data = $document->getData();
     $fields = array_merge($document->hasFields() ? $document->getFields() : array(), array('_version' => $document->getVersion()));
     foreach ($fields as $name => $value) {
         if (isset($class->parameters[$name])) {
             $data[$name] = $value;
         } else {
             foreach ($class->parameters as $param => $mapping) {
                 if ($mapping->name == $name) {
                     $data[$param] = $value;
                     break;
                 }
             }
         }
     }
     $data[$class->getIdentifier()] = $document->getId();
     if (method_exists($document, 'getScore')) {
         $data['score'] = $document->getScore();
     }
     $entity = $this->sm->getSerializer()->deserialize($class->className, json_encode($data));
     if ($this->evm->hasListeners(Events::postLoad)) {
         $this->evm->dispatchEvent(Events::postLoad, new Event\LifecycleEventArgs($entity, $this->sm));
     }
     return $entity;
 }
Exemplo n.º 8
0
 /**
  * Hydrate array of MongoDB document data into the given document object.
  *
  * @param object $document  The document object to hydrate the data into.
  * @param array $data The array of document data.
  * @return array $values The array of hydrated values.
  */
 public function hydrate($document, $data)
 {
     $metadata = $this->dm->getClassMetadata(get_class($document));
     // Invoke preLoad lifecycle events and listeners
     if (isset($metadata->lifecycleCallbacks[Events::preLoad])) {
         $args = array(&$data);
         $metadata->invokeLifecycleCallbacks(Events::preLoad, $document, $args);
     }
     if ($this->evm->hasListeners(Events::preLoad)) {
         $this->evm->dispatchEvent(Events::preLoad, new PreLoadEventArgs($document, $this->dm, $data));
     }
     // Use the alsoLoadMethods on the document object to transform the data before hydration
     if (isset($metadata->alsoLoadMethods)) {
         foreach ($metadata->alsoLoadMethods as $fieldName => $method) {
             if (isset($data[$fieldName])) {
                 $document->{$method}($data[$fieldName]);
             }
         }
     }
     if ($this->hydratorFactory !== null) {
         $data = $this->hydratorFactory->getHydratorFor($metadata->name)->hydrate($document, $data);
     } else {
         $data = $this->doGenericHydration($metadata, $document, $data);
     }
     // Invoke the postLoad lifecycle callbacks and listeners
     if (isset($metadata->lifecycleCallbacks[Events::postLoad])) {
         $metadata->invokeLifecycleCallbacks(Events::postLoad, $document);
     }
     if ($this->evm->hasListeners(Events::postLoad)) {
         $this->evm->dispatchEvent(Events::postLoad, new LifecycleEventArgs($document, $this->dm));
     }
     return $data;
 }
 /**
  * Dispatches all enqueued postHydrate events
  */
 public function dispatchEnqueuedPostHydrateEvents()
 {
     foreach ($this->entities as $entities) {
         foreach ($entities as $entity) {
             $this->eventManager->dispatchEvent(Events::postHydrate, new LifecycleEventArgs($entity, $this->entityManager));
         }
     }
 }
Exemplo n.º 10
0
 /**
  * Actually load the metadata from the underlying metadata
  *
  * @param ClassMetadataInterface|ClassMetadata $class
  * @param ClassMetadataInterface|ClassMetadata $parent
  * @param bool $rootEntityFound
  * @param array $nonSuperclassParents
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     //Manipulates $classMetadata;
     $this->driver->loadMetadataForClass($class->getName(), $class);
     if ($this->evm->hasListeners(Events::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this->sm);
         $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs);
     }
 }
Exemplo n.º 11
0
 public function save(array &$a, array $options = array())
 {
     if ($this->eventManager->hasListeners(Events::preSave)) {
         $this->eventManager->dispatchEvent(Events::preSave, new EventArgs($this, $a));
     }
     $result = $this->doSave($a, $options);
     if ($this->eventManager->hasListeners(Events::postSave)) {
         $this->eventManager->dispatchEvent(Events::postSave, new EventArgs($this, $result));
     }
     return $result;
 }
 /**
  * {@inheritdoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     if ($this->getDriver()) {
         $this->getDriver()->loadMetadataForClass($class->getName(), $class);
     }
     if ($this->evm->hasListeners(Event::loadClassMetadata)) {
         $eventArgs = new Event\LoadClassMetadataEventArgs($class, $this->objectAdapterManager);
         $this->evm->dispatchEvent(Event::loadClassMetadata, $eventArgs);
     }
     $this->validateRuntimeMetadata($class, $parent);
 }
Exemplo n.º 13
0
 /** @proxy */
 public function selectCollection($name)
 {
     if ($this->eventManager->hasListeners(Events::preSelectCollection)) {
         $this->eventManager->dispatchEvent(Events::preSelectCollection, new EventArgs($this, $name));
     }
     $collection = $this->doSelectCollection($name);
     if ($this->eventManager->hasListeners(Events::postSelectCollection)) {
         $this->eventManager->dispatchEvent(Events::postSelectCollection, new EventArgs($this, $collection));
     }
     return $collection;
 }
Exemplo n.º 14
0
 /**
  * @param ObjectManager $om
  *
  * @return MetadataFactory
  */
 protected function getMetadataFactory(ObjectManager $om, EventManager $evm)
 {
     if ($this->metadataFactory === null) {
         $driverFactory = DriverFactory::instance();
         if ($evm->hasListeners(Events::REGISTER_DRIVER_METADATA)) {
             $eventArgs = new RegisterDriverMetadataEventArgs($driverFactory, $om);
             $evm->dispatchEvent(Events::REGISTER_DRIVER_METADATA, $eventArgs);
         }
         $this->metadataFactory = new MetadataFactory($driverFactory->driversFromManager($om));
     }
     return $this->metadataFactory;
 }
Exemplo n.º 15
0
 /** @proxy */
 public function selectDatabase($name)
 {
     if ($this->eventManager->hasListeners(Events::preSelectDatabase)) {
         $this->eventManager->dispatchEvent(Events::preSelectDatabase, new EventArgs($this, $name));
     }
     $this->initialize();
     $database = $this->wrapDatabase($name);
     if ($this->eventManager->hasListeners(Events::postSelectDatabase)) {
         $this->eventManager->dispatchEvent(Events::postSelectDatabase, new EventArgs($this, $database));
     }
     return $database;
 }
Exemplo n.º 16
0
 /**
  * @dataProvider dataForPrefix
  */
 public function testSubscribedEvents($prefix, $entityName, $tableName, $tableNameExpected, $finalTableName, $finalTableNameQuoted, $platform)
 {
     $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $metaClass = new ClassMetadata($entityName);
     $metaClass->setPrimaryTable(['name' => $tableName]);
     $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em);
     $subscriber = new TablePrefixSubscriber($prefix);
     $evm = new EventManager();
     $evm->addEventSubscriber($subscriber);
     $evm->dispatchEvent('loadClassMetadata', $metaDataEvent);
     $this->assertEquals($finalTableName, $metaDataEvent->getClassMetadata()->getTableName());
     $this->assertEquals($finalTableNameQuoted, $metaDataEvent->getClassMetadata()->getQuotedTableName($platform));
 }
Exemplo n.º 17
0
 /**
  * @param TableDiff $diff
  * @param array $columnSql
  */
 protected function onSchemaAlterTable(TableDiff $diff, &$sql)
 {
     if (null === $this->_eventManager) {
         return false;
     }
     if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTable)) {
         return false;
     }
     $eventArgs = new SchemaAlterTableEventArgs($diff, $this);
     $this->_eventManager->dispatchEvent(Events::onSchemaAlterTable, $eventArgs);
     $sql = array_merge($sql, $eventArgs->getSql());
     return $eventArgs->isDefaultPrevented();
 }
Exemplo n.º 18
0
 /**
  * Wrapper method for RiakCollection::update().
  *
  * This method will dispatch preUpdate and postUpdate events.
  *
  * @see http://php.net/manual/en/mongocollection.update.php
  * @param array $query
  * @param array $newObj
  * @param array $options
  * @return array|boolean
  */
 public function update($query, array $newObj, array $options = array())
 {
     if (is_scalar($query)) {
         trigger_error('Scalar $query argument for update() is deprecated', E_USER_DEPRECATED);
         $query = array('_id' => $query);
     }
     if ($this->eventManager->hasListeners(Events::preUpdate)) {
         $this->eventManager->dispatchEvent(Events::preUpdate, new UpdateEventArgs($this, $query, $newObj, $options));
     }
     $result = $this->doUpdate($query, $newObj, $options);
     if ($this->eventManager->hasListeners(Events::postUpdate)) {
         $this->eventManager->dispatchEvent(Events::postUpdate, new EventArgs($this, $result));
     }
     return $result;
 }
Exemplo n.º 19
0
 /**
  * {@inheritdoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     if ($parent) {
         $this->addInheritedDocumentOptions($class, $parent);
         $this->addInheritedFields($class, $parent);
     }
     if ($this->getDriver()) {
         $this->getDriver()->loadMetadataForClass($class->getName(), $class);
     }
     if ($this->evm->hasListeners(Event::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this->dm);
         $this->evm->dispatchEvent(Event::loadClassMetadata, $eventArgs);
     }
     $this->validateRuntimeMetadata($class, $parent);
     $class->setParentClasses($this->getParentClasses($class->name));
 }
Exemplo n.º 20
0
 /**
  * Establishes the connection with the database.
  *
  * @return boolean TRUE if the connection was successfully established, FALSE if
  *                 the connection is already open.
  */
 public function connect()
 {
     if ($this->_isConnected) {
         return false;
     }
     $driverOptions = isset($this->_params['driverOptions']) ? $this->_params['driverOptions'] : array();
     $user = isset($this->_params['user']) ? $this->_params['user'] : null;
     $password = isset($this->_params['password']) ? $this->_params['password'] : null;
     $this->_conn = $this->_driver->connect($this->_params, $user, $password, $driverOptions);
     $this->_isConnected = true;
     if ($this->_eventManager->hasListeners(Events::postConnect)) {
         $eventArgs = new Event\ConnectionEventArgs($this);
         $this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs);
     }
     return true;
 }
Exemplo n.º 21
0
 /**
  * Hydrate array of MongoDB document data into the given document object.
  *
  * @param object $document  The document object to hydrate the data into.
  * @param array $data The array of document data.
  * @param array $hints Any hints to account for during reconstitution/lookup of the document.
  * @return array $values The array of hydrated values.
  */
 public function hydrate($document, $data, array $hints = array())
 {
     $metadata = $this->dm->getClassMetadata(get_class($document));
     // Invoke preLoad lifecycle events and listeners
     if (!empty($metadata->lifecycleCallbacks[Events::preLoad])) {
         $args = array(&$data);
         $metadata->invokeLifecycleCallbacks(Events::preLoad, $document, $args);
     }
     if ($this->evm->hasListeners(Events::preLoad)) {
         $this->evm->dispatchEvent(Events::preLoad, new PreLoadEventArgs($document, $this->dm, $data));
     }
     // alsoLoadMethods may transform the document before hydration
     if (!empty($metadata->alsoLoadMethods)) {
         foreach ($metadata->alsoLoadMethods as $method => $fieldNames) {
             foreach ($fieldNames as $fieldName) {
                 // Invoke the method only once for the first field we find
                 if (array_key_exists($fieldName, $data)) {
                     $document->{$method}($data[$fieldName]);
                     continue 2;
                 }
             }
         }
     }
     $data = $this->getHydratorFor($metadata->name)->hydrate($document, $data, $hints);
     if ($document instanceof Proxy) {
         $document->__isInitialized__ = true;
         $document->__setInitializer(null);
         $document->__setCloner(null);
         // lazy properties may be left uninitialized
         $properties = $document->__getLazyProperties();
         foreach ($properties as $propertyName => $property) {
             if (!isset($document->{$propertyName})) {
                 $document->{$propertyName} = $properties[$propertyName];
             }
         }
     }
     // Invoke the postLoad lifecycle callbacks and listeners
     if (!empty($metadata->lifecycleCallbacks[Events::postLoad])) {
         $metadata->invokeLifecycleCallbacks(Events::postLoad, $document);
     }
     if ($this->evm->hasListeners(Events::postLoad)) {
         $this->evm->dispatchEvent(Events::postLoad, new LifecycleEventArgs($document, $this->dm));
     }
     return $data;
 }
Exemplo n.º 22
0
 /**
  * Clears the UnitOfWork.
  *
  * @param string|null $class if given, only documents of this type will be detached.
  *
  * @throws \Exception if $class is not null (not implemented)
  */
 public function clear($class = null)
 {
     if ($class === null) {
         $this->identityMap = $this->documentIdentifiers = $this->originalDocumentData = $this->documentChangeSets = $this->documentStates = $this->scheduledForDirtyCheck = $this->documentInsertions = $this->documentUpdates = $this->documentDeletions = $this->collectionUpdates = $this->collectionDeletions = $this->orphanRemovals = [];
     } else {
         $visited = [];
         foreach ($this->identityMap as $className => $documents) {
             if ($className === $class) {
                 foreach ($documents as $document) {
                     $this->doDetach($document, $visited);
                 }
             }
         }
     }
     if ($this->evm->hasListeners(Events::onClear)) {
         $this->evm->dispatchEvent(Events::onClear, new Event\OnClearEventArgs($this->dm, $class));
     }
 }
Exemplo n.º 23
0
 /**
  * Will remove all scheduled stuff. This method can only be calles once.
  */
 public function clear()
 {
     if ($this->hasCleared()) {
         return;
     }
     $this->hasCleared = true;
     // trigger clear on all managers of the referenced objects
     $managedObjects = $this->getScheduledReferencesByManager();
     foreach ($managedObjects as $value) {
         $value['manager']->clear();
     }
     // clear all object stores
     $this->objects = $this->objectState = $this->referencedObjects = $this->referencedObjectState = $this->removeReferences = $this->insertReferences = $this->updateReferences = array();
     $this->hasCleared = false;
     $this->hasFlushed = false;
     if ($this->eventManager->hasListeners(Event::onClear)) {
         $this->eventManager->dispatchEvent(Event::onClear, new ManagerEventArgs($this->objectAdapterManager));
     }
 }
Exemplo n.º 24
0
 /**
  * Dispatches the lifecycle event of the given entity.
  *
  * @param \Doctrine\ORM\Mapping\ClassMetadata $metadata The entity metadata.
  * @param string $eventName                             The entity lifecycle event.
  * @param object $entity                                The Entity on which the event occurred.
  * @param \Doctrine\Common\EventArgs $event             The Event args.
  * @param integer $invoke                               Bitmask to invoke listeners.
  */
 public function invoke(ClassMetadata $metadata, $eventName, $entity, EventArgs $event, $invoke)
 {
     if ($invoke & self::INVOKE_CALLBACKS) {
         foreach ($metadata->lifecycleCallbacks[$eventName] as $callback) {
             $entity->{$callback}($event);
         }
     }
     if ($invoke & self::INVOKE_LISTENERS) {
         foreach ($metadata->entityListeners[$eventName] as $listener) {
             $class = $listener['class'];
             $method = $listener['method'];
             $instance = $this->resolver->resolve($class);
             $instance->{$method}($entity, $event);
         }
     }
     if ($invoke & self::INVOKE_MANAGER) {
         $this->eventManager->dispatchEvent($eventName, $event);
     }
 }
Exemplo n.º 25
0
 /**
  * Actually loads PHPCR-ODM metadata from the underlying metadata.
  *
  * @param ClassMetadata      $class
  * @param ClassMetadata|null $parent
  * @param bool               $rootEntityFound
  * @param array              $nonSuperclassParents All parent class names
  *                                                 that are not marked as mapped superclasses.
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     if ($parent) {
         $this->addInheritedDocumentOptions($class, $parent);
         $this->addInheritedFields($class, $parent);
     }
     if ($this->getDriver()) {
         $this->getDriver()->loadMetadataForClass($class->getName(), $class);
     }
     // once we loaded the metadata of this class, we might have to merge in the mixins of the parent.
     if ($parent && $class->getInheritMixins()) {
         $class->setMixins(array_merge($parent->getMixins(), $class->getMixins()));
     }
     if ($this->evm->hasListeners(Event::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this->dm);
         $this->evm->dispatchEvent(Event::loadClassMetadata, $eventArgs);
     }
     $this->validateRuntimeMetadata($class, $parent);
     $class->setParentClasses($this->getParentClasses($class->name));
 }
Exemplo n.º 26
0
 /**
  * Cascades the postUpdate and postPersist events to embedded documents.
  *
  * @param ClassMetadata $class
  * @param object $document
  */
 private function cascadePostUpdate(ClassMetadata $class, $document)
 {
     foreach ($class->getEmbeddedFieldsMappings() as $mapping) {
         $value = $class->reflFields[$mapping['fieldName']]->getValue($document);
         if ($value === null) {
             continue;
         }
         $values = $mapping['type'] === ClassMetadata::ONE ? array($value) : $value;
         foreach ($values as $entry) {
             if (empty($this->uow->getDocumentChangeSet($entry)) && !$this->uow->hasScheduledCollections($entry)) {
                 continue;
             }
             $entryClass = $this->dm->getClassMetadata(get_class($entry));
             $event = $this->uow->isScheduledForInsert($entry) ? Events::postPersist : Events::postUpdate;
             $entryClass->invokeLifecycleCallbacks($event, $entry, array(new LifecycleEventArgs($entry, $this->dm)));
             $this->evm->dispatchEvent($event, new LifecycleEventArgs($entry, $this->dm));
             $this->cascadePostUpdate($entryClass, $entry);
         }
     }
 }
Exemplo n.º 27
0
 /**
  * Wrapper method for MongoCollection::update().
  *
  * This method will dispatch preUpdate and postUpdate events.
  *
  * @see http://php.net/manual/en/mongocollection.update.php
  * @param array $query
  * @param array $newObj
  * @param array $options
  * @return array|boolean
  */
 public function update($query, array $newObj, array $options = [])
 {
     if (is_scalar($query)) {
         trigger_error('Scalar $query argument for update() is deprecated', E_USER_DEPRECATED);
         $query = ['_id' => $query];
     }
     if ($this->eventManager->hasListeners(Events::preUpdate)) {
         $updateEventArgs = new UpdateEventArgs($this, $query, $newObj, $options);
         $this->eventManager->dispatchEvent(Events::preUpdate, $updateEventArgs);
         $query = $updateEventArgs->getQuery();
         $newObj = $updateEventArgs->getNewObj();
         $options = $updateEventArgs->getOptions();
     }
     $result = $this->doUpdate($query, $newObj, $options);
     if ($this->eventManager->hasListeners(Events::postUpdate)) {
         $eventArgs = new MutableEventArgs($this, $result);
         $this->eventManager->dispatchEvent(Events::postUpdate, $eventArgs);
         $result = $eventArgs->getData();
     }
     return $result;
 }
Exemplo n.º 28
0
 /**
  * Dispatches the lifecycle event of the given entity.
  *
  * @param ClassMetadata $metadata The entity metadata.
  * @param string $eventName The entity lifecycle event.
  * @param object $document The Entity on which the event occurred.
  * @param EventArgs $event The Event args.
  * @param $invoke
  */
 public function invoke(ClassMetadata $metadata, $eventName, $document, EventArgs $event, $invoke)
 {
     if ($invoke & self::INVOKE_CALLBACKS) {
         foreach ($metadata->lifecycleCallbacks[$eventName] as $callback) {
             $document->{$callback}($event);
         }
     }
     /*
      * Not implemented for phpcr-odm at the moment.
      *
     if ($invoke & self::INVOKE_LISTENERS) {
         foreach ($metadata->documentListeners[$eventName] as $listener) {
             $class      = $listener['class'];
             $method     = $listener['method'];
             $instance   = $this->resolver->resolve($class);
     
             $instance->$method($document, $event);
         }
     }
     */
     if ($invoke & self::INVOKE_MANAGER) {
         $this->eventManager->dispatchEvent($eventName, $event);
     }
 }
Exemplo n.º 29
0
 private function dispatchPostFlushEvent()
 {
     if ($this->evm->hasListeners(Events::postFlush)) {
         $this->evm->dispatchEvent(Events::postFlush, new PostFlushEventArgs($this->em));
     }
 }
 /**
  * {@inheritDoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     /* @var $class ClassMetadata */
     /* @var $parent ClassMetadata */
     if ($parent) {
         $class->setInheritanceType($parent->inheritanceType);
         $class->setDiscriminatorColumn($parent->discriminatorColumn);
         $class->setIdGeneratorType($parent->generatorType);
         $this->addInheritedFields($class, $parent);
         $this->addInheritedRelations($class, $parent);
         $this->addInheritedEmbeddedClasses($class, $parent);
         $class->setIdentifier($parent->identifier);
         $class->setVersioned($parent->isVersioned);
         $class->setVersionField($parent->versionField);
         $class->setDiscriminatorMap($parent->discriminatorMap);
         $class->setLifecycleCallbacks($parent->lifecycleCallbacks);
         $class->setChangeTrackingPolicy($parent->changeTrackingPolicy);
         if (!empty($parent->customGeneratorDefinition)) {
             $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition);
         }
         if ($parent->isMappedSuperclass) {
             $class->setCustomRepositoryClass($parent->customRepositoryClassName);
         }
     }
     // Invoke driver
     try {
         $this->driver->loadMetadataForClass($class->getName(), $class);
     } catch (ReflectionException $e) {
         throw MappingException::reflectionFailure($class->getName(), $e);
     }
     // If this class has a parent the id generator strategy is inherited.
     // However this is only true if the hierarchy of parents contains the root entity,
     // if it consists of mapped superclasses these don't necessarily include the id field.
     if ($parent && $rootEntityFound) {
         if ($parent->isIdGeneratorSequence()) {
             $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition);
         } else {
             if ($parent->isIdGeneratorTable()) {
                 $class->tableGeneratorDefinition = $parent->tableGeneratorDefinition;
             }
         }
         if ($parent->generatorType) {
             $class->setIdGeneratorType($parent->generatorType);
         }
         if ($parent->idGenerator) {
             $class->setIdGenerator($parent->idGenerator);
         }
     } else {
         $this->completeIdGeneratorMapping($class);
     }
     if (!$class->isMappedSuperclass) {
         foreach ($class->embeddedClasses as $property => $embeddableClass) {
             if (isset($embeddableClass['inherited'])) {
                 continue;
             }
             if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) {
                 throw MappingException::infiniteEmbeddableNesting($class->name, $property);
             }
             $this->embeddablesActiveNesting[$class->name] = true;
             $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']);
             if ($embeddableMetadata->isEmbeddedClass) {
                 $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property);
             }
             $class->inlineEmbeddable($property, $embeddableMetadata);
             unset($this->embeddablesActiveNesting[$class->name]);
         }
     }
     if ($parent && $parent->isInheritanceTypeSingleTable()) {
         $class->setPrimaryTable($parent->table);
     }
     if ($parent && $parent->cache) {
         $class->cache = $parent->cache;
     }
     if ($parent && $parent->containsForeignIdentifier) {
         $class->containsForeignIdentifier = true;
     }
     if ($parent && !empty($parent->namedQueries)) {
         $this->addInheritedNamedQueries($class, $parent);
     }
     if ($parent && !empty($parent->namedNativeQueries)) {
         $this->addInheritedNamedNativeQueries($class, $parent);
     }
     if ($parent && !empty($parent->sqlResultSetMappings)) {
         $this->addInheritedSqlResultSetMappings($class, $parent);
     }
     if ($parent && !empty($parent->entityListeners) && empty($class->entityListeners)) {
         $class->entityListeners = $parent->entityListeners;
     }
     $class->setParentClasses($nonSuperclassParents);
     if ($class->isRootEntity() && !$class->isInheritanceTypeNone() && !$class->discriminatorMap) {
         $this->addDefaultDiscriminatorMap($class);
     }
     if ($this->evm->hasListeners(Events::loadClassMetadata)) {
         $eventArgs = new LoadClassMetadataEventArgs($class, $this->em);
         $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs);
     }
     $this->validateRuntimeMetadata($class, $parent);
 }