mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 16:52: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:
parent
1db281bcd1
commit
213eb8e93d
4 changed files with 66 additions and 30 deletions
|
@ -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,
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue