Files
2025-08-02 16:30:27 +02:00

136 lines
3.3 KiB
PHP

<?php
namespace KupShop\ContentBundle\Feed\Wrapper;
use Doctrine\Common\Collections\ArrayCollection;
use KupShop\FeedsBundle\Utils\FeedUtils;
use KupShop\FeedsBundle\Wrapper\BaseWrapper;
use KupShop\FeedsBundle\Wrapper\BlockWrapper;
use KupShop\FeedsBundle\Wrapper\BlockWrapperFactory;
use KupShop\FeedsBundle\Wrapper\MultiWrapper;
use KupShop\FeedsBundle\Wrapper\PhotoWrapper;
use KupShop\FeedsBundle\Wrapper\PhotoWrapperFactory;
use Symfony\Component\Routing\Router;
class PageWrapper extends BaseWrapper
{
protected ArrayCollection $objects;
protected array $feedRow;
protected MultiWrapper $blocksWrapper;
protected PhotoWrapper $photoWrapper;
protected MultiWrapper $photosWrapper;
public function __construct(
PhotoWrapper $photoWrapper,
PhotoWrapperFactory $photoWrapperFactory,
BlockWrapper $blockWrapper,
BlockWrapperFactory $blockWrapperFactory,
protected FeedUtils $feedUtils,
) {
$this->photoWrapper = $photoWrapper;
$this->photosWrapper = new MultiWrapper($photoWrapper, $photoWrapperFactory);
$this->blocksWrapper = new MultiWrapper($blockWrapper, $blockWrapperFactory);
}
/**
* @param array|null $feedRow
*
* @private
*/
public function setFeedRow($feedRow)
{
$this->feedRow = $feedRow;
}
/**
* @private
*/
public function setObjects(ArrayCollection $objects): void
{
$this->objects = $objects;
}
/** ID stránky */
public function field_id(): int
{
return (int) $this->object->id;
}
/** Název stránky */
public function field_title(): ?string
{
return $this->object->name ?? null;
}
/** Krátký název stránky v menu */
public function field_title_short(): ?string
{
return $this->object->name_short ?? null;
}
/** Viditelnost stránky.
*
* Y - Viditelná
* N - Skrytá
*/
public function field_visibility(): string
{
return $this->object->figure ?? 'Y';
}
/** Hlavní obrázek */
public function field_main_photo()
{
$this->fetchPhotos();
return ($this->object->_main_photo['src'] ?? false) ? $this->photoWrapper->setObject($this->object->_main_photo) : null;
}
/** Ostatní obrázky */
public function field_photos()
{
$this->fetchPhotos();
return $this->photosWrapper->setObject($this->object->_photos ?? []);
}
/** URL adresa stránky */
public function field_url(): string
{
return path(
'page_not_found',
['path' => $this->object->url],
Router::ABSOLUTE_URL
);
}
/** Bloky (obsah) */
public function field_blocks()
{
$this->feedUtils->fetchCollectionBlocks($this->objects);
return !empty($this->object->_raw_blocks) ? $this->blocksWrapper->setObject($this->object->_raw_blocks) : [];
}
/** SEO název */
public function field_meta_title()
{
return $this->object->meta_title;
}
/** SEO popis */
public function field_meta_description()
{
return $this->object->meta_description;
}
/** @private */
protected function fetchPhotos()
{
$this->feedUtils->fetchPhotos($this->objects, 'photos_menu_relation', 'id_menu', 'product_catalog');
}
}