Skip to content

Commit 7369b58

Browse files
committed
Add own select filter
1 parent fe463c4 commit 7369b58

File tree

1 file changed

+64
-17
lines changed

1 file changed

+64
-17
lines changed

wcfsetup/install/files/lib/system/gridView/user/ModerationQueueGridView.class.php

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,18 @@
88
use wcf\data\moderation\queue\ViewableModerationQueue;
99
use wcf\data\moderation\queue\ViewableModerationQueueList;
1010
use wcf\data\object\type\ObjectTypeCache;
11+
use wcf\system\form\builder\field\AbstractFormField;
12+
use wcf\system\form\builder\field\SelectFormField;
1113
use wcf\system\gridView\AbstractGridView;
1214
use wcf\system\gridView\filter\NumericFilter;
1315
use wcf\system\gridView\filter\SelectFilter;
1416
use wcf\system\gridView\filter\TimeFilter;
1517
use wcf\system\gridView\filter\UserFilter;
1618
use wcf\system\gridView\GridViewColumn;
19+
use wcf\system\gridView\GridViewRowLink;
1720
use wcf\system\gridView\renderer\AbstractColumnRenderer;
21+
use wcf\system\gridView\renderer\DefaultColumnRenderer;
22+
use wcf\system\gridView\renderer\ILinkColumnRenderer;
1823
use wcf\system\gridView\renderer\NumberColumnRenderer;
1924
use wcf\system\gridView\renderer\TimeColumnRenderer;
2025
use wcf\system\gridView\renderer\UserLinkColumnRenderer;
@@ -70,7 +75,7 @@ public function prepare(mixed $value, DatabaseObject $row): void
7075
->label('wcf.global.title')
7176
->titleColumn()
7277
->renderer(
73-
new class extends AbstractColumnRenderer {
78+
new class extends DefaultColumnRenderer implements ILinkColumnRenderer {
7479
#[\Override]
7580
public function render(mixed $value, DatabaseObject $row): string
7681
{
@@ -114,7 +119,7 @@ public function prepare(mixed $value, DatabaseObject $row): void
114119
),
115120
GridViewColumn::for("objectType")
116121
->label("wcf.moderation.report.reportedContent")
117-
->filter(new SelectFilter($this->getModerationQueueObjectTypeIDs(), "moderation_queue.objectTypeID"))
122+
->filter($this->getObjectTypeFilter())
118123
->renderer(
119124
new class extends AbstractColumnRenderer {
120125
#[\Override]
@@ -190,24 +195,66 @@ public function render(mixed $value, DatabaseObject $row): string
190195

191196
$this->setSortField("lastChangeTime");
192197
$this->setSortOrder("DESC");
198+
$this->addRowLink(new GridViewRowLink(isLinkableObject: true));
193199
}
194200

195-
private function getModerationQueueObjectTypeIDs(): array
201+
private function getObjectTypeFilter(): SelectFilter
196202
{
197-
$objectTypes = [];
198-
foreach (
199-
ModerationQueueManager::getInstance()->getDefinitionNamesByObjectTypeIDs() as $objectTypeID => $definition
200-
) {
201-
$objectType = ObjectTypeCache::getInstance()->getObjectType($objectTypeID);
202-
$objectTypes[$objectTypeID] = \sprintf(
203-
"%s - %s",
204-
WCF::getLanguage()->getDynamicVariable('wcf.moderation.type.' . $objectType->objectType),
205-
WCF::getLanguage()->getDynamicVariable('wcf.moderation.type.' . $definition)
206-
);
207-
}
208-
209-
210-
return $objectTypes;
203+
return new class extends SelectFilter {
204+
public function __construct()
205+
{
206+
parent::__construct($this->getModerationQueueObjectTypeIDs(), "moderation_queue.objectTypeID");
207+
}
208+
209+
#[\Override]
210+
public function getFormField(string $id, string $label): AbstractFormField
211+
{
212+
return SelectFormField::create($id)
213+
->label($label)
214+
->options($this->getModerationQueueObjectTypeOptions(), true);
215+
}
216+
217+
private function getModerationQueueObjectTypeIDs(): array
218+
{
219+
$objectTypes = [];
220+
foreach (ModerationQueueManager::getInstance()->getDefinitionNamesByObjectTypeIDs() as $objectTypeID => $definition) {
221+
$objectType = ObjectTypeCache::getInstance()->getObjectType($objectTypeID);
222+
$objectTypes[$objectTypeID] = \sprintf(
223+
"%s - %s",
224+
WCF::getLanguage()->getDynamicVariable('wcf.moderation.type.' . $definition),
225+
WCF::getLanguage()->getDynamicVariable('wcf.moderation.type.' . $objectType->objectType),
226+
);
227+
}
228+
229+
return $objectTypes;
230+
}
231+
232+
private function getModerationQueueObjectTypeOptions(): array
233+
{
234+
$options = [];
235+
foreach (ModerationQueueManager::getInstance()->getDefinitions() as $definitionName) {
236+
$options[] = [
237+
"value" => $definitionName,
238+
"depth" => 0,
239+
"isSelectable" => false,
240+
"label" => WCF::getLanguage()->getDynamicVariable('wcf.moderation.type.' . $definitionName)
241+
];
242+
243+
foreach (ObjectTypeCache::getInstance()->getObjectTypes($definitionName) as $objectType) {
244+
$options[] = [
245+
"value" => $objectType->objectTypeID,
246+
"depth" => 1,
247+
"isSelectable" => true,
248+
"label" => WCF::getLanguage()->getDynamicVariable(
249+
'wcf.moderation.type.' . $objectType->objectType
250+
),
251+
];
252+
}
253+
}
254+
255+
return $options;
256+
}
257+
};
211258
}
212259

213260
#[\Override]

0 commit comments

Comments
 (0)