From f15f93f932fb719e9a17b9b8e9762e7a49918c5f Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 16 Feb 2022 17:11:09 +0100 Subject: [PATCH] backports murph-skeleton --- core/Router/RedirectBuilder.php | 10 +++ core/String/FileInformationBuilder.php | 61 +++++++++++++++++ core/String/UrlBuilder.php | 65 +++++++++++++++++++ .../Extension/FileInformationExtension.php | 39 +++-------- core/Twig/Extension/UrlExtension.php | 41 ++---------- 5 files changed, 151 insertions(+), 65 deletions(-) create mode 100644 core/String/FileInformationBuilder.php create mode 100644 core/String/UrlBuilder.php diff --git a/core/Router/RedirectBuilder.php b/core/Router/RedirectBuilder.php index 774e5fc..3ad94db 100644 --- a/core/Router/RedirectBuilder.php +++ b/core/Router/RedirectBuilder.php @@ -3,6 +3,7 @@ namespace App\Core\Router; use App\Core\Entity\Redirect; +use App\Core\String\UrlBuilder; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; @@ -13,6 +14,13 @@ use Symfony\Component\HttpFoundation\Request; */ class RedirectBuilder { + protected UrlBuilder $urlBuilder; + + public function __construct(UrlBuilder $urlBuilder) + { + $this->urlBuilder = $urlBuilder; + } + public function buildResponse(Redirect $redirect, Request $request): RedirectResponse { return new RedirectResponse( @@ -31,6 +39,8 @@ class RedirectBuilder $location = preg_replace('`'.$redirect->getRule().'`sU', $redirect->getLocation(), $data['path']); } + $location = $this->urlBuilder->replaceTags($location); + if ($redirect->getReuseQueryString() && count($request->query)) { $location .= sprintf('?%s', http_build_query($request->query->all())); } diff --git a/core/String/FileInformationBuilder.php b/core/String/FileInformationBuilder.php new file mode 100644 index 0000000..9f3aab6 --- /dev/null +++ b/core/String/FileInformationBuilder.php @@ -0,0 +1,61 @@ + + */ +class FileInformationBuilder +{ + protected FsFileManager $fsManager; + protected FileInformationRepositoryQuery $query; + + public function __construct(FsFileManager $fsManager, FileInformationRepositoryQuery $query) + { + $this->fsManager = $fsManager; + $this->query = $query; + } + + public function replaceTags(string $value) + { + preg_match_all( + '#\{\{\s*fattr://(?P[a-z0-9]+)\/(?P