eZ\Publish\Core\FieldType\Image\ImageStorage::storeFieldData PHP Method

storeFieldData() public method

public storeFieldData ( eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo, eZ\Publish\SPI\Persistence\Content\Field $field, array $context )
$versionInfo eZ\Publish\SPI\Persistence\Content\VersionInfo
$field eZ\Publish\SPI\Persistence\Content\Field
$context array
    public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
    {
        $contentMetaData = array('fieldId' => $field->id, 'versionNo' => $versionInfo->versionNo, 'languageCode' => $field->languageCode);
        // new image
        if (isset($field->value->externalData)) {
            $targetPath = sprintf('%s/%s', $this->pathGenerator->getStoragePathForField($field->id, $versionInfo->versionNo, $field->languageCode), $field->value->externalData['fileName']);
            if (isset($field->value->externalData['inputUri'])) {
                $localFilePath = $field->value->externalData['inputUri'];
                unset($field->value->externalData['inputUri']);
                $binaryFileCreateStruct = $this->IOService->newBinaryCreateStructFromLocalFile($localFilePath);
                $binaryFileCreateStruct->id = $targetPath;
                $binaryFile = $this->IOService->createBinaryFile($binaryFileCreateStruct);
                $imageSize = getimagesize($localFilePath);
                $field->value->externalData['width'] = $imageSize[0];
                $field->value->externalData['height'] = $imageSize[1];
            } elseif (isset($field->value->externalData['id'])) {
                $binaryFile = $this->IOService->loadBinaryFile($field->value->externalData['id']);
            } elseif ($this->IOService->exists($targetPath)) {
                $binaryFile = $this->IOService->loadBinaryFile($targetPath);
            } else {
                throw new InvalidArgumentException('inputUri', 'No source image could be obtained from the given external data');
            }
            $field->value->externalData['imageId'] = $versionInfo->contentInfo->id . '-' . $field->id;
            $field->value->externalData['uri'] = $binaryFile->uri;
            $field->value->externalData['id'] = $binaryFile->id;
            $field->value->externalData['mime'] = $this->IOService->getMimeType($binaryFile->id);
            $field->value->data = array_merge($field->value->externalData, $contentMetaData);
            $field->value->externalData = null;
        } else {
            // existing image from another version
            if ($field->value->data === null) {
                // Store empty value only with content meta data
                $field->value->data = $contentMetaData;
                return false;
            }
            $this->IOService->loadBinaryFile($field->value->data['id']);
            $field->value->data = array_merge($field->value->data, $contentMetaData);
            $field->value->externalData = null;
        }
        $this->getGateway($context)->storeImageReference($field->value->data['uri'], $field->id);
        // Data has been updated and needs to be stored!
        return true;
    }