. */ namespace SP\Modules\Web\Controllers\UserSettingsManager; use SP\Core\Acl\Acl; use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Language; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Core\Events\EventDispatcherInterface; use SP\Domain\User\Models\UserPreferences; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Helpers\TabsHelper; use SP\Mvc\Controller\ExtensibleTabControllerInterface; use SP\Mvc\Controller\WebControllerHelper; use SP\Mvc\View\Components\DataTab; use SP\Mvc\View\Components\SelectItemAdapter; use SP\Mvc\View\TemplateInterface; /** * Class IndexController * * @package web\Controllers */ final class IndexController extends ControllerBase implements ExtensibleTabControllerInterface { private TabsHelper $tabsHelper; public function __construct( Application $application, WebControllerHelper $webControllerHelper, TabsHelper $tabsHelper ) { parent::__construct($application, $webControllerHelper); $this->checkLoggedIn(); $this->tabsHelper = $tabsHelper; } public function indexAction(): void { $this->getTabs(); } /** * Returns a tabbed grid with items */ protected function getTabs(): void { $this->tabsHelper->addTab($this->getUserPreferences()); $this->eventDispatcher->notify('show.userSettings', new Event($this)); $this->tabsHelper->renderTabs( Acl::getActionRoute(AclActionsInterface::USERSETTINGS), $this->request->analyzeInt('tabIndex', 0) ); $this->view(); } /** * @param DataTab $tab */ public function addTab(DataTab $tab): void { $this->tabsHelper->addTab($tab); } /** * @return DataTab */ private function getUserPreferences(): DataTab { $template = clone $this->view; $template->addTemplate('general'); $userData = $this->session->getUserData(); $userPreferences = $userData->getPreferences() ?? new UserPreferences(); $template->assign( 'langs', SelectItemAdapter::factory(Language::getAvailableLanguages()) ->getItemsFromArraySelected( [$userPreferences->getLang() ?: $this->configData->getSiteLang()] ) ); $template->assign( 'themes', SelectItemAdapter::factory($this->theme->getAvailable()) ->getItemsFromArraySelected( [$userPreferences->getTheme() ?: $this->configData->getSiteTheme()] ) ); $template->assign('userPreferences', $userPreferences); $template->assign('route', 'userSettingsGeneral/save'); return new DataTab(__('Preferences'), $template); } /** * @return TemplateInterface */ public function getView(): TemplateInterface { return $this->view; } /** * @return void */ public function displayView(): void { $this->view(); } /** * @return EventDispatcherInterface */ public function getEventDispatcher(): EventDispatcherInterface { return $this->eventDispatcher; } }