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();
}
//$new_url = str_replace($request->getPathInfo(), '/' . $locale . $request->getPathInfo(), $request->getUri());
$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
@ -71,6 +70,9 @@ class RedirectController extends AbstractController
$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);
}

View file

@ -91,6 +91,9 @@ class RedirectControllerTest extends WebTestCase
//Without an explicit set value, the user should be redirect to english version
[null, '/', '/en/'],
['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'],
];
}
@ -101,11 +104,11 @@ class RedirectControllerTest extends WebTestCase
* @group slow
* @depends testUrlMatch
*
* @param $user_locale
* @param $input_path
* @param $redirect_path
* @param string|null $user_locale
* @param string $input_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 = 'http://localhost'.$redirect_path;