diff --git a/lib/Form/Type/FieldType/AuthorFieldType.php b/lib/Form/Type/FieldType/AuthorFieldType.php index 68366bf51..0362bf29d 100644 --- a/lib/Form/Type/FieldType/AuthorFieldType.php +++ b/lib/Form/Type/FieldType/AuthorFieldType.php @@ -6,6 +6,8 @@ */ namespace EzSystems\RepositoryForms\Form\Type\FieldType; +use eZ\Publish\API\Repository\Exceptions\NotFoundException; +use eZ\Publish\API\Repository\Repository; use eZ\Publish\Core\FieldType\Author\Author; use eZ\Publish\Core\FieldType\Author\Value; use EzSystems\RepositoryForms\Form\Type\FieldType\Author\AuthorCollectionType; @@ -22,16 +24,37 @@ */ class AuthorFieldType extends AbstractType { + /** @var \eZ\Publish\API\Repository\Repository */ + private $repository; + + /** + * @param \eZ\Publish\API\Repository\Repository $repository + */ + public function __construct(Repository $repository) + { + $this->repository = $repository; + } + + /** + * @return string + */ public function getName() { return $this->getBlockPrefix(); } + /** + * @return string + */ public function getBlockPrefix() { return 'ezplatform_fieldtype_ezauthor'; } + /** + * @param \Symfony\Component\Form\FormBuilderInterface $builder + * @param array + */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder @@ -40,6 +63,9 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->addEventListener(FormEvents::POST_SUBMIT, [$this, 'filterOutEmptyAuthors']); } + /** + * @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver + */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(['data_class' => Value::class]); @@ -48,13 +74,13 @@ public function configureOptions(OptionsResolver $resolver) /** * Returns a view transformer which handles empty row needed to display add/remove buttons. * - * @return DataTransformerInterface + * @return \Symfony\Component\Form\DataTransformerInterface */ public function getViewTransformer(): DataTransformerInterface { return new CallbackTransformer(function (Value $value) { if (0 === $value->authors->count()) { - $value->authors->append(new Author()); + $value->authors->append($this->fetchLoggedAuthor()); } return $value; @@ -64,7 +90,7 @@ public function getViewTransformer(): DataTransformerInterface } /** - * @param FormEvent $event + * @param \Symfony\Component\Form\FormEvent $event */ public function filterOutEmptyAuthors(FormEvent $event) { @@ -79,4 +105,28 @@ function (Author $author) { ) ); } + + /** + * Returns currently logged user data, or empty Author object if none was found. + * + * @return \eZ\Publish\Core\FieldType\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; + } catch (NotFoundException $e) { + //Do nothing + } + + return $author; + } }