Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 44 additions & 5 deletions wcfsetup/install/files/lib/action/ApiAction.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface
}

$dispatcher = cachedDispatcher(
static function (ConfigureRoutes $r) {
$event = new ControllerCollecting();
EventHandler::getInstance()->fire($event);

foreach ($event->getControllers() as $controller) {
function (ConfigureRoutes $r) {
foreach ($this->getControllers() as $controller) {
$reflectionClass = new \ReflectionClass($controller);
$attribute = current($reflectionClass->getAttributes(RequestType::class, \ReflectionAttribute::IS_INSTANCEOF));
\assert($attribute !== false);
Expand Down Expand Up @@ -139,4 +136,46 @@ private function toErrorResponse(
'param' => $param,
], $reason->toStatusCode());
}

/**
* @return array<string, IController>
*/
private function getControllers(): array
{
$controllers = [];
$directory = \WCF_DIR . 'lib/system/endpoint/controller/';
$iterator = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS)
);

foreach ($iterator as $file) {
if (!$file->isFile() || !\str_ends_with($file->getFilename(), '.class.php')) {
continue;
}

$relativePath = \substr($file->getPathname(), \strlen($directory));
$className = 'wcf\\system\\endpoint\\controller\\' . \str_replace('/', '\\', \substr($relativePath, 0, -\strlen('.class.php')));

if (!\class_exists($className)) {
continue;
}

$reflectionClass = new \ReflectionClass($className);
if ($reflectionClass->isInstantiable() && $reflectionClass->implementsInterface(IController::class)) {
$controllers[$className] = $reflectionClass->newInstance();
}
}

$event = new ControllerCollecting();
EventHandler::getInstance()->fire($event);

foreach ($event->getControllers() as $controller) {
$className = \get_class($controller);
if (!isset($controllers[$className])) {
$controllers[$className] = $controller;
}
}

return $controllers;
}
}
156 changes: 0 additions & 156 deletions wcfsetup/install/files/lib/bootstrap/com.woltlab.wcf.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
public function __invoke(): void
{
$this->initEventListeners();
$this->initEndpoints();
$this->initACPMenuItems();
$this->initLicenseData();
}
Expand Down Expand Up @@ -128,161 +127,6 @@ static function (\wcf\event\acp\dashboard\box\BoxCollecting $event) {
);
}

