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;
 }