<?php
namespace App\Controller;
use App\Service\RedirectService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
class RedirectController extends AbstractController
{
private $langs;
private $requestStack;
private $redirectService;
public function __construct(
string $langs,
RequestStack $requestStack,
RedirectService $redirectService
) {
$this->langs = $langs;
$this->requestStack = $requestStack;
$this->redirectService = $redirectService;
}
public function checkRedirect($url)
{
$urlParts = explode("/", $url);
$url = "/" . $url;
$queryParams = $this->requestStack->getCurrentRequest()->query->all();
$redirectStory = $this->redirectService->loadRedirects();
if ($redirectStory != null) {
$redirects = $redirectStory['content']['redirects'];
$redirects_reversed = array_reverse($redirects);
foreach ($redirects_reversed as $redirect) {
if (rtrim($redirect['from'], '/') === rtrim($url, '/') && rtrim($redirect['to'], '/') !== rtrim($url, '/')) {
$redirectTo = $redirect['to'];
if (sizeof($queryParams) > 0) {
$redirectTo .= "?" . http_build_query($queryParams);
}
return $this->redirect($redirectTo);
}
}
}
$locale = in_array($urlParts[0], explode("|", $this->langs)) ? $urlParts[0] : "";
$attributes = $this->requestStack->getCurrentRequest()->attributes->all();
$cfCountry = array_key_exists('HTTP_CLOUDFRONT_VIEWER_COUNTRY', $attributes) ? $attributes['HTTP_CLOUDFRONT_VIEWER_COUNTRY'] : '';
$cfLatitude = array_key_exists('HTTP_CLOUDFRONT_VIEWER_LATITUDE', $attributes) ? $attributes['HTTP_CLOUDFRONT_VIEWER_LATITUDE'] : '';
$cfLongitude = array_key_exists('HTTP_CLOUDFRONT_VIEWER_LONGITUDE', $attributes) ? $attributes['HTTP_CLOUDFRONT_VIEWER_LONGITUDE'] : '';
if ($locale != "") {
array_shift($urlParts);
return $this->forward("App\\Controller\\WebController::langSlug", [
"_locale" => $locale,
"slug" => implode("/", $urlParts),
'HTTP_CLOUDFRONT_VIEWER_COUNTRY' => $cfCountry,
'HTTP_CLOUDFRONT_VIEWER_LATITUDE' => $cfLatitude,
'HTTP_CLOUDFRONT_VIEWER_LONGITUDE' => $cfLongitude,
], $queryParams);
} else {
if (
str_contains($url, '.aspx') || str_contains($url, '/_inc') || str_contains($url, '.mvc') ||
str_contains($url, '/roi-tool/') || str_contains($url, '.ico')
) {
return $this->forward("App\\Controller\\ProxyController::proxy", [
"path" => $url,
'HTTP_CLOUDFRONT_VIEWER_COUNTRY' => $cfCountry,
'HTTP_CLOUDFRONT_VIEWER_LATITUDE' => $cfLatitude,
'HTTP_CLOUDFRONT_VIEWER_LONGITUDE' => $cfLongitude,
], $queryParams);
}
return $this->forward("App\\Controller\\WebController::shortlink", [
"slug" => $url,
'HTTP_CLOUDFRONT_VIEWER_COUNTRY' => $cfCountry,
'HTTP_CLOUDFRONT_VIEWER_LATITUDE' => $cfLatitude,
'HTTP_CLOUDFRONT_VIEWER_LONGITUDE' => $cfLongitude,
], $queryParams);
}
}
}