diff --git a/src/applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php b/src/applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php --- a/src/applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php +++ b/src/applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php @@ -179,6 +179,10 @@ $type->getEditType()); $value_type = $type->getValueType(); + if (!strlen($value_type)) { + $value_type = '?'; + } + $value_description = $type->getValueDescription(); $table = array(); diff --git a/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php b/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php --- a/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php +++ b/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php @@ -36,8 +36,15 @@ } protected function newEditType() { - return id(new PhabricatorCustomFieldEditType()) + $type = id(new PhabricatorCustomFieldEditType()) ->setCustomField($this->getCustomField()); + + $http_type = $this->getHTTPParameterType(); + if ($http_type) { + $type->setValueType($http_type->getTypeName()); + } + + return $type; } public function getValueForTransaction() { @@ -65,8 +72,13 @@ } public function getConduitEditTypes() { - // TODO: For now, don't support custom fields over Conduit. - return array(); + $field = $this->getCustomField(); + + if (!$field->shouldAppearInConduitTransactions()) { + return array(); + } + + return parent::getConduitEditTypes(); } protected function newHTTPParameterType() { diff --git a/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditType.php b/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditType.php --- a/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditType.php +++ b/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditType.php @@ -4,6 +4,7 @@ extends PhabricatorEditType { private $customField; + private $valueType; public function setCustomField(PhabricatorCustomField $custom_field) { $this->customField = $custom_field; @@ -14,9 +15,13 @@ return $this->customField; } + public function setValueType($value_type) { + $this->valueType = $value_type; + return $this; + } + public function getValueType() { - // TODO: Improve. - return 'custom'; + return $this->valueType; } public function getMetadata() { diff --git a/src/infrastructure/customfield/field/PhabricatorCustomField.php b/src/infrastructure/customfield/field/PhabricatorCustomField.php --- a/src/infrastructure/customfield/field/PhabricatorCustomField.php +++ b/src/infrastructure/customfield/field/PhabricatorCustomField.php @@ -1323,6 +1323,14 @@ } + public function shouldAppearInConduitTransactions() { + if ($this->proxy) { + return $this->proxy->shouldAppearInConduitDictionary(); + } + return false; + } + + /* -( Herald )------------------------------------------------------------- */ diff --git a/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php b/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php --- a/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php +++ b/src/infrastructure/customfield/standard/PhabricatorStandardCustomField.php @@ -433,4 +433,8 @@ ->setEditTypeKey($short); } + public function shouldAppearInConduitTransactions() { + return true; + } + } diff --git a/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php b/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php --- a/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php +++ b/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php @@ -191,4 +191,10 @@ } } + public function shouldAppearInConduitTransactions() { + // TODO: Dates are complicated and we don't yet support handling them from + // Conduit. + return false; + } + }