blocksWrapper = new MultiWrapper($blockWrapper, $blockWrapperFactory); $this->photoWrapper = $photoWrapper; $this->photosWrapper = new MultiWrapper($photoWrapper, $photoWrapperFactory); $this->feedUtils = $feedUtils; } #[Required] public function setBlockWrapper(BlockWrapper $blockWrapper): void { $this->blockWrapper = $blockWrapper; } /** * @param array|null $feedRow * * @private */ public function setFeedRow($feedRow) { $this->feedRow = $feedRow; } /** * @private */ public function setArticles(ArrayCollection $articles) { $this->articles = $articles; } /** @var array */ protected $object; /** ID článku */ public function field_id() { return $this->object->id ?? null; } /** URL odkaz */ public function field_link() { return path('kupshop_content_articles_article_1', [ 'IDa' => $this->object->id, 'slug' => StringUtil::slugify($this->object->title), ], UrlGeneratorInterface::ABSOLUTE_URL); } /** Štítky */ public function field_tags() { if (!isset($this->articles->_tags_fetched)) { $qb = sqlQueryBuilder()->select('atr.id_article, at.id, at.tag')->from('articles_tags_relation', 'atr') ->innerJoin('atr', 'articles_tags', 'at', 'at.id=atr.id_tag') ->where(Operator::inIntArray($this->articles->getKeys(), 'atr.id_article')) ->andWhere(Translation::coalesceTranslatedFields(ArticlesTagsTranslation::class)) ->groupBy('atr.id_article, at.tag') ->orderBy('atr.id_article, at.tag'); foreach ($qb->execute() as $row) { if (isset($this->articles[$row['id_article']])) { $this->articles[$row['id_article']]->_tags = $this->articles[$row['id_article']]->_tags ?? []; $this->articles[$row['id_article']]->_tags[$row['id']] = $row['tag']; } } $this->articles->_tags_fetched = true; } return $this->object->_tags ?? []; } /** Sekce článků */ public function field_sections() { if (!isset($this->articles->_sections_fetched)) { $qb = sqlQueryBuilder()->select('ar.id_art AS id_article, ab.id, ab.name, ab.descr')->from('articles_relation', 'ar') ->innerJoin('ar', 'articles_branches', 'ab', 'ab.id=ar.id_branch') ->where(Operator::inIntArray($this->articles->getKeys(), 'ar.id_art')) ->andWhere(Translation::coalesceTranslatedFields(ArticlesSectionsTranslation::class)) ->groupBy('ar.id_art, ab.id') ->orderBy('ar.id_art, ab.id'); foreach ($qb->execute() as $row) { if (isset($this->articles[$row['id_article']])) { $this->articles[$row['id_article']]->_sections = $this->articles[$row['id_article']]->_sections ?? []; $this->articles[$row['id_article']]->_sections[$row['id']] = $row['name']; } } $this->articles->_sections_fetched = true; } return $this->object->_sections ?? []; } /** @private */ protected function fetchPhotos() { $this->feedUtils->fetchPhotos($this->articles, 'photos_articles_relation', 'id_art', 'article_thumb'); } /** 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 ?? []); } /** Název článku */ public function field_title() { return $this->object->title ?? null; } /** Klíčová slova */ public function field_keywords() { return $this->object->keywords ?? null; } /** Anotace */ public function field_lead_in() { return $this->object->lead_in ?? null; } /** Publikováno. * * Y - Viditelné * N - Skryté */ public function field_visibility() { return $this->object->figure ?? null; } /** Datum publikace */ public function field_date() { return $this->object->date ?? ''; } /** Datum poslední úpravy */ public function field_last_change_date() { if (!isset($this->articles->_last_change_date_fetched)) { $qb = sqlQueryBuilder()->select('a.id AS id_article, MAX(bh.date) AS last_change_date') ->from('articles', 'a') ->innerJoin('a', 'blocks_history', 'bh', 'bh.id_root_block=a.id_block') ->where(Operator::inIntArray($this->articles->getKeys(), 'a.id')) ->groupBy('a.id') ->orderBy('a.id'); foreach ($qb->execute() as $row) { if (isset($this->articles[$row['id_article']])) { $this->articles[$row['id_article']]->_last_change_date = $row['last_change_date']; } } $this->articles->_last_change_date_fetched = true; } return $this->object->_last_change_date ?? ''; } /** Bloky (obsah) */ public function field_blocks() { $this->feedUtils->fetchCollectionBlocks($this->articles); return !empty($this->object->_raw_blocks) ? $this->blocksWrapper->setObject($this->object->_raw_blocks) : []; } }