Example #1
0
 private function doExecute($actionId = null, $mayBeModifying = false)
 {
     if (!$actionId) {
         $actionId = $this->app->defaultAction;
     }
     if (!$this->app->access->isPermitted($actionId)) {
         throw new \Exception('Permission denied.');
     }
     $action = $this->getAction($actionId);
     $headElements = self::baseHeadElements();
     $form = new ActionForm($this->reader, $this->app->fields, $action, $actionId);
     $headElements = array_merge($headElements, $form->getHeadElements());
     if ($mayBeModifying || !$action->isModifying()) {
         $executor = new Executor($this->app->actions, $this->app->fields, $this->reader, $this->app->access);
         $result = new ActionResult($executor, $this->app->renderers, $action, $actionId, $this->crumbs);
         $headElements = array_merge($headElements, $result->getHeadElements());
         $confirm = false;
     } else {
         $confirm = true;
     }
     return (new Template(__DIR__ . '/ExecutionTemplate.html.php'))->render(['name' => $this->app->name, 'caption' => $action->caption(), 'menu' => $this->app->menu->render(), 'breadcrumbs' => $this->assembleBreadCrumbs(), 'action' => $form->getModel(), 'result' => isset($result) ? $result->getModel() : null, 'headElements' => HeadElements::filter($headElements), 'executed' => isset($result) && $result->wasExecuted(), 'confirmationRequired' => $confirm, 'token' => $action->isModifying() && $this->app->token ? ['name' => self::TOKEN_ARG, 'value' => $this->app->token->generate($actionId)] : null]);
 }
Example #2
0
 /**
  * @param string $__action
  * @param WebRequest $__request <-
  * @return array
  * @throws \Exception
  */
 public function doGet($__action, WebRequest $__request)
 {
     $headElements = self::baseHeadElements();
     $renderedAction = null;
     $caption = 'Error';
     $crumbs = [];
     $reader = new RequestParameterReader($__request);
     try {
         $action = $this->app->actions->getAction($__action);
         $caption = $action->caption();
         $executor = new WebExecutor($this->app->actions, $this->app->fields, $this->app->renderers, $reader);
         $executor->restrictAccess($this->app->getAccessControl($__request));
         $result = $executor->execute($__action);
         if (!$result instanceof RedirectResult) {
             $crumbs = $this->updateCrumbs($__action, $result, $__request, $reader);
             $headElements = array_merge($headElements, $executor->getHeadElements());
             $actionParameter = new Parameter($__action, new ClassType(get_class($action)));
             $actionField = $this->app->fields->getField($actionParameter);
             if (!$actionField instanceof WebField) {
                 throw new \Exception(get_class($actionField) . " must implement WebField");
             }
             $renderedAction = $actionField->render($actionParameter, $this->readParameters($action, $reader));
             $headElements = array_merge($headElements, $actionField->headElements($actionParameter));
         }
     } catch (\Exception $e) {
         $result = new FailedResult($e);
     }
     $resultModel = $this->assembleResult($result, $__request);
     return array_merge(['name' => $this->app->name, 'menu' => $this->app->menu->render($__request), 'breadcrumbs' => $crumbs ? array_slice($crumbs, 0, -1) : null, 'current' => $crumbs ? array_slice($crumbs, -1)[0]['target'] : null, 'caption' => $caption, 'action' => $renderedAction, 'headElements' => HeadElements::filter($headElements)], $resultModel);
 }