Skip to content

Commit 8929349

Browse files
committed
Use grid views on the package detail page
1 parent 663155c commit 8929349

File tree

5 files changed

+103
-106
lines changed

5 files changed

+103
-106
lines changed

wcfsetup/install/files/acp/templates/package.tpl

Lines changed: 11 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -96,110 +96,32 @@
9696
{event name='informationFieldsets'}
9797
</div>
9898

99-
{if $package->getRequiredPackages()|count || $package->getDependentPackages()|count}
99+
{if $requiredPackageGridView->countRows() || $dependentPackageGridView->countRows()}
100100
<div id="dependencies" class="tabMenuContainer tabMenuContent">
101101
<nav class="menu">
102102
<ul>
103-
{if $package->getRequiredPackages()|count}
103+
{if $requiredPackageGridView->countRows()}
104104
<li><a href="#dependencies-required">{lang}wcf.acp.package.dependencies.required{/lang}</a></li>
105105
{/if}
106-
{if $package->getDependentPackages()|count}
106+
{if $dependentPackageGridView->countRows()}
107107
<li><a href="#dependencies-dependent">{lang}wcf.acp.package.dependencies.dependent{/lang}</a></li>
108108
{/if}
109109

110110
{event name='dependenciesSubTabMenuTabs'}
111111
</ul>
112112
</nav>
113113

114-
{hascontent}
115-
<div id="dependencies-required" class="tabMenuContent tabularBox hidden">
116-
<table class="table">
117-
<thead>
118-
<tr>
119-
<th colspan="2" class="columnID">{lang}wcf.global.objectID{/lang}</th>
120-
<th class="columnTitle">{lang}wcf.acp.package.name{/lang}</th>
121-
<th class="columnText">{lang}wcf.acp.package.author{/lang}</th>
122-
<th class="columnText">{lang}wcf.acp.package.version{/lang}</th>
123-
<th class="columnDigits">{lang}wcf.acp.package.packageDate{/lang}</th>
124-
125-
{event name='requirementColumnHeads'}
126-
</tr>
127-
</thead>
128-
129-
<tbody>
130-
{content}
131-
{foreach from=$package->getRequiredPackages() item=requiredPackage}
132-
<tr class="jsPackageRow">
133-
<td class="columnIcon">
134-
{if $requiredPackage->canUninstall()}
135-
<button type="button" class="jsTooltip jsUninstallButton" title="{lang}wcf.acp.package.button.uninstall{/lang}" data-object-id="{@$requiredPackage->packageID}" data-confirm-message="{lang __encode=true package=$requiredPackage}wcf.acp.package.uninstallation.confirm{/lang}" data-is-required="{if $requiredPackage->isRequired()}true{else}false{/if}" data-is-application="{if $requiredPackage->isApplication}true{else}false{/if}">
136-
{icon name='xmark'}
137-
</button>
138-
{else}
139-
<span class="disabled" title="{lang}wcf.acp.package.button.uninstall{/lang}">
140-
{icon name='xmark'}
141-
</span>
142-
{/if}
143-
</td>
144-
<td class="columnID">{@$requiredPackage->packageID}</td>
145-
<td class="columnTitle" title="{$requiredPackage->getDescription()}"><a href="{link controller='Package' id=$requiredPackage->packageID}{/link}">{$requiredPackage}</a></td>
146-
<td class="columnText">{if $requiredPackage->authorURL}<a href="{$requiredPackage->authorURL}" class="externalURL"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank" rel="noopener"{/if}>{$requiredPackage->author}</a>{else}{$requiredPackage->author}{/if}</td>
147-
<td class="columnText">{$requiredPackage->packageVersion}</td>
148-
<td class="columnDate">{@$requiredPackage->packageDate|date}</td>
149-
150-
{event name='requirementColumns'}
151-
</tr>
152-
{/foreach}
153-
{/content}
154-
</tbody>
155-
</table>
114+
{if $requiredPackageGridView->countRows()}
115+
<div id="dependencies-required" class="tabMenuContent hidden">
116+
{unsafe:$requiredPackageGridView->render()}
156117
</div>
157-
{/hascontent}
118+
{/if}
158119

