src/Twig/LinkGenerator.php line 300

Open in your IDE?
  1. <?php
  2. namespace App\Twig;
  3. use Elements\Bundle\DemiFrontendBundle\Service\DemiUrl;
  4. use Elements\Bundle\SeoHelperBundle\Templating\Helper\PrettyUrl;
  5. use Pimcore\Http\Request\Resolver\DocumentResolver;
  6. use Pimcore\Model\DataObject\AlpsteinTour;
  7. use Pimcore\Model\DataObject\Artist;
  8. use Pimcore\Model\DataObject\BlogArticle;
  9. use Pimcore\Model\DataObject\BlogAuthor;
  10. use Pimcore\Model\DataObject\BlogCategory;
  11. use Pimcore\Model\DataObject\BlogPortal;
  12. use Pimcore\Model\DataObject\BusTravel;
  13. use Pimcore\Model\DataObject\CinestyriaActor;
  14. use Pimcore\Model\DataObject\CinestyriaCompany;
  15. use Pimcore\Model\DataObject\CinestyriaLocation;
  16. use Pimcore\Model\DataObject\ClassDefinition\LinkGeneratorInterface;
  17. use Pimcore\Model\DataObject\Community;
  18. use Pimcore\Model\DataObject\ConventionIncentive;
  19. use Pimcore\Model\DataObject\ConventionPartner;
  20. use Pimcore\Model\DataObject\DemiAccommodationServiceProvider;
  21. use Pimcore\Model\DataObject\DemiAdditionalService;
  22. use Pimcore\Model\DataObject\DemiEvent;
  23. use Pimcore\Model\DataObject\DemiHousePackageMaster;
  24. use Pimcore\Model\DataObject\DemiInfrastructure;
  25. use Pimcore\Model\DataObject\DemiRegion;
  26. use Pimcore\Model\DataObject\DemiTown;
  27. use Pimcore\Model\DataObject\LandingpageGenerator;
  28. use Pimcore\Model\DataObject\MediaAlbum;
  29. use Pimcore\Model\DataObject\MediaAsset;
  30. use Pimcore\Model\DataObject\MediaVideo;
  31. use Pimcore\Model\DataObject\Package;
  32. use Pimcore\Model\DataObject\PressArticle;
  33. use Pimcore\Model\DataObject\PressDossier;
  34. use Pimcore\Model\DataObject\Region;
  35. use Pimcore\Model\DataObject\SiteConfig;
  36. use Pimcore\Model\DataObject\YoungStyriaAccommodation;
  37. use Pimcore\Model\DataObject\YoungStyriaInfrastructure;
  38. use Pimcore\Model\Document;
  39. use Pimcore\Model\Site;
  40. use Pimcore\Model\WebsiteSetting;
  41. use Symfony\Component\HttpFoundation\RequestStack;
  42. use Twig\Extension\AbstractExtension;
  43. use Twig\TwigFunction;
  44. class LinkGenerator extends AbstractExtension implements LinkGeneratorInterface
  45. {
  46.     /** @var SiteConfig */
  47.     protected $config;
  48.     /** @var BlogPortal */
  49.     protected $blogPortal;
  50.     /** @var PrettyUrl $prettyUrl */
  51.     protected $prettyUrl;
  52.     /** @var DocumentResolver */
  53.     private $documentResolver;
  54.     /** @var RequestStack */
  55.     private $requestStack;
  56.     /**
  57.      * @var DemiUrl
  58.      */
  59.     private $demiUrl;
  60.     /**
  61.      * @var DemiExtension
  62.      */
  63.     private $demiExtension;
  64.     private $params;
  65.     /**
  66.      * LinkGenerator constructor.
  67.      * @param PrettyUrl $prettyUrl
  68.      * @param DocumentResolver $documentResolver
  69.      * @param RequestStack $requestStack
  70.      * @param DemiUrl $demiUrl
  71.      * @param DemiExtension $demiExtension
  72.      */
  73.     public function __construct(PrettyUrl $prettyUrlDocumentResolver $documentResolverRequestStack $requestStackDemiUrl $demiUrlDemiExtension $demiExtension, protected AlpsteinExtension $alpsteinExtension)
  74.     {
  75.         $this->prettyUrl $prettyUrl;
  76.         $this->documentResolver $documentResolver;
  77.         $this->requestStack $requestStack;
  78.         $websiteSetting WebsiteSetting::getByName('defaultSiteConfig');
  79.         if ($websiteSetting instanceof WebsiteSetting) {
  80.             $this->config $websiteSetting->getData();
  81.         }
  82.         $mainBlogPortal WebsiteSetting::getByName('mainBlogPortal');
  83.         if ($mainBlogPortal instanceof WebsiteSetting) {
  84.             $this->blogPortal $mainBlogPortal->getData();
  85.         }
  86.         $this->demiUrl $demiUrl;
  87.         $this->demiExtension $demiExtension;
  88.     }
  89.     public function getName()
  90.     {
  91.         return "Link Generator";
  92.     }
  93.     /**
  94.      * @return array|TwigFunction[]
  95.      */
  96.     public function getFunctions()
  97.     {
  98.         return [
  99.             new TwigFunction('linkGenerator', [$this'getGenerator']),
  100.         ];
  101.     }
  102.     public function getGenerator() {
  103.         return $this;
  104.     }
  105.     public function generate($object, array $params = []): string
  106.     {
  107.         if (!$object->getPublished() && !\Pimcore::inDebugMode()) {
  108.             return '';
  109.         }
  110.         $this->params $params;
  111.         $path '';
  112.         $prefix '';
  113.         $reset array_key_exists'reset'$params) ? $params['reset'] : true// only set to true if is null
  114.         $relative array_key_exists'relative'$params) ? $params['relative'] : false;
  115.         $encode array_key_exists'encode'$params ) ? $params['encode'] : true// only set to true if is null
  116.         $toLanguage array_key_exists'toLanguage'$params ) ? $params['toLanguage'] : null;
  117.         //LANGUAGE
  118.         $lang false;
  119.         if ( array_key_exists'language'$params) && $params['language'] != '') {
  120.             $lang $params['language'];
  121.         } else {
  122.             try {
  123.                 $request $this->requestStack->getCurrentRequest();
  124.                 if ($request) {
  125.                     $lang $request->getLocale();
  126.                 }
  127.             } catch (\Exception $exception) {
  128.             }
  129.             if (!$lang) {
  130.                 $lang \Pimcore\Tool::getDefaultLanguage();
  131.             }
  132.         }
  133.         if (array_key_exists('preview'$params) ) {
  134.             $lang 'de';
  135.         }
  136.         //DOCUMENT
  137.         $document false;
  138.         if(isset($params['document']) && $params['document'] instanceof Document\Page) {
  139.             $document $params['document'];
  140.         } else {
  141.             try {
  142.                 $document $this->documentResolver->getDocument();
  143.             } catch (\Exception $e) {
  144.                 // DO NOTHING
  145.             }
  146.         }
  147.         if ($document instanceof Document) {
  148.             if ($document instanceof Document\Page) {
  149.                 $prefix $document->getFullPath();
  150.             }
  151.             if ($document->getProperty('siteConfig')) {
  152.                 $this->config $document->getProperty('siteConfig');
  153.             }
  154.             if ($document->getProperty('blogPortal')) {
  155.                 $this->blogPortal $document->getProperty('blogPortal');
  156.             }
  157.         }
  158.         if(!$this->config && WebsiteSetting::getByName('DefaultSiteConfig')) {
  159.             $this->config WebsiteSetting::getByName('DefaultSiteConfig')->getData();
  160.         }
  161.         if(!$this->blogPortal && WebsiteSetting::getByName('mainBlogPortal')) {
  162.             $this->config WebsiteSetting::getByName('mainBlogPortal')->getData();
  163.         }
  164.         $methodName 'get' ucfirst($object->getClassName()) . 'Link';
  165.         if (method_exists($this$methodName)) {
  166.             $path $this->$methodName($object$lang$relative$prefix$reset$encode$toLanguage);
  167.         }
  168.         return $path;
  169.     }
  170.     /**
  171.      * OBJECT FUNCTIONS
  172.      */
  173.     /**
  174.      * @param BlogArticle $object
  175.      * @param $lang
  176.      * @param $relative
  177.      * @param $prefix
  178.      * @param $reset
  179.      * @param $encode
  180.      * @param $toLanguage
  181.      * @return string
  182.      */
  183.     public function getBlogArticleLink(BlogArticle $object$lang$relative$prefix$reset$encode$toLanguage) {
  184.         $path '';
  185.         if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  186.             $blogPortal $this->blogPortal;
  187.             if (!empty($object->getPortals()) && $object->getPortals()[0]) {
  188.                 $blogPortal $object->getPortals()[0];
  189.             }
  190.             if ((!$relative || $prefix == "") && $blogPortal->getOverviewDocument($lang)) {
  191.                 $prefix $blogPortal->getOverviewDocument($lang);
  192.             }
  193.             $prettyUrlResult $this->prettyUrl->__invoke([
  194.                 'id' => $object->getId(),
  195.                 'name' => $object->getTitle($lang)
  196.             ], 'magazinearticle-detail'$reset$encode$toLanguage);
  197.             if ($prettyUrlResult){
  198.                 $path .= $prefix $prettyUrlResult;
  199.             }
  200.         }
  201.         return $path;
  202.     }
  203.     /**
  204.      * @param BlogAuthor $object
  205.      * @param $lang
  206.      * @param $relative
  207.      * @param $prefix
  208.      * @param $reset
  209.      * @param $encode
  210.      * @param $toLanguage
  211.      * @return string
  212.      */
  213.     public function getBlogAuthorLink(BlogAuthor $object$lang$relative$prefix$reset$encode$toLanguage) {
  214.         $path '';
  215.         if ($object->getName() || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  216.             $blogPortal $this->blogPortal;
  217.             if (!empty($object->getPortals()) && $object->getPortals()[0]) {
  218.                 $blogPortal $object->getPortals()[0];
  219.             }
  220.             if ((!$relative || $prefix == "") && $blogPortal->getAuthorsDocument($lang)) {
  221.                 $prefix $blogPortal->getAuthorsDocument($lang);
  222.             }
  223.             $prettyUrlResult $this->prettyUrl->__invoke([
  224.                 'id' => $object->getId(),
  225.                 'name' => $object->getName()
  226.             ], 'magazineauthor-detail'$reset$encode$toLanguage);
  227.             if ($prettyUrlResult){
  228.                 $path .= $prefix $prettyUrlResult;
  229.             }
  230.         }
  231.         return $path;
  232.     }
  233.     /**
  234.      * @param BlogCategory $object
  235.      * @param $lang
  236.      * @param $relative
  237.      * @param $prefix
  238.      * @param $reset
  239.      * @param $encode
  240.      * @param $toLanguage
  241.      * @return string
  242.      */
  243.     public function getBlogCategoryLink(BlogCategory $object$lang$relative$prefix$reset$encode$toLanguage) {
  244.         $path '';
  245.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  246.             $prettyUrlResult $this->blogPortal->getSearchDocument($lang);
  247.             if ($prettyUrlResult) {
  248.                 $path $prettyUrlResult '?category=' $object->getId();
  249.             }
  250.         }
  251.         return $path;
  252.     }
  253.     /**
  254.      * @param AlpsteinTour $object
  255.      * @param $lang
  256.      * @param $relative
  257.      * @param $prefix
  258.      * @param $reset
  259.      * @param $encode
  260.      * @param $toLanguage
  261.      * @return string
  262.      */
  263.     public function getAlpsteinTourLink(AlpsteinTour $object$lang$relative$prefix$reset$encode$toLanguage) {
  264.         $path '';
  265.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  266.             $config null;
  267.             if ($object->getCanonicalSiteConfig() instanceof SiteConfig && $object->getCanonicalSiteConfig()->getTourOverview() != '') {
  268.                 $config $object->getCanonicalSiteConfig();
  269.             }
  270.             if($region $this->alpsteinExtension->getStyriaRegionByAlpsteinTour($object)) {
  271.                 if($region->getSiteConfig()) {
  272.                     $config $region->getSiteConfig();
  273.                 }
  274.             }
  275.             if(empty($config)) {
  276.                 $config $this->config;
  277.             }
  278.             if ((!$relative || $prefix == "") && $config->getTourOverview($lang)) {
  279.                 $prefix $config->getTourOverview($lang);
  280.             }
  281.             $prettyUrlResult $this->prettyUrl->__invoke([
  282.                 'id' => $object->getId(),
  283.                 'name' => $object->getName($lang)
  284.             ], 'tour-detail'$reset$encode$toLanguage);
  285.             if ($prettyUrlResult){
  286.                 $path .= $prefix $prettyUrlResult;
  287.             }
  288.         }
  289.         return $path;
  290.     }
  291.     /**
  292.      * @param DemiInfrastructure $object
  293.      * @param $lang
  294.      * @param $relative
  295.      * @param $prefix
  296.      * @param $reset
  297.      * @param $encode
  298.      * @param $toLanguage
  299.      * @return string
  300.      */
  301.     public function getDemiInfrastructureLink(DemiInfrastructure $object$lang$relative$prefix$reset$encode$toLanguage) {
  302.         $path '';
  303.         if ($object->getName($lang) || array_key_exists'preview'$this->params)){
  304.             if (!$relative || $prefix == "") {
  305.                 $region false;
  306.                 if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
  307.                     $region $object->getDemiExtension()->getDemiCanonicalRegion();
  308.                 } else {
  309.                     foreach ($object->getTowns() as $town) {
  310.                         $region $this->getRegionFromDemiTown($town);
  311.                         if ($region instanceof Region) {
  312.                             break;
  313.                         }
  314.                     }
  315.                 }
  316.                 $config $this->demiExtension->getDemiConfigurationHelper();
  317.                 if ((!$relative || $prefix == "") && $config->getInfrastructureDetailPath($lang)) {
  318.                     $prefix $config->getInfrastructureDetailPath($lang);
  319.                 }
  320.                 if ($region instanceof Region && $region->getIsLive() && !$config->getIsWhitelabel()) {
  321.                     $config $region->getSiteConfig();
  322.                     if ($config->getInfrastructureOverview($lang)) {
  323.                         $prefix $config->getInfrastructureOverview($lang);
  324.                     }
  325.                 }
  326.             }
  327.             $prettyUrlResult null;
  328.             try {
  329.                 $prettyUrlResult $this->demiUrl->__invoke([
  330.                     '_locale' => $lang,
  331.                     'path' => $this->removeSite((string)$prefix$lang),
  332.                     'id' => $object->getId(),
  333.                     'name' => $object->getName($lang)
  334.                 ], (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);
  335.             } catch (\Throwable $exception) {
  336.                 // ....
  337.             }
  338.             if ($prettyUrlResult){
  339.                 $path .= $prettyUrlResult;
  340.             }
  341.         }
  342.         return $path;
  343.     }
  344.     /**
  345.      * @param DemiEvent $object
  346.      * @param $lang
  347.      * @param $relative
  348.      * @param $prefix
  349.      * @param $reset
  350.      * @param $encode
  351.      * @param $toLanguage
  352.      * @return string
  353.      */
  354.     public function getDemiEventLink(DemiEvent $object$lang$relative$prefix$reset$encode$toLanguage) {
  355.         $path '';
  356.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  357.             if (!$relative || $prefix == "") {
  358.                 $region false;
  359.                 if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
  360.                     $region $object->getDemiExtension()->getDemiCanonicalRegion();
  361.                 } else {
  362.                     foreach ($object->getTowns() as $town) {
  363.                         $region $this->getRegionFromDemiTown($town);
  364.                         if ($region instanceof Region) {
  365.                             break;
  366.                         }
  367.                     }
  368.                 }
  369.                 $config $this->demiExtension->getDemiConfigurationHelper();
  370.                 if ($config->getEventDetailPath($lang)) {
  371.                     $prefix $config->getEventDetailPath($lang);
  372.                 }
  373.                 if ($region instanceof Region && $region->getIsLive() && !$config->getIsWhitelabel()) {
  374.                     $config $region->getSiteConfig();
  375.                     if ($config->getEventOverview($lang)) {
  376.                         $prefix $config->getEventOverview($lang);
  377.                     }
  378.                 }
  379.             }
  380.             $prettyUrlResult null;
  381.             $routeName = (array_key_exists('route'$this->params ?: []) && strpos($this->params['route'], 'document_') !== &&
  382.                 $this->params['route'] !== "demi_event_list") ?
  383.                 $this->params['route'] : 'demi_event_detail';
  384.             try {
  385.                 $prettyUrlResult $this->demiUrl->__invoke([
  386.                     '_locale' => $lang,
  387.                     'path' => $this->removeSite((string)$prefix$lang),
  388.                     'name' => $object->getName($lang),
  389.                     'id' => $object->getId()
  390.                 ],$routeName $reset$encode$toLanguage);
  391.             } catch (\Throwable $exception) {}
  392.             if ($prettyUrlResult){
  393.                 $path .= $prettyUrlResult;
  394.             }
  395.         }
  396. //        p_r($prettyUrlResult, $lang, $this->removeSite((string)$prefix, $lang)); die();
  397.         return $path;
  398.     }
  399.     /**
  400.      * @param DemiAccommodationServiceProvider $object
  401.      * @param $lang
  402.      * @param $relative
  403.      * @param $prefix
  404.      * @param $reset
  405.      * @param $encode
  406.      * @param $toLanguage
  407.      * @return string
  408.      */
  409.     public function getDemiAccommodationServiceProviderLink(DemiAccommodationServiceProvider $object$lang$relative$prefix$reset$encode$toLanguage) {
  410.         $path '';
  411.         $prettyUrlResult '';
  412.         try {
  413.             $prettyUrlResult $this->demiUrl->__invoke([
  414.                 'accommodation' => $object
  415.             ], array_key_exists('route'$this->params ?: []) ? $this->params['route'] : 'demi_acco_detail_page'$reset$encode$toLanguage);
  416.         } catch (\Throwable $exception) {
  417.             // .....
  418.         }
  419.         if (!$relative || $prefix == "") {
  420.             if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
  421.                 $region $object->getDemiExtension()->getDemiCanonicalRegion();
  422.             } else {
  423.                 $region $this->getRegionFromDemiTown($object->getTown());
  424.             }
  425.             if ($region instanceof Region && $region->getIsLive()) {
  426.                 $config $region->getSiteConfig();
  427.                 if ($config && $config->getAccommodationOverview($lang)) {
  428.                     $demiConfig $this->demiExtension->getDemiConfigurationHelper();
  429.                     $oldPrefix $demiConfig->getAccoParentDocument();
  430.                     $prefix $config->getAccommodationOverview($lang);
  431.                     $prettyUrlResult str_replace($oldPrefix$prefix$prettyUrlResult);
  432.                 }
  433.             }
  434.         }
  435.         if ($prettyUrlResult){
  436.             $path .= $prettyUrlResult;
  437.         }
  438.         return $path;
  439.     }
  440.     /**
  441.      * @param DemiHousePackageMaster $object
  442.      * @param $lang
  443.      * @param $relative
  444.      * @param $prefix
  445.      * @param $reset
  446.      * @param $encode
  447.      * @param $toLanguage
  448.      * @return string
  449.      */
  450.     public function getDemiHousePackageMasterLink(DemiHousePackageMaster $object$lang$relative$prefix$reset$encode$toLanguage) {
  451.         $path '';
  452.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  453.             if (!$relative || $prefix == "") {
  454.                 $region false;
  455.                 if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
  456.                     $region $object->getDemiExtension()->getDemiCanonicalRegion();
  457.                 } else {
  458.                     $region $object->getServiceProvider() ? $this->getRegionFromDemiTown($object->getServiceProvider()->getTown()) : null;
  459.                 }
  460.                 if ((!$relative || $prefix == "") && $this->config->getHousePackageMasterOverview($lang)) { // TODO find correct overview page here
  461.                     $prefix $this->config->getHousePackageMasterOverview($lang);
  462.                 }
  463.                 if ($region instanceof Region && $region->getIsLive()) {
  464.                     $config $region->getSiteConfig();
  465.                     if ($config->getHousePackageMasterOverview($lang)) {
  466.                         $prefix $config->getHousePackageMasterOverview($lang);
  467.                     }
  468.                 }
  469.             }
  470.             try {
  471.                 if (!empty($prefix)) {
  472.                     $prettyUrlResult $this->demiUrl->__invoke([
  473.                         'path' => $prefix,
  474.                         'accommodation' => $object->getServiceProvider(),
  475.                         'package' => $object
  476.                     ], (array_key_exists('route'$this->params ?: []) && strpos($this->params['route'],
  477.                             'document_') !== 0) ? $this->params['route'] : 'demi_acco_detail_package_page'$reset,
  478.                         $encode$toLanguage);
  479.                 } else {
  480.                     $prettyUrlResult $this->demiUrl->__invoke([
  481.                         'accommodation' => $object->getServiceProvider(),
  482.                         'package' => $object
  483.                     ], (array_key_exists('route'$this->params ?: []) && strpos($this->params['route'],
  484.                             'document_') !== 0) ? $this->params['route'] : 'demi_acco_detail_package_page'$reset,
  485.                         $encode$toLanguage);
  486.                 }
  487.             } catch (\Throwable $exception) {
  488.                 // ....
  489.             }
  490.             if ($prettyUrlResult){
  491.                 $path .= $prettyUrlResult;
  492.             }
  493.         }
  494.         return $path;
  495.     }
  496.     /**
  497.      * @param DemiAdditionalService $object
  498.      * @param $lang
  499.      * @param $relative
  500.      * @param $prefix
  501.      * @param $reset
  502.      * @param $encode
  503.      * @param $toLanguage
  504.      * @return string
  505.      */
  506.     public function getDemiAdditionalServiceLink(DemiAdditionalService $object$lang$relative$prefix$reset$encode$toLanguage) {
  507.         $path '';
  508.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  509.             if (!$relative || $prefix == "") {
  510.                 $region false;
  511.                 if ($object->getDemiExtension() && $object->getDemiExtension()->getDemiCanonicalRegion() instanceof Region) {
  512.                     $region $object->getDemiExtension()->getDemiCanonicalRegion();
  513.                 } else {
  514.                     $region $this->getRegionFromDemiTown($object->getServiceProvider()->getTown());
  515.                 }
  516.                 $config $this->demiExtension->getDemiConfigurationHelper();
  517.                 if ($config->getAdditionalServiceDetailPath($lang)) {
  518.                     $prefix $config->getAdditionalServiceDetailPath($lang);
  519.                 }
  520.                 if ($region instanceof Region && $region->getIsLive()) {
  521.                     $config $region->getSiteConfig();
  522.                     if ((!$relative || $prefix == "") && $config->getAdditionalServiceOverview($lang)) {
  523.                         $prefix $config->getAdditionalServiceOverview($lang);
  524.                     }
  525.                 }
  526.             }
  527.             $prettyUrlResult null;
  528.             try {
  529.                 if(!empty($prefix)) {
  530.                     $prettyUrlResult $this->demiUrl->__invoke([
  531.                         'path' => $this->removeSite((string)$prefix$lang),
  532.                         'id' => $object->getId(),
  533.                         'name' => $object->getName($lang)
  534.                     ], (array_key_exists('route'$this->params ?: []) && strpos($this->params['route'], 'document_') !== 0)
  535.                         && $this->params['route'] !== "demi_additionalservice_list" $this->params['route'] : 'demi_additionalservice_detail'$reset$encode$toLanguage);
  536.                 }else {
  537.                     $prettyUrlResult $this->demiUrl->__invoke([
  538.                         'id' => $object->getId(),
  539.                         'name' => $object->getName($lang)
  540.                     ], (array_key_exists('route'$this->params ?: []) && strpos($this->params['route'], 'document_') !== 0)
  541.                         && $this->params['route'] !== "demi_additionalservice_list" $this->params['route'] : 'demi_additionalservice_detail'$reset$encode$toLanguage);
  542.                 }
  543.             } catch (\Throwable $exception) {
  544.                 // ....
  545.             }
  546.             if ($prettyUrlResult){
  547.                 $path .= $prettyUrlResult;
  548.             }
  549.         }
  550.         return $path;
  551.     }
  552.     /**
  553.      * @param Package $object
  554.      * @param $lang
  555.      * @param $relative
  556.      * @param $prefix
  557.      * @param $reset
  558.      * @param $encode
  559.      * @param $toLanguage
  560.      * @return string
  561.      */
  562.     public function getPackageLink(Package $object$lang$relative$prefix$reset$encode$toLanguage) {
  563.         $path '';
  564.         if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] ) ){
  565.             $config $this->config;
  566.             if (!$relative || $prefix == "") {
  567.                 if (!$object->getIgnoreRegionsForLink() && !empty($object->getRegions())) {
  568.                     foreach ($object->getRegions() as $region) {
  569.                         if ($region->getIsLive() && $region->getSiteConfig()) {
  570.                             $config $region->getSiteConfig();
  571.                             breaK;
  572.                         }
  573.                     }
  574.                 }
  575.                 if ($config && $config->getPackageOverview($lang)) {
  576.                     $prefix $config->getPackageOverview($lang);
  577.                 }
  578.             }
  579.             $prettyUrlResult $this->prettyUrl->__invoke([
  580.                 'id' => $object->getId(),
  581.                 'name' => $object->getTitle($lang)
  582.             ], 'package-detail'$reset$encode$toLanguage);
  583.             if ($prettyUrlResult){
  584.                 $path .= $prefix $prettyUrlResult;
  585.             }
  586.         }
  587.         return $path;
  588.     }
  589.     /**
  590.      * @param MediaVideo $object
  591.      * @param $lang
  592.      * @param $relative
  593.      * @param $prefix
  594.      * @param $reset
  595.      * @param $encode
  596.      * @param $toLanguage
  597.      * @return string
  598.      */
  599.     public function getMediaVideoLink(MediaVideo $object$lang$relative$prefix$reset$encode$toLanguage) {
  600.         $path '';
  601.         $title $object->getVideo2()->getType() === 'asset' ? ($object->getVideo2()->getData()->getMetadata('General.title'$lang) ?: $object->getVideo2()->getData()->getFilename()) : $object->getTitle($lang);
  602.         if ($title || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  603.             if (!$relative || $prefix == "") {
  604.                 $config $this->config;
  605.                 if (!empty($object->getRegions())) {
  606.                     foreach ($object->getRegions() as $region) {
  607.                         if ($region->getIsLive() && $region->getSiteConfig()) {
  608.                             $config $region->getSiteConfig();
  609.                             breaK;
  610.                         }
  611.                     }
  612.                 }
  613.                 if ($config && $config->getMediaVideosOverview($lang)) {
  614.                     $prefix $config->getMediaVideosOverview($lang);
  615.                 }
  616.             }
  617.             $prettyUrlResult $this->prettyUrl->__invoke([
  618.                 'id' => $object->getId(),
  619.                 'name' => $title
  620.             ], 'mediaarchive-video-detail'$reset$encode$toLanguage);
  621.             if ($prettyUrlResult){
  622.                 $path .= $prefix $prettyUrlResult;
  623.             }
  624.         }
  625.         return $path;
  626.     }
  627.     /**
  628.      * @param MediaAsset $object
  629.      * @param $lang
  630.      * @param $relative
  631.      * @param $prefix
  632.      * @param $reset
  633.      * @param $encode
  634.      * @param $toLanguage
  635.      * @return string
  636.      */
  637.     public function getMediaAssetLink(MediaAsset $object$lang$relative$prefix$reset$encode$toLanguage) {
  638.         $path '';
  639.         $title $object->getTitle() ?: $object?->getPosterImage()?->getMetadata('General.title'$lang);
  640.         if ($title || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  641.             if (!$relative || $prefix == "") {
  642.                 $config $this->config;
  643.                 if (!empty($object->getRegions())) {
  644.                     foreach ($object->getRegions() as $region) {
  645.                         if ($region->getIsLive() && $region->getSiteConfig()) {
  646.                             $config $region->getSiteConfig();
  647.                             breaK;
  648.                         }
  649.                     }
  650.                 }
  651.                 if ($config && $config->getMediaAssetOverview($lang)) {
  652.                     $prefix $config->getMediaAssetOverview($lang);
  653.                 }
  654.             }
  655.             $prettyUrlResult $this->prettyUrl->__invoke([
  656.                 'id' => $object->getId(),
  657.                 'name' => $title
  658.             ], 'mediaasset-detail'$reset$encode$toLanguage);
  659.             if ($prettyUrlResult){
  660.                 $path .= $prefix $prettyUrlResult;
  661.             }
  662.         }
  663.         return $path;
  664.     }
  665.     /**
  666.      * @param ConventionPartner $object
  667.      * @param $lang
  668.      * @param $relative
  669.      * @param $prefix
  670.      * @param $reset
  671.      * @param $encode
  672.      * @param $toLanguage
  673.      * @return string
  674.      */
  675.     public function getConventionPartnerLink(ConventionPartner $object$lang$relative$prefix$reset$encode$toLanguage) {
  676.         $path '';
  677.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  678.             $config $this->config;
  679. //            if ($object->getRegions()[0] && $object->getRegions()[0]->getSiteConfig()) {
  680. //                $config = $object->getRegions()[0]->getSiteConfig();
  681. //            }
  682.             if ((!$relative || $prefix == "") && $config->getConventionOverview($lang)) {
  683.                 $prefix $config->getConventionOverview($lang);
  684.             }
  685.             $prettyUrlResult $this->prettyUrl->__invoke([
  686.                 'id' => $object->getId(),
  687.                 'name' => $object->getName($lang)
  688.             ], 'convention-partner-detail'$reset$encode$toLanguage);
  689.             if ($prettyUrlResult){
  690.                 $path .= $prefix $prettyUrlResult;
  691.             }
  692.         }
  693.         return $path;
  694.     }
  695.     /**
  696.      * @param ConventionIncentive $object
  697.      * @param $lang
  698.      * @param $relative
  699.      * @param $prefix
  700.      * @param $reset
  701.      * @param $encode
  702.      * @param $toLanguage
  703.      * @return string
  704.      */
  705.     public function getConventionIncentiveLink(ConventionIncentive $object$lang$relative$prefix$reset$encode$toLanguage) {
  706.         $path '';
  707.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  708.             $config $this->config;
  709. //            if ($object->getRegions()[0] && $object->getRegions()[0]->getSiteConfig()) {
  710. //                $config = $object->getRegions()[0]->getSiteConfig();
  711. //            }
  712.             if ((!$relative || $prefix == "") && $config->getIncentivesOverview($lang)) {
  713.                 $prefix $config->getIncentivesOverview($lang);
  714.             }
  715.             $prettyUrlResult $this->prettyUrl->__invoke([
  716.                 'id' => $object->getId(),
  717.                 'name' => $object->getName($lang)
  718.             ], 'convention-incentive-detail'$reset$encode$toLanguage);
  719.             if ($prettyUrlResult){
  720.                 $path .= $prefix $prettyUrlResult;
  721.             }
  722.         }
  723.         return $path;
  724.     }
  725.     /**
  726.      * @param Artist $object
  727.      * @param $lang
  728.      * @param $relative
  729.      * @param $prefix
  730.      * @param $reset
  731.      * @param $encode
  732.      * @param $toLanguage
  733.      * @return string
  734.      */
  735.     public function getArtistLink(Artist $object$lang$relative$prefix$reset$encode$toLanguage) {
  736.         $path '';
  737.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  738.             $config $this->config;
  739. //            if ($object->getRegions()[0] && $object->getRegions()[0]->getSiteConfig()) {
  740. //                $config = $object->getRegions()[0]->getSiteConfig();
  741. //            }
  742.             if ((!$relative || $prefix == "") && $config->getMudabaOverview($lang)) {
  743.                 $prefix $config->getMudabaOverview($lang);
  744.             }
  745.             $prettyUrlResult $this->prettyUrl->__invoke([
  746.                 'id' => $object->getId(),
  747.                 'name' => $object->getName($lang)
  748.             ], 'artist-detail'$reset$encode$toLanguage);
  749.             if ($prettyUrlResult){
  750.                 $path .= $prefix $prettyUrlResult;
  751.             }
  752.         }
  753.         return $path;
  754.     }
  755.     /**
  756.      * @param PressArticle $object
  757.      * @param $lang
  758.      * @param $relative
  759.      * @param $prefix
  760.      * @param $reset
  761.      * @param $encode
  762.      * @param $toLanguage
  763.      * @return string
  764.      */
  765.     public function getPressArticleLink(PressArticle $object$lang$relative$prefix$reset$encode$toLanguage) {
  766.         $path '';
  767.         if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  768.             $config $this->config;
  769.             if ((!$relative || $prefix == "") && $config->getPressOverview($lang)) {
  770.                 $prefix $config->getPressOverview($lang);
  771.             }
  772.             $prettyUrlResult $this->prettyUrl->__invoke([
  773.                 'id' => $object->getId(),
  774.                 'name' => $object->getTitle($lang)
  775.             ], 'press-article-detail'$reset$encode$toLanguage);
  776.             if ($prettyUrlResult){
  777.                 $path .= $prefix $prettyUrlResult;
  778.             }
  779.         }
  780.         return $path;
  781.     }
  782.     /**
  783.      * @param PressDossier $object
  784.      * @param $lang
  785.      * @param $relative
  786.      * @param $prefix
  787.      * @param $reset
  788.      * @param $encode
  789.      * @param $toLanguage
  790.      * @return string
  791.      */
  792.     public function getPressDossierLink(PressDossier $object$lang$relative$prefix$reset$encode$toLanguage) {
  793.         $path '';
  794.         if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  795.             $config $this->config;
  796.             if ((!$relative || $prefix == "") && $config->getPressOverview($lang)) {
  797.                 $prefix $config->getPressOverview($lang);
  798.             }
  799.             $prettyUrlResult $this->prettyUrl->__invoke([
  800.                 'id' => $object->getId(),
  801.                 'name' => $object->getTitle($lang)
  802.             ], 'press-dossier-detail'$reset$encode$toLanguage);
  803.             if ($prettyUrlResult){
  804.                 $path .= $prefix $prettyUrlResult;
  805.             }
  806.         }
  807.         return $path;
  808.     }
  809.     /**
  810.      * @param Community $object
  811.      * @param $lang
  812.      * @param $relative
  813.      * @param $prefix
  814.      * @param $reset
  815.      * @param $encode
  816.      * @param $toLanguage
  817.      * @return string
  818.      */
  819.     public function getCommunityLink(Community $object$lang$relative$prefix$reset$encode$toLanguage) {
  820.         $path '';
  821.         $name $object->getNameLocalized($lang) ?: $object->getName();
  822.         if ($name || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  823.             if (!$relative || $prefix == "") {
  824.                 $config $this->config;
  825.                 $parent $object->getParent();
  826.                 if ($parent instanceof Region && $parent->getIsLive() && $parent->getSiteConfig()) {
  827.                     $config $parent->getSiteConfig();
  828.                 }
  829.                 if ($config && !$config->getCommunityOverview($lang)) {
  830.                     //check main region
  831.                     $mainRegion WebsiteSetting::getByName('mainRegion') ? WebsiteSetting::getByName('mainRegion')->getDao() : null;
  832.                     if ($mainRegion instanceof Region) {
  833.                         $config $mainRegion->getSiteConfig();
  834.                     }
  835.                 }
  836.                 if ((!$relative || $prefix == "") && $config && $config->getCommunityOverview($lang)) {
  837.                     $prefix $config->getCommunityOverview($lang);
  838.                 }
  839.             }
  840.             $prettyUrlResult $this->prettyUrl->__invoke([
  841.                 'id' => $object->getId(),
  842.                 'name' => $name
  843.             ], 'community-detail'$reset$encode$toLanguage);
  844.             if ($prettyUrlResult){
  845.                 $path .= $prefix $prettyUrlResult;
  846.             }
  847.         }
  848.         return $path;
  849.     }
  850.     private $demiTownMapping = [];
  851.     /**
  852.      * @param DemiTown|DemiRegion $town
  853.      * @return mixed
  854.      */
  855.     public function getRegionFromDemiTown($town)
  856.     {
  857.         if ($town == '') {
  858.             return null;
  859.         }
  860.         $region null;
  861.         if(!array_key_exists$town->getId(), $this->demiTownMapping ) && ($demiRegion $town->getRegion())) {
  862.             $regions = new Region\Listing();
  863.             $regions->addConditionParam('IFNULL(isLive,0) = 1 and demiFilterObject__id IN (select o_id
  864.                               from object_31
  865.                               where filterElements LIKE :demiRegionId AND o_key != "Steiermark")', ['demiRegionId' => "%,"$demiRegion->getId() ."%"]);
  866.             $regions->setLimit(1);
  867.             $region $regions->count() ? $regions->getObjects()[0] : null;
  868.             if($region) {
  869.                 $this->demiTownMapping[$town->getId()] = $region;
  870.             }
  871.         } elseif(array_key_exists$town->getId(), $this->demiTownMapping ) && $this->demiTownMapping[$town->getId()]) {
  872.             $region $this->demiTownMapping[$town->getId()];
  873.         }
  874.         return $region;
  875.     }
  876.     public function getCinestyriaLocationLink(CinestyriaLocation $object$lang$relative$prefix$reset$encode$toLanguage) {
  877.         $path '';
  878.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  879.             $config $this->config;
  880.             if ((!$relative || $prefix == "") && $config->getCinestyriaLocationOverview($lang)) {
  881.                 $prefix $config->getCinestyriaLocationOverview($lang);
  882.             }
  883.             $prettyUrlResult $this->prettyUrl->__invoke([
  884.                 'id' => $object->getId(),
  885.                 'name' => $object->getName($lang)
  886.             ], 'cinestyria-location-detail'$reset$encode$toLanguage);
  887.             if ($prettyUrlResult){
  888.                 $path .= $prefix $prettyUrlResult;
  889.             }
  890.         }
  891.         return $path;
  892.     }
  893.     public function getCinestyriaCompanyLink(CinestyriaCompany $object$lang$relative$prefix$reset$encode$toLanguage) {
  894.         $path '';
  895.         if ($object->getFirstname($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  896.             $config $this->config;
  897.             if ((!$relative || $prefix == "") && $config->getCinestyriaCompanyOverview($lang)) {
  898.                 $prefix $config->getCinestyriaCompanyOverview($lang);
  899.             }
  900.             $prettyUrlResult $this->prettyUrl->__invoke([
  901.                 'id' => $object->getId(),
  902.                 'name' => $object->getFirstname() . $object->getLastname()
  903.             ], 'cinestyria-company-detail'$reset$encode$toLanguage);
  904.             if ($prettyUrlResult){
  905.                 $path .= $prefix $prettyUrlResult;
  906.             }
  907.         }
  908.         return $path;
  909.     }
  910.     public function getCinestyriaActorLink(CinestyriaActor $object$lang$relative$prefix$reset$encode$toLanguage) {
  911.         $path '';
  912.         if ($object->getFirstname() || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  913.             $config $this->config;
  914.             if ((!$relative || $prefix == "") && $config->getCinestyriaActorOverview($lang)) {
  915.                 $prefix $config->getCinestyriaActorOverview($lang);
  916.             }
  917.             $prettyUrlResult $this->prettyUrl->__invoke([
  918.                 'id' => $object->getId(),
  919.                 'name' => $object->getFirstname() . $object->getLastname()
  920.             ], 'cinestyria-actor-detail'$reset$encode$toLanguage);
  921.             if ($prettyUrlResult){
  922.                 $path .= $prefix $prettyUrlResult;
  923.             }
  924.         }
  925.         return $path;
  926.     }
  927.     public function getBusTravelLink(BusTravel $object$lang$relative$prefix$reset$encode$toLanguage) {
  928.         $path '';
  929.         if ($object->getTitle() || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  930.             $config $this->config;
  931.             if (!$relative || $prefix == '') {
  932.                 if($object->getBusType() == 'accommodation' && $config->getBusTravelOverviewAccommodations($lang)) {
  933.                     $prefix $config->getBusTravelOverviewAccommodations($lang);
  934.                 } elseif($object->getBusType() == 'excursionDestination') {
  935.                     $prefix $config->getBusTravelOverviewExcursionDestination($lang);
  936.                 } elseif($config->getBusTravelOverview($lang)) {
  937.                     $prefix $config->getBusTravelOverview($lang);
  938.                 }
  939.             }
  940.             $prettyUrlResult $this->prettyUrl->__invoke([
  941.                 'id' => $object->getId(),
  942.                 'name' => $object->getTitle(),
  943.             ], 'bus-travel'$reset$encode$toLanguage);
  944.             if ($prettyUrlResult){
  945.                 $path .= $prefix $prettyUrlResult;
  946.             }
  947.         }
  948.         return $path;
  949.     }
  950.     public function getYoungStyriaAccommodationLink(YoungStyriaAccommodation $object$lang$relative$prefix$reset$encode$toLanguage) {
  951.         $path '';
  952.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  953.             $config $this->config;
  954.             if (!$relative || $prefix == '') {
  955.                 $prefix $config->getYoungStyriaAccommodationOverview($lang);
  956.             }
  957.             $prettyUrlResult $this->prettyUrl->__invoke([
  958.                 'id' => $object->getId(),
  959.                 'name' => $object->getName($lang),
  960.             ], 'young-styria-acco'$reset$encode$toLanguage);
  961.             if ($prettyUrlResult){
  962.                 $path .= $prefix $prettyUrlResult;
  963.             }
  964.         }
  965.         return $path;
  966.     }
  967.     public function getYoungStyriaInfrastructureLink(YoungStyriaInfrastructure $object$lang$relative$prefix$reset$encode$toLanguage) {
  968.         $path '';
  969.         if ($object->getName($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  970.             $config $this->config;
  971.             if (!$relative || $prefix == '') {
  972.                 $prefix $config->getYoungStyriaInfrastructureOverview($lang);
  973.             }
  974.             $prettyUrlResult $this->prettyUrl->__invoke([
  975.                 'id' => $object->getId(),
  976.                 'name' => $object->getName($lang),
  977.             ], 'young-styria-infra'$reset$encode$toLanguage);
  978.             if ($prettyUrlResult){
  979.                 $path .= $prefix $prettyUrlResult;
  980.             }
  981.         }
  982.         return $path;
  983.     }
  984.     public function getLandingpageGeneratorLink(LandingpageGenerator $object$lang$relative$prefix$reset$encode$toLanguage) {
  985.         $path '';
  986.         $region $object->getRegion();
  987.         if (($region instanceof Region) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  988.             $config $region->getSiteConfig();
  989.             if ((!$relative || $prefix == '') && $config) {
  990.                 $prefix $config->getHome($lang);
  991.             }
  992.             $community null;
  993.             if($this->params['communityId'] ?? false) {
  994.                 $community Community::getById($this->params['communityId']);
  995.             }
  996.             if($community) {
  997.                 $prettyUrlResult $this->prettyUrl->__invoke([
  998.                     'gid' => $object->getId(),
  999.                     'cid' => $community->getId(),
  1000.                     'name' => $object->getCommunityTitleWeb(['o_name' => $community->getName()], $lang),
  1001.                 ], 'lp-generator-community'$reset$encode$toLanguage);
  1002.             } else {
  1003.                 $prettyUrlResult $this->prettyUrl->__invoke([
  1004.                     'gid' => $object->getId(),
  1005.                     'rid' => $region->getId(),
  1006.                     'name' => str_replace("{o_name}"$region->getName(), $object->getTitle($lang)),
  1007.                 ], 'lp-generator-region'$reset$encode$toLanguage);
  1008.             }
  1009.             if ($prettyUrlResult){
  1010.                 $path .= $prefix $prettyUrlResult;
  1011.             }
  1012.         }
  1013.         return $path;
  1014.     }
  1015.     public function getMediaAlbumLink(MediaAlbum $object$lang$relative$prefix$reset$encode$toLanguage) {
  1016.         $path '';
  1017.         if ($object->getTitle($lang) || ( isset( $this->params['preview'] ) && $this->params['preview'] )){
  1018.             $config $this->config;
  1019.             if (!$relative || $prefix == '') {
  1020.                 $prefix $config->getMediaAlbumOverview($lang);
  1021.             }
  1022.             $prettyUrlResult $this->prettyUrl->__invoke([
  1023.                 'id' => $object->getId(),
  1024.                 'name' => $object->getTitle($lang),
  1025.             ], 'press-media-album-detail'$reset$encode$toLanguage);
  1026.             if ($prettyUrlResult){
  1027.                 $path .= $prefix $prettyUrlResult;
  1028.             }
  1029.         }
  1030.         return $path;
  1031.     }
  1032.     private function removeSite(string $prefix$lang null)
  1033.     {
  1034.         // 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
  1035.         $newPath preg_replace('@^/steiermark\.com/' '@'''$prefix);
  1036.         if($lang) {
  1037.             $newPath preg_replace('@^'$lang '/' '@'''$newPath);
  1038.         }
  1039.         return $newPath;
  1040.     }
  1041. }