1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-10 00:42:41 +01:00

Define common ID and PHID export fields in SearchEngine

Summary:
Ref T13049. All exportable objects should always have these fields, so make them builtins.

This also sets things up for extensions (like custom fields).

Test Plan: Exported user data, got the same export as before.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13049

Differential Revision: https://secure.phabricator.com/D18951
This commit is contained in:
epriestley 2018-01-28 18:24:42 -08:00
parent 1db281bcd1
commit 213eb8e93d
4 changed files with 66 additions and 30 deletions

View file

@ -49,12 +49,6 @@ final class DiffusionPullLogSearchEngine
protected function newExportFields() { protected function newExportFields() {
return array( return array(
id(new PhabricatorIDExportField())
->setKey('id')
->setLabel(pht('ID')),
id(new PhabricatorPHIDExportField())
->setKey('phid')
->setLabel(pht('PHID')),
id(new PhabricatorPHIDExportField()) id(new PhabricatorPHIDExportField())
->setKey('repositoryPHID') ->setKey('repositoryPHID')
->setLabel(pht('Repository PHID')), ->setLabel(pht('Repository PHID')),
@ -82,7 +76,7 @@ final class DiffusionPullLogSearchEngine
); );
} }
public function newExport(array $events) { protected function newExportData(array $events) {
$viewer = $this->requireViewer(); $viewer = $this->requireViewer();
$phids = array(); $phids = array();
@ -112,8 +106,6 @@ final class DiffusionPullLogSearchEngine
} }
$export[] = array( $export[] = array(
'id' => $event->getID(),
'phid' => $event->getPHID(),
'repositoryPHID' => $repository_phid, 'repositoryPHID' => $repository_phid,
'repository' => $repository_name, 'repository' => $repository_name,
'pullerPHID' => $puller_phid, 'pullerPHID' => $puller_phid,

View file

@ -322,12 +322,6 @@ final class PhabricatorPeopleSearchEngine
protected function newExportFields() { protected function newExportFields() {
return array( return array(
id(new PhabricatorIDExportField())
->setKey('id')
->setLabel(pht('ID')),
id(new PhabricatorPHIDExportField())
->setKey('phid')
->setLabel(pht('PHID')),
id(new PhabricatorStringExportField()) id(new PhabricatorStringExportField())
->setKey('username') ->setKey('username')
->setLabel(pht('Username')), ->setLabel(pht('Username')),
@ -340,14 +334,12 @@ final class PhabricatorPeopleSearchEngine
); );
} }
public function newExport(array $users) { protected function newExportData(array $users) {
$viewer = $this->requireViewer(); $viewer = $this->requireViewer();
$export = array(); $export = array();
foreach ($users as $user) { foreach ($users as $user) {
$export[] = array( $export[] = array(
'id' => $user->getID(),
'phid' => $user->getPHID(),
'username' => $user->getUsername(), 'username' => $user->getUsername(),
'realName' => $user->getRealName(), 'realName' => $user->getRealName(),
'created' => $user->getDateCreated(), 'created' => $user->getDateCreated(),

View file

@ -449,18 +449,7 @@ final class PhabricatorApplicationSearchController
$format->setViewer($viewer); $format->setViewer($viewer);
$export_data = $engine->newExport($objects); $export_data = $engine->newExport($objects);
if (count($export_data) !== count($objects)) {
throw new Exception(
pht(
'Search engine exported the wrong number of objects, expected '.
'%s but got %s.',
phutil_count($objects),
phutil_count($export_data)));
}
$objects = array_values($objects); $objects = array_values($objects);
$export_data = array_values($export_data);
$field_list = $engine->newExportFieldList(); $field_list = $engine->newExportFieldList();
$field_list = mpull($field_list, null, 'getKey'); $field_list = mpull($field_list, null, 'getKey');

View file

@ -1455,11 +1455,74 @@ abstract class PhabricatorApplicationSearchEngine extends Phobject {
} }
final public function newExportFieldList() { final public function newExportFieldList() {
return $this->newExportFields(); $builtin_fields = array(
id(new PhabricatorIDExportField())
->setKey('id')
->setLabel(pht('ID')),
id(new PhabricatorPHIDExportField())
->setKey('phid')
->setLabel(pht('PHID')),
);
$fields = mpull($builtin_fields, null, 'getKey');
$export_fields = $this->newExportFields();
foreach ($export_fields as $export_field) {
$key = $export_field->getKey();
if (isset($fields[$key])) {
throw new Exception(
pht(
'Search engine ("%s") defines an export field with a key ("%s") '.
'that collides with another field. Each field must have a '.
'unique key.',
get_class($this),
$key));
}
$fields[$key] = $export_field;
}
return $fields;
}
final public function newExport(array $objects) {
$objects = array_values($objects);
$n = count($objects);
$maps = array();
foreach ($objects as $object) {
$maps[] = array(
'id' => $object->getID(),
'phid' => $object->getPHID(),
);
}
$export_data = $this->newExportData($objects);
$export_data = array_values($export_data);
if (count($export_data) !== count($objects)) {
throw new Exception(
pht(
'Search engine ("%s") exported the wrong number of objects, '.
'expected %s but got %s.',
get_class($this),
phutil_count($objects),
phutil_count($export_data)));
}
for ($ii = 0; $ii < $n; $ii++) {
$maps[$ii] += $export_data[$ii];
}
return $maps;
} }
protected function newExportFields() { protected function newExportFields() {
return array(); return array();
} }
protected function newExportData(array $objects) {
throw new PhutilMethodNotImplementedException();
}
} }