Support export of feed transactions to CSV/Excel/etc
Summary: Depends on D20534. Ref T13294. Add export support so you can dump these out, print them on paper, notarize them, and store them in a box under a tree or whatever. Test Plan: Exported transactions to a flat file, read the file. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13294 Differential Revision: https://secure.phabricator.com/D20535
This commit is contained in:
parent
16537f7b32
commit
2f38695768
|
@ -30,6 +30,14 @@ final class PhabricatorFeedTransactionQuery
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function newResultObject() {
|
||||||
|
// Return an arbitrary valid transaction object. The actual query may
|
||||||
|
// return objects of any subclass of "ApplicationTransaction" when it is
|
||||||
|
// executed, but we need to pick something concrete here to make some
|
||||||
|
// integrations work (like automatic handling of PHIDs in data export).
|
||||||
|
return new PhabricatorUserTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
protected function loadPage() {
|
protected function loadPage() {
|
||||||
$queries = $this->newTransactionQueries();
|
$queries = $this->newTransactionQueries();
|
||||||
|
|
||||||
|
|
|
@ -151,4 +151,80 @@ final class PhabricatorFeedTransactionSearchEngine
|
||||||
->setTable($table);
|
->setTable($table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function newExportFields() {
|
||||||
|
$fields = array(
|
||||||
|
id(new PhabricatorPHIDExportField())
|
||||||
|
->setKey('authorPHID')
|
||||||
|
->setLabel(pht('Author PHID')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('author')
|
||||||
|
->setLabel(pht('Author')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('objectType')
|
||||||
|
->setLabel(pht('Object Type')),
|
||||||
|
id(new PhabricatorPHIDExportField())
|
||||||
|
->setKey('objectPHID')
|
||||||
|
->setLabel(pht('Object PHID')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('objectName')
|
||||||
|
->setLabel(pht('Object Name')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('description')
|
||||||
|
->setLabel(pht('Description')),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function newExportData(array $xactions) {
|
||||||
|
$viewer = $this->requireViewer();
|
||||||
|
|
||||||
|
$phids = array();
|
||||||
|
foreach ($xactions as $xaction) {
|
||||||
|
$phids[] = $xaction->getAuthorPHID();
|
||||||
|
$phids[] = $xaction->getObjectPHID();
|
||||||
|
}
|
||||||
|
$handles = $viewer->loadHandles($phids);
|
||||||
|
|
||||||
|
$export = array();
|
||||||
|
foreach ($xactions as $xaction) {
|
||||||
|
$xaction_phid = $xaction->getPHID();
|
||||||
|
|
||||||
|
$author_phid = $xaction->getAuthorPHID();
|
||||||
|
if ($author_phid) {
|
||||||
|
$author_name = $handles[$author_phid]->getName();
|
||||||
|
} else {
|
||||||
|
$author_name = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$object_phid = $xaction->getObjectPHID();
|
||||||
|
if ($object_phid) {
|
||||||
|
$object_name = $handles[$object_phid]->getName();
|
||||||
|
} else {
|
||||||
|
$object_name = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$old_target = $xaction->getRenderingTarget();
|
||||||
|
try {
|
||||||
|
$description = $xaction
|
||||||
|
->setRenderingTarget(PhabricatorApplicationTransaction::TARGET_TEXT)
|
||||||
|
->getTitle();
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
$description = null;
|
||||||
|
}
|
||||||
|
$xaction->setRenderingTarget($old_target);
|
||||||
|
|
||||||
|
$export[] = array(
|
||||||
|
'authorPHID' => $author_phid,
|
||||||
|
'author' => $author_name,
|
||||||
|
'objectType' => phid_get_subtype($xaction_phid),
|
||||||
|
'objectPHID' => $object_phid,
|
||||||
|
'objectName' => $object_name,
|
||||||
|
'description' => $description,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $export;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue