From 2c823ad6af13bf960f41ff21fd07cb29fa06f9ab 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:55:46 +0100
Subject: [PATCH] =?UTF-8?q?Ajout=20de=20createdBy=20&=20createdFrom=20pour?=
 =?UTF-8?q?=20tracer=20qui=20a=20envoy=C3=A9=20un=20fichier.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Controller/UploadController.php              | 16 +++++++--
 Entity/Repository/UploadedFileRepository.php |  6 ++--
 Entity/UploadedFile.php                      | 38 +++++++++++++++++++-
 Model/FileManagerInterface.php               |  2 +-
 Model/UploadedFileInterface.php              | 14 ++++++++
 Resources/config/services.yml                |  1 +
 6 files changed, 69 insertions(+), 8 deletions(-)

diff --git a/Controller/UploadController.php b/Controller/UploadController.php
index 8f590835..de23d7b9 100644
--- a/Controller/UploadController.php
+++ b/Controller/UploadController.php
@@ -24,7 +24,7 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
 use Symfony\Component\HttpKernel\Exception\HttpException;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Symfony\Component\Routing\RouterInterface;
-use Exception;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
 
 /**
  * @Route("/files", service="irstea_file_upload.upload_controller")
@@ -50,14 +50,20 @@ class UploadController extends Controller
      */
     protected $csrfProvider;
 
+    /**
+     * @var TokenStorageInterface
+     */
+    protected $tokenStorage;
+
     /**
      *
      */
-    public function __construct(FileManagerInterface $fileManager, RouterInterface $router, CsrfProviderInterface $csrfProvider)
+    public function __construct(FileManagerInterface $fileManager, RouterInterface $router, CsrfProviderInterface $csrfProvider, TokenStorageInterface $tokenStorage)
     {
         $this->fileManager = $fileManager;
         $this->router = $router;
         $this->csrfProvider = $csrfProvider;
+        $this->tokenStorage = $tokenStorage;
     }
 
     /**
@@ -70,11 +76,15 @@ class UploadController extends Controller
         try {
             $data = $request->request->get('file');
 
+            $token = $this->tokenStorage->getToken();
+
             $file = $this->fileManager->create(
                 $data['name'],
                 $data['size'],
                 $data['type'],
-                isset($data['lastModified']) ? $data['lastModified'] : null
+                isset($data['lastModified']) ? $data['lastModified'] : null,
+                null !== $token ? $token->getUsername() : null,
+                $request->getClientIp()
             );
 
             $parameters = ['id' => $file->getId()];
diff --git a/Entity/Repository/UploadedFileRepository.php b/Entity/Repository/UploadedFileRepository.php
index fd55f6d5..b49e2891 100644
--- a/Entity/Repository/UploadedFileRepository.php
+++ b/Entity/Repository/UploadedFileRepository.php
@@ -56,16 +56,16 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte
         $this->eventDispatcher = $eventDispatcher;
     }
 
-    public function create($filename, $size, $mimeType, $lastModified)
+    public function create($filename, $size, $mimeType, $lastModified = null, $createdBy = null, $createdFrom = null)
     {
-        $file = new UploadedFile();
+        $file = new UploadedFile($createdBy, $createdFrom);
 
         $file
             ->setFilesystem($this->filesystem)
             ->setDisplayName($filename)
             ->setMetadata(
                 [
-                    'original' => [
+                    'client' => [
                         'filename'     => $filename,
                         'size'         => $size,
                         'mimeType'     => $mimeType,
diff --git a/Entity/UploadedFile.php b/Entity/UploadedFile.php
index 27dfa2d8..53b083d5 100644
--- a/Entity/UploadedFile.php
+++ b/Entity/UploadedFile.php
@@ -75,6 +75,18 @@ class UploadedFile implements UploadedFileInterface
      */
     private $createdAt;
 
+    /**
+     * @ORM\Column(type="string", nullable=true)
+     * @var string
+     */
+    private $createdBy;
+
+    /**
+     * @ORM\Column(type="string", nullable=true)
+     * @var string
+     */
+    private $createdFrom;
+
     /**
      * @ORM\Column(type="json_array", nullable=true)
      * @var array
@@ -100,12 +112,16 @@ class UploadedFile implements UploadedFileInterface
 
     /**
      *
+     * @param string $createdBy
+     * @param string $createdFrom
      */
-    public function __construct()
+    public function __construct($createdBy = null, $createdFrom = null)
     {
         $this->id = Uuid::uuid4()->toString();
         $this->path = "orphan/".$this->id;
         $this->createdAt = new DateTime('now');
+        $this->createdBy = $createdBy;
+        $this->createdFrom = $createdFrom;
     }
 
     /**
@@ -589,6 +605,26 @@ class UploadedFile implements UploadedFileInterface
         ];
     }
 
+    /**
+     * Get createdBy
+     *
+     * @return string
+     */
+    public function getCreatedBy()
+    {
+        return $this->createdBy;
+    }
+
+    /**
+     * Get createdFrom
+     *
+     * @return string
+     */
+    public function getCreatedFrom()
+    {
+        return $this->createdFrom;
+    }
+
     public function getLocalPath()
     {
         if(null !== $this->localTempPath) {
diff --git a/Model/FileManagerInterface.php b/Model/FileManagerInterface.php
index bba54a89..84a4b524 100644
--- a/Model/FileManagerInterface.php
+++ b/Model/FileManagerInterface.php
@@ -26,7 +26,7 @@ interface FileManagerInterface
      * @param int $lastModified
      * @return UploadedFileInterface
      */
-    public function create($name, $size, $mimeType, $lastModified);
+    public function create($name, $size, $mimeType, $lastModified = null, $createdBy = null, $createdFrom = null);
 
     /**
      * @param UploadedFileInterface $file
diff --git a/Model/UploadedFileInterface.php b/Model/UploadedFileInterface.php
index 7b46d603..6bc26189 100644
--- a/Model/UploadedFileInterface.php
+++ b/Model/UploadedFileInterface.php
@@ -144,6 +144,20 @@ interface UploadedFileInterface
      */
     public function getCreatedAt();
 
+  /**
+     * Get createdBy
+     *
+     * @return string
+     */
+    public function getCreatedBy();
+
+    /**
+     * Get createdFrom
+     *
+     * @return string
+     */
+    public function getCreatedFrom();
+
     /**
      * Set metadata
      *
diff --git a/Resources/config/services.yml b/Resources/config/services.yml
index 38b58f0b..fcd95e88 100644
--- a/Resources/config/services.yml
+++ b/Resources/config/services.yml
@@ -31,6 +31,7 @@ services:
             - @irstea_file_upload.file_manager
             - @router
             - @form.csrf_provider
+            - @security.token_storage
 
     # Type de champ
     irstea_file_upload.field_type:
-- 
GitLab