diff --git a/phpstan-baseline-7.4.neon b/phpstan-baseline-7.4.neon index 2e99df5c..6932ad8c 100644 --- a/phpstan-baseline-7.4.neon +++ b/phpstan-baseline-7.4.neon @@ -60,12 +60,6 @@ parameters: count: 1 path: src/lib/FieldType/DataTransformer/MediaValueTransformer.php - - - message: '#^Parameter \#1 \$var of function count expects array\|Countable, iterable\ given\.$#' - identifier: argument.type - count: 1 - path: src/lib/Form/Processor/ContentFormProcessor.php - - message: '#^Parameter \#1 \$str of function strtolower expects string, string\|null given\.$#' identifier: argument.type diff --git a/phpstan-baseline-gte-8.0.neon b/phpstan-baseline-gte-8.0.neon index b5f27eac..410f62bc 100644 --- a/phpstan-baseline-gte-8.0.neon +++ b/phpstan-baseline-gte-8.0.neon @@ -48,12 +48,6 @@ parameters: count: 1 path: src/lib/FieldType/DataTransformer/MediaValueTransformer.php - - - message: '#^Parameter \#1 \$value of function count expects array\|Countable, iterable\ given\.$#' - identifier: argument.type - count: 1 - path: src/lib/Form/Processor/ContentFormProcessor.php - - message: '#^Parameter \#1 \$string of function strtolower expects string, string\|null given\.$#' identifier: argument.type diff --git a/src/lib/EventListener/ViewTemplatesListener.php b/src/lib/EventListener/ViewTemplatesListener.php index 6d22e7f7..70aacc6c 100644 --- a/src/lib/EventListener/ViewTemplatesListener.php +++ b/src/lib/EventListener/ViewTemplatesListener.php @@ -54,7 +54,7 @@ public function setViewTemplates(PreContentViewEvent $event): void } /** - * @return string[] + * @return array */ private function getTemplatesMap(): array { diff --git a/src/lib/FieldType/Mapper/AuthorFormMapper.php b/src/lib/FieldType/Mapper/AuthorFormMapper.php index 6649ce07..5e1154a1 100644 --- a/src/lib/FieldType/Mapper/AuthorFormMapper.php +++ b/src/lib/FieldType/Mapper/AuthorFormMapper.php @@ -8,6 +8,7 @@ namespace Ibexa\ContentForms\FieldType\Mapper; +use Ibexa\ContentForms\Data\Content\ContentUpdateData; use Ibexa\ContentForms\Form\Type\FieldType\AuthorFieldType; use Ibexa\Contracts\ContentForms\Data\Content\FieldData; use Ibexa\Contracts\ContentForms\FieldType\FieldValueFormMapperInterface; @@ -28,10 +29,24 @@ public function mapFieldValueForm(FormInterface $fieldForm, FieldData $data) $fieldSettings = $fieldDefinition->getFieldSettings(); $formConfig = $fieldForm->getConfig(); + $parent = $fieldForm->getParent(); + $contentForm = $parent instanceof FormInterface ? $parent->getParent() : null; + $contentUpdateData = null; + if ($contentForm instanceof FormInterface) { + $contentUpdateData = $contentForm->getData(); + } + + $creator = null; + if ($contentUpdateData instanceof ContentUpdateData && isset($contentUpdateData->contentDraft)) { + $versionInfo = $contentUpdateData->contentDraft->getVersionInfo(); + $creator = $versionInfo->getCreator(); + } + $fieldForm ->add( $formConfig->getFormFactory()->createBuilder() ->create('value', AuthorFieldType::class, [ + 'creator' => $creator, 'default_author' => $fieldSettings['defaultAuthor'], 'required' => $fieldDefinition->isRequired, 'label' => $fieldDefinition->getName(), diff --git a/src/lib/Form/Type/FieldType/AuthorFieldType.php b/src/lib/Form/Type/FieldType/AuthorFieldType.php index 378df6e2..b176f4d9 100644 --- a/src/lib/Form/Type/FieldType/AuthorFieldType.php +++ b/src/lib/Form/Type/FieldType/AuthorFieldType.php @@ -11,6 +11,7 @@ use Ibexa\ContentForms\Form\Type\FieldType\Author\AuthorCollectionType; use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; use Ibexa\Contracts\Core\Repository\Repository; +use Ibexa\Contracts\Core\Repository\Values\User\User; use Ibexa\Core\FieldType\Author\Author; use Ibexa\Core\FieldType\Author\Type as AuthorType; use Ibexa\Core\FieldType\Author\Value; @@ -68,8 +69,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) $this->defaultAuthor = $options['default_author']; $builder - ->add('authors', AuthorCollectionType::class, []) - ->addViewTransformer($this->getViewTransformer()) + ->add('authors', AuthorCollectionType::class) + ->addViewTransformer($this->getViewTransformer($options['creator'])) ->addEventListener(FormEvents::POST_SET_DATA, [$this, 'filterOutEmptyAuthors']); } @@ -91,7 +92,9 @@ public function configureOptions(OptionsResolver $resolver) $resolver->setDefaults([ 'data_class' => Value::class, 'default_author' => AuthorType::DEFAULT_VALUE_EMPTY, - ])->setAllowedTypes('default_author', 'integer'); + 'creator' => null, + ])->setAllowedTypes('default_author', 'integer') + ->setAllowedTypes('creator', ['null', User::class]); } /** @@ -99,12 +102,12 @@ public function configureOptions(OptionsResolver $resolver) * * @return \Symfony\Component\Form\DataTransformerInterface */ - public function getViewTransformer(): DataTransformerInterface + public function getViewTransformer(?User $creator = null): DataTransformerInterface { - return new CallbackTransformer(function (Value $value) { + return new CallbackTransformer(function (Value $value) use ($creator) { if (0 === $value->authors->count()) { if ($this->defaultAuthor === AuthorType::DEFAULT_CURRENT_USER) { - $value->authors->append($this->fetchLoggedAuthor()); + $value->authors->append($creator !== null ? $this->userToAuthor($creator) : $this->fetchLoggedAuthor()); } else { $value->authors->append(new Author()); } @@ -140,20 +143,27 @@ static function (Author $author) { */ private function fetchLoggedAuthor(): Author { - $author = new Author(); - try { $permissionResolver = $this->repository->getPermissionResolver(); $userService = $this->repository->getUserService(); $loggedUserId = $permissionResolver->getCurrentUserReference()->getUserId(); $loggedUserData = $userService->loadUser($loggedUserId); - $author->name = $loggedUserData->getName(); - $author->email = $loggedUserData->email; + return $this->userToAuthor($loggedUserData); } catch (NotFoundException $e) { //Do nothing } + return new Author(); + } + + private function userToAuthor(User $creator): Author + { + $author = new Author(); + + $author->name = $creator->getName(); + $author->email = $creator->email; + return $author; } }