3 namespace wcf\system\form\builder\field\devtools\project;
5 use wcf\data\package\Package;
6 use wcf\system\form\builder\field\AbstractFormField;
7 use wcf\system\form\builder\field\TDefaultIdFormField;
10 * Form field implementation for the excluded packages of a devtools project.
12 * @author Matthias Schmidt
13 * @copyright 2001-2019 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
17 final class DevtoolsProjectExcludedPackagesFormField extends AbstractFormField
19 use TDefaultIdFormField;
24 protected $templateName = 'shared_devtoolsProjectExcludedPackagesFormField';
29 protected $value = [];
34 public function readValue()
37 $this->getDocument()->hasRequestData($this->getPrefixedId())
38 && \is_array($this->getDocument()->getRequestData($this->getPrefixedId()))
40 $this->value = $this->getDocument()->getRequestData($this->getPrefixedId());
51 public function validate()
53 // everything is already validated by JavaScript thus we skip
54 // reporting specific errors and simply remove manipulated values
55 $excludedPackages = [];
56 $packageIdentifiers = [];
57 foreach ($this->getValue() as $package) {
58 // ensure that all relevant elements are present
59 if (!\is_array($package) || !isset($package['packageIdentifier']) || !isset($package['version'])) {
63 // validate package identifier
65 !Package::isValidPackageName($package['packageIdentifier'])
66 || \in_array($package['packageIdentifier'], $packageIdentifiers)
73 $package['version'] !== ''
74 && $package['version'] !== '*'
75 && !Package::isValidVersion($package['version'])
80 $excludedPackages[] = $package;
83 $this->value($excludedPackages);
89 protected static function getDefaultId()
91 return 'excludedPackages';