/** * Build business units tree for user page * * @param User $user * @return array */ public function getBusinessUnitsTree(User $user = null) { $businessUnits = $this->createQueryBuilder('businessUnit')->select(array('businessUnit.id', 'businessUnit.name', 'IDENTITY(businessUnit.owner) parent')); if ($user && $user->getId()) { $units = $user->getBusinessUnits()->map(function (BusinessUnit $businessUnit) { return $businessUnit->getId(); }); $units = $units->toArray(); if ($units) { $businessUnits->addSelect('CASE WHEN businessUnit.id IN (:userUnits) THEN 1 ELSE 0 END as hasUser'); $businessUnits->setParameter(':userUnits', $units); } } $businessUnits = $businessUnits->getQuery()->getArrayResult(); $children = array(); foreach ($businessUnits as &$businessUnit) { $parent = $businessUnit['parent'] ?: 0; $children[$parent][] =& $businessUnit; } unset($businessUnit); foreach ($businessUnits as &$businessUnit) { if (isset($children[$businessUnit['id']])) { $businessUnit['children'] = $children[$businessUnit['id']]; } } unset($businessUnit); if (isset($children[0])) { $children = $children[0]; } return $children; }
public function testBusinessUnit() { $user = new User(); $businessUnit = new BusinessUnit(); $user->setBusinessUnits(new ArrayCollection(array($businessUnit))); $this->assertContains($businessUnit, $user->getBusinessUnits()); $user->removeBusinessUnit($businessUnit); $this->assertNotContains($businessUnit, $user->getBusinessUnits()); $user->addBusinessUnit($businessUnit); $this->assertContains($businessUnit, $user->getBusinessUnits()); }
/** * @param FormBuilderInterface $builder * @param User $user * @param string $className */ protected function addBusinessUnitOwnerField($builder, User $user, $className) { /** * Owner field is required for all entities except business unit */ if (!$this->checkIsBusinessUnitEntity($className)) { $validation = ['constraints' => [new NotBlank()], 'required' => true]; $emptyValueLabel = 'oro.business_unit.form.choose_business_user'; } else { $validation = ['required' => false]; $emptyValueLabel = 'oro.business_unit.form.none_business_user'; $this->fieldLabel = 'oro.organization.businessunit.parent.label'; } if ($this->isAssignGranted) { /** * If assign permission is granted, showing all available business units */ $builder->add($this->fieldName, 'oro_business_unit_tree_select', array_merge(['empty_value' => $emptyValueLabel, 'mapped' => true, 'label' => $this->fieldLabel, 'business_unit_ids' => $this->getBusinessUnitIds(), 'configs' => ['is_safe' => true], 'translatable_options' => false, 'choices' => $this->businessUnitManager->getTreeOptions($this->businessUnitManager->getBusinessUnitsTree(null, $this->getOrganizationContextId()))], $validation)); } else { $businessUnits = $user->getBusinessUnits(); if (count($businessUnits)) { $builder->add($this->fieldName, 'entity', array_merge(['class' => 'OroOrganizationBundle:BusinessUnit', 'property' => 'name', 'choices' => $businessUnits, 'mapped' => true, 'label' => $this->fieldLabel, 'translatable_options' => false], $validation)); } } }
/** * @param FormBuilderInterface $builder * @param User $user */ protected function addOrganizationOwnerField(FormBuilderInterface $builder, User $user) { $fieldOptions = array('class' => 'OroOrganizationBundle:Organization', 'property' => 'name', 'mapped' => true, 'required' => true, 'constraints' => array(new NotBlank())); if (!$this->isAssignGranted) { $organizations = array(); $bu = $user->getBusinessUnits(); /** @var $businessUnit BusinessUnit */ foreach ($bu as $businessUnit) { $organizations[] = $businessUnit->getOrganization(); } $fieldOptions['choices'] = $organizations; } $builder->add($this->fieldName, 'entity', $fieldOptions); }