public function executePolyModuleForm(sfWebRequest $request)
 {
     $route = $request->getParameter('r', false);
     if ($request->isMethod('post')) {
         $perfil_acceso = $request->getParameter('perfil_acceso');
         if (!$route || !$perfil_acceso) {
             return $this->renderText('ERROR');
         }
         $conn = sfContext::getInstance()->getDatabaseManager()->getDatabase('doctrine')->getDoctrineConnection();
         try {
             $conn->beginTransaction();
             ModulesPolymorphismTable::getInstance()->findBySource($route)->delete();
             foreach ($perfil_acceso as $sf_guard_permission_id => $form) {
                 $mp = new ModulesPolymorphism();
                 $mp->setSfGuardPermissionId($sf_guard_permission_id);
                 $mp->setSource($route);
                 $mp->setDestination($form['destination']);
                 $mp->setUseDestinationTitle(isset($form['use_destination_title']));
                 $mp->save();
             }
             $conn->commit();
             return $this->renderText('OK');
         } catch (Doctrine_Exception $e) {
             $conn->rollback();
             return $this->renderText('ERROR');
         }
     }
     $polymorphisms = AdvancedLayout::getModules('', true, true);
     $modules_permissions = AdvancedLayout::getModulesPermissions();
     if (!count($polymorphisms) || !$route || !isset($polymorphisms[$route])) {
         die;
     }
     $data = array();
     $data['module'] = $polymorphisms[$route];
     $data['permissions'] = AdvancedLayout::getModulesPermissions();
     return $this->renderPartial('form_polymodule', $data);
 }
 public static function getModulesPolymorphism()
 {
     $modules = array();
     foreach (ModulesPolymorphismTable::getInstance()->findAll() as $mp) {
         $modules[$mp->getPermission()->getId()][$mp->getSource()] = $mp;
     }
     return $modules;
 }