children = new \Doctrine\Common\Collections\ArrayCollection(); } public function getId(): int { return $this->id; } public function setId(int $id): Section { $this->id = $id; return $this; } public function getIdBlock(): ?int { return $this->idBlock; } public function setIdBlock(?int $idBlock = null): Section { $this->idBlock = $idBlock; return $this; } public function getName(): string { return $this->name; } public function setName(string $name): Section { $this->name = $name; return $this; } public function getNameShort(): ?string { return $this->nameShort; } public function setNameShort(?string $nameShort): Section { $this->nameShort = $nameShort; return $this; } public function getDescr() { return $this->descr; } public function setDescr(string $descr): Section { $this->descr = $descr; return $this; } public function getFigure(): string { return $this->figure; } public function setFigure(string $figure): Section { $this->figure = $figure; return $this; } public function getShowInSearch(): string { return $this->show_in_search; } public function setShowInSearch(string $show_in_search): Section { $this->show_in_search = $show_in_search; return $this; } public function getBehaviour(): string { return $this->behaviour; } public function setBehaviour(string $behaviour): Section { $this->behaviour = $behaviour; return $this; } public function getOrderby(): string { return $this->orderby; } public function setOrderby(string $orderby): Section { $this->orderby = $orderby; return $this; } public function getOrderdir(): string { return $this->orderdir; } public function setOrderdir(string $orderdir): Section { $this->orderdir = $orderdir; return $this; } public function getDateUpdated(): \DateTime { return $this->date_updated; } public function setDateUpdated(\DateTime $date): Section { $this->date_updated = $date; return $this; } public function getListVariations(): string { return $this->listVariations; } public function setListVariations(string $listVariations): Section { $this->listVariations = $listVariations; return $this; } public function getLeadFigure(): string { return $this->leadFigure; } public function setLeadFigure(string $leadFigure): Section { $this->leadFigure = $leadFigure; return $this; } public function getLeadText(): string { return $this->leadText; } public function setLeadText(string $leadText): Section { $this->leadText = $leadText; return $this; } public function getLeadProducts(): string { return $this->leadProducts; } public function setLeadProducts(string $leadProducts): Section { $this->leadProducts = $leadProducts; return $this; } public function getPhoto(): ?array { return $this->photo ? getImage($this->getId(), '', '', 'section', '', $this->getDateUpdated()->getTimestamp()) : null; } public function setPhoto(?string $photo = null): Section { $this->photo = $photo; return $this; } public function getPhotoFilename(): ?string { return !empty($this->photo) ? $this->photo : null; } /** * @return array|null */ public function getPhotos() { $SQL = sqlQueryBuilder()->select('p.id, p.descr, p.source, p.image_2, p.date, p.data, p.date_update') ->from('photos', 'p') ->join('p', 'photos_sections_relation', 'psr', 'psr.id_photo = p.id') ->andWhere(Operator::equals(['psr.id_section' => $this->getId()])) ->orderBy('psr.position') ->execute(); $photos = []; foreach ($SQL as $row) { $photos[] = getImage($row['id'], '', '', 'section', $row['descr'], strtotime($row['date_update']), $row['data']); } return $photos; } /** * @return $this */ public function setPhotos(array $photos) { $this->photos = $photos; return $this; } /** * @return string */ public function getUrl() { if ($this->getRedirectUrl()) { return ltrim($this->getRedirectUrl(), '/'); } if ($this->url) { return $this->url.'/'; } return $this->getAutogeneratedUrl(); } public function getFullUrl() { $url = $this->getUrl(); if (StringUtil::isAbsoluteUrl($url)) { return $url; } return Config::get()['Addr']['full'].$url; } /** * @return string */ public function getAutogeneratedUrl() { $seoTitle = StringUtil::slugify($this->getName()); $seoUrl = ''; foreach ($this->getParents() as $id => $parent) { if ($id != $this->getId()) { $seoUrl .= StringUtil::slugify($parent->getName()).'_k'.$id.'/'; } } if (!empty($seoTitle)) { $seoUrl .= $seoTitle; } else { $seoUrl .= translate('category', 'SEO_URL'); } $seoUrl .= '_k'.$this->getId().'/'; return $seoUrl; } /** * @return $this */ public function setUrl($url) { $this->url = $url; return $this; } public function getRedirectUrl(): ?string { return $this->redirect_url; } public function setRedirectUrl(?string $redirect_url): Section { $this->redirect_url = $redirect_url; return $this; } /** * @return string|null */ public function getMetaTitle() { return $this->metaTitle; } public function setMetaTitle(?string $metaTitle = null): Section { $this->metaTitle = $metaTitle; return $this; } /** * @return string|null */ public function getMetaDescription() { return $this->metaDescription; } public function setMetaDescription(?string $metaDescription = null): Section { $this->metaDescription = $metaDescription; return $this; } /** * @return string|null */ public function getMetaKeywords() { return $this->metaKeywords; } public function setMetaKeywords(?string $metaKeywords = null): Section { $this->metaKeywords = $metaKeywords; return $this; } /** * @return int|null */ public function getFeedHeureka() { return $this->feedHeureka; } /** * @return int|null */ public function getFeedHeurekaSk() { return $this->feedHeurekaSk; } public function setFeedHeurekaSk(?int $feedHeurekaSk = null): Section { $this->feedHeurekaSk = $feedHeurekaSk; return $this; } public function setFeedHeureka(?int $feedHeureka = null): Section { $this->feedHeureka = $feedHeureka; return $this; } /** * @return int|null */ public function getFeedGoogle() { return $this->feedGoogle; } public function setFeedGoogle(?int $feedGoogle = null): Section { $this->feedGoogle = $feedGoogle; return $this; } /** * @return int|null */ public function getFeedGlami() { return $this->feedGlami; } public function setFeedGlami(?int $feedGlami = null): Section { $this->feedGlami = $feedGlami; return $this; } public function getFlags(): array { return $this->flags; } public function setFlags(array $flags): Section { $this->flags = $flags; return $this; } /** * @return int|null */ public function getFeedSeznam() { return $this->feedSeznam; } public function setFeedSeznam(?int $feedSeznam = null): Section { $this->feedSeznam = $feedSeznam; return $this; } /** * @return int|null */ public function getIdSlider() { return $this->idSlider; } public function setIdSlider(?int $idSlider = null): Section { $this->idSlider = $idSlider; return $this; } /** * @return array|mixed */ public function getData() { if (!$this->data) { return []; } return json_decode($this->data, true); } /** * @param $data array|null * * @return $this */ public function setData($data) { $this->data = ($data === null) ? $data : json_encode($data); return $this; } /** * @return string */ public function getVirtual() { return $this->virtual; } /** * @param $virtual string * * @return $this */ public function setVirtual($virtual) { $this->virtual = $virtual; return $this; } /** * @return int|null */ public function getPriority() { return $this->priority; } /** * @param $priority int|null * * @return $this */ public function setPriority($priority) { $this->priority = $priority; return $this; } public function getProducersFilter(): string { return $this->producersFilter; } public function setProducersFilter(string $producersFilter): Section { $this->producersFilter = $producersFilter; return $this; } public function getChildren(): \Doctrine\Common\Collections\Collection { return $this->children; } public function getVisibleChildren(): \Doctrine\Common\Collections\Collection { return $this->getChildren()->filter(function ($section) { return $section->isVisible(); }); } public function setChildren(\Doctrine\Common\Collections\Collection $children): Section { $this->children = $children; return $this; } /** * @return Section[] id => Section pairs */ public function getParents() { if (isset($this->parents)) { return $this->parents; } $parents = [$this->getId() => $this]; $parent = $this; while ($parent = $parent->getParent()) { $parents[$parent->getId()] = $parent; } return $this->parents = array_reverse($parents, true); } /** * @return array id => name pairs * * @deprecated Use getParents() instead */ public function getParentIDs(): array { $parentIDs = []; foreach ($this->getParents() as $parent) { /* @var $parent Section */ $parentIDs[(string) $parent->getId()] = $parent->getName(); } return $parentIDs; } /** * @return Section|null */ public function getParent() { return $this->parent; } public function setParent(?Section $parent = null): Section { $this->parent = $parent; return $this; } /** * @return int */ public function getCount() { return $this->count; } /** * @return Section */ public function setCount(int $count) { $this->count = $count; return $this; } /** * @return int */ public function getInStockCount() { return $this->inStockCount; } /** * @return Section */ public function setInStockCount(int $inStockCount) { $this->inStockCount = $inStockCount; return $this; } /** * @return string|null */ public function getAnnotation() { return $this->annotation; } public function setAnnotation(?string $annotation = null): Section { $this->annotation = $annotation; return $this; } public function getSliders(): array { return $this->sliders; } public function setSliders(array $sliders): Section { $this->sliders = $sliders; return $this; } public function getTemplate(): ?string { if ($this->template) { return "section/{$this->template}.tpl"; } return $this->template; } public function setTemplate(string $template): Section { $this->template = $template; return $this; } public function isVisible(): bool { $dbcfg = \Settings::getDefault(); if (($this->getFigure() == 'N') || ($this->getFigure() == 'O')) { return false; } return $dbcfg->cat_show_empty != 'N' || $this->getRedirectUrl() || ($dbcfg->prod_show_not_in_store != 'N' && $this->getCount() > 0) || $this->getInStockCount() > 0; } public function isVirtual() { return (bool) ($this->getVirtual() == 'Y'); } protected function getLevel(): int { return count($this->getParents()) - 1; } /** * BC getter. * * @return string * * @deprecated */ protected function getUid() { $uid = ''; foreach ($this->getParents() as $parent) { /* @var $parent Section */ $uid .= '_'.$parent->getId(); } return trim($uid, '_'); } /** * BC getter. * * @return array of VISIBLE sections only * * @deprecated */ protected function getSubmenu() { $children = []; foreach ($this->getChildren() as $child) { if ($child->isVisible() || isAdministration()) { // TODO: Omlouvám se za admin HACK :-( Ale je to na spoustě míst. V adminu má být vidět všechno. $children[$child->getId()] = $child; } } return $children; } public function offsetExists($offset): bool { return method_exists($this, $this->getterMethod($offset)); } protected function getterMethod($offset) { // backward compatible transformation // also take a look at methods getUid, getSubmenu $bcTransformation = static::bcTransformation(); return 'get'.ucfirst( isset($bcTransformation[$offset]) ? $bcTransformation[$offset] : $offset ); } public static function bcTransformation() { return [ 'id_block' => 'idBlock', 'title' => 'name', 'title_short' => 'nameShort', 'list_variations' => 'listVariations', 'lead_figure' => 'leadFigure', 'lead_text' => 'leadText', 'lead_products' => 'leadProducts', 'meta_title' => 'metaTitle', 'meta_description' => 'metaDescription', 'feed_heureka' => 'feedHeureka', 'feed_google' => 'feedGoogle', 'id_slider' => 'idSlider', 'feed_seznam' => 'feedSeznam', 'producers_filter' => 'producersFilter', 'parents' => 'parentIDs', 'url' => 'Url', 'link' => 'fullUrl', 'date_updated' => 'dateUpdated', ]; } public function &offsetGet($offset): mixed { $method = $this->getterMethod($offset); if (method_exists($this, $method)) { $res = call_user_func([$this, $method]); return $res; } $res = null; return $res; } /** * Offset to set. * * @see http://php.net/manual/en/arrayaccess.offsetset.php * * @param mixed $offset

* The offset to assign the value to. *

* @param mixed $value

* The value to set. *

* * @since 5.0.0 */ public function offsetSet($offset, $value): void { } /** * Offset to unset. * * @see http://php.net/manual/en/arrayaccess.offsetunset.php * * @param mixed $offset

* The offset to unset. *

* * @since 5.0.0 */ public function offsetUnset($offset): void { } public function jsonSerialize(): mixed { $fields = [ '_fields' => array_keys(static::bcTransformation()), ]; $f = new \ReflectionClass($this); foreach ($f->getMethods() as $method) { if (!$method->isPublic() || !StringUtil::startsWith($method->name, 'get')) { continue; } $name = lcfirst(substr($method->name, 3)); if (!in_array($name, array_values(static::bcTransformation()))) { $fields['_fields'][] = $name; } } return $fields; } public function displayProductsFromSubsections(): bool { return $this->getBehaviour() == self::DISPLAY_PRODUCTS_FROM_SUBSECTIONS; } public function getProducersToTitle(): ?string { return $this->producersToTitle; } public function setProducersToTitle(?string $producersToTitle): void { $this->producersToTitle = $producersToTitle; } public function getProducersIndexing(): ?string { return $this->producersIndexing; } public function setProducersIndexing(?string $producersIndexing): void { $this->producersIndexing = $producersIndexing; } public function getLabelsFilter(): ?string { return $this->labelsFilter; } public function setLabelsFilter(?string $labelsFilter): void { $this->labelsFilter = $labelsFilter; } /** * @param Section[]|null $parents */ public function setParents(?array $parents): void { $this->parents = $parents; } }