commit 9101d393d0d6caccfccd5218a6f79d62c51afaf4
parent 65e35adf3fa4bde348690460e00679a2bc1788ae
Author: Felicitus <felicitus@felicitus.org>
Date: Sat, 31 Oct 2015 18:28:26 +0100
Remove files on storage if attachments are removed
Diffstat:
3 files changed, 75 insertions(+), 17 deletions(-)
diff --git a/app/config/config_partkeepr.yml b/app/config/config_partkeepr.yml
@@ -66,6 +66,15 @@ services:
tags:
- { name: doctrine.event_listener, event: onFlush }
+ file_removal_listener:
+ class: PartKeepr\UploadedFileBundle\EventListener\FileRemovalListener
+ arguments:
+ - "@partkeepr_uploadedfile_service"
+ - "@annotation_reader"
+ - "@property_accessor"
+ tags:
+ - { name: doctrine.event_listener, event: onFlush }
+
temporary_file_listener:
class: PartKeepr\UploadedFileBundle\EventListener\TemporaryFileEventListener
arguments:
diff --git a/src/PartKeepr/UploadedFileBundle/EventListener/FileRemovalListener.php b/src/PartKeepr/UploadedFileBundle/EventListener/FileRemovalListener.php
@@ -0,0 +1,59 @@
+<?php
+namespace PartKeepr\UploadedFileBundle\EventListener;
+
+use Doctrine\Common\Annotations\Reader;
+use Doctrine\Common\EventSubscriber;
+use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
+use Doctrine\ORM\Event\OnFlushEventArgs;
+use Dunglas\ApiBundle\Api\IriConverterInterface;
+use PartKeepr\ImageBundle\Entity\Image;
+use PartKeepr\ImageBundle\Entity\TempImage;
+use PartKeepr\ImageBundle\Services\ImageService;
+use PartKeepr\UploadedFileBundle\Entity\TempUploadedFile;
+use PartKeepr\UploadedFileBundle\Entity\UploadedFile;
+use PartKeepr\UploadedFileBundle\Services\UploadedFileService;
+use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
+use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
+
+class FileRemovalListener
+{
+ /**
+ * @var UploadedFileService
+ */
+ private $uploadedFileService;
+
+ /**
+ * @var ImageService
+ */
+ private $imageService;
+
+ /**
+ * @var Reader
+ */
+ private $reader;
+
+ /**
+ * @var PropertyAccessorInterface
+ */
+ private $propertyAccessor;
+
+ public function __construct(
+ UploadedFileService $uploadedFileService,
+ Reader $reader,
+ PropertyAccessorInterface $propertyAccessor
+ ) {
+ $this->uploadedFileService = $uploadedFileService;
+ $this->reader = $reader;
+ $this->propertyAccessor = $propertyAccessor;
+ }
+
+ public function onFlush(OnFlushEventArgs $eventArgs) {
+ $em = $eventArgs->getEntityManager();
+ $uow = $em->getUnitOfWork();
+ foreach ($uow->getScheduledEntityDeletions() as $entity) {
+ if ($entity instanceof UploadedFile) {
+ $this->uploadedFileService->delete($entity);
+ }
+ }
+ }
+}
diff --git a/src/PartKeepr/UploadedFileBundle/Services/UploadedFileService.php b/src/PartKeepr/UploadedFileBundle/Services/UploadedFileService.php
@@ -61,6 +61,11 @@ class UploadedFileService extends ContainerAware
unlink($tempName);
}
+ public function delete (UploadedFile $file) {
+ $storage = $this->getStorage($file);
+ $storage->delete($file->getFullFilename());
+ }
+
/**
* Replaces an existing uploaded file with another uploaded file.
*
@@ -69,27 +74,12 @@ class UploadedFileService extends ContainerAware
*/
public function replaceFromUploadedFile(UploadedFile $target, UploadedFile $source)
{
- $this->replaceFromFilesystem($target, new File($this->getFullPath($source)));
+ $storage = $this->getStorage($source);
+ $this->replaceFromData($target, $storage->read($source->getFullFilename()), $source->getFullFilename());
$target->setOriginalFilename($source->getOriginalFilename());
}
/**
- * Returns the full path for a given UploadedFile.
- *
- * @param UploadedFile $file The file to get the full path for
- *
- * @return string The path
- */
- public function getFullPath(UploadedFile $file)
- {
- $targetDirectory = $this->getStorageDirectory($file);
-
- $targetFilename = $file->getFilename().".".$file->getExtension();
-
- return $targetDirectory."/".$targetFilename;
- }
-
- /**
* Replaces the file from an URL. Does some tricks to avoid 403 forbidden on some sites, like setting a proper
* browser identification.
*