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