159-
{hascontent}
160-
<div id="dependencies-dependent" class="tabMenuContent tabularBox hidden">
161-
<table class="table">
162-
<thead>
163-
<tr>
164-
<th colspan="2" class="columnID">{lang}wcf.global.objectID{/lang}</th>
165-
<th class="columnTitle">{lang}wcf.acp.package.name{/lang}</th>
166-
<th class="columnText">{lang}wcf.acp.package.author{/lang}</th>
167-
<th class="columnText">{lang}wcf.acp.package.version{/lang}</th>
168-
<th class="columnDigits">{lang}wcf.acp.package.packageDate{/lang}</th>
169-
170-
{event name='dependencyColumnHeads'}
171-
</tr>
172-
</thead>
173-
174-
<tbody>
175-
{content}
176-
{foreach from=$package->getDependentPackages() item=dependentPackage}
177-
<tr class="jsPackageRow">
178-
<td class="columnIcon">
179-
{if $dependentPackage->canUninstall()}
180-
<button type="button" class="jsTooltip jsUninstallButton" title="{lang}wcf.acp.package.button.uninstall{/lang}" data-object-id="{@$dependentPackage->packageID}" data-confirm-message="{lang __encode=true package=$dependentPackage}wcf.acp.package.uninstallation.confirm{/lang}" data-is-required="{if $dependentPackage->isRequired()}true{else}false{/if}" data-is-application="{if $dependentPackage->isApplication}true{else}false{/if}">
181-
{icon name='xmark'}
182-
</button>
183-
{else}
184-
<span class="disabled" title="{lang}wcf.acp.package.button.uninstall{/lang}">
185-
{icon name='xmark'}
186-
</span>
187-
{/if}
188-
</td>
189-
<td class="columnID">{@$dependentPackage->packageID}</td>
190-
<td class="columnTitle" title="{$dependentPackage->getDescription()}"><a href="{link controller='Package' id=$dependentPackage->packageID}{/link}">{$dependentPackage}</a></td>
191-
<td class="columnText">{if $dependentPackage->authorURL}<a href="{$dependentPackage->authorURL}" class="externalURL"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank" rel="noopener"{/if}>{$dependentPackage->author}</a>{else}{$dependentPackage->author}{/if}</td>
192-
<td class="columnText">{$dependentPackage->packageVersion}</td>
193-
<td class="columnDate">{@$dependentPackage->packageDate|date}</td>
194-
195-
{event name='dependencyColumns'}
196-
</tr>
197-
{/foreach}
198-
{/content}
199-
</tbody>
200-
</table>
120+
{if $dependentPackageGridView->countRows()}
121+
<div id="dependencies-dependent" class="tabMenuContent hidden">
122+
{unsafe:$dependentPackageGridView->render()}
201123
</div>
202-
{/hascontent}
124+
{/if}
203125

204126
{event name='dependenciesSubTabMenuContents'}
205127
</div>

wcfsetup/install/files/lib/acp/page/PackagePage.class.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use wcf\data\package\Package;
66
use wcf\page\AbstractPage;
77
use wcf\system\exception\IllegalLinkException;
8+
use wcf\system\gridView\admin\DependentPackageGridView;
9+
use wcf\system\gridView\admin\RequiredPackageGridView;
810
use wcf\system\WCF;
911

1012
/**
@@ -21,12 +23,6 @@ class PackagePage extends AbstractPage
2123
*/
2224
public $activeMenuItem = 'wcf.acp.menu.link.package.list';
2325

24-
/**
25-
* @var array{}
26-
* @deprecated 5.5 This array is always empty.
27-
*/
28-
public $compatibleVersions = [];
29-
3026
/**
3127
* @inheritDoc
3228
*/
@@ -53,9 +49,10 @@ class PackagePage extends AbstractPage
5349
*/
5450
public $pluginStoreFileID = 0;
5551

