/** * @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; } }
/** * @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(); }