From: Matthias Schmidt Date: Tue, 7 May 2019 16:16:21 +0000 (+0200) Subject: Explicitly handle misformatted package.xml files when editing project X-Git-Tag: 5.2.0_Alpha_1~103 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=54e30e3ecd49ea835d9f739154d9cdd84daf0024;p=GitHub%2FWoltLab%2FWCF.git Explicitly handle misformatted package.xml files when editing project Close #2924 --- diff --git a/wcfsetup/install/files/acp/templates/devtoolsProjectAdd.tpl b/wcfsetup/install/files/acp/templates/devtoolsProjectAdd.tpl index 8853e26d5f..70a6f902d1 100644 --- a/wcfsetup/install/files/acp/templates/devtoolsProjectAdd.tpl +++ b/wcfsetup/install/files/acp/templates/devtoolsProjectAdd.tpl @@ -26,6 +26,10 @@ {else}

{lang}wcf.acp.devtools.project.edit.warning{/lang}

{/if} + + {if !$missingElements|empty} +

{lang}wcf.acp.devtools.project.edit.warning.missingElements{/lang}

+ {/if} {/if} {@$form->getHtml()} diff --git a/wcfsetup/install/files/lib/acp/form/DevtoolsProjectEditForm.class.php b/wcfsetup/install/files/lib/acp/form/DevtoolsProjectEditForm.class.php index 5696ac6340..7b8c5b0ce2 100644 --- a/wcfsetup/install/files/lib/acp/form/DevtoolsProjectEditForm.class.php +++ b/wcfsetup/install/files/lib/acp/form/DevtoolsProjectEditForm.class.php @@ -30,14 +30,20 @@ class DevtoolsProjectEditForm extends DevtoolsProjectAddForm { public $activeMenuItem = 'wcf.acp.menu.link.devtools.project.list'; /** - * @var bool + * @inheritDoc + */ + public $formAction = 'edit'; + + /** + * @var bool */ public $hasBrokenPath = false; /** - * @inheritDoc + * list of missing XML elements that should be present + * @var string[] */ - public $formAction = 'edit'; + public $missingElements = []; /** * @inheritDoc @@ -46,7 +52,8 @@ class DevtoolsProjectEditForm extends DevtoolsProjectAddForm { parent::assignVariables(); WCF::getTPL()->assign([ - 'hasBrokenPath' => $this->hasBrokenPath + 'hasBrokenPath' => $this->hasBrokenPath, + 'missingElements' => $this->missingElements ]); } @@ -111,49 +118,64 @@ class DevtoolsProjectEditForm extends DevtoolsProjectAddForm { /** @var TextFormField $packageIdentifier */ $packageIdentifier = $this->form->getNodeById('packageIdentifier'); - $packageIdentifier->value($packageArchive->getPackageInfo('name')); + if ($packageArchive->getPackageInfo('name') !== null) { + $packageIdentifier->value($packageArchive->getPackageInfo('name')); + } + else { + $this->missingElements[] = 'name'; + } /** @var TextFormField $packageName */ $packageName = $this->form->getNodeById('packageName'); $xmlPackageNames = $packageArchive->getPackageInfo('packageName'); - if (count($xmlPackageNames) === 1) { - $packageName->value(reset($xmlPackageNames)); - } - else { - $packageNames = []; - foreach (LanguageFactory::getInstance()->getLanguages() as $language) { - $packageNames[$language->languageID] = ''; - - if (isset($xmlPackageNames[$language->languageCode])) { - $packageNames[$language->languageID] = $xmlPackageNames[$language->languageCode]; - } - else if (isset($xmlPackageNames['default'])) { - $packageNames[$language->languageID] = $xmlPackageNames['default']; + if ($xmlPackageNames !== null) { + if (count($xmlPackageNames) === 1) { + $packageName->value(reset($xmlPackageNames)); + } + else { + $packageNames = []; + foreach (LanguageFactory::getInstance()->getLanguages() as $language) { + $packageNames[$language->languageID] = ''; + + if (isset($xmlPackageNames[$language->languageCode])) { + $packageNames[$language->languageID] = $xmlPackageNames[$language->languageCode]; + } + else if (isset($xmlPackageNames['default'])) { + $packageNames[$language->languageID] = $xmlPackageNames['default']; + } } + + $packageName->value($packageNames); } - - $packageName->value($packageNames); + } + else { + $this->missingElements[] = 'packageName'; } /** @var TextFormField $packageDescription */ $packageDescription = $this->form->getNodeById('packageDescription'); $xmlPackageDescriptions = $packageArchive->getPackageInfo('packageDescription'); - if (count($xmlPackageDescriptions) === 1) { - $packageDescription->value(reset($xmlPackageDescriptions)); - } - else { - $packageDescriptions = []; - foreach (LanguageFactory::getInstance()->getLanguages() as $language) { - $packageDescriptions[$language->languageID] = ''; - - if (isset($xmlPackageDescriptions[$language->languageCode])) { - $packageDescriptions[$language->languageID] = $xmlPackageDescriptions[$language->languageCode]; - } else if (isset($xmlPackageDescriptions['default'])) { - $packageDescriptions[$language->languageID] = $xmlPackageDescriptions['default']; + if ($xmlPackageDescriptions !== null) { + if (count($xmlPackageDescriptions) === 1) { + $packageDescription->value(reset($xmlPackageDescriptions)); + } + else { + $packageDescriptions = []; + foreach (LanguageFactory::getInstance()->getLanguages() as $language) { + $packageDescriptions[$language->languageID] = ''; + + if (isset($xmlPackageDescriptions[$language->languageCode])) { + $packageDescriptions[$language->languageID] = $xmlPackageDescriptions[$language->languageCode]; + } else if (isset($xmlPackageDescriptions['default'])) { + $packageDescriptions[$language->languageID] = $xmlPackageDescriptions['default']; + } } + + $packageDescription->value($packageDescriptions); } - - $packageDescription->value($packageDescriptions); + } + else { + $this->missingElements[] = 'packageDescription'; } if (!empty($packageArchive->getPackageInfo('isApplication'))) { @@ -170,11 +192,21 @@ class DevtoolsProjectEditForm extends DevtoolsProjectAddForm { /** @var TextFormField $version */ $version = $this->form->getNodeById('version'); - $version->value($packageArchive->getPackageInfo('version')); + if ($packageArchive->getPackageInfo('version') !== null) { + $version->value($packageArchive->getPackageInfo('version')); + } + else { + $this->missingElements[] = 'packageDescription'; + } /** @var TextFormField $date */ $date = $this->form->getNodeById('date'); - $date->value(date('Y-m-d', $packageArchive->getPackageInfo('date'))); + if ($packageArchive->getPackageInfo('date') !== null) { + $date->value(date('Y-m-d', $packageArchive->getPackageInfo('date'))); + } + else { + $this->missingElements[] = 'date'; + } if ($packageArchive->getPackageInfo('packageurl') !== null) { /** @var TextFormField $packageUrl */ @@ -184,7 +216,12 @@ class DevtoolsProjectEditForm extends DevtoolsProjectAddForm { /** @var TextFormField $author */ $author = $this->form->getNodeById('author'); - $author->value($packageArchive->getAuthorInfo('author')); + if ($packageArchive->getAuthorInfo('author') !== null) { + $author->value($packageArchive->getAuthorInfo('author')); + } + else { + $this->missingElements[] = 'author'; + } if ($packageArchive->getAuthorInfo('authorURL') !== null) { /** @var TextFormField $authorUrl */ diff --git a/wcfsetup/install/lang/de.xml b/wcfsetup/install/lang/de.xml index 5f2526730d..37a592bdfe 100644 --- a/wcfsetup/install/lang/de.xml +++ b/wcfsetup/install/lang/de.xml @@ -596,6 +596,7 @@ package.xml im angegebenen Pfad. Die Paket-Dateien wurden entweder gelöscht oder verschoben.]]> + package.xml-Datei: {implode from=$missingElements item=missingElement}{$missingElement}{/implode}.]]> diff --git a/wcfsetup/install/lang/en.xml b/wcfsetup/install/lang/en.xml index 67c1c4278f..cd9c8a03fb 100644 --- a/wcfsetup/install/lang/en.xml +++ b/wcfsetup/install/lang/en.xml @@ -572,6 +572,7 @@ package.xml in the given directory. The package files have either been deleted or moved.]]> + package.xml file: {implode from=$missingElements item=missingElement}{$missingElement}{/implode}.]]> @@ -861,7 +862,6 @@ This protocol file contains {$data[count]} new entries. The first three error me - please set it up now.]]>