diff options
Diffstat (limited to 'src/Middleware/PopulateRequestResponse.php')
-rw-r--r-- | src/Middleware/PopulateRequestResponse.php | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/Middleware/PopulateRequestResponse.php b/src/Middleware/PopulateRequestResponse.php new file mode 100644 index 00000000..3b4e498a --- /dev/null +++ b/src/Middleware/PopulateRequestResponse.php @@ -0,0 +1,99 @@ +<?php + +/** + * PHPPgAdmin6 + */ + +namespace PHPPgAdmin\Middleware; + +use PHPPgAdmin\Core\ContainerUtils; +use PHPPgAdmin\Core\ViewManager; +use PHPPgAdmin\Traits\HelperTrait; +use Slim\Http\Request; +use Slim\Http\Response; +use Slim\Http\Uri; + +/** + * Set the requestobj and responseobj properties of the container + * as the value of $request and $response, which already contain the route. + */ +class PopulateRequestResponse extends Middleware +{ + use HelperTrait; + + public function __invoke( + Request $request, + Response $response, + $next + ) { + $container = $this->container; + $subfolder = $this->container->getSubfolder(); + + $route = $request->getAttribute('route'); + + $container['server'] = $request->getParam('server'); + $container['database'] = $request->getParam('database'); + $container['schema'] = $request->getParam('schema'); + $misc = $container->get('misc'); + + $view = $this->getViewManager($container); + + $misc->setHREF(); + $view->setForm(); + + $view->offsetSet('METHOD', $request->getMethod()); + + if ($route) { + $view->offsetSet('subject', $route->getArgument('subject')); + $container['server'] = $route->getArgument('server', $request->getParam('server')); + } + + $request = $request->withUri($this->getUri($request)->withBasePath($subfolder)); + $uri = $request->getUri(); + $query_string = $uri->getQuery(); + $requestPath = $uri->getPath(); + + $view->offsetSet('query_string', $query_string); + $path = $requestPath . ('' !== $query_string ? '?' . $query_string : ''); + $view->offsetSet('path', $path); + + $params = $request->getParams(); + + $viewparams = []; + + $viewparams = \array_filter($params, 'is_scalar'); + + $in_test = isset($_COOKIE['IN_TEST']) ? (string) $_COOKIE['IN_TEST'] : '0'; + + // remove tabs and linebreaks from query + if (isset($params['query'])) { + $viewparams['query'] = \str_replace(["\r", "\n", "\t"], ' ', $params['query']); + } + $view->offsetSet('params', $viewparams); + $view->offsetSet('in_test', $in_test); + + if (0 < \count($container['errors'])) { + return ($container->haltHandler)($request, $response, $container['errors'], 412); + } + $enqueued_reload_browser = ($container->flash->getFirstMessage('reload_browser') ?? false); + + if ($enqueued_reload_browser) { + $view->setReloadBrowser($enqueued_reload_browser); + } + // First execute anything else + $response = $next($request, $response); + + // Any other request, pass on current response + return $response; + } + + private function getUri(Request $request): Uri + { + return $request->getUri(); + } + + private function getViewManager(ContainerUtils $container): ViewManager + { + return $container->get('view'); + } +} |