<?php
namespace App\Twig;
use Elements\Bundle\DemiFrontendBundle\Service\DemiUrl;
use Elements\Bundle\SeoHelperBundle\Templating\Helper\PrettyUrl;
use Pimcore\Http\Request\Resolver\DocumentResolver;
use Pimcore\Model\DataObject\AlpsteinTour;
use Pimcore\Model\DataObject\Artist;
use Pimcore\Model\DataObject\BlogArticle;
use Pimcore\Model\DataObject\BlogAuthor;
use Pimcore\Model\DataObject\BlogCategory;
use Pimcore\Model\DataObject\BlogPortal;
use Pimcore\Model\DataObject\BusTravel;
use Pimcore\Model\DataObject\CinestyriaActor;
use Pimcore\Model\DataObject\CinestyriaCompany;
use Pimcore\Model\DataObject\CinestyriaLocation;
use Pimcore\Model\DataObject\ClassDefinition\LinkGeneratorInterface;
use Pimcore\Model\DataObject\Community;
use Pimcore\Model\DataObject\ConventionIncentive;
use Pimcore\Model\DataObject\ConventionPartner;
use Pimcore\Model\DataObject\DemiAccommodationServiceProvider;
use Pimcore\Model\DataObject\DemiAdditionalService;
use Pimcore\Model\DataObject\DemiEvent;
use Pimcore\Model\DataObject\DemiHousePackageMaster;
use Pimcore\Model\DataObject\DemiInfrastructure;
use Pimcore\Model\DataObject\DemiRegion;
use Pimcore\Model\DataObject\DemiTown;
use Pimcore\Model\DataObject\LandingpageGenerator;
use Pimcore\Model\DataObject\MediaAlbum;
use Pimcore\Model\DataObject\MediaAsset;
use Pimcore\Model\DataObject\MediaVideo;
use Pimcore\Model\DataObject\Package;
use Pimcore\Model\DataObject\PressArticle;
use Pimcore\Model\DataObject\PressDossier;
use Pimcore\Model\DataObject\Region;
use Pimcore\Model\DataObject\SiteConfig;
use Pimcore\Model\DataObject\YoungStyriaAccommodation;
use Pimcore\Model\DataObject\YoungStyriaInfrastructure;
use Pimcore\Model\Document;
use Pimcore\Model\Site;
use Pimcore\Model\WebsiteSetting;
use Symfony\Component\HttpFoundation\RequestStack;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class LinkGenerator extends AbstractExtension implements LinkGeneratorInterface
{
/** @var SiteConfig */
protected $config;
/** @var BlogPortal */
protected $blogPortal;
/** @var PrettyUrl $prettyUrl */
protected $prettyUrl;
/** @var DocumentResolver */
private $documentResolver;
/** @var RequestStack */
private $requestStack;
/**
* @var DemiUrl
*/
private $demiUrl;
/**
* @var DemiExtension
*/
private $demiExtension;
private $params;
/**
* LinkGenerator constructor.
* @param PrettyUrl $prettyUrl
* @param DocumentResolver $documentResolver
* @param RequestStack $requestStack
* @param DemiUrl $demiUrl
* @param DemiExtension $demiExtension
*/
public function __construct(PrettyUrl $prettyUrl, DocumentResolver $documentResolver, RequestStack $requestStack, DemiUrl $demiUrl, DemiExtension $demiExtension, protected AlpsteinExtension $alpsteinExtension)
{
$this->prettyUrl = $prettyUrl;
$this->documentResolver = $documentResolver;
$this->requestStack = $requestStack;
$websiteSetting = WebsiteSetting::getByName('defaultSiteConfig');
if ($websiteSetting instanceof WebsiteSetting) {
$this->config = $websiteSetting->getData();
}
$mainBlogPortal = WebsiteSetting::getByName('mainBlogPortal');
if ($mainBlogPortal instanceof WebsiteSetting) {
$this->blogPortal = $mainBlogPortal->getData();
}
$this->demiUrl = $demiUrl;
$this->demiExtension = $demiExtension;
}
public function getName()
{
return "Link Generator";
}
/**
* @return array|TwigFunction[]
*/
public function getFunctions()
{
return [
new TwigFunction('linkGenerator', [$this, 'getGenerator']),
];
}
public function getGenerator() {
return $this;
}
public function generate($object, array $params = []): string
{
if (!$object->getPublished() && !\Pimcore::inDebugMode()) {
return '';
}
$this->params = $params;
$path = '';
$prefix = '';
$reset = array_key_exists( 'reset', $params) ? $params['reset'] : true; // only set to true if is null
$relative = array_key_exists( 'relative', $params) ? $params['relative'] : false;
$encode = array_key_exists( 'encode', $params ) ? $params['encode'] : true; // only set to true if is null
$toLanguage = array_key_exists( 'toLanguage', $params ) ? $params['toLanguage'] : null;
//LANGUAGE
$lang = false;
if ( array_key_exists( 'language', $params) && $params['language'] != '') {
$lang = $params['language'];
} else {
try {
$request = $this->requestStack->getCurrentRequest();
if ($request) {
$lang = $request->getLocale();
}
} catch (\Exception $exception) {
}
if (!$lang) {
$lang = \Pimcore\Tool::getDefaultLanguage();
}
}
if (array_key_exists('preview', $params) ) {
$lang = 'de';
}
//DOCUMENT
$document = false;
if(isset($params['document']) && $params['document'] instanceof Document\Page) {
$document = $params['document'];
} else {
try {
$document = $this->documentResolver->getDocument();
} catch (\Exception $e) {
// DO NOTHING
}
}
if ($document instanceof Document) {
if ($document instanceof Document\Page) {
$prefix = $document->getFullPath();
}
if ($document->getProperty('siteConfig')) {
$this->config = $document->getProperty('siteConfig');
}
if ($document->getProperty('blogPortal')) {
$this->blogPortal = $document->getProperty('blogPortal');
}
}
if(!$this->config && WebsiteSetting::getByName('DefaultSiteConfig')) {
$this->config = WebsiteSetting::getByName('DefaultSiteConfig')->getData();
}
if(!$this->blogPortal && WebsiteSetting::getByName('mainBlogPortal')) {
$this->config = WebsiteSetting::getByName('mainBlogPortal')->getData();
}
$methodName = 'get' . ucfirst($object->getClassName()) . 'Link';
if (method_exists($this, $methodName)) {
$path = $this->$methodName($object, $lang, $relative, $prefix, $reset, $encode, $toLanguage);
}
return $path;
}
/**
* OBJECT FUNCTIONS
*/
/**
* @param BlogArticle $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getBlogArticleLink(BlogArticle $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
$blogPortal = $this->blogPortal;
if (!empty($object->getPortals()) && $object->getPortals()[0]) {
$blogPortal = $object->getPortals()[0];
}
if ((!$relative || $prefix == "") && $blogPortal->getOverviewDocument($lang)) {
$prefix = $blogPortal->getOverviewDocument($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getTitle($lang)
], 'magazinearticle-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param BlogAuthor $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getBlogAuthorLink(BlogAuthor $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName() || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
$blogPortal = $this->blogPortal;
if (!empty($object->getPortals()) && $object->getPortals()[0]) {
$blogPortal = $object->getPortals()[0];
}
if ((!$relative || $prefix == "") && $blogPortal->getAuthorsDocument($lang)) {
$prefix = $blogPortal->getAuthorsDocument($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName()
], 'magazineauthor-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param BlogCategory $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getBlogCategoryLink(BlogCategory $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
$prettyUrlResult = $this->blogPortal->getSearchDocument($lang);
if ($prettyUrlResult) {
$path = $prettyUrlResult . '?category=' . $object->getId();
}
}
return $path;
}
/**
* @param AlpsteinTour $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getAlpsteinTourLink(AlpsteinTour $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
$config = null;
if ($object->getCanonicalSiteConfig() instanceof SiteConfig && $object->getCanonicalSiteConfig()->getTourOverview() != '') {
$config = $object->getCanonicalSiteConfig();
}
if($region = $this->alpsteinExtension->getStyriaRegionByAlpsteinTour($object)) {
if($region->getSiteConfig()) {
$config = $region->getSiteConfig();
}
}
if(empty($config)) {
$config = $this->config;
}
if ((!$relative || $prefix == "") && $config->getTourOverview($lang)) {
$prefix = $config->getTourOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang)
], 'tour-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param DemiInfrastructure $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getDemiInfrastructureLink(DemiInfrastructure $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || array_key_exists( 'preview', $this->params)){
if (!$relative || $prefix == "") {
$region = false;
if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
$region = $object->getDemiExtension()->getDemiCanonicalRegion();
} else {
foreach ($object->getTowns() as $town) {
$region = $this->getRegionFromDemiTown($town);
if ($region instanceof Region) {
break;
}
}
}
$config = $this->demiExtension->getDemiConfigurationHelper();
if ((!$relative || $prefix == "") && $config->getInfrastructureDetailPath($lang)) {
$prefix = $config->getInfrastructureDetailPath($lang);
}
if ($region instanceof Region && $region->getIsLive() && !$config->getIsWhitelabel()) {
$config = $region->getSiteConfig();
if ($config->getInfrastructureOverview($lang)) {
$prefix = $config->getInfrastructureOverview($lang);
}
}
}
$prettyUrlResult = null;
try {
$prettyUrlResult = $this->demiUrl->__invoke([
'_locale' => $lang,
'path' => $this->removeSite((string)$prefix, $lang),
'id' => $object->getId(),
'name' => $object->getName($lang)
], (array_key_exists('route', $this->params ?: []) && $this->params['route'] !== "demi_infrastructure_list" && strpos($this->params['route'], 'demi_') === 0) ? $this->params['route'] : 'demi_infrastructure_detail', $reset, $encode, $toLanguage);
} catch (\Throwable $exception) {
// ....
}
if ($prettyUrlResult){
$path .= $prettyUrlResult;
}
}
return $path;
}
/**
* @param DemiEvent $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getDemiEventLink(DemiEvent $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
if (!$relative || $prefix == "") {
$region = false;
if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
$region = $object->getDemiExtension()->getDemiCanonicalRegion();
} else {
foreach ($object->getTowns() as $town) {
$region = $this->getRegionFromDemiTown($town);
if ($region instanceof Region) {
break;
}
}
}
$config = $this->demiExtension->getDemiConfigurationHelper();
if ($config->getEventDetailPath($lang)) {
$prefix = $config->getEventDetailPath($lang);
}
if ($region instanceof Region && $region->getIsLive() && !$config->getIsWhitelabel()) {
$config = $region->getSiteConfig();
if ($config->getEventOverview($lang)) {
$prefix = $config->getEventOverview($lang);
}
}
}
$prettyUrlResult = null;
$routeName = (array_key_exists('route', $this->params ?: []) && strpos($this->params['route'], 'document_') !== 0 &&
$this->params['route'] !== "demi_event_list") ?
$this->params['route'] : 'demi_event_detail';
try {
$prettyUrlResult = $this->demiUrl->__invoke([
'_locale' => $lang,
'path' => $this->removeSite((string)$prefix, $lang),
'name' => $object->getName($lang),
'id' => $object->getId()
],$routeName , $reset, $encode, $toLanguage);
} catch (\Throwable $exception) {}
if ($prettyUrlResult){
$path .= $prettyUrlResult;
}
}
// p_r($prettyUrlResult, $lang, $this->removeSite((string)$prefix, $lang)); die();
return $path;
}
/**
* @param DemiAccommodationServiceProvider $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getDemiAccommodationServiceProviderLink(DemiAccommodationServiceProvider $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
$prettyUrlResult = '';
try {
$prettyUrlResult = $this->demiUrl->__invoke([
'accommodation' => $object
], array_key_exists('route', $this->params ?: []) ? $this->params['route'] : 'demi_acco_detail_page', $reset, $encode, $toLanguage);
} catch (\Throwable $exception) {
// .....
}
if (!$relative || $prefix == "") {
if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
$region = $object->getDemiExtension()->getDemiCanonicalRegion();
} else {
$region = $this->getRegionFromDemiTown($object->getTown());
}
if ($region instanceof Region && $region->getIsLive()) {
$config = $region->getSiteConfig();
if ($config && $config->getAccommodationOverview($lang)) {
$demiConfig = $this->demiExtension->getDemiConfigurationHelper();
$oldPrefix = $demiConfig->getAccoParentDocument();
$prefix = $config->getAccommodationOverview($lang);
$prettyUrlResult = str_replace($oldPrefix, $prefix, $prettyUrlResult);
}
}
}
if ($prettyUrlResult){
$path .= $prettyUrlResult;
}
return $path;
}
/**
* @param DemiHousePackageMaster $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getDemiHousePackageMasterLink(DemiHousePackageMaster $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
if (!$relative || $prefix == "") {
$region = false;
if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
$region = $object->getDemiExtension()->getDemiCanonicalRegion();
} else {
$region = $object->getServiceProvider() ? $this->getRegionFromDemiTown($object->getServiceProvider()->getTown()) : null;
}
if ((!$relative || $prefix == "") && $this->config->getHousePackageMasterOverview($lang)) { // TODO find correct overview page here
$prefix = $this->config->getHousePackageMasterOverview($lang);
}
if ($region instanceof Region && $region->getIsLive()) {
$config = $region->getSiteConfig();
if ($config->getHousePackageMasterOverview($lang)) {
$prefix = $config->getHousePackageMasterOverview($lang);
}
}
}
try {
if (!empty($prefix)) {
$prettyUrlResult = $this->demiUrl->__invoke([
'path' => $prefix,
'accommodation' => $object->getServiceProvider(),
'package' => $object
], (array_key_exists('route', $this->params ?: []) && strpos($this->params['route'],
'document_') !== 0) ? $this->params['route'] : 'demi_acco_detail_package_page', $reset,
$encode, $toLanguage);
} else {
$prettyUrlResult = $this->demiUrl->__invoke([
'accommodation' => $object->getServiceProvider(),
'package' => $object
], (array_key_exists('route', $this->params ?: []) && strpos($this->params['route'],
'document_') !== 0) ? $this->params['route'] : 'demi_acco_detail_package_page', $reset,
$encode, $toLanguage);
}
} catch (\Throwable $exception) {
// ....
}
if ($prettyUrlResult){
$path .= $prettyUrlResult;
}
}
return $path;
}
/**
* @param DemiAdditionalService $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getDemiAdditionalServiceLink(DemiAdditionalService $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
if (!$relative || $prefix == "") {
$region = false;
if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
$region = $object->getDemiExtension()->getDemiCanonicalRegion();
} else {
$region = $this->getRegionFromDemiTown($object->getServiceProvider()->getTown());
}
$config = $this->demiExtension->getDemiConfigurationHelper();
if ($config->getAdditionalServiceDetailPath($lang)) {
$prefix = $config->getAdditionalServiceDetailPath($lang);
}
if ($region instanceof Region && $region->getIsLive()) {
$config = $region->getSiteConfig();
if ((!$relative || $prefix == "") && $config->getAdditionalServiceOverview($lang)) {
$prefix = $config->getAdditionalServiceOverview($lang);
}
}
}
$prettyUrlResult = null;
try {
if(!empty($prefix)) {
$prettyUrlResult = $this->demiUrl->__invoke([
'path' => $this->removeSite((string)$prefix, $lang),
'id' => $object->getId(),
'name' => $object->getName($lang)
], (array_key_exists('route', $this->params ?: []) && strpos($this->params['route'], 'document_') !== 0)
&& $this->params['route'] !== "demi_additionalservice_list" ? $this->params['route'] : 'demi_additionalservice_detail', $reset, $encode, $toLanguage);
}else {
$prettyUrlResult = $this->demiUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang)
], (array_key_exists('route', $this->params ?: []) && strpos($this->params['route'], 'document_') !== 0)
&& $this->params['route'] !== "demi_additionalservice_list" ? $this->params['route'] : 'demi_additionalservice_detail', $reset, $encode, $toLanguage);
}
} catch (\Throwable $exception) {
// ....
}
if ($prettyUrlResult){
$path .= $prettyUrlResult;
}
}
return $path;
}
/**
* @param Package $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getPackageLink(Package $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
$config = $this->config;
if (!$relative || $prefix == "") {
if (!$object->getIgnoreRegionsForLink() && !empty($object->getRegions())) {
foreach ($object->getRegions() as $region) {
if ($region->getIsLive() && $region->getSiteConfig()) {
$config = $region->getSiteConfig();
breaK;
}
}
}
if ($config && $config->getPackageOverview($lang)) {
$prefix = $config->getPackageOverview($lang);
}
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getTitle($lang)
], 'package-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param MediaVideo $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getMediaVideoLink(MediaVideo $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
$title = $object->getVideo2()->getType() === 'asset' ? ($object->getVideo2()->getData()->getMetadata('General.title', $lang) ?: $object->getVideo2()->getData()->getFilename()) : $object->getTitle($lang);
if ($title || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
if (!$relative || $prefix == "") {
$config = $this->config;
if (!empty($object->getRegions())) {
foreach ($object->getRegions() as $region) {
if ($region->getIsLive() && $region->getSiteConfig()) {
$config = $region->getSiteConfig();
breaK;
}
}
}
if ($config && $config->getMediaVideosOverview($lang)) {
$prefix = $config->getMediaVideosOverview($lang);
}
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $title
], 'mediaarchive-video-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param MediaAsset $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getMediaAssetLink(MediaAsset $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
$title = $object->getTitle() ?: $object?->getPosterImage()?->getMetadata('General.title', $lang);
if ($title || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
if (!$relative || $prefix == "") {
$config = $this->config;
if (!empty($object->getRegions())) {
foreach ($object->getRegions() as $region) {
if ($region->getIsLive() && $region->getSiteConfig()) {
$config = $region->getSiteConfig();
breaK;
}
}
}
if ($config && $config->getMediaAssetOverview($lang)) {
$prefix = $config->getMediaAssetOverview($lang);
}
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $title
], 'mediaasset-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param ConventionPartner $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getConventionPartnerLink(ConventionPartner $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
// if ($object->getRegions()[0] && $object->getRegions()[0]->getSiteConfig()) {
// $config = $object->getRegions()[0]->getSiteConfig();
// }
if ((!$relative || $prefix == "") && $config->getConventionOverview($lang)) {
$prefix = $config->getConventionOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang)
], 'convention-partner-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param ConventionIncentive $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getConventionIncentiveLink(ConventionIncentive $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
// if ($object->getRegions()[0] && $object->getRegions()[0]->getSiteConfig()) {
// $config = $object->getRegions()[0]->getSiteConfig();
// }
if ((!$relative || $prefix == "") && $config->getIncentivesOverview($lang)) {
$prefix = $config->getIncentivesOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang)
], 'convention-incentive-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param Artist $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getArtistLink(Artist $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
// if ($object->getRegions()[0] && $object->getRegions()[0]->getSiteConfig()) {
// $config = $object->getRegions()[0]->getSiteConfig();
// }
if ((!$relative || $prefix == "") && $config->getMudabaOverview($lang)) {
$prefix = $config->getMudabaOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang)
], 'artist-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param PressArticle $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getPressArticleLink(PressArticle $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if ((!$relative || $prefix == "") && $config->getPressOverview($lang)) {
$prefix = $config->getPressOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getTitle($lang)
], 'press-article-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param PressDossier $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getPressDossierLink(PressDossier $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if ((!$relative || $prefix == "") && $config->getPressOverview($lang)) {
$prefix = $config->getPressOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getTitle($lang)
], 'press-dossier-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
/**
* @param Community $object
* @param $lang
* @param $relative
* @param $prefix
* @param $reset
* @param $encode
* @param $toLanguage
* @return string
*/
public function getCommunityLink(Community $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
$name = $object->getNameLocalized($lang) ?: $object->getName();
if ($name || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
if (!$relative || $prefix == "") {
$config = $this->config;
$parent = $object->getParent();
if ($parent instanceof Region && $parent->getIsLive() && $parent->getSiteConfig()) {
$config = $parent->getSiteConfig();
}
if ($config && !$config->getCommunityOverview($lang)) {
//check main region
$mainRegion = WebsiteSetting::getByName('mainRegion') ? WebsiteSetting::getByName('mainRegion')->getDao() : null;
if ($mainRegion instanceof Region) {
$config = $mainRegion->getSiteConfig();
}
}
if ((!$relative || $prefix == "") && $config && $config->getCommunityOverview($lang)) {
$prefix = $config->getCommunityOverview($lang);
}
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $name
], 'community-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
private $demiTownMapping = [];
/**
* @param DemiTown|DemiRegion $town
* @return mixed
*/
public function getRegionFromDemiTown($town)
{
if ($town == '') {
return null;
}
$region = null;
if(!array_key_exists( $town->getId(), $this->demiTownMapping ) && ($demiRegion = $town->getRegion())) {
$regions = new Region\Listing();
$regions->addConditionParam('IFNULL(isLive,0) = 1 and demiFilterObject__id IN (select o_id
from object_31
where filterElements LIKE :demiRegionId AND o_key != "Steiermark")', ['demiRegionId' => "%,". $demiRegion->getId() ."%"]);
$regions->setLimit(1);
$region = $regions->count() ? $regions->getObjects()[0] : null;
if($region) {
$this->demiTownMapping[$town->getId()] = $region;
}
} elseif(array_key_exists( $town->getId(), $this->demiTownMapping ) && $this->demiTownMapping[$town->getId()]) {
$region = $this->demiTownMapping[$town->getId()];
}
return $region;
}
public function getCinestyriaLocationLink(CinestyriaLocation $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if ((!$relative || $prefix == "") && $config->getCinestyriaLocationOverview($lang)) {
$prefix = $config->getCinestyriaLocationOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang)
], 'cinestyria-location-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getCinestyriaCompanyLink(CinestyriaCompany $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getFirstname($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if ((!$relative || $prefix == "") && $config->getCinestyriaCompanyOverview($lang)) {
$prefix = $config->getCinestyriaCompanyOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getFirstname() . $object->getLastname()
], 'cinestyria-company-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getCinestyriaActorLink(CinestyriaActor $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getFirstname() || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if ((!$relative || $prefix == "") && $config->getCinestyriaActorOverview($lang)) {
$prefix = $config->getCinestyriaActorOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getFirstname() . $object->getLastname()
], 'cinestyria-actor-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getBusTravelLink(BusTravel $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getTitle() || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if (!$relative || $prefix == '') {
if($object->getBusType() == 'accommodation' && $config->getBusTravelOverviewAccommodations($lang)) {
$prefix = $config->getBusTravelOverviewAccommodations($lang);
} elseif($object->getBusType() == 'excursionDestination') {
$prefix = $config->getBusTravelOverviewExcursionDestination($lang);
} elseif($config->getBusTravelOverview($lang)) {
$prefix = $config->getBusTravelOverview($lang);
}
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getTitle(),
], 'bus-travel', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getYoungStyriaAccommodationLink(YoungStyriaAccommodation $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if (!$relative || $prefix == '') {
$prefix = $config->getYoungStyriaAccommodationOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang),
], 'young-styria-acco', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getYoungStyriaInfrastructureLink(YoungStyriaInfrastructure $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if (!$relative || $prefix == '') {
$prefix = $config->getYoungStyriaInfrastructureOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getName($lang),
], 'young-styria-infra', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getLandingpageGeneratorLink(LandingpageGenerator $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
$region = $object->getRegion();
if (($region instanceof Region) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $region->getSiteConfig();
if ((!$relative || $prefix == '') && $config) {
$prefix = $config->getHome($lang);
}
$community = null;
if($this->params['communityId'] ?? false) {
$community = Community::getById($this->params['communityId']);
}
if($community) {
$prettyUrlResult = $this->prettyUrl->__invoke([
'gid' => $object->getId(),
'cid' => $community->getId(),
'name' => $object->getCommunityTitleWeb(['o_name' => $community->getName()], $lang),
], 'lp-generator-community', $reset, $encode, $toLanguage);
} else {
$prettyUrlResult = $this->prettyUrl->__invoke([
'gid' => $object->getId(),
'rid' => $region->getId(),
'name' => str_replace("{o_name}", $region->getName(), $object->getTitle($lang)),
], 'lp-generator-region', $reset, $encode, $toLanguage);
}
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
public function getMediaAlbumLink(MediaAlbum $object, $lang, $relative, $prefix, $reset, $encode, $toLanguage) {
$path = '';
if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
$config = $this->config;
if (!$relative || $prefix == '') {
$prefix = $config->getMediaAlbumOverview($lang);
}
$prettyUrlResult = $this->prettyUrl->__invoke([
'id' => $object->getId(),
'name' => $object->getTitle($lang),
], 'press-media-album-detail', $reset, $encode, $toLanguage);
if ($prettyUrlResult){
$path .= $prefix . $prettyUrlResult;
}
}
return $path;
}
private function removeSite(string $prefix, $lang = null)
{
// it can happen (especially with demi links when generating the sitemap) that the site cannot be removed automatically, so this needs to be done manually
$newPath = preg_replace('@^/steiermark\.com/' . '@', '', $prefix);
if($lang) {
$newPath = preg_replace('@^'. $lang . '/' . '@', '', $newPath);
}
return $newPath;
}
}