diff --git a/Controller/UploadController.php b/Controller/UploadController.php index be782a5951ef761a4467ba2611b761e41ceb083d..0ed88ce5526a476b2168260c1b3e91956627211e 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -96,7 +96,9 @@ class UploadController extends Controller $stream->write($request->getContent()); $stream->close(); - return $this->createResponse(); + $this->fileManager->completed($file); + return $this->createResponse( + ); } /** diff --git a/Entity/Repository/UploadedFileRepository.php b/Entity/Repository/UploadedFileRepository.php index f96168c9b6d9ac0365a5268f0e1d73d91cd1dae9..635d877233d9ef84d7b5050d8ecc899a060f9977 100644 --- a/Entity/Repository/UploadedFileRepository.php +++ b/Entity/Repository/UploadedFileRepository.php @@ -10,6 +10,8 @@ namespace Irstea\FileUploadBundle\Entity\Repository; use Doctrine\ORM\EntityRepository; use Gaufrette\Filesystem; use Irstea\FileUploadBundle\Entity\UploadedFile; +use Irstea\FileUploadBundle\Event\FileUploadCompleteEvent; +use Irstea\FileUploadBundle\FileUploadEvents; use Irstea\FileUploadBundle\Service\FileManagerInterface; use Psr\Log\LogLevel; use Symfony\Component\EventDispatcher\EventDispatcher; @@ -91,6 +93,25 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte return $this->findById($id); } + public function completed(UploadedFile $file) + { + $path = $file->getPath(); + $fs = $this->filesystem; + + $file + ->setChecksum($fs->checksum($path)) + ->setSize($fs->size($path)) + ->setMimeType($fs->mimeType($path)) + ->setEtat(UploadedFile::ETAT_ORPHELIN); + + $this->eventDispatcher->dispatch(FileUploadEvents::UPLOAD_COMPLETE, new FileUploadCompleteEvent($file)); + + $this->_em->persist($file); + $this->_em->flush(); + + $this->log(LogLevel::INFO, 'File completed', ['file' => $file]); + } + /** * * @param string $level diff --git a/Event/FileUploadCompleteEvent.php b/Event/FileUploadCompleteEvent.php new file mode 100644 index 0000000000000000000000000000000000000000..f1ed986b02256b8e768b51dbc719e525b77a5059 --- /dev/null +++ b/Event/FileUploadCompleteEvent.php @@ -0,0 +1,43 @@ +<?php + +/* + * Copyright (C) 2015 IRSTEA + * All rights reserved. + */ + +namespace Irstea\FileUploadBundle\Event; + +use Irstea\FileUploadBundle\Entity\UploadedFile; +use Symfony\Component\EventDispatcher\Event; + +/** + * Description of FileUploadCompleteEvent + * + * @author Guillaume Perréal <guillaume.perreal@irstea.fr> + */ +class FileUploadCompleteEvent extends Event +{ + /** + * + * @var UploadedFile + */ + private $uploadedFile; + + /** + * + * @param UploadedFile $uploadedFile + */ + public function __construct(UploadedFile $uploadedFile) + { + $this->uploadedFile = $uploadedFile; + } + + /** + * + * @return UploadedFile $uploadedFile + */ + public function getUploadedFile() + { + return $this->uploadedFile; + } +} diff --git a/FileUploadEvents.php b/FileUploadEvents.php new file mode 100644 index 0000000000000000000000000000000000000000..96c71a860cbf7388738c7037f17ab4f3206edeeb --- /dev/null +++ b/FileUploadEvents.php @@ -0,0 +1,18 @@ +<?php + +/* + * Copyright (C) 2015 IRSTEA + * All rights reserved. + */ + +namespace Irstea\FileUploadBundle; + +/** + * Description of FileUploadEvents + * + * @author Guillaume Perréal <guillaume.perreal@irstea.fr> + */ +final class FileUploadEvents +{ + const UPLOAD_COMPLETE = 'file_upload.complete'; +} diff --git a/Service/FileManagerInterface.php b/Service/FileManagerInterface.php index 0706e7ca524a1ea7963baef4cbb9f63d085761c6..b73817d63ca2ce0e8794dfa81e605c0162de9ab9 100644 --- a/Service/FileManagerInterface.php +++ b/Service/FileManagerInterface.php @@ -7,8 +7,8 @@ namespace Irstea\FileUploadBundle\Service; -use Gaufrette\Stream; use Irstea\FileUploadBundle\Entity\UploadedFile; +use Symfony\Component\HttpFoundation\Response; /** * Description of FileManager @@ -35,4 +35,9 @@ interface FileManagerInterface * @param UploadedFile $file */ public function delete(UploadedFile $file); + + /** + * @param UploadedFile $file + */ + public function completed(UploadedFile $file); }