Keep query parameters when adding locale part in RedirectController

This fixes issue #268
This commit is contained in:
Jan Böhmer 2023-04-15 00:38:11 +02:00
parent 6e6e203f8a
commit 8351f38ee7
2 changed files with 11 additions and 6 deletions

View file

@ -61,7 +61,6 @@ class RedirectController extends AbstractController
$locale = $user->getLanguage(); $locale = $user->getLanguage();
} }
//$new_url = str_replace($request->getPathInfo(), '/' . $locale . $request->getPathInfo(), $request->getUri());
$new_url = $request->getUriForPath('/'.$locale.$request->getPathInfo()); $new_url = $request->getUriForPath('/'.$locale.$request->getPathInfo());
//If either mod_rewrite is not enabled or the index.php version is enforced, add index.php to the string //If either mod_rewrite is not enabled or the index.php version is enforced, add index.php to the string
@ -71,6 +70,9 @@ class RedirectController extends AbstractController
$new_url = $request->getSchemeAndHttpHost().$request->getBaseUrl().'/index.php/'.$locale.$request->getPathInfo(); $new_url = $request->getSchemeAndHttpHost().$request->getBaseUrl().'/index.php/'.$locale.$request->getPathInfo();
} }
//Add the query string
$new_url .= $request->getQueryString() ? '?'.$request->getQueryString() : '';
return $this->redirect($new_url); return $this->redirect($new_url);
} }

View file

@ -91,6 +91,9 @@ class RedirectControllerTest extends WebTestCase
//Without an explicit set value, the user should be redirect to english version //Without an explicit set value, the user should be redirect to english version
[null, '/', '/en/'], [null, '/', '/en/'],
['en_US', '/part/3', '/en_US/part/3'], ['en_US', '/part/3', '/en_US/part/3'],
//Test that query parameters work
['de', '/dialog?target_id=133&target_type=part', '/de/dialog?target_id=133&target_type=part'],
['en', '/dialog?storelocation=1', '/en/dialog?storelocation=1'],
]; ];
} }
@ -99,13 +102,13 @@ class RedirectControllerTest extends WebTestCase
* *
* @dataProvider urlAddLocaleDataProvider * @dataProvider urlAddLocaleDataProvider
* @group slow * @group slow
* @depends testUrlMatch * @depends testUrlMatch
* *
* @param $user_locale * @param string|null $user_locale
* @param $input_path * @param string $input_path
* @param $redirect_path * @param string $redirect_path
*/ */
public function testAddLocale($user_locale, $input_path, $redirect_path): void public function testAddLocale(?string $user_locale, string $input_path, string $redirect_path): void
{ {
//Redirect path is absolute //Redirect path is absolute
$redirect_path = 'http://localhost'.$redirect_path; $redirect_path = 'http://localhost'.$redirect_path;