@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 86 lines 2.0 kB view raw
1<?php 2 3final 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}