/** * @param Image $processImage * @param Document $rawDocument * @return Document */ protected function createDocumentFromImage(Image $processImage, Document $originalDocument, $keepExistingRaw = false) { $fs = new Filesystem(); if (false === $keepExistingRaw && null !== ($formerRawDoc = $originalDocument->getRawDocument())) { /* * When document already exists with a raw doc reference. * We have to delete former raw document before creating a new one. * Keeping the same document to preserve existing relationships!! */ $originalDocument->setRawDocument(null); /* * Make sure to disconnect raw document before removing it * not to trigger Cascade deleting. */ $this->em->flush(); $this->em->remove($formerRawDoc); $this->em->flush(); } if (null === $originalDocument->getRawDocument() || $keepExistingRaw === false) { /* * We clone it to host raw document. * Keeping the same document to preserve existing relationships!! * * Get every data from raw document. */ $rawDocument = clone $originalDocument; $rawDocumentName = preg_replace('#\\.(jpe?g|gif|tiff?|png|psd)$#', $this->rawImageSuffix . '.$1', $originalDocument->getFilename()); $rawDocument->setFilename($rawDocumentName); if ($fs->exists($originalDocument->getAbsolutePath()) && !$fs->exists($rawDocument->getAbsolutePath())) { /* * Original document path becomes raw document path. Rename it. */ $fs->rename($originalDocument->getAbsolutePath(), $rawDocument->getAbsolutePath()); /* * Then save downscaled image as original document path. */ $processImage->save($originalDocument->getAbsolutePath(), 100); $originalDocument->setRawDocument($rawDocument); $rawDocument->setRaw(true); $this->em->persist($rawDocument); $this->em->flush(); return $originalDocument; } else { return false; } } else { /* * We keep intact raw document, just updating downscaled doc. */ $rawDocument = $originalDocument->getRawDocument(); /* * Remove existing downscaled document. */ $fs->remove($originalDocument->getAbsolutePath()); /* * Then save downscaled image as original document path. */ $processImage->save($originalDocument->getAbsolutePath(), 100); $this->em->flush(); return $originalDocument; } }
/** * Create a Document from an embed media * * @param Pimple\Container $container description * * @return Document */ public function createDocumentFromFeed(Container $container) { $url = $this->downloadThumbnail(); if (!$this->exists()) { throw new \Exception('no.embed.document.found'); } if (false !== $url) { $existingDocument = $container['em']->getRepository('RZ\\Roadiz\\Core\\Entities\\Document')->findOneBy(['filename' => $url]); } else { $existingDocument = $container['em']->getRepository('RZ\\Roadiz\\Core\\Entities\\Document')->findOneBy(['embedId' => $this->embedId, 'embedPlatform' => static::$platform]); } if (null !== $existingDocument) { throw new EntityAlreadyExistsException('embed.document.already_exists'); } $document = new Document(); $document->setEmbedId($this->embedId); $document->setEmbedPlatform(static::$platform); if (false !== $url) { /* * Move file from documents file root to its folder. */ $document->setFilename($url); $document->setMimeType('image/jpeg'); if (!file_exists(Document::getFilesFolder() . '/' . $document->getFolder())) { mkdir(Document::getFilesFolder() . '/' . $document->getFolder()); } rename(Document::getFilesFolder() . '/' . $url, $document->getAbsolutePath()); } $container['em']->persist($document); /* * Create document metas * for each translation */ $translations = $container['em']->getRepository('RZ\\Roadiz\\Core\\Entities\\Translation')->findAll(); foreach ($translations as $translation) { $documentTr = new DocumentTranslation(); $documentTr->setDocument($document); $documentTr->setTranslation($translation); $documentTr->setName($this->getMediaTitle()); $documentTr->setDescription($this->getMediaDescription()); $documentTr->setCopyright($this->getMediaCopyright()); $container['em']->persist($documentTr); } $container['em']->flush(); return $document; }
/** * @param array $data * @param RZ\Roadiz\Core\Entities\Document $document */ private function editDocument($data, Document $document) { /* * Rename document file */ if (!empty($data['filename']) && $data['filename'] != $document->getFilename()) { $oldUrl = $document->getAbsolutePath(); $fs = new Filesystem(); /* * If file exists, just rename it */ // set filename to clean given string before renaming file. $document->setFilename($data['filename']); $fs->rename($oldUrl, $document->getAbsolutePath()); unset($data['filename']); } /* * Change privacy document status */ if ($data['private'] != $document->isPrivate()) { if ($data['private'] === true) { $document->getHandler()->makePrivate(); } else { $document->getHandler()->makePublic(); } unset($data['private']); } foreach ($data as $key => $value) { $setter = 'set' . ucwords($key); $document->{$setter}($value); } $this->getService('em')->flush(); }