/**
  * 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;
 }
 /**
  * Set setting value according to its type.
  *
  * @param string  $value
  * @param Setting $setting
  */
 protected function setSettingValue($value, Setting $setting)
 {
     switch ($setting->getType()) {
         case NodeTypeField::DOCUMENTS_T:
             if ($value !== null && $value->getError() == UPLOAD_ERR_OK && $value->isValid()) {
                 $document = new Document();
                 $document->setFilename($value->getClientOriginalName());
                 $document->setMimeType($value->getMimeType());
                 $this->getService('em')->persist($document);
                 $this->getService('em')->flush();
                 $value->move(Document::getFilesFolder() . '/' . $document->getFolder(), $document->getFilename());
                 $setting->setValue($document->getId());
             }
             break;
         default:
             $setting->setValue($value);
             break;
     }
 }
 /**
  * Handle upload form data to create a Document.
  *
  * @param Symfony\Component\Form\Form $data
  *
  * @return boolean
  */
 private function uploadDocument($data, $folderId = null)
 {
     if (!empty($data['attachment'])) {
         $uploadedFile = $data['attachment']->getData();
         if ($uploadedFile !== null && $uploadedFile->getError() == UPLOAD_ERR_OK && $uploadedFile->isValid()) {
             try {
                 $document = new Document();
                 $document->setFilename($uploadedFile->getClientOriginalName());
                 $document->setMimeType($uploadedFile->getMimeType());
                 $this->getService('em')->persist($document);
                 $this->getService('em')->flush();
                 if (null !== $folderId && $folderId > 0) {
                     $folder = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Folder', (int) $folderId);
                     $document->addFolder($folder);
                     $folder->addDocument($document);
                     $this->getService('em')->flush();
                 }
                 $uploadedFile->move(Document::getFilesFolder() . '/' . $document->getFolder(), $document->getFilename());
                 return $document;
             } catch (\Exception $e) {
                 return false;
             }
         }
     }
     return false;
 }