| <?php |
|
|
| namespace Kanboard\Core\Controller; |
|
|
| use Kanboard\Controller\AppController; |
| use Kanboard\Core\Base; |
| use Kanboard\Middleware\ApplicationAuthorizationMiddleware; |
| use Kanboard\Middleware\AuthenticationMiddleware; |
| use Kanboard\Middleware\BootstrapMiddleware; |
| use Kanboard\Middleware\PostAuthenticationMiddleware; |
| use Kanboard\Middleware\ProjectAuthorizationMiddleware; |
| use RuntimeException; |
|
|
| |
| |
| |
| |
| |
| |
| class Runner extends Base |
| { |
| |
| |
| |
| public function execute() |
| { |
| try { |
| $this->executeMiddleware(); |
|
|
| if (!$this->response->isResponseAlreadySent()) { |
| $this->executeController(); |
| } |
| } catch (PageNotFoundException $e) { |
| $controllerObject = new AppController($this->container); |
| $controllerObject->notFound($e->hasLayout()); |
| } catch (AccessForbiddenException $e) { |
| $controllerObject = new AppController($this->container); |
| $controllerObject->accessForbidden($e->hasLayout(), $e->getMessage()); |
| } |
| } |
|
|
| |
| |
| |
| protected function executeMiddleware() |
| { |
| if (DEBUG) { |
| $this->logger->debug(__METHOD__); |
| } |
|
|
| $bootstrapMiddleware = new BootstrapMiddleware($this->container); |
| $authenticationMiddleware = new AuthenticationMiddleware($this->container); |
| $postAuthenticationMiddleware = new PostAuthenticationMiddleware($this->container); |
| $appAuthorizationMiddleware = new ApplicationAuthorizationMiddleware($this->container); |
| $projectAuthorizationMiddleware = new ProjectAuthorizationMiddleware($this->container); |
|
|
| $bootstrapMiddleware->setNextMiddleware($authenticationMiddleware); |
| $authenticationMiddleware->setNextMiddleware($postAuthenticationMiddleware); |
| $postAuthenticationMiddleware->setNextMiddleware($appAuthorizationMiddleware); |
| $appAuthorizationMiddleware->setNextMiddleware($projectAuthorizationMiddleware); |
|
|
| $bootstrapMiddleware->execute(); |
| } |
|
|
| |
| |
| |
| protected function executeController() |
| { |
| $className = $this->getControllerClassName(); |
|
|
| if (DEBUG) { |
| $this->logger->debug(__METHOD__.' => '.$className.'::'.$this->router->getAction()); |
| } |
|
|
| $controllerObject = new $className($this->container); |
| $controllerObject->{$this->router->getAction()}(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected function getControllerClassName() |
| { |
| if ($this->router->getPlugin() !== '') { |
| $className = '\Kanboard\Plugin\\'.$this->router->getPlugin().'\Controller\\'.$this->router->getController(); |
| } else { |
| $className = '\Kanboard\Controller\\'.$this->router->getController(); |
| } |
|
|
| if (! class_exists($className)) { |
| throw new RuntimeException('Controller not found'); |
| } |
|
|
| if (! method_exists($className, $this->router->getAction())) { |
| throw new RuntimeException('Action not implemented'); |
| } |
|
|
| return $className; |
| } |
| } |
|
|