From 99649d95798205c5f39cd107741b7cfbee9b96fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@irstea.fr>
Date: Wed, 28 Jan 2015 15:10:35 +0100
Subject: [PATCH] =?UTF-8?q?UploadedFileRepository:=20g=C3=A8re=20RejectedF?=
 =?UTF-8?q?ileException=20dans=20completed().?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Entity/Repository/UploadedFileRepository.php | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/Entity/Repository/UploadedFileRepository.php b/Entity/Repository/UploadedFileRepository.php
index 4f538704..fd55f6d5 100644
--- a/Entity/Repository/UploadedFileRepository.php
+++ b/Entity/Repository/UploadedFileRepository.php
@@ -11,6 +11,7 @@ use Doctrine\ORM\EntityRepository;
 use Gaufrette\Filesystem;
 use Irstea\FileUploadBundle\Entity\UploadedFile;
 use Irstea\FileUploadBundle\Event\FileUploadCompleteEvent;
+use Irstea\FileUploadBundle\Exception\RejectedFileException;
 use Irstea\FileUploadBundle\FileUploadEvents;
 use Irstea\FileUploadBundle\Model\FileManagerInterface;
 use Irstea\FileUploadBundle\Model\UploadedFileInterface;
@@ -105,12 +106,22 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte
             ->setMimeType($fs->mimeType($path))
             ->setEtat(UploadedFileInterface::ETAT_ORPHELIN);
 
-        $this->eventDispatcher->dispatch(FileUploadEvents::UPLOAD_COMPLETE, new FileUploadCompleteEvent($file));
-
         $this->_em->persist($file);
-        $this->_em->flush();
 
-        $this->log(LogLevel::INFO, 'File completed', ['file' => $file]);
+        try {
+            $this->eventDispatcher->dispatch(FileUploadEvents::UPLOAD_COMPLETE, new FileUploadCompleteEvent($file));
+
+            $this->_em->flush();
+            $this->log(LogLevel::INFO, 'File completed', ['file' => $file]);
+
+        } catch(RejectedFileException $ex) {
+            $file->setEtat(UploadedFileInterface::ETAT_REJETE);
+
+            $this->_em->flush();
+            $this->log(LogLevel::WARNING, 'File rejected', ['file' => $file, 'exception' => $ex]);
+
+            throw $ex;
+        }
     }
 
     /**
-- 
GitLab