diff --git a/typo3/sysext/backend/Classes/Routing/UriBuilder.php b/typo3/sysext/backend/Classes/Routing/UriBuilder.php index 3bf642451aefd3dcbca79476e924cfb3e97108ca..d91dbf2fc89f5dcbb6452a85f28deae20b0c0972 100644 --- a/typo3/sysext/backend/Classes/Routing/UriBuilder.php +++ b/typo3/sysext/backend/Classes/Routing/UriBuilder.php @@ -177,9 +177,9 @@ class UriBuilder implements SingletonInterface } elseif (($GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface && $GLOBALS['TYPO3_REQUEST']->getAttribute('normalizedParams') instanceof NormalizedParams ) { - $uri = $GLOBALS['TYPO3_REQUEST']->getAttribute('normalizedParams')->getRequestDir() . $path; + $uri = $GLOBALS['TYPO3_REQUEST']->getAttribute('normalizedParams')->getSiteUrl() . TYPO3_mainDir . $path; } else { - $uri = GeneralUtility::getIndpEnv('TYPO3_REQUEST_DIR') . $path; + $uri = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir . $path; } return GeneralUtility::makeInstance(Uri::class, $uri); } diff --git a/typo3/sysext/backend/Tests/Functional/Template/Components/Buttons/Action/ShortcutButtonTest.php b/typo3/sysext/backend/Tests/Functional/Template/Components/Buttons/Action/ShortcutButtonTest.php index d83a7c15c34df488f7e27e7beea52db1f06d2b97..7e6f8479cd535421e7b2aadf16c8971698e8c827 100644 --- a/typo3/sysext/backend/Tests/Functional/Template/Components/Buttons/Action/ShortcutButtonTest.php +++ b/typo3/sysext/backend/Tests/Functional/Template/Components/Buttons/Action/ShortcutButtonTest.php @@ -19,6 +19,9 @@ namespace TYPO3\CMS\Backend\Tests\Functional\Template\Components\Buttons\Action; use TYPO3\CMS\Backend\Template\Components\Buttons\Action\ShortcutButton; use TYPO3\CMS\Core\Core\Bootstrap; +use TYPO3\CMS\Core\Core\SystemEnvironmentBuilder; +use TYPO3\CMS\Core\Http\NormalizedParams; +use TYPO3\CMS\Core\Http\ServerRequest; use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; class ShortcutButtonTest extends FunctionalTestCase @@ -31,6 +34,11 @@ class ShortcutButtonTest extends FunctionalTestCase $this->setUpBackendUserFromFixture(1); Bootstrap::initializeLanguageObject(); + $serverParams = array_replace($_SERVER, ['HTTP_HOST' => 'example.com', 'SCRIPT_NAME' => '/typo3/index.php']); + $request = new ServerRequest('http://example.com/typo3/index.php', 'GET', null, $serverParams); + $GLOBALS['TYPO3_REQUEST'] = $request + ->withAttribute('applicationType', SystemEnvironmentBuilder::REQUESTTYPE_BE) + ->withAttribute('normalizedParams', NormalizedParams::createFromServerParams($serverParams)); } /** diff --git a/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListCopyToClipboard.html b/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListCopyToClipboard.html index af066c300b7d2562b76b0827c22e34ca3fd617d4..ff6e72c356df87b302bd6f563a2a57a46626cc4d 100644 --- a/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListCopyToClipboard.html +++ b/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListCopyToClipboard.html @@ -25,7 +25,7 @@ </button> </li> <li> - <typo3-copy-to-clipboard text="http://vendor/phpunit/phpunit/module/web/list"> + <typo3-copy-to-clipboard text="http://example.com/typo3/module/web/list"> <button type="button" class="dropdown-item btn btn-link"> <span class="t3js-icon icon icon-size-small icon-state-default icon-actions-link" data-identifier="actions-link"> <span class="icon-markup"> diff --git a/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListSingleTableCopyToClipboard.html b/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListSingleTableCopyToClipboard.html index 2fc07908f7f0fdfc93ef5befc853d98f85c568db..eae87f3988d0890588a5a9cd566a8e357e35a9cf 100644 --- a/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListSingleTableCopyToClipboard.html +++ b/typo3/sysext/backend/Tests/Functional/Template/Fixtures/RecordListSingleTableCopyToClipboard.html @@ -25,7 +25,7 @@ </button> </li> <li> - <typo3-copy-to-clipboard text="http://vendor/phpunit/phpunit/module/web/list?id=123&table=some_table&GET%5BclipBoard%5D=1"> + <typo3-copy-to-clipboard text="http://example.com/typo3/module/web/list?id=123&table=some_table&GET%5BclipBoard%5D=1"> <button type="button" class="dropdown-item btn btn-link"> <span class="t3js-icon icon icon-size-small icon-state-default icon-actions-link" data-identifier="actions-link"> <span class="icon-markup"> diff --git a/typo3/sysext/backend/Tests/Functional/Template/Fixtures/SpecialRouteIdentifierWithArgumentsCopyToClipboard.html b/typo3/sysext/backend/Tests/Functional/Template/Fixtures/SpecialRouteIdentifierWithArgumentsCopyToClipboard.html index 27c6ecd1b8099a3182731d79908045423338a7e4..ff32f3005326b4d0885f37ea633c8481bf4f3935 100644 --- a/typo3/sysext/backend/Tests/Functional/Template/Fixtures/SpecialRouteIdentifierWithArgumentsCopyToClipboard.html +++ b/typo3/sysext/backend/Tests/Functional/Template/Fixtures/SpecialRouteIdentifierWithArgumentsCopyToClipboard.html @@ -25,7 +25,7 @@ </button> </li> <li> - <typo3-copy-to-clipboard text="http://vendor/phpunit/phpunit/record/edit?id=123&edit%5Bpages%5D%5B123%5D=edit&edit%5BoverrideVals%5D%5Bpages%5D%5Bsys_language_uid%5D=1"> + <typo3-copy-to-clipboard text="http://example.com/typo3/record/edit?id=123&edit%5Bpages%5D%5B123%5D=edit&edit%5BoverrideVals%5D%5Bpages%5D%5Bsys_language_uid%5D=1"> <button type="button" class="dropdown-item btn btn-link"> <span class="t3js-icon icon icon-size-small icon-state-default icon-actions-link" data-identifier="actions-link"> <span class="icon-markup"> diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php index 3c9d1a439fb0867f4752ac98e045dfd4e1de2d24..fe527fb26a8ece5881dd41e99e31f32ab7bcc924 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Web/Routing/UriBuilderTest.php @@ -23,6 +23,7 @@ use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Backend\Routing\Route; use TYPO3\CMS\Backend\Routing\Router; use TYPO3\CMS\Backend\Routing\UriBuilder as BackendUriBuilder; +use TYPO3\CMS\Core\Core\Environment; use TYPO3\CMS\Core\Http\ServerRequest; use TYPO3\CMS\Core\Http\Uri; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -48,6 +49,11 @@ class UriBuilderTest extends UnitTestCase */ protected $resetSingletonInstances = true; + /** + * @var bool Restore Environment after tests + */ + protected $backupEnvironment = true; + /** * @var ConfigurationManagerInterface */ @@ -368,8 +374,35 @@ class UriBuilderTest extends UnitTestCase /** * @test */ - public function buildBackendUriCreatesAbsoluteUrisIfSpecified(): void + public function buildBackendUriCreatesAbsoluteUrisInFrontendContentIfSpecified(): void + { + $GLOBALS['TYPO3_REQUEST'] = $this->getRequestWithRouteAttribute(); + $_SERVER['HTTP_HOST'] = 'baseuri'; + $_SERVER['SCRIPT_NAME'] = '/index.php'; + $_SERVER['ORIG_SCRIPT_NAME'] = '/index.php'; + $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; + $this->uriBuilder->setCreateAbsoluteUri(true); + $expectedResult = 'http://baseuri/' . TYPO3_mainDir . 'test/Path?token=dummyToken'; + $actualResult = $this->uriBuilder->buildBackendUri(); + self::assertSame($expectedResult, $actualResult); + } + + /** + * @test + */ + public function buildBackendUriCreatesAbsoluteUrisInBackendContentIfSpecified(): void { + Environment::initialize( + Environment::getContext(), + true, + false, + Environment::getProjectPath(), + Environment::getPublicPath(), + Environment::getVarPath(), + Environment::getConfigPath(), + Environment::getBackendPath() . '/index.php', + Environment::isWindows() ? 'WINDOWS' : 'UNIX' + ); $GLOBALS['TYPO3_REQUEST'] = $this->getRequestWithRouteAttribute(); $_SERVER['HTTP_HOST'] = 'baseuri'; $_SERVER['SCRIPT_NAME'] = '/typo3/index.php';