<?phpnamespace DasKrebsportalBundle\Controller;use Pimcore\Model\Document;use Pimcore\Model\Document\Page;use Symfony\Component\HttpFoundation\Response;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Pimcore\Http\RequestHelper;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;use Pimcore\Http\Request\Resolver\DocumentResolver;use Pimcore\Controller\FrontendController;use Pimcore\Db;use Pimcore\Model\DataObject\Tag;use Pimcore\Model\DataObject\AdZone;final class AdController extends FrontendController{ public function __construct() { } private function getTagsFromDocument(Document $document): array { $rawTags = Db::get()->fetchFirstColumn( "SELECT data FROM documents_editables WHERE name = 'tags' AND documentId = :documentId", ['documentId' => $document->getId()] ); if (count($rawTags) === 0) { return []; } $serializedTags = $rawTags[0]; if (empty($serializedTags)) { return []; } $dRawTags = unserialize($serializedTags); $tags = []; foreach ($dRawTags as $tagRelation) { if ($tagRelation['subtype'] !== 'Tag') { continue; } $tag = Tag::getById($tagRelation['id']); if ($tag !== null) { $tags[] = $tag->getKey(); } } return $tags; } /** * @Template("@DasKrebsportal/ads/_head.html.twig") * @param RequestHelper $request * @return array * @throws Exception */ public function headAction(RequestHelper $request): array { $document = $this->document; if ($document instanceof Page) { $zone = $document->getProperty('AdZone'); $kvKrebsArt = $document->getProperty('Artikel-Krebsart'); $kvPhase = $document->getProperty('Artikel-Phase'); if ($kvKrebsArt) { $kvKrebsArt = $kvKrebsArt->getKey(); } if ($kvPhase) { $kvPhase = $kvPhase->getKey(); } $tags = $this->getTagsFromDocument($document); } else { $tags = []; } if (empty($zone)) { $zone = AdZone::getByPath('/dasKrebsportal.de/Ads/Zones/rest'); } $slotItems = $zone->getSlots(); $slots = []; foreach ($slotItems as $slotItem) { $slots[] = $slotItem['slot']->getData(); } return [ 'zone' => $zone, 'kvKrebsArt' => $kvKrebsArt, 'kvPhase' => $kvPhase, 'tags' => json_encode($tags), 'slots' => $slots, ]; }}