Skip to content

Commit 7704173

Browse files
committed
Add mark as read interaction
1 parent 01112a1 commit 7704173

File tree

4 files changed

+63
-0
lines changed

4 files changed

+63
-0
lines changed

wcfsetup/install/files/lib/bootstrap/com.woltlab.wcf.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ static function (\wcf\event\endpoint\ControllerCollecting $event) {
150150
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\CloseReport());
151151
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\DeleteContent());
152152
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\EnableContent());
153+
$event->register(new \wcf\system\endpoint\controller\core\moderationQueues\MarkAsRead());
153154
$event->register(new \wcf\system\endpoint\controller\core\styles\DeleteStyle());
154155
$event->register(new \wcf\system\endpoint\controller\core\styles\DisableStyle());
155156
$event->register(new \wcf\system\endpoint\controller\core\styles\EnableStyle());
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace wcf\system\endpoint\controller\core\moderationQueues;
4+
5+
use Laminas\Diactoros\Response\JsonResponse;
6+
use Psr\Http\Message\ResponseInterface;
7+
use Psr\Http\Message\ServerRequestInterface;
8+
use wcf\data\moderation\queue\ModerationQueue;
9+
use wcf\data\moderation\queue\ModerationQueueAction;
10+
use wcf\http\Helper;
11+
use wcf\system\endpoint\IController;
12+
use wcf\system\endpoint\PostRequest;
13+
use wcf\system\exception\PermissionDeniedException;
14+
15+
/**
16+
* API endpoint for marking a moderation queue entry as read.
17+
*
18+
* @author Olaf Braun
19+
* @copyright 2001-2025 WoltLab GmbH
20+
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
21+
* @since 6.2
22+
*/
23+
#[PostRequest('/core/moderation-queues/{id:\d+}/mark-as-read')]
24+
final class MarkAsRead implements IController
25+
{
26+
#[\Override]
27+
public function __invoke(ServerRequestInterface $request, array $variables): ResponseInterface
28+
{
29+
$queue = Helper::fetchObjectFromRequestParameter($variables['id'], ModerationQueue::class);
30+
31+
$this->assertQueueCanBeMarkedAsRead($queue);
32+
33+
(new ModerationQueueAction([$queue], 'markAsRead'))->executeAction();
34+
35+
return new JsonResponse([]);
36+
}
37+
38+
private function assertQueueCanBeMarkedAsRead(ModerationQueue $queue): void
39+
{
40+
if (!$queue->canEdit()) {
41+
throw new PermissionDeniedException();
42+
}
43+
}
44+
}

wcfsetup/install/files/lib/system/interaction/bulk/user/ModerationQueueBulkInteractions.class.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use wcf\action\ModerationReportQueueCloseAction;
77
use wcf\data\moderation\queue\ModerationQueue;
88
use wcf\data\moderation\queue\ModerationQueueList;
9+
use wcf\data\moderation\queue\ViewableModerationQueue;
910
use wcf\data\object\type\ObjectTypeCache;
1011
use wcf\event\interaction\bulk\user\ModerationQueueBulkInteractionCollecting;
1112
use wcf\system\event\EventHandler;
@@ -28,6 +29,15 @@ final class ModerationQueueBulkInteractions extends AbstractBulkInteractionProvi
2829
public function __construct()
2930
{
3031
$this->addInteractions([
32+
new BulkRpcInteraction(
33+
"mark-as-read",
34+
"core/moderation-queues/%s/mark-as-read",
35+
"wcf.global.button.markAsRead",
36+
isAvailableCallback: static function (ModerationQueue $queue) {
37+
$viewableQueue = new ViewableModerationQueue($queue);
38+
return $viewableQueue->isNew();
39+
}
40+
),
3141
new BulkFormBuilderDialogInteraction(
3242
"assign-user",
3343
ModerationQueueAssignUserAction::class,

wcfsetup/install/files/lib/system/interaction/user/ModerationQueueInteractions.class.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ final class ModerationQueueInteractions extends AbstractInteractionProvider
2929
public function __construct()
3030
{
3131
$this->addInteractions([
32+
new RpcInteraction(
33+
"mark-as-read",
34+
"core/moderation-queues/%s/mark-as-read",
35+
"wcf.global.button.markAsRead",
36+
isAvailableCallback: static function (ViewableModerationQueue $queue) {
37+
return $queue->isNew();
38+
}
39+
),
3240
new FormBuilderDialogInteraction(
3341
"assign-user",
3442
LinkHandler::getInstance()->getControllerLink(ModerationQueueAssignUserAction::class, ["id" => "%s"]),

0 commit comments

Comments
 (0)