mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 05:50:55 +01:00
Legalpad - add support for querying by contributors
Summary: Fixes T3479 Test Plan: queried for contributors and got good results. tried a complex query with all possible values specified and got results when appropos. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T3479 Differential Revision: https://secure.phabricator.com/D6384
This commit is contained in:
parent
dd3f4fd267
commit
15066e4fa0
2 changed files with 47 additions and 11 deletions
|
@ -9,7 +9,7 @@ final class LegalpadDocumentQuery
|
|||
private $ids;
|
||||
private $phids;
|
||||
private $creatorPHIDs;
|
||||
private $contributorPHIDs; // TODO - T3479
|
||||
private $contributorPHIDs;
|
||||
private $dateCreatedAfter;
|
||||
private $dateCreatedBefore;
|
||||
|
||||
|
@ -62,8 +62,9 @@ final class LegalpadDocumentQuery
|
|||
|
||||
$data = queryfx_all(
|
||||
$conn_r,
|
||||
'SELECT legalpad_document.* FROM %T legalpad_document %Q %Q %Q',
|
||||
'SELECT d.* FROM %T d %Q %Q %Q %Q',
|
||||
$table->getTableName(),
|
||||
$this->buildJoinClause($conn_r),
|
||||
$this->buildWhereClause($conn_r),
|
||||
$this->buildOrderClause($conn_r),
|
||||
$this->buildLimitClause($conn_r));
|
||||
|
@ -89,6 +90,18 @@ final class LegalpadDocumentQuery
|
|||
return $documents;
|
||||
}
|
||||
|
||||
private function buildJoinClause($conn_r) {
|
||||
$joins = array();
|
||||
|
||||
if ($this->contributorPHIDs) {
|
||||
$joins[] = qsprintf(
|
||||
$conn_r,
|
||||
'JOIN edge e ON e.src = d.phid');
|
||||
}
|
||||
|
||||
return implode(' ', $joins);
|
||||
}
|
||||
|
||||
protected function buildWhereClause($conn_r) {
|
||||
$where = array();
|
||||
|
||||
|
@ -97,38 +110,46 @@ final class LegalpadDocumentQuery
|
|||
if ($this->ids) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'id IN (%Ld)',
|
||||
'd.id IN (%Ld)',
|
||||
$this->ids);
|
||||
}
|
||||
|
||||
if ($this->phids) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'phid IN (%Ls)',
|
||||
'd.phid IN (%Ls)',
|
||||
$this->phids);
|
||||
}
|
||||
|
||||
if ($this->creatorPHIDs) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'creatorPHID IN (%Ls)',
|
||||
'd.creatorPHID IN (%Ls)',
|
||||
$this->creatorPHIDs);
|
||||
}
|
||||
|
||||
if ($this->dateCreatedAfter) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'dateCreated >= %d',
|
||||
'd.dateCreated >= %d',
|
||||
$this->dateCreatedAfter);
|
||||
}
|
||||
|
||||
if ($this->dateCreatedBefore) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'dateCreated <= %d',
|
||||
'd.dateCreated <= %d',
|
||||
$this->dateCreatedBefore);
|
||||
}
|
||||
|
||||
if ($this->contributorPHIDs) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'e.type = %s AND e.dst IN (%Ls)',
|
||||
PhabricatorEdgeConfig::TYPE_OBJECT_HAS_CONTRIBUTOR,
|
||||
$this->contributorPHIDs);
|
||||
}
|
||||
|
||||
return $this->formatWhereClause($where);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,10 @@ final class LegalpadDocumentSearchEngine
|
|||
'creatorPHIDs',
|
||||
array_values($request->getArr('creators')));
|
||||
|
||||
$saved->setParameter(
|
||||
'contributorPHIDs',
|
||||
array_values($request->getArr('contributors')));
|
||||
|
||||
$saved->setParameter('createdStart', $request->getStr('createdStart'));
|
||||
$saved->setParameter('createdEnd', $request->getStr('createdEnd'));
|
||||
|
||||
|
@ -22,7 +26,8 @@ final class LegalpadDocumentSearchEngine
|
|||
$query = id(new LegalpadDocumentQuery())
|
||||
->needDocumentBodies(true)
|
||||
->needContributors(true)
|
||||
->withCreatorPHIDs($saved->getParameter('creatorPHIDs', array()));
|
||||
->withCreatorPHIDs($saved->getParameter('creatorPHIDs', array()))
|
||||
->withContributorPHIDs($saved->getParameter('contributorPHIDs', array()));
|
||||
|
||||
$start = $this->parseDateTime($saved->getParameter('createdStart'));
|
||||
$end = $this->parseDateTime($saved->getParameter('createdEnd'));
|
||||
|
@ -41,11 +46,15 @@ final class LegalpadDocumentSearchEngine
|
|||
public function buildSearchForm(
|
||||
AphrontFormView $form,
|
||||
PhabricatorSavedQuery $saved_query) {
|
||||
$phids = $saved_query->getParameter('creatorPHIDs', array());
|
||||
|
||||
$creator_phids = $saved_query->getParameter('creatorPHIDs', array());
|
||||
$contributor_phids = $saved_query->getParameter(
|
||||
'contributorPHIDs', array());
|
||||
$phids = array_merge($creator_phids, $contributor_phids);
|
||||
$handles = id(new PhabricatorObjectHandleData($phids))
|
||||
->setViewer($this->requireViewer())
|
||||
->loadHandles();
|
||||
$creator_tokens = mpull($handles, 'getFullName', 'getPHID');
|
||||
$tokens = mpull($handles, 'getFullName', 'getPHID');
|
||||
|
||||
$form
|
||||
->appendChild(
|
||||
|
@ -53,7 +62,13 @@ final class LegalpadDocumentSearchEngine
|
|||
->setDatasource('/typeahead/common/users/')
|
||||
->setName('creators')
|
||||
->setLabel(pht('Creators'))
|
||||
->setValue($creator_tokens));
|
||||
->setValue(array_select_keys($tokens, $creator_phids)))
|
||||
->appendChild(
|
||||
id(new AphrontFormTokenizerControl())
|
||||
->setDatasource('/typeahead/common/users/')
|
||||
->setName('contributors')
|
||||
->setLabel(pht('Contributors'))
|
||||
->setValue(array_select_keys($tokens, $contributor_phids)));
|
||||
|
||||
$this->buildDateRange(
|
||||
$form,
|
||||
|
|
Loading…
Reference in a new issue