From 31f048b8e8c82305e011839fadd79d003688f018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 19 Oct 2022 14:12:47 +0200 Subject: [PATCH] Feature: [person][docgen] Add a title to document in person docgen context --- .../Service/DocGenerator/PersonContext.php | 28 +++++++++++++------ .../DocGenerator/PersonContextTest.php | 27 ++++++++++++++++-- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Service/DocGenerator/PersonContext.php b/src/Bundle/ChillPersonBundle/Service/DocGenerator/PersonContext.php index a9ebdc0bb..af6c6e114 100644 --- a/src/Bundle/ChillPersonBundle/Service/DocGenerator/PersonContext.php +++ b/src/Bundle/ChillPersonBundle/Service/DocGenerator/PersonContext.php @@ -11,8 +11,6 @@ declare(strict_types=1); namespace Chill\PersonBundle\Service\DocGenerator; -use Chill\DocGeneratorBundle\Context\DocGeneratorContextWithAdminFormInterface; -use Chill\DocGeneratorBundle\Context\DocGeneratorContextWithPublicFormInterface; use Chill\DocGeneratorBundle\Context\Exception\UnexpectedTypeException; use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate; use Chill\DocGeneratorBundle\Service\Context\BaseContextData; @@ -34,6 +32,7 @@ use Doctrine\ORM\EntityRepository; use LogicException; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Security\Core\Security; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -42,7 +41,7 @@ use Symfony\Contracts\Translation\TranslatorInterface; use function array_key_exists; use function count; -class PersonContext implements DocGeneratorContextWithAdminFormInterface, DocGeneratorContextWithPublicFormInterface +final class PersonContext implements PersonContextInterface { private AuthorizationHelperInterface $authorizationHelper; @@ -129,6 +128,7 @@ class PersonContext implements DocGeneratorContextWithAdminFormInterface, DocGen 'choice_label' => function ($entity = null) { return $entity ? $this->translatableStringHelper->localize($entity->getName()) : ''; }, + 'required' => true, ]); } @@ -137,11 +137,19 @@ class PersonContext implements DocGeneratorContextWithAdminFormInterface, DocGen */ public function buildPublicForm(FormBuilderInterface $builder, DocGeneratorTemplate $template, $entity): void { - $builder->add('scope', ScopePickerType::class, [ - 'center' => $this->centerResolverManager->resolveCenters($entity), - 'role' => PersonDocumentVoter::CREATE, - 'label' => 'Scope', + $builder->add('title', TextType::class, [ + 'required' => true, + 'label' => 'docgen.Document title', + 'data' => $this->translatableStringHelper->localize($template->getName()), ]); + + if ($this->isScopeNecessary($entity)) { + $builder->add('scope', ScopePickerType::class, [ + 'center' => $this->centerResolverManager->resolveCenters($entity), + 'role' => PersonDocumentVoter::CREATE, + 'label' => 'Scope', + ]); + } } public function getData(DocGeneratorTemplate $template, $entity, array $contextGenerationData = []): array @@ -200,7 +208,7 @@ class PersonContext implements DocGeneratorContextWithAdminFormInterface, DocGen */ public function hasPublicForm(DocGeneratorTemplate $template, $entity): bool { - return $this->isScopeNecessary($entity); + return true; } /** @@ -210,7 +218,9 @@ class PersonContext implements DocGeneratorContextWithAdminFormInterface, DocGen { $doc = new PersonDocument(); $doc->setTemplate($template) - ->setTitle($this->translatableStringHelper->localize($template->getName())) + ->setTitle( + $contextGenerationData['title'] ?? $this->translatableStringHelper->localize($template->getName()) + ) ->setDate(new DateTime()) ->setDescription($this->translatableStringHelper->localize($template->getName())) ->setPerson($entity) diff --git a/src/Bundle/ChillPersonBundle/Tests/Service/DocGenerator/PersonContextTest.php b/src/Bundle/ChillPersonBundle/Tests/Service/DocGenerator/PersonContextTest.php index c7c9a00e4..44414cdba 100644 --- a/src/Bundle/ChillPersonBundle/Tests/Service/DocGenerator/PersonContextTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/Service/DocGenerator/PersonContextTest.php @@ -21,6 +21,7 @@ use Chill\DocStoreBundle\Security\Authorization\PersonDocumentVoter; use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Entity\Scope; use Chill\MainBundle\Entity\User; +use Chill\MainBundle\Form\Type\ScopePickerType; use Chill\MainBundle\Security\Authorization\AuthorizationHelperInterface; use Chill\MainBundle\Security\Resolver\CenterResolverManagerInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface; @@ -33,6 +34,8 @@ use Prophecy\Exception\Prediction\FailedPredictionException; use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -82,7 +85,7 @@ final class PersonContextTest extends TestCase $parameter ); - $this->assertFalse($personContext->hasPublicForm($docGen, $person)); + $personContext->buildPublicForm($this->buildFormBuilder(false), $docGen, $person); $personContext->storeGenerated( $docGen, @@ -126,7 +129,7 @@ final class PersonContextTest extends TestCase $em->reveal(), ); - $this->assertTrue($personContext->hasPublicForm($docGen, $person)); + $personContext->buildPublicForm($this->buildFormBuilder(true), $docGen, $person); $personContext->storeGenerated( $docGen, @@ -170,7 +173,7 @@ final class PersonContextTest extends TestCase $em->reveal(), ); - $this->assertTrue($personContext->hasPublicForm($docGen, $person)); + $personContext->buildPublicForm($this->buildFormBuilder(true), $docGen, $person); $personContext->storeGenerated( $docGen, @@ -180,6 +183,24 @@ final class PersonContextTest extends TestCase ); } + private function buildFormBuilder(bool $withScope): FormBuilderInterface + { + $builder = $this->prophesize(FormBuilderInterface::class); + + $builder->add('title', TextType::class, Argument::type('array')) + ->shouldBeCalled(1); + + if ($withScope) { + $builder->add('scope', ScopePickerType::class, Argument::type('array')) + ->shouldBeCalled(); + } else { + $builder->add('scope', ScopePickerType::class, Argument::type('array')) + ->shouldNotBeCalled(); + } + + return $builder->reveal(); + } + private function buildPersonContext( ?AuthorizationHelperInterface $authorizationHelper = null, ?BaseContextData $baseContextData = null,