56-
/**
57-
* @inheritDoc
58-
*/
52+
protected RequiredPackageGridView $requiredPackageGridView;
53+
protected DependentPackageGridView $dependentPackageGridView;
54+
55+
#[\Override]
5956
public function readParameters()
6057
{
6158
parent::readParameters();
@@ -69,9 +66,7 @@ public function readParameters()
6966
}
7067
}
7168

72-
/**
73-
* @inheritDoc
74-
*/
69+
#[\Override]
7570
public function readData()
7671
{
7772
parent::readData();
@@ -83,19 +78,21 @@ public function readData()
8378
$statement = WCF::getDB()->prepare($sql);
8479
$statement->execute([$this->package->package]);
8580
$this->pluginStoreFileID = \intval($statement->fetchSingleColumn());
81+
82+
$this->requiredPackageGridView = new RequiredPackageGridView($this->packageID);
83+
$this->dependentPackageGridView = new DependentPackageGridView($this->packageID);
8684
}
8785

88-
/**
89-
* @inheritDoc
90-
*/
86+
#[\Override]
9187
public function assignVariables()
9288
{
9389
parent::assignVariables();
9490

9591
WCF::getTPL()->assign([
96-
'compatibleVersions' => $this->compatibleVersions,
9792
'package' => $this->package,
9893
'pluginStoreFileID' => $this->pluginStoreFileID,
94+
'requiredPackageGridView' => $this->requiredPackageGridView,
95+
'dependentPackageGridView' => $this->dependentPackageGridView,
9996
]);
10097
}
10198
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace wcf\system\gridView\admin;
4+
5+
use wcf\data\package\I18nPackageList;
6+
7+
/**
8+
* Grid view for the list of dependent packages.
9+
*
10+
* @author Marcel Werk
11+
* @copyright 2001-2025 WoltLab GmbH
12+
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
13+
* @since 6.2
14+
*/
15+
final class DependentPackageGridView extends PackageGridView
16+
{
17+
public function __construct(public readonly int $packageID)
18+
{
19+
parent::__construct();
20+
}
21+
22+
#[\Override]
23+
public function getParameters(): array
24+
{
25+
return ['packageID' => $this->packageID];
26+
}
27+
28+
#[\Override]
29+
protected function createObjectList(): I18nPackageList
30+
{
31+
$list = parent::createObjectList();
32+
$list->getConditionBuilder()->add(
33+
'package.packageID IN (SELECT packageID FROM wcf1_package_requirement WHERE requirement = ?)',
34+
[$this->packageID]
35+
);
36+
37+
return $list;
38+
}
39+
}

wcfsetup/install/files/lib/system/gridView/admin/PackageGridView.class.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*
3535
* @extends AbstractGridView<Package, I18nPackageList>
3636
*/
37-
final class PackageGridView extends AbstractGridView
37+
class PackageGridView extends AbstractGridView
3838
{
3939
public function __construct()
4040
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace wcf\system\gridView\admin;
4+
5+
use wcf\data\package\I18nPackageList;
6+
7+
/**
8+
* Grid view for the list of required packages.
9+
*
10+
* @author Marcel Werk
11+
* @copyright 2001-2025 WoltLab GmbH
12+
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
13+
* @since 6.2
14+
*/
15+
final class RequiredPackageGridView extends PackageGridView
16+
{
17+
public function __construct(public readonly int $packageID)
18+
{
19+
parent::__construct();
20+
}
21+
22+
#[\Override]
23+
public function getParameters(): array
24+
{
25+
return ['packageID' => $this->packageID];
26+
}
27+
28+
#[\Override]
29+
protected function createObjectList(): I18nPackageList
30+
{
31+
$list = parent::createObjectList();
32+
$list->getConditionBuilder()->add(
33+
'package.packageID IN (SELECT requirement FROM wcf1_package_requirement WHERE packageID = ?)',
34+
[$this->packageID]
35+
);
36+
37+
return $list;
38+
}
39+
}

0 commit comments

Comments
 (0)