<?php
/**
* project: Pimcore - Schutzverband Nuernberg Rostbratwuerste
* User: erikb
* Year: 2022
*/
namespace App\Document\Areabrick;
use App\Website\Tool\Image;
use Devkitchen\DocumentIndexingBundle\IndexingService\IndexingService;
use Pimcore\Http\Request\Resolver\EditmodeResolver;
use Pimcore\Model\Asset;
use Pimcore\Model\Document\Editable\Area\Info;
use Pimcore\Model\Document\Page;
use Pimcore\Translation\Translator;
class Teaser extends AbstractAreabrick {
private $translator;
private $editmode;
private $indexingService;
public function __construct( Translator $translator, EditmodeResolver $editmodeResolver, IndexingService $indexingService) {
$this->translator = $translator;
$this->editmode = $editmodeResolver->isEditmode();
$this->indexingService = $indexingService;
}
public function getName() {
return 'Teaser';
}
public function getDescription() {
return 'A document teaser';
}
public function action(Info $info) {
$displayAsTypeStore[] = ['image-title-text', $this->translator->trans( 'display-as.teaser.image-title-text', [], 'admin', 'en')];
$displayAsTypeStore[] = ['image-title-text-alt', $this->translator->trans( 'display-as.teaser.image-title-text-alt', [], 'admin', 'en')];
$selectedDisplayAsType = $this->getDocumentEditable( $info->getDocument(), 'select', 'display-as')->getData() ?: 'image-title-text';
/** @var $locations */
$itemLink = $this->getDocumentEditable( $info->getDocument(), 'relation', 'item');
if (!$itemLink->isEmpty()) {
$itemLinkData = $itemLink->getData();
$document = Page::getById( $itemLinkData['id'] );
$documentData = $this->indexingService->get( $document );
if ($documentData) {
$teaserThumbnail = null;
$teaserImageId = $documentData->teaserAssetId;
if ( $teaserImageId ) {
$teaserImage = Asset::getById( $teaserImageId );
} else {
$teaserImage = $document->getProperty( 'document-teaser-image-fallback' );
}
if ( $teaserImage ) {
$gridImageData = Image::getGridThumbnailMetaData( $teaserImage, $info->getParam( 'columns' ), $this->editmode, 'teaser-default' );
$teaserThumbnail = $teaserImage->getThumbnail( $gridImageData->thumbnail );
$teaserThumbnail = $teaserThumbnail->getHtml();
}
}
$displayAsTypeStore[] = ['image-title-text', $this->translator->trans( 'display-as.teaser.image-title-text', [], 'admin', 'en')];
$displayAsTypeStore[] = ['image-title-text-alt', $this->translator->trans( 'display-as.teaser.image-title-text-alt', [], 'admin', 'en')];
$selectedDisplayAsType = $this->getDocumentEditable( $info->getDocument(), 'select', 'display-as')->getData() ?: 'image-title-text';
$info->setParam( 'url', $document->getHref());
$info->setParam( 'image', $teaserThumbnail ?? '');
$info->setParam( 'title', $documentData->teaserTitle ?? '');
$info->setParam( 'text', $documentData->teaserContent ?? '');
}
$info->setParam( 'displayAsTypeStore', $displayAsTypeStore);
$info->setParam( 'selectedDisplayAsType', $selectedDisplayAsType);
//$info->setParam( 'locations', $locations);
}
public function needsReload(): bool {
return false;
}
// returns a custom html wrapper element (return an empty string if you don't want a wrapper element)
public function getHtmlTagOpen(Info $info) {
return '';
}
public function getHtmlTagClose(Info $info) {
return '';
}
}