From 0011c57e0d7f2baf36b733c4b56b5cc8b5b9f9e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@irstea.fr>
Date: Wed, 9 Dec 2015 11:55:39 +0100
Subject: [PATCH] =?UTF-8?q?G=C3=A8re=20proprement=20la=20suppression=20des?=
 =?UTF-8?q?=20fichiers.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Il est nécessaire d'enregistrer les chemins des fichiers *avant* la suppression pour s'assurer qu'on puisse les supprimer après.
---
 Listener/UploadedFileListener.php | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/Listener/UploadedFileListener.php b/Listener/UploadedFileListener.php
index db50e2dd..cb37ea6d 100644
--- a/Listener/UploadedFileListener.php
+++ b/Listener/UploadedFileListener.php
@@ -23,6 +23,11 @@ class UploadedFileListener
      */
     private $filesystem;
 
+    /**
+     * @var array
+     */
+    private $scheduledDeletion = [];
+
     /**
      *
      * @param Filesystem $filesystem
@@ -58,7 +63,17 @@ class UploadedFileListener
         $this->filesystem->rename($changes['path'][0], $changes['path'][1]);
     }
 
-    /** Supprime le fichier disque lorsque l'on supprime l'entité.
+    /** Enregistre le chemin du fichier à supprimer.
+     *
+     * @param UploadedFileInterface $file
+     * @param LifecycleEventArgs $event
+     */
+    public function preRemove(UploadedFileInterface $file, LifecycleEventArgs $event)
+    {
+        $this->scheduledDeletion[$file->getId()] = $file->getPath();
+    }
+
+    /** Supprime le fichier correspondant à l'UploadedFileInterface supprimé.
      *
      * @param UploadedFileInterface $file
      * @param LifecycleEventArgs $event
@@ -66,9 +81,17 @@ class UploadedFileListener
     public function postRemove(UploadedFileInterface $file, LifecycleEventArgs $event)
     {
         try {
-            $this->filesystem->delete($file->getPath());
+            $this->filesystem->delete($this->scheduledDeletion[$file->getId()]);
         } catch(FileNotFound $ex) {
             // NOOP
         }
     }
+
+    /**
+     * Nettoie la liste des fichiers à supprimer.
+     */
+    public function postFlush()
+    {
+        $this->scheduledDeletion = [];
+    }
 }
-- 
GitLab