From 5b85f10180a1848488cb624a05746fc1d3c2a907 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@irstea.fr>
Date: Thu, 22 Jan 2015 10:17:56 +0100
Subject: [PATCH] =?UTF-8?q?FileManagerInterface:=20ajout=20d'une=20m=C3=A9?=
 =?UTF-8?q?thode=20completed,=20utilis=C3=A9e=20par=20le=20contr=C3=B4leur?=
 =?UTF-8?q?.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Controller/UploadController.php              |  4 +-
 Entity/Repository/UploadedFileRepository.php | 21 ++++++++++
 Event/FileUploadCompleteEvent.php            | 43 ++++++++++++++++++++
 FileUploadEvents.php                         | 18 ++++++++
 Service/FileManagerInterface.php             |  7 +++-
 5 files changed, 91 insertions(+), 2 deletions(-)
 create mode 100644 Event/FileUploadCompleteEvent.php
 create mode 100644 FileUploadEvents.php

diff --git a/Controller/UploadController.php b/Controller/UploadController.php
index be782a59..0ed88ce5 100644
--- a/Controller/UploadController.php
+++ b/Controller/UploadController.php
@@ -96,7 +96,9 @@ class UploadController extends Controller
         $stream->write($request->getContent());
         $stream->close();
 
-        return $this->createResponse();
+        $this->fileManager->completed($file);
+        return $this->createResponse(
+        );
     }
 
     /**
diff --git a/Entity/Repository/UploadedFileRepository.php b/Entity/Repository/UploadedFileRepository.php
index f96168c9..635d8772 100644
--- a/Entity/Repository/UploadedFileRepository.php
+++ b/Entity/Repository/UploadedFileRepository.php
@@ -10,6 +10,8 @@ namespace Irstea\FileUploadBundle\Entity\Repository;
 use Doctrine\ORM\EntityRepository;
 use Gaufrette\Filesystem;
 use Irstea\FileUploadBundle\Entity\UploadedFile;
+use Irstea\FileUploadBundle\Event\FileUploadCompleteEvent;
+use Irstea\FileUploadBundle\FileUploadEvents;
 use Irstea\FileUploadBundle\Service\FileManagerInterface;
 use Psr\Log\LogLevel;
 use Symfony\Component\EventDispatcher\EventDispatcher;
@@ -91,6 +93,25 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte
         return $this->findById($id);
     }
 
+    public function completed(UploadedFile $file)
+    {
+        $path = $file->getPath();
+        $fs = $this->filesystem;
+
+        $file
+            ->setChecksum($fs->checksum($path))
+            ->setSize($fs->size($path))
+            ->setMimeType($fs->mimeType($path))
+            ->setEtat(UploadedFile::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]);
+    }
+
     /**
      *
      * @param string $level
diff --git a/Event/FileUploadCompleteEvent.php b/Event/FileUploadCompleteEvent.php
new file mode 100644
index 00000000..f1ed986b
--- /dev/null
+++ b/Event/FileUploadCompleteEvent.php
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * Copyright (C) 2015 IRSTEA
+ * All rights reserved.
+ */
+
+namespace Irstea\FileUploadBundle\Event;
+
+use Irstea\FileUploadBundle\Entity\UploadedFile;
+use Symfony\Component\EventDispatcher\Event;
+
+/**
+ * Description of FileUploadCompleteEvent
+ *
+ * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
+ */
+class FileUploadCompleteEvent extends Event
+{
+    /**
+     *
+     * @var UploadedFile
+     */
+    private $uploadedFile;
+
+    /**
+     *
+     * @param UploadedFile $uploadedFile
+     */
+    public function __construct(UploadedFile $uploadedFile)
+    {
+        $this->uploadedFile = $uploadedFile;
+    }
+
+    /**
+     *
+     * @return UploadedFile $uploadedFile
+     */
+    public function getUploadedFile()
+    {
+        return $this->uploadedFile;
+    }
+}
diff --git a/FileUploadEvents.php b/FileUploadEvents.php
new file mode 100644
index 00000000..96c71a86
--- /dev/null
+++ b/FileUploadEvents.php
@@ -0,0 +1,18 @@
+<?php
+
+/*
+ * Copyright (C) 2015 IRSTEA
+ * All rights reserved.
+ */
+
+namespace Irstea\FileUploadBundle;
+
+/**
+ * Description of FileUploadEvents
+ *
+ * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
+ */
+final class FileUploadEvents
+{
+    const UPLOAD_COMPLETE = 'file_upload.complete';
+}
diff --git a/Service/FileManagerInterface.php b/Service/FileManagerInterface.php
index 0706e7ca..b73817d6 100644
--- a/Service/FileManagerInterface.php
+++ b/Service/FileManagerInterface.php
@@ -7,8 +7,8 @@
 
 namespace Irstea\FileUploadBundle\Service;
 
-use Gaufrette\Stream;
 use Irstea\FileUploadBundle\Entity\UploadedFile;
+use Symfony\Component\HttpFoundation\Response;
 
 /**
  * Description of FileManager
@@ -35,4 +35,9 @@ interface FileManagerInterface
      * @param UploadedFile $file
      */
     public function delete(UploadedFile $file);
+
+    /**
+     * @param UploadedFile $file
+     */
+    public function completed(UploadedFile $file);
 }
-- 
GitLab