An error occurred while loading the file. Please try again.
-
Pierre-Antoine Rouby authored754a20d4
<?php declare(strict_types=1);
/*
* Copyright (C) 2015-2017 IRSTEA
* All rights reserved.
*/
namespace Irstea\FileUploadBundle\Entity\Repository;
use DateTime;
use Doctrine\ORM\EntityRepository;
use Gaufrette\Filesystem;
use Gaufrette\StreamMode;
use InvalidArgumentException;
use Irstea\FileUploadBundle\Entity\UploadedFile;
use Irstea\FileUploadBundle\Event\FileUploadCompleteEvent;
use Irstea\FileUploadBundle\Exception\RejectedFileException;
use Irstea\FileUploadBundle\FileUploadEvents;
use Irstea\FileUploadBundle\Model\FileManagerInterface;
use Irstea\FileUploadBundle\Model\UploadedFileInterface;
use Psr\Log\LoggerAwareTrait;
use Psr\Log\LogLevel;
use Rhumsaa\Uuid\Uuid;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/**
* Class UploadedFileRepository
* @package Irstea\FileUploadBundle\Entity\Repository
*/
class UploadedFileRepository extends EntityRepository implements FileManagerInterface
{
use 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;
}
/**
* @param string $filename
* @param int $size
* @param string $mimeType
* @param null $lastModified
*
* @return UploadedFile
*/
public function create($filename, $size, $mimeType, $lastModified = null)
{
$file = new UploadedFile();
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
$file
->setFilesystem($this->filesystem)
->setDisplayName($filename)
->setMetadata(
[
'client' => [
'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;
}
/**
* @param UploadedFileInterface $original
*
* @return UploadedFile
*/
public function duplicate(UploadedFileInterface $original)
{
if (!$original->isValid()) {
throw new InvalidArgumentException('Impossible de dupliquer le fichier ' . $original->getId() . ' car il est invalide !');
}
$new = new UploadedFile();
$metadata = $original->getMetadata();
if (!isset($metadata['duplicateOf'])) {
$metadata['duplicateOf'] = [$original->getId()];
} else {
array_unshift($metadata['duplicateOf'], $original->getId());
}
$new
->setFilesystem($this->filesystem)
->setMetadata($metadata)
->setDisplayName($original->getDisplayName())
->setDescription($original->getDescription())
->setMimeType($original->getMimeType())
->setChecksum($original->getChecksum())
->setSize($original->getSize());
$stream = $this->filesystem->createStream($new->getPath());
$stream->open(new StreamMode('cb'));
$original->copyTo($stream->cast(STREAM_CAST_AS_STREAM));
$stream->close();
$this->_em->persist($new);
return $new;
}
/**
* @param UploadedFileInterface $file
*/
public function delete(UploadedFileInterface $file)
{
$this->_em->remove($file);
$this->_em->flush();