public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
 {
     if ($field->value->externalData === null) {
         // Nothing to store
         return false;
     }
     // no mimeType means we are dealing with an input, local file
     if (!isset($field->value->externalData['mimeType'])) {
         $field->value->externalData['mimeType'] = $this->mimeTypeDetector->getFromPath($field->value->externalData['inputUri']);
     }
     $storedValue = $field->value->externalData;
     // The file referenced in externalData MAY be an existing IOService file which we can use
     if ($storedValue['id'] === null) {
         $createStruct = $this->IOService->newBinaryCreateStructFromLocalFile($storedValue['inputUri']);
         $storagePath = $this->pathGenerator->getStoragePathForField($field, $versionInfo);
         $createStruct->id = $storagePath;
         $binaryFile = $this->IOService->createBinaryFile($createStruct);
         $storedValue['id'] = $binaryFile->id;
         $storedValue['mimeType'] = $createStruct->mimeType;
         $storedValue['uri'] = isset($this->downloadUrlGenerator) ? $this->downloadUrlGenerator->getStoragePathForField($field, $versionInfo) : $binaryFile->uri;
     }
     $field->value->externalData = $storedValue;
     $this->removeOldFile($field->id, $versionInfo->versionNo, $context);
     $this->getGateway($context)->storeFileReference($versionInfo, $field);
 }
Ejemplo n.º 2
0
 /**
  * @covers \eZ\Publish\Core\IO\IOService::newBinaryCreateStructFromUploadedFile
  */
 public function testNewBinaryCreateStructFromLocalFile()
 {
     $file = __FILE__;
     $this->mimeTypeDetectorMock->expects($this->once())->method('getFromPath')->with($this->equalTo($file))->will($this->returnValue('text/x-php'));
     $binaryCreateStruct = $this->getIOService()->newBinaryCreateStructFromLocalFile($file);
     self::assertInstanceOf('eZ\\Publish\\Core\\IO\\Values\\BinaryFileCreateStruct', $binaryCreateStruct);
     self::assertNull($binaryCreateStruct->id);
     self::assertTrue(is_resource($binaryCreateStruct->inputStream));
     self::assertEquals(filesize(__FILE__), $binaryCreateStruct->size);
     self::assertEquals('text/x-php', $binaryCreateStruct->mimeType);
     return $binaryCreateStruct;
 }
Ejemplo n.º 3
0
 public function createBinaryFile(BinaryFileCreateStruct $binaryFileCreateStruct)
 {
     if (empty($binaryFileCreateStruct->id) || !is_string($binaryFileCreateStruct->id)) {
         throw new InvalidArgumentValue('id', $binaryFileCreateStruct->id, 'BinaryFileCreateStruct');
     }
     if (!is_int($binaryFileCreateStruct->size) || $binaryFileCreateStruct->size < 0) {
         throw new InvalidArgumentValue('size', $binaryFileCreateStruct->size, 'BinaryFileCreateStruct');
     }
     if (!is_resource($binaryFileCreateStruct->inputStream)) {
         throw new InvalidArgumentValue('inputStream', 'property is not a file resource', 'BinaryFileCreateStruct');
     }
     if (!isset($binaryFileCreateStruct->mimeType)) {
         $buffer = fread($binaryFileCreateStruct->inputStream, $binaryFileCreateStruct->size);
         $binaryFileCreateStruct->mimeType = $this->mimeTypeDetector->getFromBuffer($buffer);
         unset($buffer);
     }
     $spiBinaryCreateStruct = $this->buildSPIBinaryFileCreateStructObject($binaryFileCreateStruct);
     try {
         $this->binarydataHandler->create($spiBinaryCreateStruct);
     } catch (Exception $e) {
         throw new IOException('An error occured creating binarydata', $e);
     }
     $spiBinaryFile = $this->metadataHandler->create($spiBinaryCreateStruct);
     if (!isset($spiBinaryFile->uri)) {
         $spiBinaryFile->uri = $this->binarydataHandler->getUri($spiBinaryFile->id);
     }
     return $this->buildDomainBinaryFileObject($spiBinaryFile);
 }
Ejemplo n.º 4
0
 public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
 {
     if ($field->value->externalData === null) {
         $this->deleteFieldData($versionInfo, [$field->id], $context);
         return false;
     }
     if (isset($field->value->externalData['inputUri'])) {
         $field->value->externalData['mimeType'] = $this->mimeTypeDetector->getFromPath($field->value->externalData['inputUri']);
         $createStruct = $this->IOService->newBinaryCreateStructFromLocalFile($field->value->externalData['inputUri']);
         $createStruct->id = $this->pathGenerator->getStoragePathForField($field, $versionInfo);
         $binaryFile = $this->IOService->createBinaryFile($createStruct);
         $field->value->externalData['id'] = $binaryFile->id;
         $field->value->externalData['mimeType'] = $createStruct->mimeType;
         $field->value->externalData['uri'] = isset($this->downloadUrlGenerator) ? $this->downloadUrlGenerator->getStoragePathForField($field, $versionInfo) : $binaryFile->uri;
     }
     $this->removeOldFile($field->id, $versionInfo->versionNo, $context);
     $this->getGateway($context)->storeFileReference($versionInfo, $field);
 }
Ejemplo n.º 5
0
 /**
  * Creates a binary file in the repository
  *
  * @param \eZ\Publish\Core\IO\Values\BinaryFileCreateStruct $binaryFileCreateStruct
  *
  * @throws \eZ\Publish\Core\Base\Exceptions\InvalidArgumentValue
  *
  * @return \eZ\Publish\Core\IO\Values\BinaryFile The created BinaryFile object
  */
 public function createBinaryFile(BinaryFileCreateStruct $binaryFileCreateStruct)
 {
     if (empty($binaryFileCreateStruct->id) || !is_string($binaryFileCreateStruct->id)) {
         throw new InvalidArgumentValue("id", $binaryFileCreateStruct->id, "BinaryFileCreateStruct");
     }
     if (!is_int($binaryFileCreateStruct->size) || $binaryFileCreateStruct->size < 0) {
         throw new InvalidArgumentValue("size", $binaryFileCreateStruct->size, "BinaryFileCreateStruct");
     }
     if (!is_resource($binaryFileCreateStruct->inputStream)) {
         throw new InvalidArgumentValue("inputStream", "property is not a file resource", "BinaryFileCreateStruct");
     }
     if (!isset($binaryFileCreateStruct->mimeType)) {
         $buffer = fread($binaryFileCreateStruct->inputStream, $binaryFileCreateStruct->size);
         $binaryFileCreateStruct->mimeType = $this->mimeTypeDetector->getFromBuffer($buffer);
         unset($buffer);
     }
     $spiBinaryCreateStruct = $this->buildSPIBinaryFileCreateStructObject($binaryFileCreateStruct);
     $spiBinaryFile = $this->ioHandler->create($spiBinaryCreateStruct);
     return $this->buildDomainBinaryFileObject($spiBinaryFile);
 }
Ejemplo n.º 6
0
 /**
  * Gets the mime-type of the BinaryFile
  *
  * Example: text/xml
  *
  * @param string $spiBinaryFileId
  * @return string|null
  */
 public function getMimeType($spiBinaryFileId)
 {
     return $this->mimeTypeDetector->getFromPath($this->getStoragePath($spiBinaryFileId)) ?: null;
 }