private function initEndpoints(): void
{
EventHandler::getInstance()->register(
\wcf\event\endpoint\ControllerCollecting::class,
static function (\wcf\event\endpoint\ControllerCollecting $event) {
$event->register(new \wcf\system\endpoint\controller\core\articles\GetArticlePopover());
$event->register(new \wcf\system\endpoint\controller\core\files\DeleteFile());
$event->register(new \wcf\system\endpoint\controller\core\files\GenerateThumbnails());
$event->register(new \wcf\system\endpoint\controller\core\files\PrepareUpload());
$event->register(new \wcf\system\endpoint\controller\core\files\upload\SaveChunk());
$event->register(new \wcf\system\endpoint\controller\core\comments\CreateComment());
$event->register(new \wcf\system\endpoint\controller\core\comments\DeleteComment());
$event->register(new \wcf\system\endpoint\controller\core\comments\EditComment());
$event->register(new \wcf\system\endpoint\controller\core\comments\EnableComment());
$event->register(new \wcf\system\endpoint\controller\core\comments\RenderComments());
$event->register(new \wcf\system\endpoint\controller\core\comments\RenderComment());
$event->register(new \wcf\system\endpoint\controller\core\comments\UpdateComment());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\CreateResponse());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\DeleteResponse());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\EditResponse());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\EnableResponse());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\RenderResponse());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\RenderResponses());
$event->register(new \wcf\system\endpoint\controller\core\comments\responses\UpdateResponse());
$event->register(new \wcf\system\endpoint\controller\core\devtools\projects\SyncVersion());
$event->register(new \wcf\system\endpoint\controller\core\exceptions\RenderException());
$event->register(new \wcf\system\endpoint\controller\core\gridViews\GetRows());
$event->register(new \wcf\system\endpoint\controller\core\gridViews\GetGridView());
$event->register(new \wcf\system\endpoint\controller\core\gridViews\GetRow());
$event->register(new \wcf\system\endpoint\controller\core\cronjobs\logs\ClearLogs());
$event->register(new \wcf\system\endpoint\controller\core\listViews\GetItems());
$event->register(new \wcf\system\endpoint\controller\core\listViews\GetItem());
$event->register(new \wcf\system\endpoint\controller\core\messages\GetMentionSuggestions());
$event->register(new \wcf\system\endpoint\controller\core\messages\RenderQuote());
$event->register(new \wcf\system\endpoint\controller\core\messages\ResetRemovalQuotes());
$event->register(new \wcf\system\endpoint\controller\core\sessions\DeleteSession());
$event->register(new \wcf\system\endpoint\controller\core\versionTrackers\RevertVersion());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\ChangeJustifiedStatus());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\CloseReport());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\DeleteContent());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\EnableContent());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\MarkModerationQueueAsRead());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\MarkAllModerationQueuesAsRead());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\GetUserMenuItems());
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\GetModerationQueueHeaderTitle());
$event->register(new \wcf\system\endpoint\controller\core\styles\AddDarkMode());
$event->register(new \wcf\system\endpoint\controller\core\styles\CopyStyle());
$event->register(new \wcf\system\endpoint\controller\core\styles\DeleteStyle());
$event->register(new \wcf\system\endpoint\controller\core\styles\DisableStyle());
$event->register(new \wcf\system\endpoint\controller\core\styles\EnableStyle());
$event->register(new \wcf\system\endpoint\controller\core\styles\SetStyleAsDefault());
$event->register(new \wcf\system\endpoint\controller\core\styles\ChangeStyle());
$event->register(new \wcf\system\endpoint\controller\core\styles\GetStyleChooser());
$event->register(new \wcf\system\endpoint\controller\core\users\options\DeleteOption());
$event->register(new \wcf\system\endpoint\controller\core\users\options\DisableOption());
$event->register(new \wcf\system\endpoint\controller\core\users\options\EnableOption());
$event->register(new \wcf\system\endpoint\controller\core\users\ranks\DeleteUserRank());
$event->register(new \wcf\system\endpoint\controller\core\users\trophies\DeleteUserTrophy());
$event->register(new \wcf\system\endpoint\controller\core\interactions\GetBulkContextMenuOptions());
$event->register(new \wcf\system\endpoint\controller\core\interactions\GetContextMenuOptions());
$event->register(new \wcf\system\endpoint\controller\core\articles\DeleteArticle());
$event->register(new \wcf\system\endpoint\controller\core\articles\SoftDeleteArticle());
$event->register(new \wcf\system\endpoint\controller\core\articles\RestoreArticle());
$event->register(new \wcf\system\endpoint\controller\core\articles\PublishArticle());
$event->register(new \wcf\system\endpoint\controller\core\articles\UnpublishArticle());
$event->register(new \wcf\system\endpoint\controller\core\articles\MarkAllArticlesAsRead());
$event->register(new \wcf\system\endpoint\controller\core\articles\MarkArticleAsRead());
$event->register(new \wcf\system\endpoint\controller\core\articles\contents\GetArticleContentHeaderTitle());
$event->register(new \wcf\system\endpoint\controller\core\attachments\DeleteAttachment());
$event->register(new \wcf\system\endpoint\controller\core\cronjobs\EnableCronjob());
$event->register(new \wcf\system\endpoint\controller\core\cronjobs\DisableCronjob());
$event->register(new \wcf\system\endpoint\controller\core\cronjobs\DeleteCronjob());
$event->register(new \wcf\system\endpoint\controller\core\cronjobs\ExecuteCronjob());
$event->register(new \wcf\system\endpoint\controller\core\captchas\questions\EnableQuestion());
$event->register(new \wcf\system\endpoint\controller\core\captchas\questions\DisableQuestion());
$event->register(new \wcf\system\endpoint\controller\core\captchas\questions\DeleteQuestion());
$event->register(new \wcf\system\endpoint\controller\core\boxes\DisableBox());
$event->register(new \wcf\system\endpoint\controller\core\boxes\EnableBox());
$event->register(new \wcf\system\endpoint\controller\core\boxes\DeleteBox());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\media\providers\DeleteProvider());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\media\providers\DisableProvider());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\media\providers\EnableProvider());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\DeleteBBCode());
$event->register(new \wcf\system\endpoint\controller\core\languages\DisableLanguage());
$event->register(new \wcf\system\endpoint\controller\core\languages\DeleteLanguage());
$event->register(new \wcf\system\endpoint\controller\core\languages\EnableLanguage());
$event->register(new \wcf\system\endpoint\controller\core\languages\SetAsDefaultLanguage());
$event->register(new \wcf\system\endpoint\controller\core\languages\items\DeleteItem());
$event->register(new \wcf\system\endpoint\controller\core\labels\DeleteLabel());
$event->register(new \wcf\system\endpoint\controller\core\labels\groups\ChangeLabelShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\labels\groups\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\labels\groups\DeleteGroup());
$event->register(new \wcf\system\endpoint\controller\core\labels\groups\GetLabelShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\labels\groups\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\pages\DeletePage());
$event->register(new \wcf\system\endpoint\controller\core\pages\DisablePage());
$event->register(new \wcf\system\endpoint\controller\core\pages\EnablePage());
$event->register(new \wcf\system\endpoint\controller\core\templates\groups\DeleteTemplateGroup());
$event->register(new \wcf\system\endpoint\controller\core\packages\updates\servers\DisableServer());
$event->register(new \wcf\system\endpoint\controller\core\packages\updates\servers\DeleteServer());
$event->register(new \wcf\system\endpoint\controller\core\packages\updates\servers\EnableServer());
$event->register(new \wcf\system\endpoint\controller\core\paidSubscriptions\DeleteSubscription());
$event->register(new \wcf\system\endpoint\controller\core\paidSubscriptions\DisableSubscription());
$event->register(new \wcf\system\endpoint\controller\core\paidSubscriptions\EnableSubscription());
$event->register(new \wcf\system\endpoint\controller\core\paidSubscriptions\users\DeleteSubscriptionUser());
$event->register(new \wcf\system\endpoint\controller\core\templates\DeleteTemplate());
$event->register(new \wcf\system\endpoint\controller\core\tags\DeleteTag());
$event->register(new \wcf\system\endpoint\controller\core\users\groups\assignments\DeleteAssignment());
$event->register(new \wcf\system\endpoint\controller\core\users\groups\assignments\EnableAssignment());
$event->register(new \wcf\system\endpoint\controller\core\users\groups\assignments\DisableAssignment());
$event->register(new \wcf\system\endpoint\controller\core\users\activityEvents\RenderUserActivityEvents());
$event->register(new \wcf\system\endpoint\controller\core\users\groups\DeleteGroup());
$event->register(new \wcf\system\endpoint\controller\core\users\reactions\RenderUserReactions());
$event->register(new \wcf\system\endpoint\controller\core\menus\DeleteMenu());
$event->register(new \wcf\system\endpoint\controller\core\trophies\EnableTrophy());
$event->register(new \wcf\system\endpoint\controller\core\trophies\DisableTrophy());
$event->register(new \wcf\system\endpoint\controller\core\trophies\DeleteTrophy());
$event->register(new \wcf\system\endpoint\controller\core\trophies\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\trophies\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\ads\EnableAd());
$event->register(new \wcf\system\endpoint\controller\core\ads\DisableAd());
$event->register(new \wcf\system\endpoint\controller\core\ads\DeleteAd());
$event->register(new \wcf\system\endpoint\controller\core\ads\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\ads\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\notices\EnableNotice());
$event->register(new \wcf\system\endpoint\controller\core\notices\DisableNotice());
$event->register(new \wcf\system\endpoint\controller\core\notices\DeleteNotice());
$event->register(new \wcf\system\endpoint\controller\core\notices\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\notices\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\notices\DismissNotice());
$event->register(new \wcf\system\endpoint\controller\core\reactions\types\EnableType());
$event->register(new \wcf\system\endpoint\controller\core\reactions\types\DisableType());
$event->register(new \wcf\system\endpoint\controller\core\reactions\types\DeleteType());
$event->register(new \wcf\system\endpoint\controller\core\reactions\types\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\reactions\types\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\smilies\DeleteSmiley());
$event->register(new \wcf\system\endpoint\controller\core\smilies\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\smilies\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\smilies\categories\GetSmileyShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\smilies\categories\ChangeSmileyShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\attachments\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\contact\options\DeleteOption());
$event->register(new \wcf\system\endpoint\controller\core\contact\options\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\contact\options\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\contact\options\DisableOption());
$event->register(new \wcf\system\endpoint\controller\core\contact\options\EnableOption());
$event->register(new \wcf\system\endpoint\controller\core\contact\recipients\DeleteRecipient());
$event->register(new \wcf\system\endpoint\controller\core\contact\recipients\ChangeShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\contact\recipients\GetShowOrder());
$event->register(new \wcf\system\endpoint\controller\core\contact\recipients\DisableRecipient());
$event->register(new \wcf\system\endpoint\controller\core\contact\recipients\EnableRecipient());
}
);
}

private function initACPMenuItems(): void
{
EventHandler::getInstance()->register(
Expand Down