/** * @param FormBuilderInterface $builder * @param array $options * @throws \LogicException when getOwner method isn't implemented for entity with ownership type * * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function buildForm(FormBuilderInterface $builder, array $options) { if ($options['ownership_disabled']) { return; } $formConfig = $builder->getFormConfig(); if (!$formConfig->getCompound()) { return; } $dataClassName = $formConfig->getDataClass(); if (!$dataClassName) { return; } $user = $this->getCurrentUser(); if (!$user) { return; } $metadata = $this->getMetadata($dataClassName); if (!$metadata || $metadata->isOrganizationOwned()) { return; } $this->fieldName = $metadata->getOwnerFieldName(); $this->checkIsGranted('CREATE', 'entity:' . $dataClassName); $defaultOwner = null; if ($metadata->isUserOwned() && $this->isAssignGranted) { $this->addUserOwnerField($builder, $dataClassName); $defaultOwner = $user; } elseif ($metadata->isBusinessUnitOwned()) { $this->addBusinessUnitOwnerField($builder, $user, $dataClassName); if (!$this->checkIsBusinessUnitEntity($dataClassName)) { $defaultOwner = $this->getCurrentBusinessUnit($this->getOrganization()); } } $builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'preSetData']); $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'preSubmit']); $builder->addEventListener(FormEvents::POST_SUBMIT, [$this, 'postSubmit']); /** * Adding subscriber to hide owner field for update pages if assign permission is not granted * and set default owner value */ $builder->addEventSubscriber(new OwnerFormSubscriber($this->managerRegistry, $this->fieldName, $this->fieldLabel, $this->isAssignGranted, $defaultOwner)); }
/** * @param FormBuilderInterface $builder * @param array $options * @throws \LogicException when getOwner method isn't implemented for entity with ownership type */ public function buildForm(FormBuilderInterface $builder, array $options) { $dataClassName = $builder->getFormConfig()->getDataClass(); if (!$dataClassName) { return; } $user = $this->getCurrentUser(); if (!$user) { return; } $metadata = $this->ownershipMetadataProvider->getMetadata($dataClassName); if (!$metadata->hasOwner()) { return; } if (!method_exists($dataClassName, 'getOwner')) { throw new \LogicException(sprintf('Method getOwner must be implemented for %s entity.', $dataClassName)); } /** * TODO: Implement object-based assign check after access levels are supported */ $this->isAssignGranted = $this->securityFacade->isGranted('ASSIGN', 'entity:' . $dataClassName); $defaultOwner = null; if ($metadata->isUserOwned() && $this->isAssignGranted) { $this->addUserOwnerField($builder); $defaultOwner = $user; } elseif ($metadata->isBusinessUnitOwned()) { $this->addBusinessUnitOwnerField($builder, $user, $dataClassName); $defaultOwner = $this->getCurrentBusinessUnit(); } elseif ($metadata->isOrganizationOwned()) { $this->addOrganizationOwnerField($builder, $user); $defaultOwner = $this->getCurrentOrganization(); } /** * Adding subscriber to hide owner field for update pages if assign permission is not granted * and set default owner value */ $builder->addEventSubscriber(new OwnerFormSubscriber($this->managerRegistry, $this->fieldName, $this->fieldLabel, $this->isAssignGranted, $defaultOwner)); }