mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 03:01:32 +00:00
The official image from streamline does not currently work for the arm64 platform. As a temporary measure, the source code and docker build scripts have been lifted from the official images and are used to build locally. Some additional modifications are made to reduce overall image size, these are documented in docker/README.md
91 lines
3.5 KiB
PHP
91 lines
3.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\HttpKernel\Fragment;
|
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\RequestStack;
|
|
use Symfony\Component\HttpFoundation\UriSigner;
|
|
use Symfony\Component\HttpKernel\Controller\ControllerReference;
|
|
|
|
/**
|
|
* Generates a fragment URI.
|
|
*
|
|
* @author Kévin Dunglas <kevin@dunglas.fr>
|
|
* @author Fabien Potencier <fabien@symfony.com>
|
|
*/
|
|
final class FragmentUriGenerator implements FragmentUriGeneratorInterface
|
|
{
|
|
private string $fragmentPath;
|
|
private ?UriSigner $signer;
|
|
private ?RequestStack $requestStack;
|
|
|
|
public function __construct(string $fragmentPath, ?UriSigner $signer = null, ?RequestStack $requestStack = null)
|
|
{
|
|
$this->fragmentPath = $fragmentPath;
|
|
$this->signer = $signer;
|
|
$this->requestStack = $requestStack;
|
|
}
|
|
|
|
public function generate(ControllerReference $controller, ?Request $request = null, bool $absolute = false, bool $strict = true, bool $sign = true): string
|
|
{
|
|
if (null === $request && (null === $this->requestStack || null === $request = $this->requestStack->getCurrentRequest())) {
|
|
throw new \LogicException('Generating a fragment URL can only be done when handling a Request.');
|
|
}
|
|
|
|
if ($sign && null === $this->signer) {
|
|
throw new \LogicException('You must use a URI when using the ESI rendering strategy or set a URL signer.');
|
|
}
|
|
|
|
if ($strict) {
|
|
$this->checkNonScalar($controller->attributes);
|
|
}
|
|
|
|
// We need to forward the current _format and _locale values as we don't have
|
|
// a proper routing pattern to do the job for us.
|
|
// This makes things inconsistent if you switch from rendering a controller
|
|
// to rendering a route if the route pattern does not contain the special
|
|
// _format and _locale placeholders.
|
|
if (!isset($controller->attributes['_format'])) {
|
|
$controller->attributes['_format'] = $request->getRequestFormat();
|
|
}
|
|
if (!isset($controller->attributes['_locale'])) {
|
|
$controller->attributes['_locale'] = $request->getLocale();
|
|
}
|
|
|
|
$controller->attributes['_controller'] = $controller->controller;
|
|
$controller->query['_path'] = http_build_query($controller->attributes, '', '&');
|
|
$path = $this->fragmentPath.'?'.http_build_query($controller->query, '', '&');
|
|
|
|
// we need to sign the absolute URI, but want to return the path only.
|
|
$fragmentUri = $sign || $absolute ? $request->getUriForPath($path) : $request->getBaseUrl().$path;
|
|
|
|
if (!$sign) {
|
|
return $fragmentUri;
|
|
}
|
|
|
|
$fragmentUri = $this->signer->sign($fragmentUri);
|
|
|
|
return $absolute ? $fragmentUri : substr($fragmentUri, \strlen($request->getSchemeAndHttpHost()));
|
|
}
|
|
|
|
private function checkNonScalar(array $values): void
|
|
{
|
|
foreach ($values as $key => $value) {
|
|
if (\is_array($value)) {
|
|
$this->checkNonScalar($value);
|
|
} elseif (!\is_scalar($value) && null !== $value) {
|
|
throw new \LogicException(sprintf('Controller attributes cannot contain non-scalar/non-null values (value for key "%s" is not a scalar or null).', $key));
|
|
}
|
|
}
|
|
}
|
|
}
|