<?php
declare(strict_types=1);
namespace WbfkExtensions\CmsElementResolver;
use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Media\MediaDefinition;
use Shopware\Core\Content\Media\MediaEntity;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
class ImageButtonBoxElementResolver extends AbstractCmsElementResolver
{
protected const ELEMENT_TYPE = 'image-button-box';
public function getType(): string
{
return static::ELEMENT_TYPE;
}
public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
{
$config = $slot->getFieldConfig();
$mediaDesktop = $config->get('mediaDesktop');
$criteriaCollection = new CriteriaCollection();
if ($mediaDesktop && $mediaDesktop->getValue() !== null) {
$criteria = new Criteria([$mediaDesktop->getValue()]);
$criteriaCollection->add('desktop_' . $mediaDesktop->getValue(), MediaDefinition::class, $criteria);
}
return $criteriaCollection;
}
public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
{
$config = $slot->getFieldConfig();
$desktop = $this->getMedia('desktop', $config->get('mediaDesktop'), $result);
$slot->assign(
[
'images' => [
'desktop' => $desktop
]
]
);
}
private function getMedia($size, $mediaConfig, $result)
{
if ($mediaConfig->isStatic()) {
$mediaID = $mediaConfig->getValue();
$searchResult = $result->get($size . '_' . $mediaID);
if ($searchResult) {
/** @var MediaEntity|null $media */
return $searchResult->get($mediaID);
}
}
return false;
}
}