Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 11 additions & 89 deletions wcfsetup/install/files/acp/templates/package.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -96,110 +96,32 @@
{event name='informationFieldsets'}
</div>

{if $package->getRequiredPackages()|count || $package->getDependentPackages()|count}
{if $requiredPackageGridView->countRows() || $dependentPackageGridView->countRows()}
<div id="dependencies" class="tabMenuContainer tabMenuContent">
<nav class="menu">
<ul>
{if $package->getRequiredPackages()|count}
{if $requiredPackageGridView->countRows()}
<li><a href="#dependencies-required">{lang}wcf.acp.package.dependencies.required{/lang}</a></li>
{/if}
{if $package->getDependentPackages()|count}
{if $dependentPackageGridView->countRows()}
<li><a href="#dependencies-dependent">{lang}wcf.acp.package.dependencies.dependent{/lang}</a></li>
{/if}

{event name='dependenciesSubTabMenuTabs'}
</ul>
</nav>

{hascontent}
<div id="dependencies-required" class="tabMenuContent tabularBox hidden">
<table class="table">
<thead>
<tr>
<th colspan="2" class="columnID">{lang}wcf.global.objectID{/lang}</th>
<th class="columnTitle">{lang}wcf.acp.package.name{/lang}</th>
<th class="columnText">{lang}wcf.acp.package.author{/lang}</th>
<th class="columnText">{lang}wcf.acp.package.version{/lang}</th>
<th class="columnDigits">{lang}wcf.acp.package.packageDate{/lang}</th>

{event name='requirementColumnHeads'}
</tr>
</thead>

<tbody>
{content}
{foreach from=$package->getRequiredPackages() item=requiredPackage}
<tr class="jsPackageRow">
<td class="columnIcon">
{if $requiredPackage->canUninstall()}
<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}">
{icon name='xmark'}
</button>
{else}
<span class="disabled" title="{lang}wcf.acp.package.button.uninstall{/lang}">
{icon name='xmark'}
</span>
{/if}
</td>
<td class="columnID">{@$requiredPackage->packageID}</td>
<td class="columnTitle" title="{$requiredPackage->getDescription()}"><a href="{link controller='Package' id=$requiredPackage->packageID}{/link}">{$requiredPackage}</a></td>
<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>
<td class="columnText">{$requiredPackage->packageVersion}</td>
<td class="columnDate">{@$requiredPackage->packageDate|date}</td>

{event name='requirementColumns'}
</tr>
{/foreach}
{/content}
</tbody>
</table>
{if $requiredPackageGridView->countRows()}
<div id="dependencies-required" class="tabMenuContent hidden">
{unsafe:$requiredPackageGridView->render()}
</div>
{/hascontent}
{/if}

{hascontent}
<div id="dependencies-dependent" class="tabMenuContent tabularBox hidden">
<table class="table">
<thead>
<tr>
<th colspan="2" class="columnID">{lang}wcf.global.objectID{/lang}</th>
<th class="columnTitle">{lang}wcf.acp.package.name{/lang}</th>
<th class="columnText">{lang}wcf.acp.package.author{/lang}</th>
<th class="columnText">{lang}wcf.acp.package.version{/lang}</th>
<th class="columnDigits">{lang}wcf.acp.package.packageDate{/lang}</th>

{event name='dependencyColumnHeads'}
</tr>
</thead>

<tbody>
{content}
{foreach from=$package->getDependentPackages() item=dependentPackage}
<tr class="jsPackageRow">
<td class="columnIcon">
{if $dependentPackage->canUninstall()}
<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}">
{icon name='xmark'}
</button>
{else}
<span class="disabled" title="{lang}wcf.acp.package.button.uninstall{/lang}">
{icon name='xmark'}
</span>
{/if}
</td>
<td class="columnID">{@$dependentPackage->packageID}</td>
<td class="columnTitle" title="{$dependentPackage->getDescription()}"><a href="{link controller='Package' id=$dependentPackage->packageID}{/link}">{$dependentPackage}</a></td>
<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>
<td class="columnText">{$dependentPackage->packageVersion}</td>
<td class="columnDate">{@$dependentPackage->packageDate|date}</td>

