<?php
//----------------------------------------------------------------------
// src/Services/Security/RedirectTools.php
//----------------------------------------------------------------------
namespace App\Services\Security;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Routing\RouterInterface;
use App\Services\LogTools;
use App\Entity\Config;
class RedirectTools
{
public function __construct(RouterInterface $router, ManagerRegistry $doctrine, LogTools $logTools)
{
$this->em = $doctrine->getManager();
$this->router = $router;
$this->logTools = $logTools;
}
public function getRedirectData($cookies)
{
$logFile = null;
// $logFile = "ploop_redirect.log";
if ($logFile !== null)
{
error_log("\n------------------------------------------------------------------\n", 3, $logFile);
error_log("BEGIN : getRedirectData\n", 3, $logFile);
}
$icodId = 0;
$icodRoute = 0;
$icodRouteParamCount = 0;
$url = null;
$icodId = intval($cookies->get('icod_id'));
$icodRoute = $cookies->get('icod_route');
$icodRouteParamCount = intval($cookies->get('icod_route_param_count'));
if (empty($icodId) && empty($icodRoute) && empty($icodRouteParamCount))
{
return null;
}
// At least one value is not empty
if (empty($icodId) && !empty($icodRouteParamCount))
{
// This means that the route containes a custom param (simulation_id, devis_id etc..)
// Ignore these
return null;
}
if ($logFile !== null)
{
error_log("\n icod_route = ".$icodRoute, 3, $logFile);
}
// Check urls to avoid
$urlsToAvoid = array(
"admin", "api-rest", "axiom", "logout", "login_check",
"icod_platform_planning_isloggedin",
"attachment",
"icod_access_activate",
"icod_society_group_request",
"icod_platform_task_edit",
"icod_platform_task_view",
"icod_platform_task_help_view",
"icod_platform_task_recurring_view",
"icod_platform_task_decide_click",
);
foreach ($urlsToAvoid as $urlToAvoid)
{
if (strpos($icodRoute, $urlToAvoid) !== false)
{
return null;
}
}
// Check urls that are problematic, we want to keep them, but not use them
$icodDontRedirect = 0;
$urlsToNotRedirect = array("pdf", "icod_webapp_document_view");
foreach ($urlsToNotRedirect as $urlToNotRedirect)
{
if (strpos($icodRoute, $urlToNotRedirect) !== false)
{
$icodDontRedirect = 1;
break;
}
}
$url = null;
if (!empty($icodId))
{
// We have an object
try
{
$url = $this->router->generate($icodRoute, array('id' => $icodId));
}
catch (\Exception $e)
{
$url = null;
}
}
else
{
// No object
try
{
$url = $this->router->generate($icodRoute);
}
catch (\Exception $e)
{
$url = null;
}
}
if ($url === null)
{
return null;
}
// All went well, do some logging if needed
if ($logFile !== null)
{
error_log("\n icod_id = ".$icodId, 3, $logFile);
error_log("\n icod_route = ".$icodRoute, 3, $logFile);
error_log("\n icod_route_param_count = ".$icodRouteParamCount, 3, $logFile);
error_log("\n icod_dont_redirect = ".$icodDontRedirect, 3, $logFile);
}
if ($logFile !== null)
{
error_log("\n\nEND : getRedirectData", 3, $logFile);
error_log("\n------------------------------------------------------------------\n", 3, $logFile);
}
// Return data
return array(
'icod_id' => $icodId,
'icod_route' => $icodRoute,
'icod_dont_redirect' => $icodDontRedirect,
);
}
}