function let(PropertyTransformerInterface $transformer, ColumnInfoInterface $columnInfo, ClassMetadataInfo $metadata) { $this->beConstructedWith($transformer, 'array'); $columnInfo->getPropertyPath()->willReturn('property_path'); $metadata->hasField('property_path')->willReturn(true); $metadata->getTypeOfField('property_path')->willReturn('array'); }
/** * (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\\Timestampable\\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; } if ($timestampable = $reader->getPropertyAnnotation($property, self::ANNOTATION_TIMESTAMPABLE)) { $field = $property->getName(); if (!$meta->hasField($field)) { throw MappingException::fieldMustBeMapped($field, $meta->name); } if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } if (!in_array($timestampable->on, array('update', 'create', 'change'))) { throw MappingException::triggerTypeInvalid($field, $meta->name); } if ($timestampable->on == 'change') { if (!isset($timestampable->field) || !isset($timestampable->value)) { throw MappingException::parametersMissing($field, $meta->name); } $field = array('field' => $field, 'trackedField' => $timestampable->field, 'value' => $timestampable->value); } // properties are unique and mapper checks that, no risk here $config[$timestampable->on][] = $field; } } }
/** * (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; } } }
/** * (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\\Translatable\\Mapping\\', 'gedmo'); $class = $meta->getReflectionClass(); // class annotations $classAnnotations = $reader->getClassAnnotations($class); if (isset($classAnnotations[self::ANNOTATION_ENTITY_CLASS])) { $annot = $classAnnotations[self::ANNOTATION_ENTITY_CLASS]; if (!class_exists($annot->class)) { throw MappingException::translationClassNotFound($annot->class); } $config['translationClass'] = $annot->class; } // property annotations foreach ($class->getProperties() as $property) { if ($meta->isMappedSuperclass && !$property->isPrivate() || $meta->isInheritedField($property->name) || $meta->isInheritedAssociation($property->name)) { continue; } // translatable property if ($translatable = $reader->getPropertyAnnotation($property, self::ANNOTATION_TRANSLATABLE)) { $field = $property->getName(); if (!$meta->hasField($field)) { throw MappingException::fieldMustBeMapped($field, $meta->name); } if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } // fields cannot be overrided and throws mapping exception $config['fields'][] = $field; } // locale property if ($locale = $reader->getPropertyAnnotation($property, self::ANNOTATION_LOCALE)) { $field = $property->getName(); if ($meta->hasField($field)) { throw MappingException::fieldMustNotBeMapped($field, $meta->name); } $config['locale'] = $field; } elseif ($language = $reader->getPropertyAnnotation($property, self::ANNOTATION_LANGUAGE)) { $field = $property->getName(); if ($meta->hasField($field)) { throw MappingException::fieldMustNotBeMapped($field, $meta->name); } $config['locale'] = $field; } } }
/** * (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\\Sluggable\\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; } // sluggable property if ($sluggable = $reader->getPropertyAnnotation($property, self::ANNOTATION_SLUGGABLE)) { $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['fields'][] = $field; } // slug property if ($slug = $reader->getPropertyAnnotation($property, self::ANNOTATION_SLUG)) { $field = $property->getName(); if (!$meta->hasField($field)) { throw MappingException::slugFieldMustBeMapped($field, $meta->name); } if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } if (isset($config['slug'])) { throw MappingException::slugFieldIsDuplicate($field, $meta->name); } $config['slug'] = $field; $config['style'] = $slug->style; $config['updatable'] = $slug->updatable; $config['unique'] = $slug->unique; $config['separator'] = $slug->separator; } } }
/** * Adds mapping to single field * * @param string $field */ protected function mapField($field) { if (!$this->classMetadata->hasField($field)) { $this->classMetadata->mapField(['fieldName' => $field, 'type' => 'datetime', 'nullable' => true]); } }