Changeset View
Changeset View
Standalone View
Standalone View
src/applications/phriction/typeahead/PhrictionDocumentDatasource.php
- This file was added.
| <?php | |||||
| final class PhrictionDocumentDatasource | |||||
| extends PhabricatorTypeaheadDatasource { | |||||
| public function getBrowseTitle() { | |||||
| return pht('Browse Documents'); | |||||
| } | |||||
| public function getPlaceholderText() { | |||||
| return pht('Type a document name...'); | |||||
| } | |||||
| public function getDatasourceApplicationClass() { | |||||
| return 'PhabricatorPhrictionApplication'; | |||||
| } | |||||
| public function loadResults() { | |||||
| $viewer = $this->getViewer(); | |||||
| $raw_query = $this->getRawQuery(); | |||||
| $engine = id(new PhrictionDocument()) | |||||
| ->newFerretEngine(); | |||||
| $compiler = id(new PhutilSearchQueryCompiler()) | |||||
| ->setEnableFunctions(true); | |||||
| $raw_tokens = $compiler->newTokens($raw_query); | |||||
| $fulltext_tokens = array(); | |||||
| foreach ($raw_tokens as $raw_token) { | |||||
| // This is a little hacky and could maybe be cleaner. We're treating | |||||
| // every search term as though the user had entered "title:dog" insead | |||||
| // of "dog". | |||||
| $alternate_token = PhutilSearchQueryToken::newFromDictionary( | |||||
| array( | |||||
| 'quoted' => $raw_token->isQuoted(), | |||||
| 'value' => $raw_token->getValue(), | |||||
| 'operator' => PhutilSearchQueryCompiler::OPERATOR_SUBSTRING, | |||||
| 'function' => 'title', | |||||
| )); | |||||
| $fulltext_token = id(new PhabricatorFulltextToken()) | |||||
| ->setToken($alternate_token); | |||||
| $fulltext_tokens[] = $fulltext_token; | |||||
| } | |||||
| $documents = id(new PhrictionDocumentQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withFerretConstraint($engine, $fulltext_tokens) | |||||
| ->needContent(true) | |||||
| ->execute(); | |||||
| $results = array(); | |||||
| foreach ($documents as $document) { | |||||
| $content = $document->getContent(); | |||||
| if (!$document->isActive()) { | |||||
| $closed = $document->getStatusDisplayName(); | |||||
| } else { | |||||
| $closed = null; | |||||
| } | |||||
| $slug = $document->getSlug(); | |||||
| $title = $content->getTitle(); | |||||
| $sprite = 'phabricator-search-icon phui-font-fa phui-icon-view fa-book'; | |||||
| $result = id(new PhabricatorTypeaheadResult()) | |||||
| ->setName($title) | |||||
| ->setDisplayName($title) | |||||
| ->setURI($document->getURI()) | |||||
| ->setPHID($document->getPHID()) | |||||
| ->setDisplayType($slug) | |||||
| ->setPriorityType('wiki') | |||||
| ->setImageSprite($sprite) | |||||
| ->setClosed($closed); | |||||
| $results[] = $result; | |||||
| } | |||||
| return $results; | |||||
| } | |||||
| } | |||||