3 abstract class DifferentialCommitMessageField
7 private $customFieldStorage;
9 final public function setViewer(PhabricatorUser
$viewer) {
10 $this->viewer
= $viewer;
14 final public function getViewer() {
18 final public function setCustomFieldStorage(array $custom_field_storage) {
19 $this->customFieldStorage
= $custom_field_storage;
23 final public function getCustomFieldStorage() {
24 return $this->customFieldStorage
;
27 abstract public function getFieldName();
28 abstract public function getFieldOrder();
30 public function isFieldEnabled() {
34 public function getFieldAliases() {
38 public function validateFieldValue($value) {
42 public function parseFieldValue($value) {
46 public function isFieldEditable() {
50 public function isTemplateField() {
54 public function readFieldValueFromConduit($value) {
55 return $this->readStringFieldValueFromConduit($value);
58 public function readFieldValueFromObject(DifferentialRevision
$revision) {
62 public function renderFieldValue($value) {
63 if (!strlen($value)) {
70 public function getFieldTransactions($value) {
71 if (!$this->isFieldEditable()) {
74 throw new PhutilMethodNotImplementedException();
77 final public function getCommitMessageFieldKey() {
78 return $this->getPhobjectClassConstant('FIELDKEY', 64);
81 final public static function newEnabledFields(PhabricatorUser
$viewer) {
82 $fields = self
::getAllFields();
85 foreach ($fields as $key => $field) {
86 $field = clone $field;
87 $field->setViewer($viewer);
88 if ($field->isFieldEnabled()) {
89 $results[$key] = $field;
96 final public static function getAllFields() {
97 return id(new PhutilClassMapQuery())
98 ->setAncestorClass(__CLASS__
)
99 ->setUniqueMethod('getCommitMessageFieldKey')
100 ->setSortMethod('getFieldOrder')
104 protected function raiseParseException($message) {
105 throw new DifferentialFieldParseException($message);
108 protected function raiseValidationException($message) {
109 throw new DifferentialFieldValidationException($message);
112 protected function parseObjectList(
115 $allow_partial = false,
116 array $suffixes = array()) {
117 return id(new PhabricatorObjectListQuery())
118 ->setViewer($this->getViewer())
119 ->setAllowedTypes($types)
120 ->setObjectList($value)
121 ->setAllowPartialResults($allow_partial)
122 ->setSuffixes($suffixes)
126 protected function renderHandleList(array $phids, array $suffixes = array()) {
131 $handles = $this->getViewer()->loadHandles($phids);
134 foreach ($handles as $handle) {
135 $phid = $handle->getPHID();
137 if ($handle->getPolicyFiltered()) {
139 } else if ($handle->isComplete()) {
140 $token = $handle->getCommandLineObjectName();
143 $suffix = idx($suffixes, $phid);
144 $token = $token.$suffix;
149 return implode(', ', $out);
152 protected function readStringFieldValueFromConduit($value) {
153 if ($value === null) {
157 if (!is_string($value)) {
160 'Field "%s" expects a string value, but received a value of type '.
162 $this->getCommitMessageFieldKey(),
169 protected function readStringListFieldValueFromConduit($value) {
170 if (!is_array($value)) {
173 'Field "%s" expects a list of strings, but received a value of type '.
175 $this->getCommitMessageFieldKey(),
182 protected function isCustomFieldEnabled($key) {
183 $field_list = PhabricatorCustomField
::getObjectFields(
184 new DifferentialRevision(),
185 DifferentialCustomField
::ROLE_DEFAULT
);
187 $fields = $field_list->getFields();
188 return isset($fields[$key]);