mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-20 10:48:40 +01:00
Summary: Ref T13025. This is some minor technical stuff: make the "select" bulk edit type a little more consistent with other types by passing data down instead of having it reach up the stack. This simplifies the implementation of a custom field "select" in a future change. Also, provide an option list to the "select" edit field for object subtypes. This is only accessible via Conduit so it currently never actually renders anything in the UI, but with the bulk edit stuff we get some initialization order issues if we don't set anything. This will also make any future changes which expose subtypes more broadly more straightforward. Test Plan: - Bulk edited "select" fields, like "Status" and "Priority". - No more fatal when trying to `getOptions()` internally on the subtype field. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13025 Differential Revision: https://secure.phabricator.com/D18878
74 lines
1.7 KiB
PHP
74 lines
1.7 KiB
PHP
<?php
|
|
|
|
final class PhabricatorSelectEditField
|
|
extends PhabricatorEditField {
|
|
|
|
private $options;
|
|
private $optionAliases = array();
|
|
|
|
public function setOptions(array $options) {
|
|
$this->options = $options;
|
|
return $this;
|
|
}
|
|
|
|
public function getOptions() {
|
|
if ($this->options === null) {
|
|
throw new PhutilInvalidStateException('setOptions');
|
|
}
|
|
return $this->options;
|
|
}
|
|
|
|
public function setOptionAliases(array $option_aliases) {
|
|
$this->optionAliases = $option_aliases;
|
|
return $this;
|
|
}
|
|
|
|
public function getOptionAliases() {
|
|
return $this->optionAliases;
|
|
}
|
|
|
|
protected function getDefaultValueFromConfiguration($value) {
|
|
return $this->getCanonicalValue($value);
|
|
}
|
|
|
|
protected function getValueForControl() {
|
|
$value = parent::getValueForControl();
|
|
return $this->getCanonicalValue($value);
|
|
}
|
|
|
|
protected function newControl() {
|
|
return id(new AphrontFormSelectControl())
|
|
->setOptions($this->getOptions());
|
|
}
|
|
|
|
protected function newHTTPParameterType() {
|
|
return new AphrontSelectHTTPParameterType();
|
|
}
|
|
|
|
protected function newCommentAction() {
|
|
return id(new PhabricatorEditEngineSelectCommentAction())
|
|
->setOptions($this->getOptions());
|
|
}
|
|
|
|
protected function newConduitParameterType() {
|
|
return new ConduitStringParameterType();
|
|
}
|
|
|
|
protected function newBulkParameterType() {
|
|
return id(new BulkSelectParameterType())
|
|
->setOptions($this->getOptions());
|
|
}
|
|
|
|
private function getCanonicalValue($value) {
|
|
$options = $this->getOptions();
|
|
if (!isset($options[$value])) {
|
|
$aliases = $this->getOptionAliases();
|
|
if (isset($aliases[$value])) {
|
|
$value = $aliases[$value];
|
|
}
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
}
|