accompanyingPeriodWorkContext = $accompanyingPeriodWorkContext; $this->em = $em; $this->evaluationRepository = $evaluationRepository; $this->normalizer = $normalizer; $this->translatableStringHelper = $translatableStringHelper; } public function adminFormReverseTransform(array $data): array { return array_merge( $this->accompanyingPeriodWorkContext->adminFormReverseTransform($data), [ 'evaluations' => array_map( static function (Evaluation $e) { return $e->getId(); }, $data['evaluations'] ), ] ); } public function adminFormTransform(array $data): array { return array_merge( $this->accompanyingPeriodWorkContext->adminFormTransform($data), [ 'evaluations' => array_map( function ($id) { return $this->evaluationRepository->find($id); }, $data['evaluations'] ?? [] ), ] ); } public function buildAdminForm(FormBuilderInterface $builder): void { $this->accompanyingPeriodWorkContext->buildAdminForm($builder); $builder->remove('category'); $builder->add('evaluations', EntityType::class, [ 'class' => Evaluation::class, 'label' => 'Linked evaluations', 'choices' => $this->evaluationRepository->findAll(), 'choice_label' => function (Evaluation $e) { return $this->translatableStringHelper->localize($e->getTitle()); }, 'multiple' => true, 'attr' => ['class' => 'select2'], ]); } /** * @param AccompanyingPeriodWorkEvaluation $entity */ public function buildPublicForm(FormBuilderInterface $builder, DocGeneratorTemplate $template, $entity): void { $this->accompanyingPeriodWorkContext->buildPublicForm($builder, $template, $entity->getAccompanyingPeriodWork()); } /** * @param AccompanyingPeriodWorkEvaluation $entity */ public function getData(DocGeneratorTemplate $template, $entity, array $contextGenerationData = []): array { $data = $this->accompanyingPeriodWorkContext ->getData($template, $entity->getAccompanyingPeriodWork(), $contextGenerationData); $data['evaluation'] = $this->normalizer->normalize( $entity, 'docgen', [ 'docgen:expect' => AccompanyingPeriodWorkEvaluation::class, AbstractNormalizer::GROUPS => ['docgen:read'], ] ); return $data; } public function getDescription(): string { return 'docgen.A context for accompanying period work evaluation'; } public function getEntityClass(): string { return AccompanyingPeriodWorkEvaluation::class; } /** * @param AccompanyingPeriodWorkEvaluation $entity */ public function getFormData(DocGeneratorTemplate $template, $entity): array { return $this->accompanyingPeriodWorkContext->getFormData( $template, $entity->getAccompanyingPeriodWork() ); } public static function getKey(): string { return 'accompanying_period_work_evaluation_regular'; } public function getName(): string { return 'docgen.Accompanying period work context'; } public function hasAdminForm(): bool { return true; } /** * @param AccompanyingPeriodWorkEvaluation $entity */ public function hasPublicForm(DocGeneratorTemplate $template, $entity): bool { return $this->accompanyingPeriodWorkContext ->hasPublicForm($template, $entity->getAccompanyingPeriodWork()); } public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity, array $contextGenerationData): void { $doc = new AccompanyingPeriodWorkEvaluationDocument(); $doc->setStoredObject($storedObject) ->setAccompanyingPeriodWorkEvaluation($entity) ->setTemplate($template) ->setTitle($this->translatableStringHelper->localize($template->getName())); $this->em->persist($doc); } }