Commit f10c1964 authored by Guillaume Perréal's avatar Guillaume Perréal
Browse files

Ajout d'un méthode duplicate à FileManagerInterface.

Et implémentation.
Showing with 46 additions and 0 deletions
+46 -0
...@@ -84,6 +84,41 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte ...@@ -84,6 +84,41 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte
return $file; return $file;
} }
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("cb");
$original->copyTo($stream);
$stream->close();
$this->_em->persist($new);
$this->_em->flush();
return $new;
}
public function delete(UploadedFileInterface $file) public function delete(UploadedFileInterface $file)
{ {
$this->_em->remove($file); $this->_em->remove($file);
......
...@@ -41,6 +41,17 @@ interface FileManagerInterface ...@@ -41,6 +41,17 @@ interface FileManagerInterface
*/ */
public function create($name, $size, $mimeType, $lastModified = null); public function create($name, $size, $mimeType, $lastModified = null);
/** Duplique un fichier.
*
* N'accepte que des fichiers valides.
* Le nouveau fichier est automatiquement orphelin, avec un chemin par défaut.
*
* @param UploadedFileInterface $original
* @return UploadedFileInterface
* @throw InvalidArgumentException Le fichier original est invalide.
*/
public function duplicate(UploadedFileInterface $original);
/** Supprime un fichier uploadé. /** Supprime un fichier uploadé.
* *
* *Attention :* le fichier est supprimé du disque ! * *Attention :* le fichier est supprimé du disque !
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment