* @category Community Framework
*/
class MultipleSelectionFormElement extends AbstractNamedFormElement {
+ /**
+ * message displayed if the input is disabled
+ * @var string
+ */
+ protected $disabledMessage = '';
+
/**
* @see wcf\system\form\element\AbstractNamedFormElement::setValue()
*/
}
}
+ /**
+ * Sets message displayed if input should be disabled.
+ *
+ * @param string $message
+ */
+ public function setDisabledMessage($message) {
+ $this->disabledMessage = $message;
+ }
+
+ /**
+ * @see wcf\system\form\element\AbstractNamedFormElement::getDescription()
+ */
+ public function getDescription() {
+ if ($this->disabledMessage) {
+ return $this->disabledMessage;
+ }
+
+ return parent::getDescription();
+ }
+
/**
* @see wcf\system\form\IFormElement::getHTML()
*/
public function getHTML($formName) {
+ $disabled = '';
+ if ($this->disabledMessage) {
+ $disabled = ' disabled="disabled"';
+ }
+
return <<<HTML
-<label><input type="checkbox" name="{$formName}{$this->getParent()->getName()}[]" value="{$this->getValue()}" /> {$this->getLabel()}</label>
+<label><input type="checkbox" name="{$formName}{$this->getParent()->getName()}[]" value="{$this->getValue()}"{$disabled} /> {$this->getLabel()}</label>
<small>{$this->getDescription()}</small>
HTML;
}
foreach ($nodeData as $package) {
if (in_array($package['package'], $document)) {
+ // ignore uninstallable packages
+ if (!$package['isInstallable']) {
+ continue;
+ }
+
if (!$shiftNodes) {
$this->nodeBuilder->shiftNodes($currentNode, 'tempNode');
$shiftNodes = true;
$optionalPackage->setLabel($package['packageName']);
$optionalPackage->setValue($package['package']);
$optionalPackage->setDescription($package['packageDescription']);
+ if ($package['isInstallable']) {
+ $optionalPackage->setDisabledMessage(WCF::getLanguage()->get('wcf.acp.package.install.optionalPackage.missingRequirements'));
+ }
$container->appendChild($optionalPackage);
}
*/
public $sequenceNo = 0;
+ /**
+ * list of packages about to be installed
+ * @var boolean
+ */
+ protected static $pendingPackages = array();
+
/**
* Creates a new instance of PackageInstallationNodeBuilder
*
'requirements' => $this->requirements
))
));
+
+ self::$pendingPackages[] = $this->installation->getArchive()->getPackageInfo('name');
}
/**
$installation->nodeBuilder->setParentNode($this->node);
$installation->nodeBuilder->buildNodes();
$this->node = $installation->nodeBuilder->getCurrentNode();
+
+ self::$pendingPackages[] = $archive->getPackageInfo('name');
}
}
$archive = new PackageArchive($fileName);
$archive->openArchive();
+ // check if all requirements are met
+ $isInstallable = true;
+ foreach ($archive->getOpenRequirements() as $packageName => $package) {
+ if (!isset($package['file'])) {
+ // requirement is neither installed nor shipped, check if it is about to be installed
+ if (!in_array($packageName, self::$pendingPackages)) {
+ $isInstallable = false;
+ break;
+ }
+ }
+ }
+
$packages[] = array(
'archive' => $fileName,
+ 'isInstallable' => $isInstallable,
'package' => $archive->getPackageInfo('name'),
'packageName' => $archive->getLocalizedPackageInfo('packageName'),
'packageDescription' => $archive->getLocalizedPackageInfo('packageDescription'),
'selected' => 0
);
+
+ self::$pendingPackages[] = $archive->getPackageInfo('name');
}
if (!empty($packages)) {
<item name="wcf.acp.package.install.error.excludingPackages"><![CDATA[Die folgenden bereits installierten Pakete schließen eine Installation dieses Pakets aus:]]></item>
<item name="wcf.acp.package.install.error.excludingPackages.excludingPackage"><![CDATA[„{$excludingPackage}“ ({$excludingPackage->package}){if $excludingPackage->excludedPackageVersion} (ausgeschlossene Version: {$excludingPackage->excludedPackageVersion}){/if}]]></item>
<item name="wcf.acp.package.install.error.missingRequirements"><![CDATA[Die Abhängigkeiten dieses Paketes konnten nicht aufgelöst werden.]]></item>
+ <item name="wcf.acp.package.install.optionalPackage.missingRequirements"><![CDATA[Installation nicht möglich, nicht alle benötigten Pakete sind installiert.]]></item>
<item name="wcf.acp.package.install.step.prepare"><![CDATA[Installation wird vorbereitet …]]></item>
<item name="wcf.acp.package.install.title"><![CDATA[Paket-Installation]]></item>
<item name="wcf.acp.package.installation.requiredVersion"><![CDATA[Benötigte Version]]></item>
<item name="wcf.acp.package.install.error.excludingPackages"><![CDATA[The following, already installed packages prohibit installing this package:]]></item>
<item name="wcf.acp.package.install.error.excludingPackages.excludingPackage"><![CDATA[“{$excludingPackage}” ({$excludingPackage->package}){if $excludingPackage->excludedPackageVersion} (excluded version: {$excludingPackage->excludedPackageVersion}){/if}]]></item>
<item name="wcf.acp.package.install.error.missingRequirements"><![CDATA[Unable to resolve requirements of this package.]]></item>
+ <item name="wcf.acp.package.install.optionalPackage.missingRequirements"><![CDATA[Unable to install, some or all required packages are not installed.]]></item>
<item name="wcf.acp.package.install.step.prepare"><![CDATA[Preparing Installation …]]></item>
<item name="wcf.acp.package.install.title"><![CDATA[Installation]]></item>
<item name="wcf.acp.package.installation.requiredVersion"><![CDATA[Required Version]]></item>