Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php
12242 views
1
<?php
2
3
final class PhabricatorCustomFieldEditField
4
extends PhabricatorEditField {
5
6
private $customField;
7
private $httpParameterType;
8
private $conduitParameterType;
9
private $bulkParameterType;
10
private $commentAction;
11
12
public function setCustomField(PhabricatorCustomField $custom_field) {
13
$this->customField = $custom_field;
14
return $this;
15
}
16
17
public function getCustomField() {
18
return $this->customField;
19
}
20
21
public function setCustomFieldHTTPParameterType(
22
AphrontHTTPParameterType $type) {
23
$this->httpParameterType = $type;
24
return $this;
25
}
26
27
public function getCustomFieldHTTPParameterType() {
28
return $this->httpParameterType;
29
}
30
31
public function setCustomFieldConduitParameterType(
32
ConduitParameterType $type) {
33
$this->conduitParameterType = $type;
34
return $this;
35
}
36
37
public function getCustomFieldConduitParameterType() {
38
return $this->conduitParameterType;
39
}
40
41
public function setCustomFieldBulkParameterType(
42
BulkParameterType $type) {
43
$this->bulkParameterType = $type;
44
return $this;
45
}
46
47
public function getCustomFieldBulkParameterType() {
48
return $this->bulkParameterType;
49
}
50
51
public function setCustomFieldCommentAction(
52
PhabricatorEditEngineCommentAction $comment_action) {
53
$this->commentAction = $comment_action;
54
return $this;
55
}
56
57
public function getCustomFieldCommentAction() {
58
return $this->commentAction;
59
}
60
61
protected function buildControl() {
62
if (!$this->getIsFormField()) {
63
return null;
64
}
65
66
$field = $this->getCustomField();
67
$clone = clone $field;
68
69
$value = $this->getValue();
70
$clone->setValueFromApplicationTransactions($value);
71
72
return $clone->renderEditControl(array());
73
}
74
75
protected function newEditType() {
76
return id(new PhabricatorCustomFieldEditType())
77
->setCustomField($this->getCustomField());
78
}
79
80
public function getValueForTransaction() {
81
$value = $this->getValue();
82
$field = $this->getCustomField();
83
84
// Avoid changing the value of the field itself, since later calls would
85
// incorrectly reflect the new value.
86
$clone = clone $field;
87
$clone->setValueFromApplicationTransactions($value);
88
return $clone->getNewValueForApplicationTransactions();
89
}
90
91
protected function getValueForCommentAction($value) {
92
$field = $this->getCustomField();
93
$clone = clone $field;
94
$clone->setValueFromApplicationTransactions($value);
95
96
// TODO: This is somewhat bogus because only StandardCustomFields
97
// implement a getFieldValue() method -- not all CustomFields. Today,
98
// only StandardCustomFields can ever actually generate a comment action
99
// so we never reach this method with other field types.
100
101
return $clone->getFieldValue();
102
}
103
104
protected function getValueExistsInSubmit(AphrontRequest $request, $key) {
105
return true;
106
}
107
108
protected function getValueFromSubmit(AphrontRequest $request, $key) {
109
$field = $this->getCustomField();
110
111
$clone = clone $field;
112
113
$clone->readValueFromRequest($request);
114
return $clone->getNewValueForApplicationTransactions();
115
}
116
117
protected function newConduitEditTypes() {
118
$field = $this->getCustomField();
119
120
if (!$field->shouldAppearInConduitTransactions()) {
121
return array();
122
}
123
124
return parent::newConduitEditTypes();
125
}
126
127
protected function newHTTPParameterType() {
128
$type = $this->getCustomFieldHTTPParameterType();
129
130
if ($type) {
131
return clone $type;
132
}
133
134
return null;
135
}
136
137
protected function newCommentAction() {
138
$action = $this->getCustomFieldCommentAction();
139
140
if ($action) {
141
return clone $action;
142
}
143
144
return null;
145
}
146
147
protected function newConduitParameterType() {
148
$type = $this->getCustomFieldConduitParameterType();
149
150
if ($type) {
151
return clone $type;
152
}
153
154
return null;
155
}
156
157
protected function newBulkParameterType() {
158
$type = $this->getCustomFieldBulkParameterType();
159
160
if ($type) {
161
return clone $type;
162
}
163
164
return null;
165
}
166
167
public function getAllReadValueFromRequestKeys() {
168
$keys = array();
169
170
// NOTE: This piece of complexity is so we can expose a reasonable key in
171
// the UI ("custom.x") instead of a crufty internal key ("std:app:x").
172
// Perhaps we can simplify this some day.
173
174
// In the parent, this is just getKey(), but that returns a cumbersome
175
// key in EditFields. Use the simpler edit type key instead.
176
$keys[] = $this->getEditTypeKey();
177
178
foreach ($this->getAliases() as $alias) {
179
$keys[] = $alias;
180
}
181
182
return $keys;
183
}
184
185
}
186
187