*/ class UserRender implements ChillEntityRenderInterface { final public const DEFAULT_OPTIONS = [ 'main_scope' => true, 'user_job' => true, 'absence' => true, 'at_date' => null, // instanceof DateTimeInterface ]; public function __construct( private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly \Twig\Environment $engine, private readonly TranslatorInterface $translator, private readonly ClockInterface $clock, ) { } /** * @throws LoaderError * @throws RuntimeError * @throws SyntaxError */ public function renderBox($entity, array $options): string { $opts = \array_merge(self::DEFAULT_OPTIONS, $options); if (null === $opts['at_date']) { $opts['at_date'] = $this->clock->now(); } elseif ($opts['at_date'] instanceof \DateTime) { $opts['at_date'] = \DateTimeImmutable::createFromMutable($opts['at_date']); } return $this->engine->render('@ChillMain/Entity/user.html.twig', [ 'user' => $entity, 'opts' => $opts, ]); } public function renderString($entity, array $options): string { $opts = \array_merge(self::DEFAULT_OPTIONS, $options); // $immutableAtDate = $opts['at_date'] instanceOf DateTime ? DateTimeImmutable::createFromMutable($opts['at_date']) : $opts['at_date']; if (null === $opts['at_date']) { $opts['at_date'] = $this->clock->now(); } elseif ($opts['at_date'] instanceof \DateTime) { $opts['at_date'] = \DateTimeImmutable::createFromMutable($opts['at_date']); } $str = $entity->getLabel(); if (null !== $entity->getUserJob($opts['at_date']) && $opts['user_job']) { $str .= ' ('.$this->translatableStringHelper ->localize($entity->getUserJob($opts['at_date'])->getLabel()).')'; } if (null !== $entity->getMainScope($opts['at_date']) && $opts['main_scope']) { $str .= ' ('.$this->translatableStringHelper ->localize($entity->getMainScope($opts['at_date'])->getName()).')'; } if ($entity->isAbsent() && $opts['absence']) { $str .= ' ('.$this->translator->trans('absence.Absent').')'; } return $str; } public function supports($entity, array $options): bool { return $entity instanceof User; } }