From 597517ff19af494dec559c8e65a2eaf6d715408e Mon Sep 17 00:00:00 2001 From: Peter Lohse Date: Thu, 14 Nov 2024 21:53:12 +0100 Subject: [PATCH 1/6] change DiscordBotListPage to grid view --- acptemplates/discordBotList.tpl | 80 +------------------ .../lib/acp/page/DiscordBotListPage.class.php | 39 +++------ .../bootstrap/dev.hanashi.wsc.discord-api.php | 9 +++ .../lib/data/discord/bot/DiscordBot.class.php | 10 ++- .../hanashi/discord/bot/DeleteBot.class.php | 31 +++++++ .../gridView/DiscordBotListGridView.class.php | 77 ++++++++++++++++++ 6 files changed, 141 insertions(+), 105 deletions(-) create mode 100644 files/lib/system/endpoint/controller/hanashi/discord/bot/DeleteBot.class.php create mode 100644 files/lib/system/gridView/DiscordBotListGridView.class.php diff --git a/acptemplates/discordBotList.tpl b/acptemplates/discordBotList.tpl index 88ec652..858d59a 100644 --- a/acptemplates/discordBotList.tpl +++ b/acptemplates/discordBotList.tpl @@ -2,7 +2,7 @@
-

{lang}wcf.acp.menu.link.configuration.discord.discordBotList{/lang}

+

