/** * createDocument * * @param string $filename * @param string $token * @param \Erichard\DmsBundle\Entity\DocumentNode $currentNode * @param \Erichard\DmsBundle\Entity\Document $document */ public function createDocument($filename, $token, $currentNode, $document) { $currentNode->removeEmptyMetadatas(); if (null === $document->getId()) { $document->setName($filename); } $document->setOriginalName($filename); $document->setFilename($token); $document->removeEmptyMetadatas(); $emn = $this->registry->getManager(); $emn->persist($document); $emn->flush(); foreach ($document->getNode()->getDocuments() as $sibling) { $sibling->removeEmptyMetadatas(); } $storageTmpPath = $this->container->getParameter('dms.storage.tmp_path'); $storagePath = $this->container->getParameter('dms.storage.path'); $filesystem = $this->container->get('filesystem'); $absTmpFilename = $storageTmpPath . '/' . $document->getFilename(); $absFilename = $storagePath . '/' . $document->getComputedFilename(); $finder = new Finder(); $finder->files()->in($storageTmpPath)->name($document->getFilename()); foreach ($finder as $file) { $this->addMetadatas($file, $document, 'document'); } // Delete existing thumbnails if (is_dir($this->container->getParameter('dms.cache.path'))) { $finder = new Finder(); $finder->files()->in($this->container->getParameter('dms.cache.path'))->name("{$document->getSlug()}.png"); foreach ($finder as $file) { $filesystem->remove($file); } } // overwrite file if (is_file($absFilename)) { unlink($absFilename); } elseif (!$filesystem->exists(dirname($absFilename))) { $filesystem->mkdir(dirname($absFilename)); } $filesystem->rename($absTmpFilename, $absFilename); $document->setFilename($document->getComputedFilename()); $emn->persist($document); $emn->flush(); }