Differential D18954 Diff 45478 src/infrastructure/export/PhabricatorCustomFieldExportEngineExtension.php
Changeset View
Changeset View
Standalone View
Standalone View
src/infrastructure/export/PhabricatorCustomFieldExportEngineExtension.php
- This file was added.
| <?php | |||||
| final class PhabricatorCustomFieldExportEngineExtension | |||||
| extends PhabricatorExportEngineExtension { | |||||
| const EXTENSIONKEY = 'custom-field'; | |||||
| private $object; | |||||
| public function supportsObject($object) { | |||||
| $this->object = $object; | |||||
| return ($object instanceof PhabricatorCustomFieldInterface); | |||||
| } | |||||
| public function newExportFields() { | |||||
| $prototype = $this->object; | |||||
| $fields = $this->newCustomFields($prototype); | |||||
| $results = array(); | |||||
| foreach ($fields as $field) { | |||||
| $field_key = $field->getModernFieldKey(); | |||||
| $results[] = $field->newExportField() | |||||
| ->setKey($field_key); | |||||
| } | |||||
| return $results; | |||||
| } | |||||
| public function newExportData(array $objects) { | |||||
| $viewer = $this->getViewer(); | |||||
| $field_map = array(); | |||||
| foreach ($objects as $object) { | |||||
| $object_phid = $object->getPHID(); | |||||
| $fields = PhabricatorCustomField::getObjectFields( | |||||
| $object, | |||||
| PhabricatorCustomField::ROLE_EXPORT); | |||||
| $fields | |||||
| ->setViewer($viewer) | |||||
| ->readFieldsFromObject($object); | |||||
| $field_map[$object_phid] = $fields; | |||||
| } | |||||
| $all_fields = array(); | |||||
| foreach ($field_map as $field_list) { | |||||
| foreach ($field_list->getFields() as $field) { | |||||
| $all_fields[] = $field; | |||||
| } | |||||
| } | |||||
| id(new PhabricatorCustomFieldStorageQuery()) | |||||
| ->addFields($all_fields) | |||||
| ->execute(); | |||||
| $results = array(); | |||||
| foreach ($objects as $object) { | |||||
| $object_phid = $object->getPHID(); | |||||
| $object_fields = $field_map[$object_phid]; | |||||
| $map = array(); | |||||
| foreach ($object_fields->getFields() as $field) { | |||||
| $key = $field->getModernFieldKey(); | |||||
| $map[$key] = $field->newExportData(); | |||||
| } | |||||
| $results[] = $map; | |||||
| } | |||||
| return $results; | |||||
| } | |||||
| private function newCustomFields($object) { | |||||
| $fields = PhabricatorCustomField::getObjectFields( | |||||
| $object, | |||||
| PhabricatorCustomField::ROLE_EXPORT); | |||||
| $fields->setViewer($this->getViewer()); | |||||
| return $fields->getFields(); | |||||
| } | |||||
| } | |||||