* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\PersonBundle\Templating\Entity; use Chill\MainBundle\Templating\Entity\AbstractChillEntityRender; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; use Symfony\Component\Templating\EngineInterface; /** * Render a Person * */ class PersonRender extends AbstractChillEntityRender { private ConfigPersonAltNamesHelper $configAltNamesHelper; private EngineInterface $engine; public function __construct( ConfigPersonAltNamesHelper $configAltNamesHelper, EngineInterface $engine ) { $this->configAltNamesHelper = $configAltNamesHelper; $this->engine = $engine; } /** * * @param Person $person * @param array $options * @return string */ public function renderBox($person, array $options): string { $params = [ 'addAltNames' => $this->configAltNamesHelper->hasAltNames(), 'addLink' => $options['addLink'] ?? false, 'addEntity' => $options['addEntity'] ?? false, 'addId' => $options['addId'] ?? false, 'addInfo' => $options['addInfo'] ?? false, 'addAge' => $options['addAge'] ?? false, 'hLevel' => $options['hLevel'] ?? 3, 'customButtons' => $options['customButtons'] ?? [], ]; return $this->getDefaultOpeningBox('person') . $this->engine->render('@ChillPerson/Entity/person.html.twig', [ 'person' => $person, 'render' => $options['render'] ?? 'raw', 'options' => $params ]) . $this->getDefaultClosingBox(); } /** * * @param Person $person * @param array $options * @return string */ public function renderString($person, array $options): string { return $person->getFirstName().' '.$person->getLastName() .$this->addAltNames($person, false); } protected function addAltNames(Person $person, bool $addSpan): string { $str = ''; if ($this->configAltNamesHelper->hasAltNames()) { $altNames = $this->configAltNamesHelper->getChoices(); $isFirst = true; foreach ($person->getAltNames()->getIterator() as $altName) { /** @var \Chill\PersonBundle\Entity\PersonAltName $altName */ if (\array_key_exists($altName->getKey(), $altNames)) { if ($isFirst) { $str .= " ("; $isFirst = false; } else { $str.= " "; } if ($addSpan) { $str .= ''; } $str .= $altName->getLabel(); if ($addSpan) { $str .= ""; } } } if (!$isFirst) { $str .= ")"; } } return $str; } public function supports($entity, array $options): bool { return $entity instanceof Person; } }