1
0
Fork 0
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:
Bob Trahan 2013-07-08 13:37:36 -07:00
parent dd3f4fd267
commit 15066e4fa0
2 changed files with 47 additions and 11 deletions

View file

@ -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);
}

View file

@ -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,