src/Controller/WebController.php line 256

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\CategoryConfigurationService;
  4. use App\Service\SAGEApiService;
  5. use App\Service\LocationService;
  6. use App\Helper\StoryblokHelper;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  12. use Symfony\Component\HttpKernel\Exception\HttpException;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Storyblok;
  15. class WebController extends AbstractController
  16. {
  17.     private $storyblok;
  18.     private $logger;
  19.     private $requestStack;
  20.     private $categoryConfigurationService;
  21.     private $locationService;
  22.     private $defaultLocale;
  23.     private $countryLanguageMapping;
  24.     private $storyblokHelper;
  25.     private $micrositeNameMap;
  26.     private $aimsUseNewComponentsLanguages;
  27.     private $aimsUseNewComponentsLanguagesEditMode;
  28.     private $sageApiService;
  29.     private $backendUrlAWS;
  30.     public function __construct(
  31.         string $defaultLocale,
  32.         array $countryLanguageMapping,
  33.         array $micrositeNameMap,
  34.         array $aimsUseNewComponentsLanguages,
  35.         array $aimsUseNewComponentsLanguagesEditMode,
  36.         string $backendUrlAWS,
  37.         Storyblok\Client $storyblok,
  38.         CategoryConfigurationService $categoryConfigurationService,
  39.         LoggerInterface $logger,
  40.         RequestStack $requestStack,
  41.         LocationService $locationService,
  42.         StoryblokHelper $storyblokHelper,
  43.         SAGEApiService $sageApiService
  44.     ) {
  45.         $this->storyblok $storyblok;
  46.         $this->logger $logger;
  47.         $this->requestStack $requestStack;
  48.         $this->categoryConfigurationService $categoryConfigurationService;
  49.         $this->locationService $locationService;
  50.         $this->defaultLocale $defaultLocale;
  51.         $this->countryLanguageMapping $countryLanguageMapping;
  52.         $this->storyblokHelper $storyblokHelper;
  53.         $this->micrositeNameMap $micrositeNameMap;
  54.         $this->aimsUseNewComponentsLanguages $aimsUseNewComponentsLanguages;
  55.         $this->aimsUseNewComponentsLanguagesEditMode $aimsUseNewComponentsLanguagesEditMode;
  56.         $this->sageApiService $sageApiService;
  57.         $this->backendUrlAWS $backendUrlAWS;
  58.     }
  59.     public function home()
  60.     {
  61.         try {
  62.             $currentLocation $this->locationService->getCurrentLocation();
  63.             $countryCode $currentLocation;
  64.             if (isset($this->countryLanguageMapping[$countryCode])) {
  65.                 $locale $this->countryLanguageMapping[$countryCode];
  66.             } else {
  67.                 $locale $this->defaultLocale;
  68.             }
  69.             if ($this->requestStack->getCurrentRequest()->headers->has('X-Microsite')) {
  70.                 $microsite $this->requestStack->getCurrentRequest()->headers->get('X-Microsite');
  71.                 if ($microsite === 'activationcode') {
  72.                     $locale 'en_global';
  73.                 }
  74.             }
  75.             $queryParams = [
  76.                 "_locale" => $locale,
  77.                 "redirect" => "true"
  78.             ];
  79.             $acQueryParam $this->requestStack->getCurrentRequest()->query->get('ac');
  80.             if ($acQueryParam) {
  81.                 $queryParams['ac'] = $acQueryParam;
  82.             }
  83.             return $this->redirectToRoute("lang"$queryParams);
  84.         } catch (\Exception $e) {
  85.             return $this->redirectToRoute("lang", [
  86.                 "_locale" => 'en_global',
  87.                 "redirect" => "true"
  88.             ]);
  89.         }
  90.     }
  91.     public function shortlink($slug)
  92.     {
  93.         $client = new \GuzzleHttp\Client();
  94.         $res $client->request(
  95.             'GET',
  96.             $this->backendUrlAWS '/short-url' $slug,
  97.             [
  98.                 'headers' => ['X-Site-ID' => 'DENT'],
  99.             ]
  100.         );
  101.         $redirectUrl $res->getBody()->getContents();
  102.         if ($redirectUrl) {
  103.             return $this->redirect($redirectUrl);
  104.         }
  105.         throw new NotFoundHttpException('Shortlink ' $slug ' not found');
  106.     }
  107.     public function footcontrol()
  108.     {
  109.         return $this->forward("App\\Controller\\WebController::langSlug", [
  110.             "_locale" => "en_global",
  111.             "slug" => "dental-newsroom/foot-control"
  112.         ]);
  113.     }
  114.     public function downloadcentreOem(string $_localestring $partner)
  115.     {
  116.         $data = [];
  117.         $data['oemPartner'] = $partner;
  118.         return $this->langSlug($_locale'dental-service/downloadcentre-oem'$data);
  119.     }
  120.     public function lang($_locale)
  121.     {
  122.         return $this->langSlug($_locale'');
  123.     }
  124.     public function slugIdGenerator()
  125.     {
  126.         if ($this->storyblokHelper->isEditmode() || $_SERVER['APP_ENV'] === "dev") {
  127.             try {
  128.                 $story $this->storyblok->getStoryBySlug('slug-id-generator')
  129.                     ->getBody()['story'];
  130.             } catch (\Exception $e) {
  131.                 $this->logger->error($e);
  132.                 throw new NotFoundHttpException("Story slug-id-generator does not exist."$e);
  133.             }
  134.             try {
  135.                 return $this->render('slug_id_generator.twig');
  136.             } catch (\Exception $e) {
  137.                 $this->logger->error($e);
  138.                 throw new HttpException(500"Twig render failed."$e);
  139.             }
  140.         } else {
  141.             throw new HttpException(403"Forbidden");
  142.         }
  143.     }
  144.     public function langSlugMicrosite($_locale$microsite$slug "")
  145.     {
  146.         $fullSlug null;
  147.         $categoryData null;
  148.         $story null;
  149.         try {
  150.             $name = isset($this->micrositeNameMap[$microsite]) ? $this->micrositeNameMap[$microsite] : $microsite;
  151.             $slug 'microsites/' $name '/' str_replace($microsite '/'""$slug);
  152.         } catch (\Exception $e) {
  153.             $this->logger->error($e);
  154.             throw new HttpException(500"Twig render failed."$e);
  155.         }
  156.         try {
  157.             $fullSlug $this->categoryConfigurationService->getSlugByLocaleAndUrlPart($_locale$slug);
  158.             $categoryData $this->categoryConfigurationService->getBySlug($fullSlug);
  159.         } catch (\Exception $e) {
  160.             $this->logger->error($e);
  161.             throw new NotFoundHttpException("Wasn't able to fetch config for $_locale/$slug."$e);
  162.         }
  163.         try {
  164.             $story $this->storyblok->getStoryBySlug($fullSlug)
  165.                 ->getBody()['story'];
  166.         } catch (\Exception $e) {
  167.             $this->logger->error($e);
  168.             throw new NotFoundHttpException("Story $fullSlug does not exist."$e);
  169.         }
  170.         try {
  171.             $newPostfix '';
  172.             $useNewAimsComponents false;
  173.             if (
  174.                 $name === 'aims' && (in_array($_locale$this->aimsUseNewComponentsLanguages) ||
  175.                     (in_array($_locale$this->aimsUseNewComponentsLanguagesEditMode) && ($_SERVER['APP_ENV'] === "test" || $_SERVER['APP_ENV'] === "dev")))
  176.             ) {
  177.                 $newPostfix '-new';
  178.                 $useNewAimsComponents true;
  179.             }
  180.             return $this->render('microsites/' $name '/' $categoryData['template'] . $newPostfix '.twig', [
  181.                 "story" => $story,
  182.                 "category" => $categoryData,
  183.                 "useNewAimsComponents" => $useNewAimsComponents
  184.             ]);
  185.         } catch (\Exception $e) {
  186.             $this->logger->error($e);
  187.             throw new HttpException(500"Twig render failed."$e);
  188.         }
  189.     }
  190.     public function langSlug($_locale$slug$data null)
  191.     {
  192.         if ($this->shouldRedirectForFinland()) {
  193.             return $this->redirect('/se_nordic/kontakt/vi-pa-whfinland/');
  194.         }
  195.         if ($this->requestStack->getCurrentRequest()->headers->has('X-Microsite')) {
  196.             try {
  197.                 $microsite $this->requestStack->getCurrentRequest()->headers->get('X-Microsite');
  198.                 return $this->langSlugMicrosite($_locale$microsite$slug);
  199.             } catch (\Exception $e) {
  200.                 $this->logger->error($e);
  201.                 throw new HttpException(500"Twig render failed."$e);
  202.             }
  203.         }
  204.         $fullSlug null;
  205.         $categoryData null;
  206.         $story null;
  207.         try {
  208.             $fullSlug $this->categoryConfigurationService->getSlugByLocaleAndUrlPart($_locale$slug);
  209.             $categoryData $this->categoryConfigurationService->getBySlug($fullSlug);
  210.         } catch (\Exception $e) {
  211.             $this->logger->error($e);
  212.             throw new NotFoundHttpException("Wasn't able to fetch config for $_locale/$slug."$e);
  213.         }
  214.         try {
  215.             $story $this->storyblok->getStoryBySlug($fullSlug)
  216.                 ->getBody()['story'];
  217.         } catch (\Exception $e) {
  218.             $this->logger->error($e);
  219.             throw new NotFoundHttpException("Story $fullSlug does not exist."$e);
  220.         }
  221.         try {
  222.             return $this->render($categoryData['template'] . '.twig', [
  223.                 "story" => $story,
  224.                 "category" => $categoryData,
  225.                 "data" => $data
  226.             ]);
  227.         } catch (\Exception $e) {
  228.             $this->logger->error($e);
  229.             throw new HttpException(500"Twig render failed."$e);
  230.         }
  231.     }
  232.     public function phpInfo()
  233.     {
  234.         phpInfo();
  235.         return new Response(
  236.             'phpInfo',
  237.             Response::HTTP_OK
  238.         );
  239.     }
  240.     public function shouldRedirectForFinland()
  241.     {
  242.         $isUserFromFinland $this->requestStack->getCurrentRequest()->attributes->get('HTTP_CLOUDFRONT_VIEWER_COUNTRY') === 'fi';
  243.         $hasUserNotBeenRedirected = !isset($_COOKIE['finland_redirected']);
  244.         if ($isUserFromFinland && $hasUserNotBeenRedirected) {
  245.             setcookie('finland_redirected'truetime() + (10 365 24 60 60), '/');
  246.         }
  247.         return $isUserFromFinland && $hasUserNotBeenRedirected;
  248.     }
  249.     public function robots(): Response
  250.     {
  251.         $content $this->renderView('robots.twig');
  252.         return new Response($content200, array('content-type' => 'text/plain'));
  253.     }
  254.     public function jobDetail($_locale$job_id)
  255.     {
  256.         if (empty($job_id)) {
  257.             try {
  258.                 $categoryData $this->categoryConfigurationService->getByFamilyId($_locale'/career/openpositions');
  259.                 $fullSlug $categoryData['seo_url'];
  260.                 $story $this->storyblok->getStoryBySlug($fullSlug)
  261.                     ->getBody()['story'];
  262.                 return $this->render($categoryData['template'] . '.twig', [
  263.                     "category" => $categoryData,
  264.                     "story" => $story
  265.                 ]);
  266.             } catch (\Exception $e) {
  267.                 $this->logger->error($e);
  268.                 throw new NotFoundHttpException("Could not load job overview"$e);
  269.             }
  270.         }
  271.         $categoryData null;
  272.         try {
  273.             $categoryData $this->categoryConfigurationService->getByFamilyId($_locale'/career/openpositions/detail');
  274.             $story $this->storyblok->getStoryBySlug($categoryData['seo_url'])
  275.                 ->getBody()['story'];
  276.             $job $this->sageApiService->getJobById($job_id);
  277.         } catch (\Exception $e) {
  278.             $this->logger->error($e);
  279.             throw new NotFoundHttpException("Job $job_id could not be found."$e);
  280.         }
  281.         try {
  282.             return $this->render($categoryData['template'] . '.twig', [
  283.                 "job" => $job,
  284.                 "category" => $categoryData,
  285.                 "story" => $story
  286.             ]);
  287.         } catch (\Exception $e) {
  288.             $this->logger->error($e);
  289.             throw new HttpException(500"Twig render failed."$e);
  290.         }
  291.     }
  292. }