|
3 | 3 | namespace wcf\system\gridView\admin; |
4 | 4 |
|
5 | 5 | use wcf\acp\form\LabelGroupEditForm; |
| 6 | +use wcf\acp\page\LabelListPage; |
| 7 | +use wcf\data\DatabaseObject; |
6 | 8 | use wcf\data\label\group\I18nLabelGroupList; |
7 | 9 | use wcf\data\label\group\LabelGroup; |
8 | 10 | use wcf\event\gridView\admin\LabelGroupGridViewInitialized; |
9 | 11 | use wcf\system\gridView\AbstractGridView; |
10 | 12 | use wcf\system\gridView\GridViewColumn; |
11 | 13 | use wcf\system\gridView\GridViewRowLink; |
| 14 | +use wcf\system\gridView\renderer\ILinkColumnRenderer; |
12 | 15 | use wcf\system\gridView\renderer\NumberColumnRenderer; |
13 | 16 | use wcf\system\gridView\renderer\ObjectIdColumnRenderer; |
14 | 17 | use wcf\system\gridView\renderer\PhraseColumnRenderer; |
15 | 18 | use wcf\system\gridView\renderer\TruncatedTextColumnRenderer; |
16 | 19 | use wcf\system\interaction\admin\LabelGroupInteractions; |
17 | 20 | use wcf\system\interaction\Divider; |
18 | 21 | use wcf\system\interaction\EditInteraction; |
| 22 | +use wcf\system\request\LinkHandler; |
19 | 23 | use wcf\system\view\filter\I18nTextFilter; |
20 | 24 | use wcf\system\view\filter\IntegerFilter; |
21 | 25 | use wcf\system\view\filter\TextFilter; |
@@ -54,15 +58,27 @@ public function __construct() |
54 | 58 | ->sortable(), |
55 | 59 | GridViewColumn::for('labels') |
56 | 60 | ->label('wcf.acp.label.list') |
57 | | - ->renderer(new NumberColumnRenderer()) |
58 | | - ->filter(IntegerFilter::class) |
59 | | - ->sortable( |
60 | | - sortByDatabaseColumn: '( |
61 | | - SELECT COUNT(*) |
62 | | - FROM wcf1_label |
63 | | - WHERE groupID = label_group.groupID |
64 | | - )' |
65 | | - ), |
| 61 | + ->filter(new IntegerFilter('labels', 'wcf.acp.label.list', $this->subSelectLabels())) |
| 62 | + ->renderer(new class extends NumberColumnRenderer implements ILinkColumnRenderer { |
| 63 | + #[\Override] |
| 64 | + public function render(mixed $value, DatabaseObject $row): string |
| 65 | + { |
| 66 | + if (!$value) { |
| 67 | + return parent::render($value, $row); |
| 68 | + } |
| 69 | + |
| 70 | + return \sprintf( |
| 71 | + '<a href="%s">%s</a>', |
| 72 | + LinkHandler::getInstance()->getControllerLink(LabelListPage::class, [ |
| 73 | + 'filters' => [ |
| 74 | + 'groupID' => $row->getObjectID(), |
| 75 | + ], |
| 76 | + ]), |
| 77 | + parent::render($value, $row) |
| 78 | + ); |
| 79 | + } |
| 80 | + }) |
| 81 | + ->sortable(sortByDatabaseColumn: $this->subSelectLabels()), |
66 | 82 | GridViewColumn::for('showOrder') |
67 | 83 | ->label('wcf.global.showOrder') |
68 | 84 | ->renderer(new NumberColumnRenderer()) |
@@ -109,4 +125,13 @@ protected function getInitializedEvent(): LabelGroupGridViewInitialized |
109 | 125 | { |
110 | 126 | return new LabelGroupGridViewInitialized($this); |
111 | 127 | } |
| 128 | + |
| 129 | + private function subSelectLabels(): string |
| 130 | + { |
| 131 | + return "( |
| 132 | + SELECT COUNT(*) |
| 133 | + FROM wcf1_label |
| 134 | + WHERE groupID = label_group.groupID |
| 135 | + )"; |
| 136 | + } |
112 | 137 | } |
0 commit comments