/**
  * {@inheritDoc}
  */
 public function isTransient($className)
 {
     if (strpos($className, self::NAME_SPACE) === 0) {
         return $this->builtinDriver->isTransient($className);
     }
     return $this->wrappedDriver->isTransient($className);
 }
 /**
  * Create a driver from a Doctrine metadata driver
  *
  * @param MappingDriver $omDriver
  * @return DriverInterface
  */
 public static function fromMetadataDriver(MappingDriver $omDriver)
 {
     if ($omDriver instanceof MappingDriverChain) {
         $drivers = array();
         foreach ($omDriver->getDrivers() as $nestedOmDriver) {
             $drivers[] = self::fromMetadataDriver($nestedOmDriver);
         }
         return new DriverChain($drivers);
     }
     if ($omDriver instanceof DoctrineAnnotationDriver) {
         return new AnnotationDriver($omDriver->getReader());
     }
     if ($omDriver instanceof DoctrineFileDriver) {
         $reflClass = new \ReflectionClass($omDriver);
         $driverName = $reflClass->getShortName();
         if ($omDriver instanceof SimplifiedYamlDriver || $omDriver instanceof SimplifiedXmlDriver) {
             $driverName = str_replace('Simplified', '', $driverName);
         }
         $class = 'Prezent\\Doctrine\\Translatable\\Mapping\\Driver\\' . $driverName;
         if (class_exists($class)) {
             return new $class($omDriver->getLocator());
         }
     }
     throw new \InvalidArgumentException('Cannot adapt Doctrine driver of class ' . get_class($omDriver));
 }
 /**
  * {@inheritDoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound)
 {
     try {
         $this->driver->loadMetadataForClass($class->getName(), $class);
     } catch (Exception $e) {
         throw $e;
     }
 }
 protected function getChildClasses(MappingDriver $driver, $currentClass)
 {
     $classes = array();
     foreach ($driver->getAllClassNames() as $className) {
         if (!is_subclass_of($className, $currentClass)) {
             continue;
         }
         $classes[] = $className;
     }
     return $classes;
 }
 /**
  * @param \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver
  * @param string
  * @return array
  */
 private function getChildClasses(MappingDriver $driver, $currentClass)
 {
     $classes = array();
     foreach ($driver->getAllClassNames() as $className) {
         if (!ClassType::from($className)->isSubclassOf($currentClass)) {
             continue;
         }
         $classes[] = $className;
     }
     return $classes;
 }
 function it_configures_the_mappings_of_a_model_that_overrides_an_original_model($configuration, ClassMetadataInfo $metadataInfo, MappingDriver $mappingDriver)
 {
     $originalQux1 = __NAMESPACE__ . '\\OriginalQux1';
     $originalQux2 = __NAMESPACE__ . '\\OriginalQux2';
     $overrideQux1 = __NAMESPACE__ . '\\OverrideQux1';
     $overrideQux2 = __NAMESPACE__ . '\\OverrideQux2';
     $mappingDriver->getAllClassNames()->willReturn([$originalQux1]);
     $configuration->getMetadataDriverImpl()->willReturn($mappingDriver);
     $metadataInfo->getName()->willReturn($overrideQux1);
     $mappingDriver->loadMetadataForClass($originalQux1, Argument::any())->shouldBeCalled();
     $overrides = [['original' => $originalQux1, 'override' => $overrideQux1], ['original' => $originalQux2, 'override' => $overrideQux2]];
     $this->configure($metadataInfo, $overrides, $configuration);
 }
Example #7
0
 protected function mockMeta()
 {
     $this->mappingDriver = m::mock(MappingDriver::class);
     $this->mappingDriver->shouldReceive('addPaths')->with($this->settings['paths']);
     $this->mockORMConfiguration();
     $this->meta = m::mock(MetaDataManager::class);
     $this->meta->shouldReceive('driver')->once()->andReturn($this->mappingDriver);
 }
 /**
  * Forces the factory to load the metadata of all classes known to the underlying
  * mapping driver.
  *
  * @return array The ClassMetadata instances of all mapped classes.
  */
 public function getAllMetadata()
 {
     $metadata = array();
     foreach ($this->driver->getAllClassNames() as $className) {
         $metadata[] = $this->getMetadataFor($className);
     }
     return $metadata;
 }
