diff --git a/Entity/Repository/UploadedFileRepository.php b/Entity/Repository/UploadedFileRepository.php index eb7f60bcf22ea210b8f825ab1c522111f61d7ae9..592e4d36da6b06b716806982d559e47620a021e8 100644 --- a/Entity/Repository/UploadedFileRepository.php +++ b/Entity/Repository/UploadedFileRepository.php @@ -84,6 +84,41 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte 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) { $this->_em->remove($file); diff --git a/Model/FileManagerInterface.php b/Model/FileManagerInterface.php index 4616577b0072b8f7f3a04b5257a3084aba697af3..eff9ebf8d11148dab1df9d70c0ab3fe5cb05076b 100644 --- a/Model/FileManagerInterface.php +++ b/Model/FileManagerInterface.php @@ -41,6 +41,17 @@ interface FileManagerInterface */ 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é. * * *Attention :* le fichier est supprimé du disque !