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