function execute(&$filterChain, &$controller, &$request, &$user)
 {
     $execChain =& $controller->getExecutionChain();
     $action =& $execChain->getAction($execChain->getSize() - 1);
     $actName = $controller->getCurrentAction();
     $modName = $controller->getCurrentModule();
     $method = $request->getMethod();
     if ($action->initialize($controller, $request, $user)) {
         if ($action->isSecure()) {
             $authHandler =& $controller->getAuthorizationHandler();
             if ($authHandler === NULL) {
                 trigger_error('Action requires security but no authorization ' . 'handler has been registered', E_USER_NOTICE);
             } else {
                 if (!$authHandler->execute($controller, $request, $user, $action)) {
                     return;
                 }
             }
         }
         if (($action->getRequestMethods() & $method) != $method) {
             $actView = $action->getDefaultView($controller, $request, $user);
         } else {
             $validManager =& new ValidatorManager();
             $action->registerValidators($validManager, $controller, $request, $user);
             if (!$validManager->execute($controller, $request, $user) || !$action->validate($controller, $request, $user)) {
                 $actView = $action->handleError($controller, $request, $user);
             } else {
                 $actView = $action->execute($controller, $request, $user);
             }
         }
         if (is_string($actView) || $actView === NULL) {
             $viewMod = $modName;
             $viewAct = $actName;
             $viewName = $actView;
         } else {
             if (is_array($actView)) {
                 $viewMod = $actView[0];
                 $viewAct = $actView[1];
                 $viewName = $actView[2];
             }
         }
         if ($viewName != VIEW_NONE) {
             /*
                             if (!$controller->viewExists($viewMod, $viewAct, $viewName))
                             {
             
                                 $error = 'Module ' . $viewMod . ' does not contain view ' .
                                          $viewAct . 'View_' . $viewName . ' or the file is ' .
                                          'not readable';
                                 trigger_error($error, E_USER_ERROR);
                                 exit;
                             }
             */
             if (!$controller->viewExists($viewMod, $viewAct, $viewName)) {
                 $view = new DefaultView();
             } else {
                 $view =& $controller->getView($viewMod, $viewAct, $viewName);
             }
             $layout = $action->layout;
             if ($layout) {
                 $test = $view->initialize($controller, $request, $user);
                 $renderer =& $view->execute($controller, $request, $user);
                 $renderer->setMode(RENDER_VAR);
                 $partial = $renderer->fetchResult($controller, $request, $user);
                 $layout_renderer =& RendererUtils::getSmartyRenderer();
                 $layout_template = "{$layout}.html";
                 $layout_renderer->setTemplate($layout_template);
                 $layout_renderer->setAttribute('partial', $partial);
                 $layout_renderer->execute($controller, $request, $user);
             } else {
                 $test = $view->initialize($controller, $request, $user);
                 $renderer =& $view->execute($controller, $request, $user);
                 $renderer->execute($controller, $request, $user);
             }
             $view->cleanup($controller, $request, $user);
             $request->setAttributeByRef('org.mojavi.renderer', $renderer);
         }
     }
 }