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 @@ -644,12 +644,14 @@ 'DivinerAtomQuery' => 'applications/diviner/query/DivinerAtomQuery.php', 'DivinerAtomRef' => 'applications/diviner/atom/DivinerAtomRef.php', 'DivinerAtomSearchEngine' => 'applications/diviner/query/DivinerAtomSearchEngine.php', + 'DivinerAtomSearchIndexer' => 'applications/diviner/search/DivinerAtomSearchIndexer.php', 'DivinerAtomizeWorkflow' => 'applications/diviner/workflow/DivinerAtomizeWorkflow.php', 'DivinerAtomizer' => 'applications/diviner/atomizer/DivinerAtomizer.php', 'DivinerBookController' => 'applications/diviner/controller/DivinerBookController.php', 'DivinerBookItemView' => 'applications/diviner/view/DivinerBookItemView.php', 'DivinerBookPHIDType' => 'applications/diviner/phid/DivinerBookPHIDType.php', 'DivinerBookQuery' => 'applications/diviner/query/DivinerBookQuery.php', + 'DivinerBookSearchIndexer' => 'applications/diviner/search/DivinerBookSearchIndexer.php', 'DivinerController' => 'applications/diviner/controller/DivinerController.php', 'DivinerDAO' => 'applications/diviner/storage/DivinerDAO.php', 'DivinerDefaultRenderer' => 'applications/diviner/renderer/DivinerDefaultRenderer.php', @@ -3875,11 +3877,13 @@ 'DivinerAtomPHIDType' => 'PhabricatorPHIDType', 'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DivinerAtomSearchIndexer' => 'PhabricatorSearchDocumentIndexer', 'DivinerAtomizeWorkflow' => 'DivinerWorkflow', 'DivinerBookController' => 'DivinerController', 'DivinerBookItemView' => 'AphrontTagView', 'DivinerBookPHIDType' => 'PhabricatorPHIDType', 'DivinerBookQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DivinerBookSearchIndexer' => 'PhabricatorSearchDocumentIndexer', 'DivinerController' => 'PhabricatorController', 'DivinerDAO' => 'PhabricatorLiskDAO', 'DivinerDefaultRenderer' => 'DivinerRenderer', @@ -3890,6 +3894,7 @@ 'DivinerLiveBook' => array( 'DivinerDAO', 'PhabricatorPolicyInterface', + 'PhabricatorProjectInterface', 'PhabricatorDestructibleInterface', ), 'DivinerLivePublisher' => 'DivinerPublisher', diff --git a/src/applications/diviner/application/PhabricatorDivinerApplication.php b/src/applications/diviner/application/PhabricatorDivinerApplication.php --- a/src/applications/diviner/application/PhabricatorDivinerApplication.php +++ b/src/applications/diviner/application/PhabricatorDivinerApplication.php @@ -58,4 +58,11 @@ ); } + public function getApplicationSearchDocumentTypes() { + return array( + DivinerAtomPHIDType::TYPECONST, + DivinerBookPHIDType::TYPECONST, + ); + } + } diff --git a/src/applications/diviner/phid/DivinerBookPHIDType.php b/src/applications/diviner/phid/DivinerBookPHIDType.php --- a/src/applications/diviner/phid/DivinerBookPHIDType.php +++ b/src/applications/diviner/phid/DivinerBookPHIDType.php @@ -32,7 +32,7 @@ $handle->setName($book->getShortTitle()); $handle->setFullName($book->getTitle()); - $handle->setURI("/diviner/book/{$name}/"); + $handle->setURI("/book/{$name}/"); } } diff --git a/src/applications/diviner/search/DivinerAtomSearchIndexer.php b/src/applications/diviner/search/DivinerAtomSearchIndexer.php new file mode 100644 --- /dev/null +++ b/src/applications/diviner/search/DivinerAtomSearchIndexer.php @@ -0,0 +1,30 @@ +loadDocumentByPHID($phid); + + $doc = $this->newDocument($phid) + ->setDocumentTitle($atom->getName()) + ->setDocumentCreated($atom->getBook()->getDateCreated()) + ->setDocumentModified($atom->getBook()->getDateModified()); + + $doc->addField( + PhabricatorSearchField::FIELD_BODY, + $atom->getSummary()); + + $doc->addRelationship( + PhabricatorSearchRelationship::RELATIONSHIP_BOOK, + $atom->getBookPHID(), + DivinerBookPHIDType::TYPECONST, + $atom->getBook()->getDateCreated()); + + return $doc; + } + +} diff --git a/src/applications/diviner/search/DivinerBookSearchIndexer.php b/src/applications/diviner/search/DivinerBookSearchIndexer.php new file mode 100644 --- /dev/null +++ b/src/applications/diviner/search/DivinerBookSearchIndexer.php @@ -0,0 +1,31 @@ +loadDocumentByPHID($phid); + + $doc = $this->newDocument($phid) + ->setDocumentTitle($book->getTitle()) + ->setDocumentCreated($book->getDateCreated()) + ->setDocumentModified($book->getDateModified()); + + $doc->addField( + PhabricatorSearchField::FIELD_BODY, + $book->getPreface()); + + $doc->addRelationship( + PhabricatorSearchRelationship::RELATIONSHIP_REPOSITORY, + $book->getRepositoryPHID(), + PhabricatorRepositoryRepositoryPHIDType::TYPECONST, + $book->getDateCreated()); + + return $doc; + } + + +} diff --git a/src/applications/search/constants/PhabricatorSearchRelationship.php b/src/applications/search/constants/PhabricatorSearchRelationship.php --- a/src/applications/search/constants/PhabricatorSearchRelationship.php +++ b/src/applications/search/constants/PhabricatorSearchRelationship.php @@ -3,6 +3,7 @@ final class PhabricatorSearchRelationship { const RELATIONSHIP_AUTHOR = 'auth'; + const RELATIONSHIP_BOOK = 'book'; const RELATIONSHIP_REVIEWER = 'revw'; const RELATIONSHIP_SUBSCRIBER = 'subs'; const RELATIONSHIP_COMMENTER = 'comm';