partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

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:
Mapp/config/config_partkeepr.yml | 9+++++++++
Asrc/PartKeepr/UploadedFileBundle/EventListener/FileRemovalListener.php | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/PartKeepr/UploadedFileBundle/Services/UploadedFileService.php | 24+++++++-----------------
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. *