Example #9
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);
     }
 }
 public function test_can_register_paths()
 {
     $this->disableDebugbar();
     $this->disableSecondLevelCaching();
     $this->disableCustomCacheNamespace();
     $this->disableCustomFunctions();
     $this->enableLaravelNamingStrategy();
     $this->mappingDriver->shouldReceive('addPaths')->once()->with($this->settings['paths']);
     $manager = $this->factory->create($this->settings);
     $this->assertEntityManager($manager);
 }
 /**
  * Loads the metadata of the specified class
  *
  * @param string $nameName The name of the class for which the metadata
  *                         should be loaded.
  *
  * @return ClassMetadata
  */
 protected function loadMetadata($className)
 {
     if (false === isset($this->loadedMetadata[$className])) {
         if (null === ($class = $this->driver->loadMetadataForClass($className))) {
             // FIXXME Improve this
             throw new \Exception("Can't load metadata for {$className}");
         }
         $this->completeMetadata($class);
         $this->loadedMetadata[$className] = $class;
     }
     return $this->loadedMetadata[$className];
 }
Example #12
0
 /**
  * {@inheritDoc}
  */
 public function isTransient($className)
 {
     /* @var $driver MappingDriver */
     foreach ($this->drivers as $namespace => $driver) {
         if (strpos($className, $namespace) === 0) {
             return $driver->isTransient($className);
         }
     }
     if ($this->defaultDriver !== null) {
         return $this->defaultDriver->isTransient($className);
     }
     return true;
 }
 /**
  * Returns whether the class with the specified name should have its metadata loaded.
  * This is only the case if it is either mapped as an Entity or a MappedSuperclass.
  *
  * @param string $className
  *
  * @return boolean
  */
 public function isTransient($className)
 {
     /**
      * @var $driver FileDriver
      */
     foreach ($this->drivers as $driver) {
         $namespace = $driver->getGlobalBasename();
         if ($this->classNameIsAllowed($className, $namespace)) {
             return $driver->isTransient($className);
         }
     }
     if ($this->defaultDriver !== null) {
         return $this->defaultDriver->isTransient($className);
     }
     return true;
 }
 /**
  * Adds a default discriminator map if no one is given
  *
  * If an entity is of any inheritance type and does not contain a
  * discriminator map, then the map is generated automatically. This process
  * is expensive computation wise.
  *
  * The automatically generated discriminator map contains the lowercase short name of
  * each class as key.
  *
  * @param \Doctrine\ORM\Mapping\ClassMetadata $class
  *
  * @throws MappingException
  */
 private function addDefaultDiscriminatorMap(ClassMetadata $class)
 {
     $allClasses = $this->driver->getAllClassNames();
     $fqcn = $class->getName();
     $map = array($this->getShortName($class->name) => $fqcn);
     $duplicates = array();
     foreach ($allClasses as $subClassCandidate) {
         if (is_subclass_of($subClassCandidate, $fqcn)) {
             $shortName = $this->getShortName($subClassCandidate);
             if (isset($map[$shortName])) {
                 $duplicates[] = $shortName;
             }
             $map[$shortName] = $subClassCandidate;
         }
     }
     if ($duplicates) {
         throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map);
     }
     $class->setDiscriminatorMap($map);
 }
 public function testDriverDelegatesIsTransientCall()
 {
     $this->innerDriver->expects($this->once())->method('isTransient');
     $this->driver->isTransient('My\\Namespace\\Person');
 }
Example #16
0
 /**
  * {@inheritdoc}
  */
 protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents)
 {
     $this->driver->loadMetadataForClass($class->getName(), $class);
 }
Example #17
0
 /**
  * Create a driver from a Doctrine metadata driver.
  *
  * @param MappingDriver $omDriver
  *
  * @return DriverInterface
  */
 protected function fromMetadataDriver(MappingDriver $omDriver)
 {
     if ($omDriver instanceof MappingDriverChain) {
         $drivers = array();
         foreach ($omDriver->getDrivers() as $nestedOmDriver) {
             $drivers[] = $this->fromMetadataDriver($nestedOmDriver);
         }
         return new DriverChain($drivers);
     }
     if ($omDriver instanceof DoctrineAnnotationDriver) {
         return new MergeableDriver($this->createAnnotationDriver($omDriver->getReader()));
     }
     if ($omDriver instanceof DoctrineFileDriver) {
         $reflClass = new \ReflectionClass($omDriver);
         $driverName = $reflClass->getShortName();
         if (strpos($driverName, 'Simplified') !== false) {
             $driverName = str_replace('Simplified', '', $driverName);
         }
         return new MergeableDriver(call_user_func(array(static::class, 'create' . $driverName), $omDriver->getLocator()));
     }
     throw new \InvalidArgumentException('Cannot adapt Doctrine driver of class ' . get_class($omDriver));
 }
 /**
  * @inheritdoc
  */
 public function isTransient($className)
 {
     return $this->wrapped->isTransient($className);
 }
 /**
  * Returns whether the class with the specified name should have its metadata loaded.
  * This is only the case if it is either mapped as an Entity or a MappedSuperclass.
  *
  * @param string $className
  * @return boolean
  */
 public function isTransient($className)
 {
     return $this->innerDriver->isTransient($className);
 }