diff --git a/Form/DataTranformer/UploadedFileTransformer.php b/Form/DataTranformer/UploadedFileTransformer.php index 5acd5fdf1c14d7b3c05e84cfe2bf077e4df0c62c..415ee3b4ef19501c2da12992497015aab095bdec 100644 --- a/Form/DataTranformer/UploadedFileTransformer.php +++ b/Form/DataTranformer/UploadedFileTransformer.php @@ -11,7 +11,7 @@ use Irstea\FileUploadBundle\Entity\UploadedFile; use Irstea\FileUploadBundle\Service\FileManagerInterface; use Rhumsaa\Uuid\Uuid; use Symfony\Component\Form\DataTransformerInterface; -use Traversable; +use Symfony\Component\Form\Exception\TransformationFailedException; /** * Description of UploadedFileTransformer @@ -44,13 +44,22 @@ class UploadedFileTransformer implements DataTransformerInterface if(!$this->multiple) { return $this->reverseTransformFile($value); } + + if(null === $value || '' === $value) { + return []; + } + + if(!is_array($value) && !$value instanceof \Traversable) { + throw new TransformationFailedException('Expected an array or a \Traversable.'); + } + $result = []; - if(is_array($value) || $value instanceof Traversable) { - foreach($value as $index => $file) { - $result[$index] = $this->reverseTransformFile($file); + foreach($value as $index => $identifier) { + if(null !== $file = $this->reverseTransformFile($identifier)) { + $result[$index] = $file; } } - return array_filter($result); + return $result; } /** @@ -61,13 +70,22 @@ class UploadedFileTransformer implements DataTransformerInterface if(!$this->multiple) { return $this->transformFile($value); } + + if(empty($value)) { + return []; + } + + if(!is_array($value) && !$value instanceof \Traversable) { + throw new TransformationFailedException('Expected an array or a \Traversable.'); + } + $result = []; - if(is_array($value) || $value instanceof Traversable) { - foreach($value as $index => $file) { - $result[$index] = $this->transformFile($file); + foreach($value as $index => $file) { + if(null !== $item = $this->transformFile($file)) { + $result[$index] = $item; } } - return array_filter($result); + return $result; } /** @@ -77,7 +95,15 @@ class UploadedFileTransformer implements DataTransformerInterface */ protected function transformFile($value) { - return $value instanceof UploadedFile ? $value : null; + if(null === $value) { + return null; + } + + if(!$value instanceof UploadedFile) { + throw new TransformationFailedException('Expected an UploadedFile.'); + } + + return $value; } /** @@ -90,12 +116,18 @@ class UploadedFileTransformer implements DataTransformerInterface if(is_string($value) && Uuid::isValid($value)) { $value = $this->fileManager->get($value); } + + if(null === $value || '' === $value) { + return null; + } + if($value instanceof UploadedFile) { if($value->isOrphelin()) { $value->setEtat(UploadedFile::ETAT_NORMAL); } return $value; } - return null; + + throw new TransformationFailedException('Expected an UploadedFile or a valid file UUID.'); } }