<?php
namespace Klaravik\Controller;
use Klaravik\Anthesis\CarbonDioxideEmissions;
use Klaravik\Assets\ManifestAssets;
use Klaravik\Category\Cache\ActiveCategoryCache;
use Klaravik\Category\Cache\ClosedCategoryCache;
use Klaravik\CompanyInfo\CompanyInfoClientInterface;
use Klaravik\Databricks\PLVAskService;
use Klaravik\Databricks\PLVFeedbackService;
use Klaravik\Financing\Nordea\Calculate;
use Klaravik\Financing\Nordea\Client;
use Klaravik\Firebase\KamNotifier;
use Klaravik\Firebase\StorefrontNotifier;
use Klaravik\Hubspot\HubspotHandler;
use Klaravik\Identity\IdentityFactory;
use Klaravik\Page\MarketWpClient;
use Klaravik\Page\PropUserData;
use Klaravik\PDF\PDFHandler;
use Klaravik\Product\Util\TimeLeftUtil;
use Klaravik\Service\AssetsResolverService;
use Klaravik\StructuredData\StructuredDataService;
use Klaravik\Storage\FileStorageService;
use Klaravik\Repository\ProductRepo;
use Klaravik\Repository\UserRepo;
use Klaravik\Security\ResetPasswordHandler;
use Klaravik\Storefront\GraphQL\Repository\ProductCategoriesRepository;
use Klaravik\Storefront\GraphQL\Repository\ProductSearchRepository;
use Klaravik\Translate\Trans;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Twig\Environment;
class LegacyController extends AbstractController
{
public function loadLegacyScript(
Request $request,
Trans $trans,
UrlGeneratorInterface $urlGenerator,
ManifestAssets $manifestAssets,
Environment $twig,
ActiveCategoryCache $activeCategoryCache,
ClosedCategoryCache $closedCategoryCache,
string $legacyScript,
array $requestParams = []
): StreamedResponse {
$session = $request->getSession()->start();
return new StreamedResponse(
function () use (
$legacyScript,
$requestParams,
$request,
$trans,
$urlGenerator,
$manifestAssets,
$twig,
$activeCategoryCache,
$closedCategoryCache
) {
$_SERVER['SCRIPT_FILENAME'] = $legacyScript;
// Needed for legacy inGroups function
global $container;
$container = $this->container;
foreach ($requestParams as $key => $value) {
$_REQUEST[$key] = $value;
}
$routeParameters = $request->attributes->get('_route_params');
unset($routeParameters['requestPath'], $routeParameters['legacyScript'], $routeParameters['requestParams']);
foreach ($routeParameters as $key => $value) {
$_REQUEST[$key] = $value;
}
session_start();
if ((null !== $user = $this->getUser()) && in_array('ROLE_ADMIN', $user->getRoles(), true)) {
$_SESSION['is_admin'] = true;
// TODO: Remove when RemoteUser is removed
$_SESSION['legacyRemoteUser'] = $user->getUserIdentifier();
}
chdir(dirname($legacyScript));
require $legacyScript;
}
);
}
public static function getSubscribedServices(): array
{
return array_merge(parent::getSubscribedServices(), [
CompanyInfoClientInterface::class,
Trans::class,
UrlGeneratorInterface::class,
IdentityFactory::class,
ParameterBagInterface::class,
HttpClientInterface::class,
KamNotifier::class,
CarbonDioxideEmissions::class,
TimeLeftUtil::class,
StorefrontNotifier::class,
Calculate::class,
ProductSearchRepository::class,
ProductCategoriesRepository::class,
EventDispatcherInterface::class,
MarketWpClient::class,
PropUserData::class,
HubspotHandler::class,
PDFHandler::class,
TimeLeftUtil::class,
FileStorageService::class,
ResetPasswordHandler::class,
'cache.vehicles' => CacheInterface::class,
'cache.tokens' => CacheInterface::class,
'monolog.logger.zendesk_ticket' => LoggerInterface::class,
ProductRepo::class,
PLVAskService::class,
PLVFeedbackService::class,
UserRepo::class,
AssetsResolverService::class,
StructuredDataService::class,
Client::class,
ContainerBagInterface::class,
]);
}
}