addSelect('account', '', $this->getAccountPairs()) ->setDefaultValue($this->_securityUser->getIdentity()->getSelectedAccount()?->getId() ?: self::SETTINGS) ->setHtmlAttribute('class', 'primary-select') ->setHtmlAttribute('data-adt-select2', [ 'dropdownCssClass' => 'select2-primary-dropdown', ]); $form->watchForSubmit($form['account']); } protected function getAccountPairs(): array { if ($this->_securityUser->isAllowed($this->_fancyAdmin->getBackofficeAclResource())) { $query = $this->createBackofficeAccountQuery(); $selectedAccount = $this->_securityUser->getIdentity()->getSelectedAccount(); if ($selectedAccount) { $query->orById($selectedAccount->getId()); } $accounts = $query->fetch(); } else { $accounts = array_merge($this->_securityUser->getIdentity()->getAccounts(), $this->_securityUser->getIdentity()->getSubaccounts()); } $accountPairs = []; foreach ($accounts as $_account) { $accountPairs[$_account->getId()] = $this->getAccountName($_account); } asort($accountPairs); if ($this->_securityUser->isAllowedFullDataAclResource()) { //pridani option pro presmerovani do settings, respektive pro odnastaveni spolcnosi pokud ma user global companies $accountPairs[self::SETTINGS] = $this->_translator->translate('fcadmin.forms.systemSelectCompany.options.admin'); } return $accountPairs; } protected function createBackofficeAccountQuery() { return $this->_accountQueryFactory->create() ->disableAccountFilter(); } protected function getAccountName(Account $account): string { return $account->getName(); } /** * @throws ReflectionException * @throws NonUniqueResultException * @throws NoResultException * @throws Exception */ public function processForm(array $values): never { if ($values['account'] === 'settings') { // Pokud mame cloveka s global companies, tam se nastavi company jako null $this->_securityUser->getIdentity()->setSelectedAccount(null); $this->_em->flush(); $this->getPresenter()->redirect($this->_fancyAdmin->getDefaultBackofficeRoute(), ['selectedAccount' => null]); } else { // Pripad kdy je vybrana spolecnost -> nastavujeme spolecnost $this->_securityUser->getIdentity()->setSelectedAccount($this->_accountQueryFactory->create()->disableAccountFilter()->byId($values['account'])->fetchOne()); $this->_em->flush(); $this->getPresenter()->redirect($this->_fancyAdmin->getDefaultCustomerRoute(), ['selectedAccount' => $this->_securityUser->getIdentity()->getSelectedAccount()?->getId()]); } } protected function getEntityClass(): ?string { return null; } }