<?php /* * Copyright (C) 2015 IRSTEA * All rights reserved. */ 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; use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * Description of UploadedFileRepository * * @author Guillaume Perréal <guillaume.perreal@irstea.fr> */ class UploadedFileRepository extends EntityRepository implements FileManagerInterface { use \Psr\Log\LoggerAwareTrait; /** * @var Filesystem */ protected $filesystem; /** * @var EventDispatcher */ protected $eventDispatcher; /** * * @param Filesystem $filesystem */ public function setFilesystem(Filesystem $filesystem) { $this->filesystem = $filesystem; } /** * * @param EventDispatcherInterface $eventDispatcher */ public function setEventDispatcher(EventDispatcherInterface $eventDispatcher) { $this->eventDispatcher = $eventDispatcher; } public function create($filename, $size, $mimeType, $lastModified) { $file = new UploadedFile(); $file ->setFilesystem($this->filesystem) ->setOriginalFilename($filename) ->setMetadata( [ 'original' => [ 'filename' => $filename, 'size' => $size, 'mimeType' => $mimeType, 'lastModified' => $lastModified ] ] ); $this->_em->persist($file); $this->_em->flush(); $this->log(LogLevel::INFO, 'File created', ['file' => $file]); return $file; } public function delete(UploadedFile $file) { $this->_em->remove($file); $this->_em->flush(); $this->log(LogLevel::INFO, 'File deleted', ['file' => $file]); } public function get($id) { 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 * @param string $message * @param array $context */ protected function log($level, $message, array $context = []) { if(null !== $this->logger) { $this->logger->log($level, $message, $context); } } }