{event name='dependencyColumns'}
</tr>
{/foreach}
{/content}
</tbody>
</table>
{if $dependentPackageGridView->countRows()}
<div id="dependencies-dependent" class="tabMenuContent hidden">
{unsafe:$dependentPackageGridView->render()}
</div>
{/hascontent}
{/if}

{event name='dependenciesSubTabMenuContents'}
</div>
Expand Down
29 changes: 13 additions & 16 deletions wcfsetup/install/files/lib/acp/page/PackagePage.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
use wcf\data\package\Package;
use wcf\page\AbstractPage;
use wcf\system\exception\IllegalLinkException;
use wcf\system\gridView\admin\DependentPackageGridView;
use wcf\system\gridView\admin\RequiredPackageGridView;
use wcf\system\WCF;

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

/**
* @var array{}
* @deprecated 5.5 This array is always empty.
*/
public $compatibleVersions = [];

/**
* @inheritDoc
*/
Expand All @@ -53,9 +49,10 @@ class PackagePage extends AbstractPage
*/
public $pluginStoreFileID = 0;

/**
* @inheritDoc
*/
protected RequiredPackageGridView $requiredPackageGridView;
protected DependentPackageGridView $dependentPackageGridView;

#[\Override]
public function readParameters()
{
parent::readParameters();
Expand All @@ -69,9 +66,7 @@ public function readParameters()
}
}

/**
* @inheritDoc
*/
#[\Override]
public function readData()
{
parent::readData();
Expand All @@ -83,19 +78,21 @@ public function readData()
$statement = WCF::getDB()->prepare($sql);
$statement->execute([$this->package->package]);
$this->pluginStoreFileID = \intval($statement->fetchSingleColumn());

$this->requiredPackageGridView = new RequiredPackageGridView($this->packageID);
$this->dependentPackageGridView = new DependentPackageGridView($this->packageID);
}

/**
* @inheritDoc
*/
#[\Override]
public function assignVariables()
{
parent::assignVariables();

WCF::getTPL()->assign([
'compatibleVersions' => $this->compatibleVersions,
'package' => $this->package,
'pluginStoreFileID' => $this->pluginStoreFileID,
'requiredPackageGridView' => $this->requiredPackageGridView,
'dependentPackageGridView' => $this->dependentPackageGridView,
]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace wcf\system\gridView\admin;

use wcf\data\package\I18nPackageList;

/**
* Grid view for the list of dependent packages.
*
* @author Marcel Werk
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
final class DependentPackageGridView extends PackageGridView
{
public function __construct(public readonly int $packageID)
{
parent::__construct();
}

#[\Override]
public function getParameters(): array
{
return ['packageID' => $this->packageID];
}

#[\Override]
protected function createObjectList(): I18nPackageList
{
$list = parent::createObjectList();
$list->getConditionBuilder()->add(
'package.packageID IN (SELECT packageID FROM wcf1_package_requirement WHERE requirement = ?)',
[$this->packageID]
);

return $list;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
*
* @extends AbstractGridView<Package, I18nPackageList>
*/
final class PackageGridView extends AbstractGridView
class PackageGridView extends AbstractGridView
{
public function __construct()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace wcf\system\gridView\admin;

use wcf\data\package\I18nPackageList;

/**
* Grid view for the list of required packages.
*
* @author Marcel Werk
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
final class RequiredPackageGridView extends PackageGridView
{
public function __construct(public readonly int $packageID)
{
parent::__construct();
}

#[\Override]
public function getParameters(): array
{
return ['packageID' => $this->packageID];
}

#[\Override]
protected function createObjectList(): I18nPackageList
{
$list = parent::createObjectList();
$list->getConditionBuilder()->add(
'package.packageID IN (SELECT requirement FROM wcf1_package_requirement WHERE packageID = ?)',
[$this->packageID]
);

return $list;
}
}