예제 #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
 /**
  * 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;
 }
예제 #3
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();
 }