|
8 | 8 | use wcf\data\moderation\queue\ViewableModerationQueue; |
9 | 9 | use wcf\data\moderation\queue\ViewableModerationQueueList; |
10 | 10 | use wcf\data\object\type\ObjectTypeCache; |
| 11 | +use wcf\system\form\builder\field\AbstractFormField; |
| 12 | +use wcf\system\form\builder\field\SelectFormField; |
11 | 13 | use wcf\system\gridView\AbstractGridView; |
12 | 14 | use wcf\system\gridView\filter\NumericFilter; |
13 | 15 | use wcf\system\gridView\filter\SelectFilter; |
14 | 16 | use wcf\system\gridView\filter\TimeFilter; |
15 | 17 | use wcf\system\gridView\filter\UserFilter; |
16 | 18 | use wcf\system\gridView\GridViewColumn; |
| 19 | +use wcf\system\gridView\GridViewRowLink; |
17 | 20 | use wcf\system\gridView\renderer\AbstractColumnRenderer; |
| 21 | +use wcf\system\gridView\renderer\DefaultColumnRenderer; |
| 22 | +use wcf\system\gridView\renderer\ILinkColumnRenderer; |
18 | 23 | use wcf\system\gridView\renderer\NumberColumnRenderer; |
19 | 24 | use wcf\system\gridView\renderer\TimeColumnRenderer; |
20 | 25 | use wcf\system\gridView\renderer\UserLinkColumnRenderer; |
@@ -70,7 +75,7 @@ public function prepare(mixed $value, DatabaseObject $row): void |
70 | 75 | ->label('wcf.global.title') |
71 | 76 | ->titleColumn() |
72 | 77 | ->renderer( |
73 | | - new class extends AbstractColumnRenderer { |
| 78 | + new class extends DefaultColumnRenderer implements ILinkColumnRenderer { |
74 | 79 | #[\Override] |
75 | 80 | public function render(mixed $value, DatabaseObject $row): string |
76 | 81 | { |
@@ -114,7 +119,7 @@ public function prepare(mixed $value, DatabaseObject $row): void |
114 | 119 | ), |
115 | 120 | GridViewColumn::for("objectType") |
116 | 121 | ->label("wcf.moderation.report.reportedContent") |
117 | | - ->filter(new SelectFilter($this->getModerationQueueObjectTypeIDs(), "moderation_queue.objectTypeID")) |
| 122 | + ->filter($this->getObjectTypeFilter()) |
118 | 123 | ->renderer( |
119 | 124 | new class extends AbstractColumnRenderer { |
120 | 125 | #[\Override] |
@@ -190,24 +195,66 @@ public function render(mixed $value, DatabaseObject $row): string |
190 | 195 |
|
191 | 196 | $this->setSortField("lastChangeTime"); |
192 | 197 | $this->setSortOrder("DESC"); |
| 198 | + $this->addRowLink(new GridViewRowLink(isLinkableObject: true)); |
193 | 199 | } |
194 | 200 |
|
195 | | - private function getModerationQueueObjectTypeIDs(): array |
| 201 | + private function getObjectTypeFilter(): SelectFilter |
196 | 202 | { |
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 | + }; |
211 | 258 | } |
212 | 259 |
|
213 | 260 | #[\Override] |
|
0 commit comments