2 namespace wcf\acp\page
;
3 use wcf\data\package\installation\queue\PackageInstallationQueue
;
4 use wcf\data\package\Package
;
5 use wcf\data\package\PackageCache
;
6 use wcf\page\AbstractPage
;
7 use wcf\system\exception\IllegalLinkException
;
8 use wcf\system\package\PackageArchive
;
9 use wcf\system\package\PackageInstallationDispatcher
;
11 use wcf\system\WCFACP
;
14 * Shows a confirmation page prior to start installing.
16 * @author Alexander Ebert
17 * @copyright 2001-2014 WoltLab GmbH
18 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
19 * @package com.woltlab.wcf
20 * @subpackage acp.page
21 * @category Community Framework
23 class PackageInstallationConfirmPage
extends AbstractPage
{
25 * @see \wcf\page\AbstractPage::$activeMenuItem
27 public $activeMenuItem = 'wcf.acp.menu.link.package.install';
30 * number of missing packages
33 public $missingPackages = 0;
36 * list of unsatisfied requirements
39 public $openRequirements = array();
42 * package installation dispatcher object
43 * @var \wcf\system\package\PackageInstallationDispatcher
45 public $packageInstallationDispatcher = null;
48 * package installation queue object
49 * @var \wcf\data\package\installation\queue\PackageInstallationQueue
60 * list of requirements
63 public $requirements = array();
66 * @see \wcf\page\IPage::readParameters()
68 public function readParameters() {
69 parent
::readParameters();
71 if (isset($_REQUEST['queueID'])) $this->queueID
= intval($_REQUEST['queueID']);
72 $this->queue
= new PackageInstallationQueue($this->queueID
);
73 if (!$this->queue
->queueID ||
$this->queue
->done
) {
74 throw new IllegalLinkException();
77 if ($this->queue
->action
== 'install') {
78 WCF
::getSession()->checkPermissions(array('admin.system.package.canInstallPackage'));
81 WCF
::getSession()->checkPermissions(array('admin.system.package.canUpdatePackage'));
86 * @see \wcf\page\IPage::readData()
88 public function readData() {
91 $this->packageInstallationDispatcher
= new PackageInstallationDispatcher($this->queue
);
94 $this->requirements
= $this->packageInstallationDispatcher
->getArchive()->getRequirements();
95 $this->openRequirements
= $this->packageInstallationDispatcher
->getArchive()->getOpenRequirements();
97 foreach ($this->requirements
as &$requirement) {
98 if (isset($this->openRequirements
[$requirement['name']])) {
99 $requirement['status'] = 'missing';
100 $requirement['action'] = $this->openRequirements
[$requirement['name']]['action'];
102 if (!isset($requirement['file'])) {
103 if ($requirement['action'] === 'update') {
104 $requirement['status'] = 'missingVersion';
105 $requirement['existingVersion'] = $this->openRequirements
[$requirement['name']]['existingVersion'];
107 $this->missingPackages++
;
110 $requirement['status'] = 'delivered';
111 $packageArchive = new PackageArchive($this->packageInstallationDispatcher
->getArchive()->extractTar($requirement['file']));
112 $packageArchive->openArchive();
114 // make sure that the delivered package is correct
115 if ($requirement['name'] != $packageArchive->getPackageInfo('name')) {
116 $requirement['status'] = 'invalidDeliveredPackage';
117 $requirement['deliveredPackage'] = $packageArchive->getPackageInfo('name');
118 $this->missingPackages++
;
120 else if (isset($requirement['minversion'])) {
121 // make sure that the delivered version is sufficient
122 if (Package
::compareVersion($requirement['minversion'], $packageArchive->getPackageInfo('version')) > 0) {
123 $requirement['deliveredVersion'] = $packageArchive->getPackageInfo('version');
124 $requirement['status'] = 'missingVersion';
125 $this->missingPackages++
;
131 $requirement['status'] = 'installed';
134 $requirement['package'] = PackageCache
::getInstance()->getPackageByIdentifier($requirement['name']);
141 * @see \wcf\page\IPage::assignVariables()
143 public function assignVariables() {
144 parent
::assignVariables();
146 WCF
::getTPL()->assign(array(
147 'archive' => $this->packageInstallationDispatcher
->getArchive(),
148 'requiredPackages' => $this->requirements
,
149 'missingPackages' => $this->missingPackages
,
150 'excludingPackages' => $this->packageInstallationDispatcher
->getArchive()->getConflictedExcludingPackages(),
151 'excludedPackages' => $this->packageInstallationDispatcher
->getArchive()->getConflictedExcludedPackages(),
152 'queue' => $this->queue
157 * @see \wcf\page\IPage::show()
159 public function show() {
160 // check master password
161 WCFACP
::checkMasterPassword();