Example #1
0
 /**
  * (non-PHPdoc)
  * @see Gedmo\Mapping.Driver::readExtendedMetadata()
  */
 public function readExtendedMetadata(ClassMetadataInfo $meta, array &$config)
 {
     require_once __DIR__ . '/../Annotations.php';
     $reader = new AnnotationReader();
     $reader->setAnnotationNamespaceAlias('Gedmo\\Tree\\Mapping\\', 'gedmo');
     $class = $meta->getReflectionClass();
     // property annotations
     foreach ($class->getProperties() as $property) {
         if ($meta->isMappedSuperclass && !$property->isPrivate() || $meta->isInheritedField($property->name) || $meta->isInheritedAssociation($property->name)) {
             continue;
         }
         // left
         if ($left = $reader->getPropertyAnnotation($property, self::ANNOTATION_LEFT)) {
             $field = $property->getName();
             if (!$meta->hasField($field)) {
                 throw MappingException::fieldMustBeMapped($field, $meta->name);
             }
             if (!$this->_isValidField($meta, $field)) {
                 throw MappingException::notValidFieldType($field, $meta->name);
             }
             $config['left'] = $field;
         }
         // right
         if ($right = $reader->getPropertyAnnotation($property, self::ANNOTATION_RIGHT)) {
             $field = $property->getName();
             if (!$meta->hasField($field)) {
                 throw MappingException::fieldMustBeMapped($field, $meta->name);
             }
             if (!$this->_isValidField($meta, $field)) {
                 throw MappingException::notValidFieldType($field, $meta->name);
             }
             $config['right'] = $field;
         }
         // ancestor/parent
         if ($parent = $reader->getPropertyAnnotation($property, self::ANNOTATION_PARENT)) {
             $field = $property->getName();
             if (!$meta->isSingleValuedAssociation($field)) {
                 throw MappingException::parentFieldNotMappedOrRelated($field, $meta->name);
             }
             $config['parent'] = $field;
         }
         // level
         if ($parent = $reader->getPropertyAnnotation($property, self::ANNOTATION_LEVEL)) {
             $field = $property->getName();
             if (!$meta->hasField($field)) {
                 throw MappingException::fieldMustBeMapped($field, $meta->name);
             }
             if (!$this->_isValidField($meta, $field)) {
                 throw MappingException::notValidFieldType($field, $meta->name);
             }
             $config['level'] = $field;
         }
     }
 }
Example #2
0
 /**
  * (non-PHPdoc)
  * @see Gedmo\Mapping.Driver::readExtendedMetadata()
  */
 public function readExtendedMetadata(ClassMetadataInfo $meta, array &$config)
 {
     $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
     $mapping = $yaml[$meta->name];
     if (isset($mapping['fields'])) {
         foreach ($mapping['fields'] as $field => $fieldMapping) {
             if (isset($fieldMapping['gedmo']['tree'])) {
                 $mappingProperty = $fieldMapping['gedmo']['tree'];
                 if ($mappingProperty == 'left') {
                     if (!$this->_isValidField($meta, $field)) {
                         throw MappingException::notValidFieldType($field, $meta->name);
                     }
                     $config['left'] = $field;
                 } elseif ($mappingProperty == 'right') {
                     if (!$this->_isValidField($meta, $field)) {
                         throw MappingException::notValidFieldType($field, $meta->name);
                     }
                     $config['right'] = $field;
                 } elseif ($mappingProperty == 'level') {
                     if (!$this->_isValidField($meta, $field)) {
                         throw MappingException::notValidFieldType($field, $meta->name);
                     }
                     $config['level'] = $field;
                 }
             }
         }
     }
     if (isset($mapping['manyToOne'])) {
         foreach ($mapping['manyToOne'] as $field => $relationMapping) {
             if (isset($relationMapping['gedmo']['tree'])) {
                 $mappingProperty = $relationMapping['gedmo']['tree'];
                 if ($mappingProperty == 'parent') {
                     if ($relationMapping['targetEntity'] != $meta->name) {
                         throw MappingException::parentFieldNotMappedOrRelated($field, $meta->name);
                     }
                     $config['parent'] = $field;
                 }
             }
         }
     }
 }