예제 #1
0
 /**
  * @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;
     }
 }
예제 #2
0
 /**
  * @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();
 }