1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-19 16:58:48 +02:00

Support exporting custom "Options/Select" fields to Excel/JSON/CSV/etc

Summary:
See <https://discourse.phabricator-community.org/t/exporting-custom-select-fields-as-part-of-query-exports/2466/>.

In JSON, export both the internal key and the visible value. For other formats, export the visible label.

Test Plan:
  - Added a custom options/select field.
  - Exported CSV, JSON, Text, got sensible output.

Reviewers: amckinley

Reviewed By: amckinley

Differential Revision: https://secure.phabricator.com/D20316
This commit is contained in:
epriestley 2019-03-22 15:59:55 -07:00
parent a5226366d3
commit 917fedafe6
3 changed files with 54 additions and 0 deletions

View file

@ -3692,6 +3692,7 @@ phutil_register_library_map(array(
'PhabricatorOlderInlinesSetting' => 'applications/settings/setting/PhabricatorOlderInlinesSetting.php',
'PhabricatorOneTimeTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorOneTimeTriggerClock.php',
'PhabricatorOpcodeCacheSpec' => 'applications/cache/spec/PhabricatorOpcodeCacheSpec.php',
'PhabricatorOptionExportField' => 'infrastructure/export/field/PhabricatorOptionExportField.php',
'PhabricatorOptionGroupSetting' => 'applications/settings/setting/PhabricatorOptionGroupSetting.php',
'PhabricatorOwnerPathQuery' => 'applications/owners/query/PhabricatorOwnerPathQuery.php',
'PhabricatorOwnersApplication' => 'applications/owners/application/PhabricatorOwnersApplication.php',
@ -9687,6 +9688,7 @@ phutil_register_library_map(array(
'PhabricatorOlderInlinesSetting' => 'PhabricatorSelectSetting',
'PhabricatorOneTimeTriggerClock' => 'PhabricatorTriggerClock',
'PhabricatorOpcodeCacheSpec' => 'PhabricatorCacheSpec',
'PhabricatorOptionExportField' => 'PhabricatorExportField',
'PhabricatorOptionGroupSetting' => 'PhabricatorSetting',
'PhabricatorOwnerPathQuery' => 'Phobject',
'PhabricatorOwnersApplication' => 'PhabricatorApplication',

View file

@ -153,4 +153,9 @@ final class PhabricatorStandardCustomFieldSelect
->setOptions($this->getOptions());
}
protected function newExportFieldType() {
return id(new PhabricatorOptionExportField())
->setOptions($this->getOptions());
}
}

View file

@ -0,0 +1,47 @@
<?php
final class PhabricatorOptionExportField
extends PhabricatorExportField {
private $options;
public function setOptions(array $options) {
$this->options = $options;
return $this;
}
public function getOptions() {
return $this->options;
}
public function getNaturalValue($value) {
if ($value === null) {
return $value;
}
if (!strlen($value)) {
return null;
}
$options = $this->getOptions();
return array(
'value' => (string)$value,
'name' => (string)idx($options, $value, $value),
);
}
public function getTextValue($value) {
$natural_value = $this->getNaturalValue($value);
if ($natural_value === null) {
return null;
}
return $natural_value['name'];
}
public function getPHPExcelValue($value) {
return $this->getTextValue($value);
}
}