Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/infrastructure/export/engine/PhabricatorCustomFieldExportEngineExtension.php
12242 views
1
<?php
2
3
final class PhabricatorCustomFieldExportEngineExtension
4
extends PhabricatorExportEngineExtension {
5
6
const EXTENSIONKEY = 'custom-field';
7
8
private $object;
9
10
public function supportsObject($object) {
11
$this->object = $object;
12
return ($object instanceof PhabricatorCustomFieldInterface);
13
}
14
15
public function newExportFields() {
16
$prototype = $this->object;
17
18
$fields = $this->newCustomFields($prototype);
19
20
$results = array();
21
foreach ($fields as $field) {
22
$field_key = $field->getModernFieldKey();
23
24
$results[] = $field->newExportField()
25
->setKey($field_key);
26
}
27
28
return $results;
29
}
30
31
public function newExportData(array $objects) {
32
$viewer = $this->getViewer();
33
34
$field_map = array();
35
foreach ($objects as $object) {
36
$object_phid = $object->getPHID();
37
38
$fields = PhabricatorCustomField::getObjectFields(
39
$object,
40
PhabricatorCustomField::ROLE_EXPORT);
41
42
$fields
43
->setViewer($viewer)
44
->readFieldsFromObject($object);
45
46
$field_map[$object_phid] = $fields;
47
}
48
49
$all_fields = array();
50
foreach ($field_map as $field_list) {
51
foreach ($field_list->getFields() as $field) {
52
$all_fields[] = $field;
53
}
54
}
55
56
id(new PhabricatorCustomFieldStorageQuery())
57
->addFields($all_fields)
58
->execute();
59
60
$results = array();
61
foreach ($objects as $object) {
62
$object_phid = $object->getPHID();
63
$object_fields = $field_map[$object_phid];
64
65
$map = array();
66
foreach ($object_fields->getFields() as $field) {
67
$key = $field->getModernFieldKey();
68
$map[$key] = $field->newExportData();
69
}
70
71
$results[] = $map;
72
}
73
74
return $results;
75
}
76
77
private function newCustomFields($object) {
78
$fields = PhabricatorCustomField::getObjectFields(
79
$object,
80
PhabricatorCustomField::ROLE_EXPORT);
81
$fields->setViewer($this->getViewer());
82
83
return $fields->getFields();
84
}
85
86
}
87
88