Improve browsability of Projects query

Summary:
Ref T5750. Same deal as D12427, but for projects.

(As before, mostly making the empty/browse view work instead of return nothing.)

Test Plan: {F372353}

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T5750

Differential Revision: https://secure.phabricator.com/D12428
This commit is contained in:
epriestley
2015-04-15 11:49:07 -07:00
parent fd60a739c1
commit c8dc11d81a
3 changed files with 26 additions and 29 deletions

View File

@@ -9,7 +9,7 @@ final class PhabricatorProjectQuery
private $slugs;
private $phrictionSlugs;
private $names;
private $datasourceQuery;
private $nameTokens;
private $icons;
private $colors;
@@ -60,8 +60,8 @@ final class PhabricatorProjectQuery
return $this;
}
public function withDatasourceQuery($string) {
$this->datasourceQuery = $string;
public function withNameTokens(array $tokens) {
$this->nameTokens = array_values($tokens);
return $this;
}
@@ -329,7 +329,7 @@ final class PhabricatorProjectQuery
}
private function buildGroupClause($conn_r) {
if ($this->memberPHIDs || $this->datasourceQuery) {
if ($this->memberPHIDs || $this->nameTokens) {
return 'GROUP BY p.id';
} else {
return $this->buildApplicationSearchGroupClause($conn_r);
@@ -363,23 +363,18 @@ final class PhabricatorProjectQuery
id(new PhabricatorProjectSlug())->getTableName());
}
if ($this->datasourceQuery !== null) {
$tokens = PhabricatorTypeaheadDatasource::tokenizeString(
$this->datasourceQuery);
if (!$tokens) {
throw new PhabricatorEmptyQueryException();
if ($this->nameTokens !== null) {
foreach ($this->nameTokens as $key => $token) {
$token_table = 'token_'.$key;
$joins[] = qsprintf(
$conn_r,
'JOIN %T %T ON %T.projectID = p.id AND %T.token LIKE %>',
PhabricatorProject::TABLE_DATASOURCE_TOKEN,
$token_table,
$token_table,
$token_table,
$token);
}
$likes = array();
foreach ($tokens as $token) {
$likes[] = qsprintf($conn_r, 'token.token LIKE %>', $token);
}
$joins[] = qsprintf(
$conn_r,
'JOIN %T token ON token.projectID = p.id AND (%Q)',
PhabricatorProject::TABLE_DATASOURCE_TOKEN,
'('.implode(') OR (', $likes).')');
}
$joins[] = $this->buildApplicationSearchJoinClause($conn_r);