diff --git a/resources/sql/autopatches/20190703.polls.01.ferret.doc.sql b/resources/sql/autopatches/20190703.polls.01.ferret.doc.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20190703.polls.01.ferret.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_slowvote.slowvote_poll_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190703.polls.02.ferret.field.sql b/resources/sql/autopatches/20190703.polls.02.ferret.field.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20190703.polls.02.ferret.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_slowvote.slowvote_poll_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190703.polls.03.ferret.ngrams.sql b/resources/sql/autopatches/20190703.polls.03.ferret.ngrams.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20190703.polls.03.ferret.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_slowvote.slowvote_poll_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190703.polls.04.ferret.cngrams.sql b/resources/sql/autopatches/20190703.polls.04.ferret.cngrams.sql new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20190703.polls.04.ferret.cngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_slowvote.slowvote_poll_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -4642,6 +4642,8 @@ 'PhabricatorSlowvoteOption' => 'applications/slowvote/storage/PhabricatorSlowvoteOption.php', 'PhabricatorSlowvotePoll' => 'applications/slowvote/storage/PhabricatorSlowvotePoll.php', 'PhabricatorSlowvotePollController' => 'applications/slowvote/controller/PhabricatorSlowvotePollController.php', + 'PhabricatorSlowvotePollFerretEngine' => 'applications/slowvote/engine/PhabricatorSlowvotePollFerretEngine.php', + 'PhabricatorSlowvotePollFulltextEngine' => 'applications/slowvote/engine/PhabricatorSlowvotePollFulltextEngine.php', 'PhabricatorSlowvotePollPHIDType' => 'applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php', 'PhabricatorSlowvoteQuery' => 'applications/slowvote/query/PhabricatorSlowvoteQuery.php', 'PhabricatorSlowvoteQuestionTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteQuestionTransaction.php', @@ -11013,8 +11015,12 @@ 'PhabricatorProjectInterface', 'PhabricatorDestructibleInterface', 'PhabricatorSpacesInterface', + 'PhabricatorFerretInterface', + 'PhabricatorFulltextInterface', ), 'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController', + 'PhabricatorSlowvotePollFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorSlowvotePollFulltextEngine' => 'PhabricatorFulltextEngine', 'PhabricatorSlowvotePollPHIDType' => 'PhabricatorPHIDType', 'PhabricatorSlowvoteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorSlowvoteQuestionTransaction' => 'PhabricatorSlowvoteTransactionType', diff --git a/src/applications/slowvote/editor/PhabricatorSlowvoteEditor.php b/src/applications/slowvote/editor/PhabricatorSlowvoteEditor.php --- a/src/applications/slowvote/editor/PhabricatorSlowvoteEditor.php +++ b/src/applications/slowvote/editor/PhabricatorSlowvoteEditor.php @@ -92,4 +92,8 @@ return true; } + protected function supportsSearch() { + return true; + } + } diff --git a/src/applications/slowvote/engine/PhabricatorSlowvotePollFerretEngine.php b/src/applications/slowvote/engine/PhabricatorSlowvotePollFerretEngine.php new file mode 100644 --- /dev/null +++ b/src/applications/slowvote/engine/PhabricatorSlowvotePollFerretEngine.php @@ -0,0 +1,18 @@ +setDocumentTitle($poll->getQuestion()); + + $document->addRelationship( + $poll->getIsClosed() + ? PhabricatorSearchRelationship::RELATIONSHIP_OPEN + : PhabricatorSearchRelationship::RELATIONSHIP_CLOSED, + $poll->getPHID(), + PhabricatorSlowvotePollPHIDType::TYPECONST, + PhabricatorTime::getNow()); + + $document->addField( + PhabricatorSearchDocumentFieldType::FIELD_BODY, + $poll->getDescription()); + + $document->addRelationship( + PhabricatorSearchRelationship::RELATIONSHIP_AUTHOR, + $poll->getAuthorPHID(), + PhabricatorPeopleUserPHIDType::TYPECONST, + $poll->getDateCreated()); + } + +} diff --git a/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php b/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php --- a/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php +++ b/src/applications/slowvote/storage/PhabricatorSlowvotePoll.php @@ -9,7 +9,9 @@ PhabricatorTokenReceiverInterface, PhabricatorProjectInterface, PhabricatorDestructibleInterface, - PhabricatorSpacesInterface { + PhabricatorSpacesInterface, + PhabricatorFerretInterface, + PhabricatorFulltextInterface { const RESPONSES_VISIBLE = 0; const RESPONSES_VOTERS = 1; @@ -202,10 +204,23 @@ $this->saveTransaction(); } - /* -( PhabricatorSpacesInterface )--------------------------------------- */ +/* -( PhabricatorSpacesInterface )----------------------------------------- */ public function getSpacePHID() { return $this->spacePHID; } +/* -( PhabricatorFerretInterface )----------------------------------------- */ + + + public function newFerretEngine() { + return new PhabricatorSlowvotePollFerretEngine(); + } + +/* -( PhabricatorFulltextInterface )--------------------------------------- */ + + public function newFulltextEngine() { + return new PhabricatorSlowvotePollFulltextEngine(); + } + }