/** * Convert an object from $source to an \TYPO3\Media\Domain\Model\AssetInterface implementation * * @param mixed $source * @param string $targetType must implement 'TYPO3\Media\Domain\Model\AssetInterface' * @param array $convertedChildProperties * @param PropertyMappingConfigurationInterface $configuration * @return \TYPO3\Flow\Validation\Error|\TYPO3\Media\Domain\Model\AssetInterface The converted asset, a Validation Error or NULL * @throws \TYPO3\Flow\Property\Exception\InvalidTargetException */ public function convertFrom($source, $targetType, array $convertedChildProperties = array(), PropertyMappingConfigurationInterface $configuration = null) { $object = null; if (is_string($source) && $source !== '') { $source = array('__identity' => $source); } if (isset($convertedChildProperties['resource']) && $convertedChildProperties['resource'] instanceof Resource) { $resource = $convertedChildProperties['resource']; if (isset($this->resourcesAlreadyConvertedToAssets[$resource->getSha1()])) { $object = $this->resourcesAlreadyConvertedToAssets[$resource->getSha1()]; } // This is pretty late to override the targetType, but usually you want to determine the model type from the resource when a new resource was uploaded... $targetType = $this->applyModelMappingStrategy($targetType, $resource, $source); } if ($object === null) { if ($configuration !== null && $configuration->getConfigurationValue(self::class, self::CONFIGURATION_ONE_PER_RESOURCE) === true && isset($convertedChildProperties['resource'])) { $resource = $convertedChildProperties['resource']; $possibleAsset = $this->assetRepository->findOneByResourceSha1($resource->getSha1()); if ($possibleAsset !== null) { $this->resourceManager->deleteResource($resource); return $possibleAsset; } } $object = parent::convertFrom($source, $targetType, $convertedChildProperties, $configuration); } if ($object instanceof AssetInterface) { $object = $this->applyTypeSpecificHandling($object, $source, $convertedChildProperties, $configuration); if ($object !== null) { $this->resourcesAlreadyConvertedToAssets[$object->getResource()->getSha1()] = $object; if (isset($resource) && $resource !== $object->getResource()) { $this->resourceManager->deleteResource($resource); } } } return $object; }
/** * Convert an object from $source to an \TYPO3\Media\Domain\Model\AssetInterface implementation * * @param mixed $source * @param string $targetType must implement 'TYPO3\Media\Domain\Model\AssetInterface' * @param array $convertedChildProperties * @param PropertyMappingConfigurationInterface $configuration * @return \TYPO3\Flow\Validation\Error|\TYPO3\Media\Domain\Model\Image The converted Image, a Validation Error or NULL * @throws \TYPO3\Flow\Property\Exception\InvalidTargetException */ public function convertFrom($source, $targetType, array $convertedChildProperties = array(), PropertyMappingConfigurationInterface $configuration = NULL) { $object = NULL; if (is_string($source) && $source !== '') { $source = array('__identity' => $source); } if (isset($convertedChildProperties['resource']) && $convertedChildProperties['resource'] instanceof Resource) { $resource = $convertedChildProperties['resource']; if (isset($this->resourcesAlreadyConvertedToAssets[$resource->getSha1()])) { $object = $this->resourcesAlreadyConvertedToAssets[$resource->getSha1()]; } // This is pretty late to override the targetType, but usually you want to determine the model type from the resource when a new resource was uploaded... $targetType = $this->applyModelMappingStrategy($targetType, $resource, $source); } if ($object === NULL) { // TODO: This is a fix for 2.0 that you can have binary identical assets with different name. Should be fixed in 2.0, the following is the original line: if ($configuration !== NULL && $configuration->getConfigurationValue(self::class, self::CONFIGURATION_ONE_PER_RESOURCE) === TRUE && isset($convertedChildProperties['resource'])) { if ($configuration !== NULL && FALSE && isset($convertedChildProperties['resource'])) { $resource = $convertedChildProperties['resource']; $possibleAsset = $this->assetRepository->findOneByResourceSha1($resource->getSha1()); if ($possibleAsset !== NULL) { $this->resourceManager->deleteResource($resource); return $possibleAsset; } } $object = parent::convertFrom($source, $targetType, $convertedChildProperties, $configuration); } if ($object instanceof AssetInterface) { $object = $this->applyTypeSpecificHandling($object, $source, $convertedChildProperties, $configuration); if ($object !== NULL) { $this->resourcesAlreadyConvertedToAssets[$object->getResource()->getSha1()] = $object; if (isset($resource) && $resource !== $object->getResource()) { $this->resourceManager->deleteResource($resource); } } } return $object; }