<?php
namespace App\Twig;
use App\Entity\User;
use App\Service\WarehouseContextService;
use App\Service\WebsiteSettingService;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Twig\Extension\AbstractExtension;
use Twig\Extension\GlobalsInterface;
use Twig\TwigFunction;
class AppExtension extends AbstractExtension implements GlobalsInterface
{
private WebsiteSettingService $websiteSettingService;
private WarehouseContextService $warehouseContextService;
private TokenStorageInterface $tokenStorage;
public function __construct(
WebsiteSettingService $websiteSettingService,
WarehouseContextService $warehouseContextService,
TokenStorageInterface $tokenStorage
)
{
$this->websiteSettingService = $websiteSettingService;
$this->warehouseContextService = $warehouseContextService;
$this->tokenStorage = $tokenStorage;
}
/* ======================================================
* GLOBALS TWIG (injectés automatiquement partout)
* ====================================================== */
public function getGlobals(): array
{
$user = $this->tokenStorage->getToken()?->getUser();
$user = $user instanceof User ? $user : null;
$warehouses = $this->warehouseContextService->getAccessibleWarehouses($user);
return [
'websiteSettings' => $this->websiteSettingService->all(),
'currentWarehouseContext' => $this->warehouseContextService->getCurrentWarehouse($user),
'currentWarehouseName' => $this->warehouseContextService->getCurrentWarehouseName($user),
'currentUserWarehouses' => $warehouses,
'currentUserHasMultipleWarehouses' => \count($warehouses) > 1,
];
}
/* ======================================================
* FONCTIONS TWIG (optionnelles)
* ====================================================== */
public function getFunctions(): array
{
return [
new TwigFunction(
'website_setting',
[$this, 'websiteSetting']
),
new TwigFunction(
'website_settings',
[$this, 'websiteSettings']
),
new TwigFunction(
'current_warehouse',
[$this, 'currentWarehouse']
),
];
}
public function websiteSetting(string $key, $default = null)
{
return $this->websiteSettingService->get($key, $default);
}
public function websiteSettings(): array
{
return $this->websiteSettingService->all();
}
public function currentWarehouse()
{
$user = $this->tokenStorage->getToken()?->getUser();
return $this->warehouseContextService->getCurrentWarehouse($user instanceof User ? $user : null);
}
}