Skip to content

Commit f4dd4a3

Browse files
committed
feat(answer): copmatibility with API
Signed-off-by: Thierry Bugier <[email protected]>
1 parent 893efda commit f4dd4a3

19 files changed

+126
-1
lines changed

inc/answer.class.php

+13
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,17 @@ public static function canView() {
6565
public static function getTypeName($nb = 0) {
6666
return _n('Answer', 'Answers', $nb, 'formcreator');
6767
}
68+
69+
public function post_getFromDB() {
70+
if (!isAPI()) {
71+
return;
72+
}
73+
74+
/** @var PluginFormcreatorQuestion $question */
75+
$question = PluginFormcreatorQuestion::getById($this->fields[PluginFormcreatorQuestion::getForeignKeyField()]);
76+
$field = $question->getSubField();
77+
$field->deserializeValue($this->fields['answer']);
78+
79+
$this->fields['answer'] = $field->getValueForApi();
80+
}
6881
}

inc/field/actorfield.class.php

+22-1
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,9 @@ public function getValueForTargetText($domain, $richText): ?string {
209209
$value[] = $item;
210210
} else {
211211
$user = new User();
212-
$user->getFromDB($item);
212+
if (!$user->getFromDB($item)) {
213+
continue;
214+
}
213215
$value[] = $user->getFriendlyName();
214216
}
215217
}
@@ -419,4 +421,23 @@ public function isVisibleField(): bool {
419421
public function isEditableField(): bool {
420422
return true;
421423
}
424+
425+
public function getValueForApi() {
426+
$value = [];
427+
if (is_array($this->value)) {
428+
foreach ($this->value as $item) {
429+
if (filter_var($item, FILTER_VALIDATE_EMAIL) !== false) {
430+
$value[] = $item;
431+
} else {
432+
$user = new User();
433+
if (!$user->getFromDB($item)) {
434+
continue;
435+
}
436+
$value[] = [User::class, $item];
437+
}
438+
}
439+
}
440+
441+
return $value;
442+
}
422443
}

inc/field/checkboxesfield.class.php

+17
Original file line numberDiff line numberDiff line change
@@ -412,4 +412,21 @@ public function getTranslatableStrings(array $options = []) : array {
412412
}
413413
return $strings;
414414
}
415+
416+
public function getValueForApi() {
417+
$value = [];
418+
$values = $this->getAvailableValues();
419+
420+
if ($values === null || $this->value === null || count($this->value) === 0) {
421+
return '';
422+
}
423+
424+
foreach ($this->value as $input) {
425+
if (in_array($input, $values)) {
426+
$value[] = $input;
427+
}
428+
}
429+
430+
return $value;
431+
}
415432
}

inc/field/datefield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,8 @@ public function isVisibleField(): bool {
232232
public function isEditableField(): bool {
233233
return true;
234234
}
235+
236+
public function getValueForApi() {
237+
return $this->value;
238+
}
235239
}

inc/field/datetimefield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,8 @@ public function isVisibleField(): bool {
233233
public function isEditableField(): bool {
234234
return true;
235235
}
236+
237+
public function getValueForApi() {
238+
return $this->value;
239+
}
236240
}

inc/field/descriptionfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,8 @@ public function isVisibleField(): bool {
162162
public function isEditableField(): bool {
163163
return false;
164164
}
165+
166+
public function getValueForApi() {
167+
return $this->question->fields['description'];
168+
}
165169
}

inc/field/dropdownfield.class.php

+7
Original file line numberDiff line numberDiff line change
@@ -967,4 +967,11 @@ protected function getEntityRestriction() {
967967

968968
return $_SESSION['glpiactiveentities'];
969969
}
970+
971+
public function getValueForApi() {
972+
return [
973+
$this->getSubItemtype(),
974+
$this->value,
975+
];
976+
}
970977
}

inc/field/emailfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,8 @@ public function isEditableField(): bool {
193193
public function getTranslatableStrings(array $options = []) : array {
194194
return PluginFormcreatorAbstractField::getTranslatableStrings($options);
195195
}
196+
197+
public function getValueForApi() {
198+
return $this->value;
199+
}
196200
}

inc/field/filefield.class.php

+8
Original file line numberDiff line numberDiff line change
@@ -306,4 +306,12 @@ public function isVisibleField(): bool {
306306
public function isEditableField(): bool {
307307
return true;
308308
}
309+
310+
public function getValueForApi() {
311+
$output = [];
312+
foreach ($this->uploadData as $documentId) {
313+
$output[] = [Document::class, $documentId];
314+
}
315+
return $output;
316+
}
309317
}

inc/field/floatfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -308,4 +308,8 @@ public function isVisibleField(): bool {
308308
public function isEditableField(): bool {
309309
return true;
310310
}
311+
312+
public function getValueForApi() {
313+
return $this->value;
314+
}
311315
}

inc/field/hiddenfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -208,4 +208,8 @@ public function getTranslatableStrings(array $options = []) : array {
208208
}
209209
return $strings;
210210
}
211+
212+
public function getValueForApi() {
213+
return $this->value;
214+
}
211215
}

inc/field/hostnamefield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,8 @@ public function isVisibleField(): bool {
163163
public function isEditableField(): bool {
164164
return false;
165165
}
166+
167+
public function getValueForApi() {
168+
return $this->value;
169+
}
166170
}

inc/field/ipfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,8 @@ public function isVisibleField(): bool {
175175
public function isEditableField(): bool {
176176
return false;
177177
}
178+
179+
public function getValueForApi() {
180+
return $this->value;
181+
}
178182
}

inc/field/radiosfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -318,4 +318,8 @@ public function getTranslatableStrings(array $options = []) : array {
318318

319319
return $strings;
320320
}
321+
322+
public function getValueForApi() {
323+
return $this->value;
324+
}
321325
}

inc/field/textfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -318,4 +318,8 @@ public function getTranslatableStrings(array $options = []) : array {
318318

319319
return $strings;
320320
}
321+
322+
public function getValueForApi() {
323+
return $this->value;
324+
}
321325
}

inc/field/timefield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -225,4 +225,8 @@ public function isVisibleField(): bool {
225225
public function isEditableField(): bool {
226226
return true;
227227
}
228+
229+
public function getValueForApi() {
230+
return $this->value;
231+
}
228232
}

inc/field/urgencyfield.class.php

+4
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,8 @@ public function isVisibleField(): bool {
242242
public function isEditableField(): bool {
243243
return true;
244244
}
245+
246+
public function getValueForApi() {
247+
return $this->value;
248+
}
245249
}

inc/fieldinterface.class.php

+7
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,13 @@ public function getValueForDesign() : string;
119119
*/
120120
public function getValueForTargetText($domain, $richText): ?string;
121121

122+
/**
123+
* Get the valoe of the field for output via the API
124+
*
125+
* @return string|array
126+
*/
127+
public function getValueForApi();
128+
122129
/**
123130
* Move uploaded files and make Document items
124131
*/

tests/fixture/PluginFormcreatorDependentField.php

+4
Original file line numberDiff line numberDiff line change
@@ -268,4 +268,8 @@ public function isEditableField(): bool {
268268
public function isVisibleField(): bool {
269269
return true;
270270
}
271+
272+
public function getValueForApi() {
273+
return $this->value;
274+
}
271275
}

0 commit comments

Comments
 (0)