<?php /* * Copyright (C) 2015 IRSTEA * All rights reserved. */ namespace Irstea\FileUploadBundle\Listener; use Doctrine\ORM\Event\LifecycleEventArgs; use Gaufrette\Filesystem; use Irstea\FileUploadBundle\Entity\UploadedFile; /** * Listener qui traite les opérations sur les fichiers uploadés. */ class UploadedFileListener { /** * * @var Filesystem */ private $filesystem; /** * * @param Filesystem $filesystem */ public function __construct(Filesystem $filesystem) { $this->filesystem = $filesystem; } /** Passe le filesystem à l'entité. * * @param UploadedFile $file * @param LifecycleEventArgs $event */ public function postLoad(UploadedFile $file, LifecycleEventArgs $event) { $file->setFilesystem($this->filesystem); } /** Renomme le fichier disque lorsque l'on change l'attribut 'path'. * * @param UploadedFile $file * @param LifecycleEventArgs $event */ public function postUpdate(UploadedFile $file, LifecycleEventArgs $event) { $changes = $event->getEntityManager()->getUnitOfWork()->getEntityChangeSet($file); if(!isset($changes['path'])) { return; } $this->filesystem->rename($changes['path'][0], $changes['path'][1]); } /** Supprime le fichier disque lorsque l'on supprime l'entité. * * @param UploadedFile $file * @param LifecycleEventArgs $event */ public function postRemove(UploadedFile $file, LifecycleEventArgs $event) { $this->filesystem->delete($file->getPath()); } }