src/Twig/AlpsteinExtension.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Twig;
  3. use Pimcore\Model\DataObject\AlpsteinRegion;
  4. use Pimcore\Model\DataObject\AlpsteinTour;
  5. use Pimcore\Model\DataObject\Community;
  6. use Pimcore\Model\DataObject\Region;
  7. use Twig\Extension\AbstractExtension;
  8. use Twig\TwigFunction;
  9. class AlpsteinExtension extends AbstractExtension
  10. {
  11.     public function getName(): string
  12.     {
  13.         return "Alpstein Extension";
  14.     }
  15.     public function getFunctions(): array
  16.     {
  17.         return [
  18.             new TwigFunction('getStyriaRegionByAlpsteinTour', [$this'getStyriaRegionByAlpsteinTour']),
  19.             new TwigFunction('getStartingRegionsFromTour', [$this'getStartingRegionsFromTour']),
  20.             new TwigFunction('getFirstStyriaRegion', [$this'getFirstStyriaRegion']),
  21.             new TwigFunction('getFirstStyriaCommunity', [$this'getFirstStyriaCommunity']),
  22.         ];
  23.     }
  24.     public function getStyriaRegionByAlpsteinTour(AlpsteinTour $alpsteinTour) :?Region {
  25.         $styriaRegion null;
  26.         $startingRegions $this->getStartingRegionsFromTour($alpsteinTour);
  27.         if(empty($startingRegions)) {// use first region if no starting region is found
  28.             $regions $alpsteinTour->getRegions();
  29.             if($regions[0] && $regions[0]->getElement()) {
  30.                 $startingRegions = [$regions[0]->getElement()];
  31.             }
  32.         }
  33.         foreach ($startingRegions as $startingRegion) {
  34.             $styriaRegion $this->getFirstStyriaRegion($startingRegion);
  35.             if($styriaRegion instanceof Region) {
  36.                 break;
  37.             }
  38.             $community $this->getFirstStyriaCommunity($startingRegion);
  39.             if($community instanceof Community && $community->getParent() instanceof Region) {
  40.                 $styriaRegion $community->getParent();
  41.                 break;
  42.             }
  43.         }
  44.         return $styriaRegion;
  45.     }
  46.     public function getStartingRegionsFromTour(AlpsteinTour $alpsteinTour) :array {
  47.         $startingRegions = [];
  48.         $regions $alpsteinTour->getRegions();
  49.         foreach($regions as $regionData){
  50.             if ($regionData->getIsStartingRegion()) {
  51.                 $startingRegions[] = $regionData->getElement();
  52.             }
  53.         }
  54.         return $startingRegions;
  55.     }
  56.     public function getFirstStyriaRegion(AlpsteinRegion $alpsteinRegion): ?Region {
  57.         $list =  new Region\Listing();
  58.         $list->addConditionParam("alpsteinRegions like '%," $alpsteinRegion->getId() .",%'");
  59.         return $list->getCount() > $list->getObjects()[0]: null;
  60.     }
  61.     public function getFirstStyriaCommunity(AlpsteinRegion $alpsteinRegion) : ?Community {
  62.         $list =  new Community\Listing();
  63.         $list->addConditionParam("alpsteinObjects like '%," $alpsteinRegion->getId() .",%'");
  64.         return $list->getCount() > $list->getObjects()[0]: null;
  65.     }
  66. }