mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 22:40:55 +01:00
Add Projects to Ponder Search View
Summary: Ref T3578 Allows display of projects if available on individual ponder search results. Test Plan: Added projects to my questions, see them display on search results. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T3578 Differential Revision: https://secure.phabricator.com/D13793
This commit is contained in:
parent
135d0c9ee7
commit
fdc1662bfd
4 changed files with 66 additions and 2 deletions
|
@ -8,6 +8,8 @@ final class PonderQuestionQuery
|
||||||
private $authorPHIDs;
|
private $authorPHIDs;
|
||||||
private $answererPHIDs;
|
private $answererPHIDs;
|
||||||
|
|
||||||
|
private $needProjectPHIDs;
|
||||||
|
|
||||||
private $status = 'status-any';
|
private $status = 'status-any';
|
||||||
|
|
||||||
const STATUS_ANY = 'status-any';
|
const STATUS_ANY = 'status-any';
|
||||||
|
@ -52,6 +54,11 @@ final class PonderQuestionQuery
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function needProjectPHIDs($need_projects) {
|
||||||
|
$this->needProjectPHIDs = $need_projects;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
|
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
|
||||||
$where = parent::buildWhereClauseParts($conn);
|
$where = parent::buildWhereClauseParts($conn);
|
||||||
|
|
||||||
|
@ -109,6 +116,9 @@ final class PonderQuestionQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function willFilterPage(array $questions) {
|
protected function willFilterPage(array $questions) {
|
||||||
|
|
||||||
|
$phids = mpull($questions, 'getPHID');
|
||||||
|
|
||||||
if ($this->needAnswers) {
|
if ($this->needAnswers) {
|
||||||
$aquery = id(new PonderAnswerQuery())
|
$aquery = id(new PonderAnswerQuery())
|
||||||
->setViewer($this->getViewer())
|
->setViewer($this->getViewer())
|
||||||
|
@ -133,7 +143,7 @@ final class PonderQuestionQuery
|
||||||
|
|
||||||
$etype = PonderQuestionHasVotingUserEdgeType::EDGECONST;
|
$etype = PonderQuestionHasVotingUserEdgeType::EDGECONST;
|
||||||
$edges = id(new PhabricatorEdgeQuery())
|
$edges = id(new PhabricatorEdgeQuery())
|
||||||
->withSourcePHIDs(mpull($questions, 'getPHID'))
|
->withSourcePHIDs($phids)
|
||||||
->withDestinationPHIDs(array($viewer_phid))
|
->withDestinationPHIDs(array($viewer_phid))
|
||||||
->withEdgeTypes(array($etype))
|
->withEdgeTypes(array($etype))
|
||||||
->needEdgeData(true)
|
->needEdgeData(true)
|
||||||
|
@ -148,6 +158,22 @@ final class PonderQuestionQuery
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->needProjectPHIDs) {
|
||||||
|
$edge_query = id(new PhabricatorEdgeQuery())
|
||||||
|
->withSourcePHIDs($phids)
|
||||||
|
->withEdgeTypes(
|
||||||
|
array(
|
||||||
|
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
|
||||||
|
));
|
||||||
|
$edge_query->execute();
|
||||||
|
|
||||||
|
foreach ($questions as $question) {
|
||||||
|
$project_phids = $edge_query->getDestinationPHIDs(
|
||||||
|
array($question->getPHID()));
|
||||||
|
$question->attachProjectPHIDs($project_phids);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $questions;
|
return $questions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ final class PonderQuestionSearchEngine
|
||||||
}
|
}
|
||||||
|
|
||||||
public function newQuery() {
|
public function newQuery() {
|
||||||
return new PonderQuestionQuery();
|
return id(new PonderQuestionQuery())
|
||||||
|
->needProjectPHIDs(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildQueryFromParameters(array $map) {
|
protected function buildQueryFromParameters(array $map) {
|
||||||
|
@ -112,6 +113,18 @@ final class PonderQuestionSearchEngine
|
||||||
|
|
||||||
$viewer = $this->requireViewer();
|
$viewer = $this->requireViewer();
|
||||||
|
|
||||||
|
$proj_phids = array();
|
||||||
|
foreach ($questions as $question) {
|
||||||
|
foreach ($question->getProjectPHIDs() as $project_phid) {
|
||||||
|
$proj_phids[] = $project_phid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$proj_handles = id(new PhabricatorHandleQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withPHIDs($proj_phids)
|
||||||
|
->execute();
|
||||||
|
|
||||||
$view = id(new PHUIObjectItemListView())
|
$view = id(new PHUIObjectItemListView())
|
||||||
->setUser($viewer);
|
->setUser($viewer);
|
||||||
|
|
||||||
|
@ -129,6 +142,10 @@ final class PonderQuestionSearchEngine
|
||||||
$item->setObject($question);
|
$item->setObject($question);
|
||||||
$item->setStatusIcon($icon.' '.$color, $full_status);
|
$item->setStatusIcon($icon.' '.$color, $full_status);
|
||||||
|
|
||||||
|
$project_handles = array_select_keys(
|
||||||
|
$proj_handles,
|
||||||
|
$question->getProjectPHIDs());
|
||||||
|
|
||||||
$created_date = phabricator_date($question->getDateCreated(), $viewer);
|
$created_date = phabricator_date($question->getDateCreated(), $viewer);
|
||||||
$item->addIcon('none', $created_date);
|
$item->addIcon('none', $created_date);
|
||||||
$item->addByline(
|
$item->addByline(
|
||||||
|
@ -139,6 +156,14 @@ final class PonderQuestionSearchEngine
|
||||||
$item->addAttribute(
|
$item->addAttribute(
|
||||||
pht('%d Answer(s)', $question->getAnswerCount()));
|
pht('%d Answer(s)', $question->getAnswerCount()));
|
||||||
|
|
||||||
|
if ($project_handles) {
|
||||||
|
$item->addAttribute(
|
||||||
|
id(new PHUIHandleTagListView())
|
||||||
|
->setLimit(4)
|
||||||
|
->setSlim(true)
|
||||||
|
->setHandles($project_handles));
|
||||||
|
}
|
||||||
|
|
||||||
$view->addItem($item);
|
$view->addItem($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@ final class PonderQuestion extends PonderDAO
|
||||||
private $vote;
|
private $vote;
|
||||||
private $comments;
|
private $comments;
|
||||||
|
|
||||||
|
private $projectPHIDs = self::ATTACHABLE;
|
||||||
|
|
||||||
public static function initializeNewQuestion(PhabricatorUser $actor) {
|
public static function initializeNewQuestion(PhabricatorUser $actor) {
|
||||||
$app = id(new PhabricatorApplicationQuery())
|
$app = id(new PhabricatorApplicationQuery())
|
||||||
->setViewer($actor)
|
->setViewer($actor)
|
||||||
|
@ -164,6 +166,15 @@ final class PonderQuestion extends PonderDAO
|
||||||
return $this->answers;
|
return $this->answers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getProjectPHIDs() {
|
||||||
|
return $this->assertAttached($this->projectPHIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function attachProjectPHIDs(array $phids) {
|
||||||
|
$this->projectPHIDs = $phids;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function getMarkupField() {
|
public function getMarkupField() {
|
||||||
return self::MARKUP_FIELD_CONTENT;
|
return self::MARKUP_FIELD_CONTENT;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,8 @@ final class PhabricatorUSEnglishTranslation
|
||||||
'%d path(s)' => array('%d path', '%d paths'),
|
'%d path(s)' => array('%d path', '%d paths'),
|
||||||
'%d diff(s)' => array('%d diff', '%d diffs'),
|
'%d diff(s)' => array('%d diff', '%d diffs'),
|
||||||
|
|
||||||
|
'%d Answer(s)' => array('%d Answer', '%d Answers'),
|
||||||
|
|
||||||
'%s DIFF LINK(S)' => array('DIFF LINK', 'DIFF LINKS'),
|
'%s DIFF LINK(S)' => array('DIFF LINK', 'DIFF LINKS'),
|
||||||
'You successfully created %d diff(s).' => array(
|
'You successfully created %d diff(s).' => array(
|
||||||
'You successfully created %d diff.',
|
'You successfully created %d diff.',
|
||||||
|
|
Loading…
Reference in a new issue