/** * @param AssetInterface $asset * @param integer $maximumWidth * @param integer $maximumHeight * @return array */ protected function getAssetIcon(AssetInterface $asset, $maximumWidth, $maximumHeight) { // TODO: Could be configurable at some point $iconPackage = 'TYPO3.Media'; $iconSize = $this->getDocumentIconSize($maximumWidth, $maximumHeight); if (is_file('resource://' . $iconPackage . '/Public/Icons/16px/' . $asset->getResource()->getFileExtension() . '.png')) { $icon = sprintf('Icons/%spx/' . $asset->getResource()->getFileExtension() . '.png', $iconSize); } else { $icon = sprintf('Icons/%spx/_blank.png', $iconSize); } return ['width' => $iconSize, 'height' => $iconSize, 'src' => 'resource://' . $iconPackage . '/Public/' . $icon]; }
/** * Check if $value is valid. If it is not valid, needs to add an errorw * to Result. * * @param AssetInterface $value * @return void */ protected function isValid($value) { $fileName = $value->getTitle() ?: $value->getResource()->getFilename(); /** @var Query $query */ $query = $this->entityManager->createQuery('SELECT a FROM TYPO3\\Media\\Domain\\Model\\Asset a JOIN a.resource r WHERE (a.title = :fileName OR r.filename = :fileName) AND a.Persistence_Object_Identifier != :assetIdentifier'); $query->setParameter('fileName', $fileName); $query->setParameter('assetIdentifier', $this->persistenceManager->getIdentifierByObject($value)); $result = $query->getArrayResult(); // We need to exclude ImageVariant objects, but can not do that in the DQL query $result = array_filter($result, function ($value) { return $value['dtype'] !== 'typo3_media_imagevariant'; }); if (count($result) > 0) { $this->addError($this->translator->translateById('assetWithTitleAlreadyExists', [$fileName], null, $this->_localizationService->getConfiguration()->getCurrentLocale(), 'Main', 'Flownative.Neos.UniqueFilenames'), 1462705529); } }
/** * @param AssetInterface $asset * @param integer $maximumWidth * @param integer $maximumHeight * @return array */ protected function getAssetThumbnailImage(AssetInterface $asset, $maximumWidth, $maximumHeight) { $iconSize = $this->getDocumentIconSize($maximumWidth, $maximumHeight); $iconPackage = 'TYPO3.Media'; if (is_file('resource://TYPO3.Media/Public/Icons/16px/' . $asset->getResource()->getFileExtension() . '.png')) { $icon = sprintf('Icons/%spx/' . $asset->getResource()->getFileExtension() . '.png', $iconSize); } else { $icon = sprintf('Icons/%spx/_blank.png', $iconSize); } return array('width' => $iconSize, 'height' => $iconSize, 'package' => $iconPackage, 'src' => $icon); }
/** * Replace resource on an asset. Takes variants and redirect handling into account. * * @param AssetInterface $asset * @param FlowResource $resource * @param array $options * @return void */ public function replaceAssetResource(AssetInterface $asset, FlowResource $resource, array $options = []) { $originalAssetResource = $asset->getResource(); $asset->setResource($resource); if (isset($options['keepOriginalFilename']) && (bool) $options['keepOriginalFilename'] === true) { $asset->getResource()->setFilename($originalAssetResource->getFilename()); } $uriMapping = []; $redirectHandlerEnabled = isset($options['generateRedirects']) && (bool) $options['generateRedirects'] === true && $this->packageManager->isPackageAvailable('Neos.RedirectHandler'); if ($redirectHandlerEnabled) { $uriMapping[$this->resourceManager->getPublicPersistentResourceUri($originalAssetResource)] = $this->resourceManager->getPublicPersistentResourceUri($asset->getResource()); } if (method_exists($asset, 'getVariants')) { $variants = $asset->getVariants(); foreach ($variants as $variant) { $originalVariantResource = $variant->getResource(); $variant->refresh(); foreach ($variant->getAdjustments() as $adjustment) { if (method_exists($adjustment, 'refit')) { $adjustment->refit($asset); } } if ($redirectHandlerEnabled) { $uriMapping[$this->resourceManager->getPublicPersistentResourceUri($originalVariantResource)] = $this->resourceManager->getPublicPersistentResourceUri($variant->getResource()); } $this->getRepository($variant)->update($variant); } } if ($redirectHandlerEnabled) { /** @var \Neos\RedirectHandler\Storage\RedirectStorageInterface $redirectStorage */ $redirectStorage = $this->objectManager->get(\Neos\RedirectHandler\Storage\RedirectStorageInterface::class); foreach ($uriMapping as $originalUri => $newUri) { $existingRedirect = $redirectStorage->getOneBySourceUriPathAndHost($originalUri); if ($existingRedirect === null) { $redirectStorage->addRedirect($originalUri, $newUri, 301); } } } $this->getRepository($asset)->update($asset); $this->emitAssetResourceReplaced($asset); }
/** * @param AssetInterface $asset * @param integer $maximumWidth * @param integer $maximumHeight * @return array */ public function getStaticThumbnailForAsset(AssetInterface $asset, $maximumWidth, $maximumHeight) { $iconSize = $this->getDocumentIconSize($maximumWidth, $maximumHeight); if (is_file('resource://TYPO3.Media/Public/Icons/16px/' . $asset->getResource()->getFileExtension() . '.png')) { $icon = sprintf('Icons/%spx/' . $asset->getResource()->getFileExtension() . '.png', $iconSize); } else { $icon = sprintf('Icons/%spx/_blank.png', $iconSize); } $icon = $this->resourceManager->getPublicPackageResourceUri('TYPO3.Media', $icon); return array('width' => $iconSize, 'height' => $iconSize, 'src' => $icon); }