<?php
namespace App\EventSubscriber;
use App\Controller\Admin\Trash\AbstractTrashCrudController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Papierkorb (AWM-1081): Der globale softdeleteable-Filter blendet Gelöschte
* überall aus — die Papierkorb-Masken sollen aber genau diese anzeigen.
* Für Requests an Trash-CrudController wird der Filter daher deaktiviert;
* die Controller selbst schränken auf "deletedAt IS NOT NULL" ein.
*/
class TrashFilterSubscriber implements EventSubscriberInterface
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public static function getSubscribedEvents(): array
{
// Nach Firewall (8) und Allowlist (1), vor EasyAdmins Context-Aufbau (0)
return [KernelEvents::REQUEST => ['onKernelRequest', 1]];
}
public function onKernelRequest(RequestEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$controllerFqcn = ltrim((string) $event->getRequest()->query->get('crudControllerFqcn'), '\\');
if ('' === $controllerFqcn || !class_exists($controllerFqcn)) {
return;
}
if (!is_subclass_of($controllerFqcn, AbstractTrashCrudController::class)) {
return;
}
$filters = $this->em->getFilters();
if ($filters->isEnabled('softdeleteable')) {
$filters->disable('softdeleteable');
}
}
}