From 3c1b82143ccc45955d09f5363903ee6d28196a3d Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Fri, 22 Aug 2025 14:21:52 +0200 Subject: [PATCH 1/3] Fix missing margin between badges in article grid view --- .../lib/system/gridView/admin/ArticleGridView.class.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wcfsetup/install/files/lib/system/gridView/admin/ArticleGridView.class.php b/wcfsetup/install/files/lib/system/gridView/admin/ArticleGridView.class.php index 503a68052c0..ace70697827 100644 --- a/wcfsetup/install/files/lib/system/gridView/admin/ArticleGridView.class.php +++ b/wcfsetup/install/files/lib/system/gridView/admin/ArticleGridView.class.php @@ -103,6 +103,9 @@ public function render(mixed $value, DatabaseObject $row): string ); } if ($row->publicationStatus === Article::UNPUBLISHED) { + if ($badges !== '') { + $badges .= ' '; + } $badges .= \sprintf( '%s', WCF::getLanguage()->get('wcf.acp.article.publicationStatus.unpublished') @@ -118,6 +121,9 @@ public function render(mixed $value, DatabaseObject $row): string WCF::getLanguage()->getLocale() ); + if ($badges !== '') { + $badges .= ' '; + } $badges .= \sprintf( '%s', $dateTime, From acadf0f986adb6f11096263a923de05b17c121d2 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Fri, 22 Aug 2025 14:27:17 +0200 Subject: [PATCH 2/3] Reduce length of the 'object ids' parameter --- .../lib/acp/action/ArticleCategoryAction.class.php | 6 +++--- .../files/lib/acp/action/TagSynonymAction.class.php | 12 ++++++------ .../lib/action/AbstractModerationAction.class.php | 6 +++--- .../bulk/BulkFormBuilderDialogInteraction.class.php | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/wcfsetup/install/files/lib/acp/action/ArticleCategoryAction.class.php b/wcfsetup/install/files/lib/acp/action/ArticleCategoryAction.class.php index cf9859f71d1..6ad8e656076 100644 --- a/wcfsetup/install/files/lib/acp/action/ArticleCategoryAction.class.php +++ b/wcfsetup/install/files/lib/acp/action/ArticleCategoryAction.class.php @@ -34,12 +34,12 @@ public function handle(ServerRequestInterface $request): ResponseInterface $request->getQueryParams(), <<<'EOT' array { - objectIDs: positive-int[] + ids: positive-int[] } EOT ); - if ($parameters['objectIDs'] === []) { + if ($parameters['ids'] === []) { throw new IllegalLinkException(); } @@ -62,7 +62,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface WHERE articleID = ?"; $statement = WCF::getDB()->prepare($sql); - foreach ($parameters['objectIDs'] as $articleID) { + foreach ($parameters['ids'] as $articleID) { $statement->execute([$data['categoryID'], $articleID]); } diff --git a/wcfsetup/install/files/lib/acp/action/TagSynonymAction.class.php b/wcfsetup/install/files/lib/acp/action/TagSynonymAction.class.php index 987eb412756..b458bcd4857 100644 --- a/wcfsetup/install/files/lib/acp/action/TagSynonymAction.class.php +++ b/wcfsetup/install/files/lib/acp/action/TagSynonymAction.class.php @@ -42,21 +42,21 @@ public function handle(ServerRequestInterface $request): ResponseInterface $parameters = Helper::mapQueryParameters( $request->getQueryParams(), <<<'EOT' - array { - objectIDs: array - } - EOT, + array { + ids: array + } + EOT ); } catch (MappingError) { throw new IllegalLinkException(); } - if (\count($parameters['objectIDs']) < 2) { + if (\count($parameters['ids']) < 2) { throw new IllegalLinkException(); } $tagList = new TagList(); - $tagList->setObjectIDs($parameters['objectIDs']); + $tagList->setObjectIDs($parameters['ids']); $tagList->readObjects(); $form = $this->getForm($tagList->getObjects()); diff --git a/wcfsetup/install/files/lib/action/AbstractModerationAction.class.php b/wcfsetup/install/files/lib/action/AbstractModerationAction.class.php index 1876ab93154..7660caa4480 100644 --- a/wcfsetup/install/files/lib/action/AbstractModerationAction.class.php +++ b/wcfsetup/install/files/lib/action/AbstractModerationAction.class.php @@ -40,16 +40,16 @@ public function handle(ServerRequestInterface $request): ResponseInterface <<<'EOT' array { id?: positive-int, - objectIDs?: positive-int[] + ids?: positive-int[] } EOT ); - if (!isset($parameters['id']) && !isset($parameters['objectIDs'])) { + if (!isset($parameters['id']) && !isset($parameters['ids'])) { throw new IllegalLinkException(); } - $objectIDs = $parameters['objectIDs'] ?? [$parameters['id']]; + $objectIDs = $parameters['ids'] ?? [$parameters['id']]; $moderationList = new ModerationQueueList(); $moderationList->setObjectIDs($objectIDs); $moderationList->readObjects(); diff --git a/wcfsetup/install/files/lib/system/interaction/bulk/BulkFormBuilderDialogInteraction.class.php b/wcfsetup/install/files/lib/system/interaction/bulk/BulkFormBuilderDialogInteraction.class.php index f444e630581..834c78f95f3 100644 --- a/wcfsetup/install/files/lib/system/interaction/bulk/BulkFormBuilderDialogInteraction.class.php +++ b/wcfsetup/install/files/lib/system/interaction/bulk/BulkFormBuilderDialogInteraction.class.php @@ -9,7 +9,7 @@ use wcf\util\StringUtil; /** - * Represents a bulk interaction that call a form builder action. + * Represents a bulk interaction that calls a form builder action. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH @@ -35,7 +35,7 @@ public function render(array $objects): string $objectIDs = \array_values(\array_map(fn(DatabaseObject $object) => $object->getObjectID(), $objects)); $endpoint = StringUtil::encodeHTML( LinkHandler::getInstance()->getControllerLink($this->controller, [ - 'objectIDs' => $objectIDs + 'ids' => $objectIDs ]) ); From 2553fc40857367cf448aff02c4a6b67b88e8b514 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Fri, 22 Aug 2025 14:27:54 +0200 Subject: [PATCH 3/3] Unify bulk interactions with normal interactions --- .../bulk/BulkDisableInteraction.class.php | 29 +++++++++++++++++++ ...hp => BulkSoftDeleteInteraction.class.php} | 6 ++-- ...kSoftDeleteWithReasonInteraction.class.php | 29 +++++++++++++++++++ .../admin/ArticleBulkInteractions.class.php | 4 +-- .../user/ArticleBulkInteractions.class.php | 4 +-- 5 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 wcfsetup/install/files/lib/system/interaction/bulk/BulkDisableInteraction.class.php rename wcfsetup/install/files/lib/system/interaction/bulk/{BulkTrashInteraction.class.php => BulkSoftDeleteInteraction.class.php} (83%) create mode 100644 wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteWithReasonInteraction.class.php diff --git a/wcfsetup/install/files/lib/system/interaction/bulk/BulkDisableInteraction.class.php b/wcfsetup/install/files/lib/system/interaction/bulk/BulkDisableInteraction.class.php new file mode 100644 index 00000000000..6a973538074 --- /dev/null +++ b/wcfsetup/install/files/lib/system/interaction/bulk/BulkDisableInteraction.class.php @@ -0,0 +1,29 @@ + + * @since 6.2 + */ +class BulkDisableInteraction extends BulkRpcInteraction +{ + public function __construct( + string $endpoint, + ?\Closure $isAvailableCallback = null + ) { + parent::__construct( + 'disable', + $endpoint, + 'wcf.global.button.disable', + InteractionConfirmationType::Disable, + isAvailableCallback: $isAvailableCallback + ); + } +} diff --git a/wcfsetup/install/files/lib/system/interaction/bulk/BulkTrashInteraction.class.php b/wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteInteraction.class.php similarity index 83% rename from wcfsetup/install/files/lib/system/interaction/bulk/BulkTrashInteraction.class.php rename to wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteInteraction.class.php index 1ee6c46fe5a..bb582045ce8 100644 --- a/wcfsetup/install/files/lib/system/interaction/bulk/BulkTrashInteraction.class.php +++ b/wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteInteraction.class.php @@ -5,21 +5,21 @@ use wcf\system\interaction\InteractionConfirmationType; /** - * Represents a bulk trash interaction. + * Represents a bulk soft-delete interaction. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH * @license GNU Lesser General Public License * @since 6.2 */ -class BulkTrashInteraction extends BulkRpcInteraction +class BulkSoftDeleteInteraction extends BulkRpcInteraction { public function __construct( string $endpoint, ?\Closure $isAvailableCallback = null ) { parent::__construct( - 'trash', + 'soft-delete', $endpoint, 'wcf.global.button.trash', InteractionConfirmationType::Custom, diff --git a/wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteWithReasonInteraction.class.php b/wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteWithReasonInteraction.class.php new file mode 100644 index 00000000000..1a9806d3cab --- /dev/null +++ b/wcfsetup/install/files/lib/system/interaction/bulk/BulkSoftDeleteWithReasonInteraction.class.php @@ -0,0 +1,29 @@ + + * @since 6.2 + */ +class BulkSoftDeleteWithReasonInteraction extends BulkRpcInteraction +{ + public function __construct( + string $endpoint, + ?\Closure $isAvailableCallback = null + ) { + parent::__construct( + 'soft-delete', + $endpoint, + 'wcf.global.button.trash', + InteractionConfirmationType::SoftDeleteWithReason, + isAvailableCallback: $isAvailableCallback + ); + } +} diff --git a/wcfsetup/install/files/lib/system/interaction/bulk/admin/ArticleBulkInteractions.class.php b/wcfsetup/install/files/lib/system/interaction/bulk/admin/ArticleBulkInteractions.class.php index add61f7baaf..5cd60c054a9 100644 --- a/wcfsetup/install/files/lib/system/interaction/bulk/admin/ArticleBulkInteractions.class.php +++ b/wcfsetup/install/files/lib/system/interaction/bulk/admin/ArticleBulkInteractions.class.php @@ -13,7 +13,7 @@ use wcf\system\interaction\bulk\BulkFormBuilderDialogInteraction; use wcf\system\interaction\bulk\BulkRestoreInteraction; use wcf\system\interaction\bulk\BulkRpcInteraction; -use wcf\system\interaction\bulk\BulkTrashInteraction; +use wcf\system\interaction\bulk\BulkSoftDeleteInteraction; use wcf\system\interaction\InteractionConfirmationType; /** @@ -29,7 +29,7 @@ final class ArticleBulkInteractions extends AbstractBulkInteractionProvider public function __construct() { $this->addInteractions([ - new BulkTrashInteraction('core/articles/%s/trash', function (ViewableArticle $article): bool { + new BulkSoftDeleteInteraction('core/articles/%s/soft-delete', function (ViewableArticle $article): bool { if (!$article->canDelete()) { return false; } diff --git a/wcfsetup/install/files/lib/system/interaction/bulk/user/ArticleBulkInteractions.class.php b/wcfsetup/install/files/lib/system/interaction/bulk/user/ArticleBulkInteractions.class.php index 3f80348d8c5..25663fe616e 100644 --- a/wcfsetup/install/files/lib/system/interaction/bulk/user/ArticleBulkInteractions.class.php +++ b/wcfsetup/install/files/lib/system/interaction/bulk/user/ArticleBulkInteractions.class.php @@ -11,7 +11,7 @@ use wcf\system\interaction\bulk\BulkDeleteInteraction; use wcf\system\interaction\bulk\BulkRestoreInteraction; use wcf\system\interaction\bulk\BulkRpcInteraction; -use wcf\system\interaction\bulk\BulkTrashInteraction; +use wcf\system\interaction\bulk\BulkSoftDeleteInteraction; use wcf\system\interaction\InteractionConfirmationType; use wcf\system\WCF; @@ -32,7 +32,7 @@ public function __construct() } $this->addInteractions([ - new BulkTrashInteraction('core/articles/%s/trash', function (ViewableArticle $article): bool { + new BulkSoftDeleteInteraction('core/articles/%s/soft-delete', function (ViewableArticle $article): bool { if (!$article->canDelete()) { return false; }