<?php
namespace App\Controller\Action;
use App\Entity\Customer;
use App\Repository\CustomerRepository;
use App\Repository\SiteRepository;
use App\Traits\TreeBuilderTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Attribute\AsController;
use Symfony\Component\Security\Core\Security;
#[AsController]
class SiteTreeAction extends AbstractController
{
use TreeBuilderTrait;
public function __construct(private Security $security, private SiteRepository $siteRepository, private CustomerRepository $customerRepository)
{
}
public function __invoke(Request $request): array
{
$customerFilter = $request->get('customer', null);
$user = $this->getUser();
if ($user->isMasterAdmin()) {
// Master admin: return all or filtered
if (!empty($customerFilter)) {
return $this->customerRepository->getTree([$customerFilter], $user);
}
return $this->customerRepository->getTree(null, $user);
}
$customerAssociated = $user->getCustomerAssociated() ?? [];
if (empty($customerAssociated)) {
return [];
}
if (!empty($customerFilter)) {
// Check if requested customer is in associated list
if (!in_array($customerFilter, $customerAssociated)) {
return [];
}
return $this->customerRepository->getTree([$customerFilter], $user);
}
return $this->customerRepository->getTree($customerAssociated, $user);
}
}