/** * Purge all variations generated for aliases in $aliasName. * * @param array $aliasNames */ public function purge(array $aliasNames) { foreach ($this->imageFileList as $originalImageId) { foreach ($aliasNames as $aliasName) { $variationImageId = $this->variationPathGenerator->getVariationPath($originalImageId, $aliasName); if (!$this->ioService->exists($variationImageId)) { continue; } $binaryFile = $this->ioService->loadBinaryFile($variationImageId); $this->ioService->deleteBinaryFile($binaryFile); if (isset($this->logger)) { $this->logger->info("Purging {$aliasName} variation {$variationImageId} for original image {$originalImageId}"); } } } }
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['id'])) { $binaryFile = $this->IOService->loadBinaryFile($field->value->externalData['id']); } else { if ($this->IOService->exists($targetPath)) { $binaryFile = $this->IOService->loadBinaryFile($targetPath); } else { 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]; } 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 { 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; }
/** * @param string[] $paths The paths where the original files are expected to be. * @param string[] $filters The imagine filters in effect. * * @return void */ public function remove(array $paths, array $filters) { // TODO: $paths may be empty, meaning that all generated images corresponding to $filters need to be removed. if (empty($filters)) { $filters = array_keys($this->filterConfiguration->all()); } foreach ($paths as $path) { foreach ($filters as $filter) { $filteredImagePath = $this->getFilePath($path, $filter); if (!$this->ioService->exists($filteredImagePath)) { continue; } $binaryFile = $this->ioService->loadBinaryFile($filteredImagePath); $this->ioService->deleteBinaryFile($binaryFile); } } }
/** * @see \eZ\Publish\SPI\FieldType\FieldStorage */ public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context) { /*$storedValue = isset( $field->value->externalData ) // New image ? $field->value->externalData // Copied / updated image : $field->value->data;*/ $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 ($this->IOService->exists($targetPath)) { $binaryFile = $this->IOService->loadBinaryFile($targetPath); } else { if (isset($field->value->externalData['inputUri'])) { $localFilePath = $field->value->externalData['inputUri']; unset($field->value->externalData['inputUri']); } else { $this->deprecationWarner->log("Using the Image\\Value::\$id property to create images is deprecated. Use 'inputUri'"); $localFilePath = $field->value->externalData['id']; } $binaryFileCreateStruct = $this->IOService->newBinaryCreateStructFromLocalFile($localFilePath); $binaryFileCreateStruct->id = $targetPath; $binaryFile = $this->IOService->createBinaryFile($binaryFileCreateStruct); } $field->value->externalData['mimeType'] = $binaryFile->mimeType; $field->value->externalData['imageId'] = $versionInfo->contentInfo->id . '-' . $field->id; $field->value->externalData['uri'] = $binaryFile->uri; $field->value->externalData['id'] = ltrim($binaryFile->uri, '/'); $field->value->data = array_merge($field->value->externalData, $this->IOService->getMetadata($this->imageSizeMetadataHandler, $binaryFile), $contentMetaData); $field->value->externalData = null; } else { if ($field->value->data === null) { // Store empty value only with content meta data $field->value->data = $contentMetaData; return false; } try { $binaryFile = $this->IOService->loadBinaryFile($field->value->data['id']); $metadata = $this->IOService->getMetadata($this->imageSizeMetadataHandler, $binaryFile); } catch (NotFoundException $e) { if (isset($this->logger)) { $this->logger->error("Image with ID {$field->value->data['id']} not found"); } return false; } $field->value->data = array_merge($field->value->data, $metadata, $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; }
/** * @param string[] $paths The paths where the original files are expected to be. * @param string[] $filters The imagine filters in effect. */ public function remove(array $paths, array $filters) { if (empty($filters)) { $filters = array_keys($this->filterConfiguration->all()); } if (empty($paths)) { $this->variationPurger->purge($filters); } foreach ($paths as $path) { foreach ($filters as $filter) { $filteredImagePath = $this->getFilePath($path, $filter); if (!$this->ioService->exists($filteredImagePath)) { continue; } $binaryFile = $this->ioService->loadBinaryFile($filteredImagePath); $this->ioService->deleteBinaryFile($binaryFile); } } }
public function exists($binaryFileId) { return $this->publishedIOService->exists($binaryFileId); }
/** * @see \eZ\Publish\SPI\FieldType\FieldStorage */ 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 ( $this->IOService->exists( $targetPath ) ) { $binaryFile = $this->IOService->loadBinaryFile( $targetPath ); } else { if ( isset( $field->value->externalData['inputUri'] ) ) { $localFilePath = $field->value->externalData['inputUri']; unset( $field->value->externalData['inputUri'] ); } else { $this->deprecationWarner->log( "Using the Image\\Value::\$id property to create images is deprecated. Use 'inputUri'" ); $localFilePath = $field->value->externalData['id']; } $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]; } $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; } // existing image from another version else { 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; }