public function execute($filterChain) { if ($this->isFirstCall() && $this->getContext()->getUser()->isAuthenticated()) { $profiles = $this->getContext()->getUser()->getGuardUser()->getPermissions(); if (!count($profiles)) { $this->getContext()->getController()->forward('izarusAdvancedCustomize', 'forbidden'); throw new sfStopException(); } if (count($profiles) == 1) { AdvancedLayout::setCurrentProfile($profiles[0]->getId()); } $profile = AdvancedLayout::getCurrentProfile(); if (AdvancedLayout::isModuleAdvanced()) { $action = $this->getContext()->getActionName(); if (!$profile && $action != 'selectProfile') { $this->getContext()->getController()->forward('izarusAdvancedCustomize', 'selectProfile'); throw new sfStopException(); } else { $polymorfism = AdvancedLayout::modulePolymorfism(); if (!AdvancedLayout::userHasPermission()) { $this->getContext()->getUser()->setAttribute('polymodule', false); $this->getContext()->getController()->forward('izarusAdvancedCustomize', 'forbidden'); throw new sfStopException(); } else { if ($polymorfism !== false) { $this->getContext()->getUser()->setAttribute('polymodule', true); $this->getContext()->getController()->forward($polymorfism['module'], $polymorfism['action']); throw new sfStopException(); } } $this->getContext()->getUser()->setAttribute('polymodule', false); } } } $filterChain->execute(); }
public static function getLateralMenu() { $permission = AdvancedLayout::getCurrentProfile(); $app = basename(dirname(dirname(sfContext::getInstance()->getModuleDirectory()))); $menus = LateralMenuTable::getInstance()->createQuery('lm')->leftJoin('lm.Permissions p')->where('p.id = ?', $permission)->orderBy('lm.menu_order')->execute(); $permissions = AdvancedLayout::getPermissionsModules(); $modules = AdvancedLayout::getModules($app, true); $menu_arr = array(); foreach ($menus as $me) { $m = array(); $m['title'] = $me->getTitle(); $m['modules'] = array(); foreach (json_decode($me->getModules(), true) as $mo) { if (isset($permissions[$permission]) && isset($modules[$mo])) { if (in_array($mo, $permissions[$permission])) { $m['modules'][$mo] = $modules[$mo]; $poly = AdvancedLayout::modulePolymorfism($mo); if ($poly !== false && isset($poly['use_title']) && $poly['use_title']) { $m['modules'][$mo]['title'] = $modules[$poly['module'] . '/' . $poly['action']]['title']; } } } } $menu_arr[] = $m; } return $menu_arr; }