diff --git a/wcfsetup/install/files/acp/templates/__optionRewriteTest.tpl b/wcfsetup/install/files/acp/templates/__optionRewriteTest.tpl index 4f42e3173f4..6de1a844f0d 100644 --- a/wcfsetup/install/files/acp/templates/__optionRewriteTest.tpl +++ b/wcfsetup/install/files/acp/templates/__optionRewriteTest.tpl @@ -31,10 +31,9 @@ 'wcf.acp.option.url_omit_index_php.test.status.success': '{jslang}wcf.acp.option.url_omit_index_php.test.status.success{/jslang}' }); - const apps = new Map(Object.entries({ - {* this bypasses the route system to force rewritten urls *} - {implode from=$rewriteTestApplications item=$rewriteTestApplication}'{unsafe:$rewriteTestApplication->getPackage()|encodeJS}': '{$__wcf->getPath($rewriteTestApplication->getAbbreviation())}core-rewrite-test/'{/implode} - })); + const apps = new Map(Object.entries( + {unsafe:$rewriteTestApplications|json} + )); AcpUiOptionRewriteTest.init(apps); }); diff --git a/wcfsetup/install/files/lib/acp/form/OptionForm.class.php b/wcfsetup/install/files/lib/acp/form/OptionForm.class.php index a1edfbb192e..b7a6069d012 100644 --- a/wcfsetup/install/files/lib/acp/form/OptionForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/OptionForm.class.php @@ -4,7 +4,9 @@ use wcf\data\option\category\OptionCategory; use wcf\data\option\OptionAction; +use wcf\event\acp\option\RewriteApplicationCollecting; use wcf\system\application\ApplicationHandler; +use wcf\system\event\EventHandler; use wcf\system\exception\IllegalLinkException; use wcf\system\menu\acp\ACPMenu; use wcf\system\option\OptionHandler; @@ -110,10 +112,24 @@ public function assignVariables() { parent::assignVariables(); + $event = new RewriteApplicationCollecting(); + foreach (ApplicationHandler::getInstance()->getApplications() as $application) { + $event->register($application->getPackage()->getName(), WCF::getPath($application->getAbbreviation())); + } + + EventHandler::getInstance()->fire($event); + $applications = $event->getApplications(); + + // Generate a static route to enforce URL rewriting. + $applications = \array_map( + static fn(string $path) => $path . 'core-rewrite-test/', + $applications + ); + WCF::getTPL()->assign([ 'category' => $this->category, 'optionTree' => $this->optionTree, - 'rewriteTestApplications' => ApplicationHandler::getInstance()->getApplications(), + 'rewriteTestApplications' => $applications, ]); } diff --git a/wcfsetup/install/files/lib/event/acp/option/RewriteApplicationCollecting.class.php b/wcfsetup/install/files/lib/event/acp/option/RewriteApplicationCollecting.class.php new file mode 100644 index 00000000000..79fc35a57e5 --- /dev/null +++ b/wcfsetup/install/files/lib/event/acp/option/RewriteApplicationCollecting.class.php @@ -0,0 +1,34 @@ + + * @since 6.2 + */ +final class RewriteApplicationCollecting implements IPsr14Event +{ + /** + * @var array + */ + private array $applications = []; + + public function register(string $name, string $path): void + { + $this->applications[$name] = $path; + } + + /** + * @return array + */ + public function getApplications(): array + { + return $this->applications; + } +}