1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-19 12:00:55 +01:00

Provide basic fulltext search for Conpherence

Summary: Ref T3165. This needs more work but does the basics.

Test Plan: {F387514}

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T3165

Differential Revision: https://secure.phabricator.com/D12588
This commit is contained in:
epriestley 2015-04-28 11:43:10 -07:00
parent c6fa4355cc
commit 3c80292295
2 changed files with 33 additions and 1 deletions

View file

@ -17,6 +17,7 @@ final class ConpherenceThreadQuery
private $afterTransactionID;
private $beforeTransactionID;
private $transactionLimit;
private $fulltext;
public function needFilePHIDs($need_file_phids) {
$this->needFilePHIDs = $need_file_phids;
@ -82,6 +83,11 @@ final class ConpherenceThreadQuery
return $this->transactionLimit;
}
public function withFulltext($query) {
$this->fulltext = $query;
return $this;
}
protected function loadPage() {
$table = new ConpherenceThread();
$conn_r = $table->establishConnection('r');
@ -122,7 +128,7 @@ final class ConpherenceThreadQuery
}
protected function buildGroupClause(AphrontDatabaseConnection $conn_r) {
if ($this->participantPHIDs !== null) {
if ($this->participantPHIDs !== null || strlen($this->fulltext)) {
return 'GROUP BY conpherence_thread.id';
} else {
return $this->buildApplicationSearchGroupClause($conn_r);
@ -149,6 +155,12 @@ final class ConpherenceThreadQuery
$viewer->getPHID());
}
if (strlen($this->fulltext)) {
$joins[] = qsprintf(
$conn_r,
'JOIN %T idx ON idx.threadPHID = conpherence_thread.phid',
id(new ConpherenceIndex())->getTableName());
}
$joins[] = $this->buildApplicationSearchJoinClause($conn_r);
return implode(' ', $joins);
@ -196,6 +208,13 @@ final class ConpherenceThreadQuery
(int)$this->isRoom);
}
if (strlen($this->fulltext)) {
$where[] = qsprintf(
$conn_r,
'MATCH(idx.corpus) AGAINST (%s IN BOOLEAN MODE)',
$this->fulltext);
}
$viewer = $this->getViewer();
if ($this->shouldJoinForViewer($viewer)) {
$where[] = qsprintf(

View file

@ -18,6 +18,8 @@ final class ConpherenceThreadSearchEngine
'participantPHIDs',
$this->readUsersFromRequest($request, 'participants'));
$saved->setParameter('fulltext', $request->getStr('fulltext'));
$saved->setParameter(
'threadType',
$request->getStr('threadType'));
@ -34,6 +36,11 @@ final class ConpherenceThreadSearchEngine
$query->withParticipantPHIDs($participant_phids);
}
$fulltext = $saved->getParameter('fulltext');
if (strlen($fulltext)) {
$query->withFulltext($fulltext);
}
$thread_type = $saved->getParameter('threadType');
if (idx($this->getTypeOptions(), $thread_type)) {
switch ($thread_type) {
@ -57,6 +64,7 @@ final class ConpherenceThreadSearchEngine
PhabricatorSavedQuery $saved) {
$participant_phids = $saved->getParameter('participantPHIDs', array());
$fulltext = $saved->getParameter('fulltext');
$form
->appendControl(
@ -65,6 +73,11 @@ final class ConpherenceThreadSearchEngine
->setName('participants')
->setLabel(pht('Participants'))
->setValue($participant_phids))
->appendControl(
id(new AphrontFormTextControl())
->setName('fulltext')
->setLabel(pht('Contains Words'))
->setValue($fulltext))
->appendControl(
id(new AphrontFormSelectControl())
->setLabel(pht('Type'))