{lang}wcf.acp.menu.link.configuration.discord.discordBotList{/lang}{if $gridView->countRows()} {#$gridView->countRows()}{/if}

-{hascontent} -
- {content} - {pages print=true assign=pagesLinks controller='DiscordBotList' link="pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"} - {/content} -
-{/hascontent} - -{if $objects|count} -
- - - - - - - - - - {event name='columns'} - - - - - {foreach from=$objects item=discordBot} - - - - - - - - {event name='columnsItem'} - - {/foreach} - -
{lang}wcf.global.objectID{/lang}{lang}wcf.acp.discordBotList.botName{/lang}{lang}wcf.acp.discordBotList.server{/lang}{lang}wcf.global.date{/lang}
- {icon size=16 name='pencil'} - {objectAction action="delete" objectTitle=$discordBot->botName} - - {event name='icons'} - - {#$discordBot->botID} - - {$discordBot->botName} - - {if !$discordBot->guildIcon|empty} - - {/if} - {$discordBot->guildName} - - {time time=$discordBot->botTime} -
-
- - -{else} -

{lang}wcf.global.noItems{/lang}

-{/if} +
+ {unsafe:$gridView->render()} +
{include file='footer'} \ No newline at end of file diff --git a/files/lib/acp/page/DiscordBotListPage.class.php b/files/lib/acp/page/DiscordBotListPage.class.php index daf1977..f64ab06 100644 --- a/files/lib/acp/page/DiscordBotListPage.class.php +++ b/files/lib/acp/page/DiscordBotListPage.class.php @@ -2,18 +2,15 @@ namespace wcf\acp\page; -use wcf\data\discord\bot\DiscordBotList; -use wcf\page\SortablePage; +use Override; +use wcf\page\AbstractGridViewPage; +use wcf\system\gridView\AbstractGridView; +use wcf\system\gridView\DiscordBotListGridView; /** - * Übersicht aller Discord-Bots - * - * @author Peter Lohse - * @copyright Hanashi - * @license Freie Lizenz (https://hanashi.dev/freie-lizenz/) - * @package WoltLabSuite\Core\Acp\Page + * @property DiscordBotListGridView $gridView */ -class DiscordBotListPage extends SortablePage +class DiscordBotListPage extends AbstractGridViewPage { /** * @inheritDoc @@ -25,23 +22,9 @@ class DiscordBotListPage extends SortablePage */ public $activeMenuItem = 'wcf.acp.menu.link.configuration.discord.discordBotList'; - /** - * @inheritDoc - */ - public $objectListClassName = DiscordBotList::class; - - /** - * @inheritDoc - */ - public $defaultSortField = 'botID'; - - /** - * @inheritDoc - */ - public $defaultSortOrder = 'ASC'; - - /** - * @inheritDoc - */ - public $validSortFields = ['botID', 'botName', 'guildID', 'guildName', 'botTime']; + #[Override] + protected function createGridViewController(): AbstractGridView + { + return new DiscordBotListGridView(); + } } diff --git a/files/lib/bootstrap/dev.hanashi.wsc.discord-api.php b/files/lib/bootstrap/dev.hanashi.wsc.discord-api.php index 725d164..395e13f 100644 --- a/files/lib/bootstrap/dev.hanashi.wsc.discord-api.php +++ b/files/lib/bootstrap/dev.hanashi.wsc.discord-api.php @@ -5,7 +5,9 @@ use wcf\acp\page\DiscordWebhookListPage; use wcf\event\acp\dashboard\box\PHPExtensionCollecting; use wcf\event\acp\menu\item\ItemCollecting; +use wcf\event\endpoint\ControllerCollecting; use wcf\event\worker\RebuildWorkerCollecting; +use wcf\system\endpoint\controller\hanashi\discord\bot\DeleteBot; use wcf\system\event\EventHandler; use wcf\system\menu\acp\AcpMenuItem; use wcf\system\request\LinkHandler; @@ -77,4 +79,11 @@ static function (RebuildWorkerCollecting $event) { $event->register(DiscordWebhookAvatarRebuildDataWorker::class, 0); } ); + + EventHandler::getInstance()->register( + ControllerCollecting::class, + static function (ControllerCollecting $event) { + $event->register(new DeleteBot()); + } + ); }; diff --git a/files/lib/data/discord/bot/DiscordBot.class.php b/files/lib/data/discord/bot/DiscordBot.class.php index 8e71183..24ad250 100644 --- a/files/lib/data/discord/bot/DiscordBot.class.php +++ b/files/lib/data/discord/bot/DiscordBot.class.php @@ -2,8 +2,10 @@ namespace wcf\data\discord\bot; +use Override; use wcf\data\DatabaseObject; use wcf\data\file\File; +use wcf\data\ITitledObject; use wcf\system\cache\builder\DiscordGuildChannelCacheBuilder; use wcf\system\discord\DiscordApi; use wcf\system\WCF; @@ -29,7 +31,7 @@ * @property-read int $botTime * @property-read int|null $webhookIconID */ -final class DiscordBot extends DatabaseObject +final class DiscordBot extends DatabaseObject implements ITitledObject { /** * @inheritDoc @@ -45,6 +47,12 @@ final class DiscordBot extends DatabaseObject protected ?File $file; + #[Override] + public function getTitle(): string + { + return $this->botName; + } + public function getDiscordApi(): DiscordApi { if (!isset($this->discordApi)) { diff --git a/files/lib/system/endpoint/controller/hanashi/discord/bot/DeleteBot.class.php b/files/lib/system/endpoint/controller/hanashi/discord/bot/DeleteBot.class.php new file mode 100644 index 0000000..bca7087 --- /dev/null +++ b/files/lib/system/endpoint/controller/hanashi/discord/bot/DeleteBot.class.php @@ -0,0 +1,31 @@ +checkPermissions(['admin.discord.canManageConnection']); + + $action = new DiscordBotAction([$bot], 'delete'); + $action->executeAction(); + + return new JsonResponse([]); + } +} diff --git a/files/lib/system/gridView/DiscordBotListGridView.class.php b/files/lib/system/gridView/DiscordBotListGridView.class.php new file mode 100644 index 0000000..35f900d --- /dev/null +++ b/files/lib/system/gridView/DiscordBotListGridView.class.php @@ -0,0 +1,77 @@ +addColumns([ + GridViewColumn::for('botID') + ->label('wcf.global.objectID') + ->renderer(new NumberColumnRenderer()) + ->sortable(), + GridViewColumn::for('botName') + ->label('wcf.acp.discordBotList.botName') + ->renderer(new TitleColumnRenderer()) + ->sortable(), + GridViewColumn::for('guildName') + ->label('wcf.acp.discordBotList.server') + ->renderer([ + new class extends DefaultColumnRenderer { + public function render(mixed $value, mixed $context = null): string + { + \assert($context instanceof DiscordBot); + + $content = ''; + if (!empty($context->guildIcon)) { + $content = \sprintf( + '', + $context->guildID, + $context->guildIcon + ); + } + + return $content . $context->guildName; + } + }, + ]) + ->sortable(), + GridViewColumn::for('botTime') + ->label('wcf.global.date') + ->renderer(new TimeColumnRenderer()), + ]); + + $this->addActions([ + new DeleteAction('hanashi/discord/bot/%s'), + ]); + $this->setSortField('botID'); + $this->setSortOrder('ASC'); + } + + #[Override] + public function isAccessible(): bool + { + return WCF::getSession()->getPermission('admin.discord.canManageConnection'); + } + + #[Override] + protected function createObjectList(): DatabaseObjectList + { + return new DiscordBotList(); + } +} From ba4a111473afb740aa5935aec329cd8991f51369 Mon Sep 17 00:00:00 2001 From: Peter Lohse Date: Thu, 14 Nov 2024 22:02:12 +0100 Subject: [PATCH 2/6] remove useless space --- acptemplates/discordBotList.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acptemplates/discordBotList.tpl b/acptemplates/discordBotList.tpl index 858d59a..b3bc7a8 100644 --- a/acptemplates/discordBotList.tpl +++ b/acptemplates/discordBotList.tpl @@ -15,6 +15,6 @@
{unsafe:$gridView->render()} -
+ {include file='footer'} \ No newline at end of file From c1f472fb28997cbc626118e473dfa1f1f5275f50 Mon Sep 17 00:00:00 2001 From: Peter Lohse Date: Thu, 14 Nov 2024 22:15:18 +0100 Subject: [PATCH 3/6] add edit action --- files/lib/system/gridView/DiscordBotListGridView.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/files/lib/system/gridView/DiscordBotListGridView.class.php b/files/lib/system/gridView/DiscordBotListGridView.class.php index 35f900d..73e12e7 100644 --- a/files/lib/system/gridView/DiscordBotListGridView.class.php +++ b/files/lib/system/gridView/DiscordBotListGridView.class.php @@ -3,10 +3,12 @@ namespace wcf\system\gridView; use Override; +use wcf\acp\form\DiscordBotEditForm; use wcf\data\DatabaseObjectList; use wcf\data\discord\bot\DiscordBot; use wcf\data\discord\bot\DiscordBotList; use wcf\system\gridView\action\DeleteAction; +use wcf\system\gridView\action\EditAction; use wcf\system\gridView\renderer\DefaultColumnRenderer; use wcf\system\gridView\renderer\NumberColumnRenderer; use wcf\system\gridView\renderer\TimeColumnRenderer; @@ -57,6 +59,7 @@ public function render(mixed $value, mixed $context = null): string ]); $this->addActions([ + new EditAction(DiscordBotEditForm::class), new DeleteAction('hanashi/discord/bot/%s'), ]); $this->setSortField('botID'); From b3a7f24fe1e48553af45727bb6bc948517767fb8 Mon Sep 17 00:00:00 2001 From: Peter Lohse Date: Thu, 14 Nov 2024 22:16:37 +0100 Subject: [PATCH 4/6] make date column sortible too --- files/lib/system/gridView/DiscordBotListGridView.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/files/lib/system/gridView/DiscordBotListGridView.class.php b/files/lib/system/gridView/DiscordBotListGridView.class.php index 73e12e7..664e0c4 100644 --- a/files/lib/system/gridView/DiscordBotListGridView.class.php +++ b/files/lib/system/gridView/DiscordBotListGridView.class.php @@ -55,7 +55,8 @@ public function render(mixed $value, mixed $context = null): string ->sortable(), GridViewColumn::for('botTime') ->label('wcf.global.date') - ->renderer(new TimeColumnRenderer()), + ->renderer(new TimeColumnRenderer()) + ->sortable(), ]); $this->addActions([ From 5e66b671c314dd9c737a0e78b1ea5f8759ef2195 Mon Sep 17 00:00:00 2001 From: Peter Lohse Date: Sun, 17 Nov 2024 23:05:12 +0100 Subject: [PATCH 5/6] add filter and event --- ...iscordBotListGridViewInitialized.class.php | 13 +++++++++++++ .../gridView/DiscordBotListGridView.class.php | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 files/lib/system/event/gridView/DiscordBotListGridViewInitialized.class.php diff --git a/files/lib/system/event/gridView/DiscordBotListGridViewInitialized.class.php b/files/lib/system/event/gridView/DiscordBotListGridViewInitialized.class.php new file mode 100644 index 0000000..290c036 --- /dev/null +++ b/files/lib/system/event/gridView/DiscordBotListGridViewInitialized.class.php @@ -0,0 +1,13 @@ +label('wcf.acp.discordBotList.botName') ->renderer(new TitleColumnRenderer()) - ->sortable(), + ->sortable() + ->filter(new TextFilter()), GridViewColumn::for('guildName') ->label('wcf.acp.discordBotList.server') ->renderer([ @@ -52,11 +57,13 @@ public function render(mixed $value, mixed $context = null): string } }, ]) - ->sortable(), + ->sortable() + ->filter(new TextFilter()), GridViewColumn::for('botTime') ->label('wcf.global.date') ->renderer(new TimeColumnRenderer()) - ->sortable(), + ->sortable() + ->filter(new TimeFilter()), ]); $this->addActions([ @@ -78,4 +85,10 @@ protected function createObjectList(): DatabaseObjectList { return new DiscordBotList(); } + + #[Override] + protected function getInitializedEvent(): ?IPsr14Event + { + return new DiscordBotListGridViewInitialized($this); + } } From 3fccbeff9ce55ae0515f5277eb75dee78f44c670 Mon Sep 17 00:00:00 2001 From: Peter Lohse Date: Sun, 17 Nov 2024 23:10:59 +0100 Subject: [PATCH 6/6] fix typo --- .../lib/system/gridView/DiscordBotListGridView.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/files/lib/system/gridView/DiscordBotListGridView.class.php b/files/lib/system/gridView/DiscordBotListGridView.class.php index ff1829b..6f8a925 100644 --- a/files/lib/system/gridView/DiscordBotListGridView.class.php +++ b/files/lib/system/gridView/DiscordBotListGridView.class.php @@ -87,8 +87,8 @@ protected function createObjectList(): DatabaseObjectList } #[Override] - protected function getInitializedEvent(): ?IPsr14Event - { - return new DiscordBotListGridViewInitialized($this); - } + protected function getInitializedEvent(): ?IPsr14Event + { + return new DiscordBotListGridViewInitialized($this); + } }