Path: blob/master/src/applications/paste/query/PhabricatorPasteSearchEngine.php
12241 views
<?php12final class PhabricatorPasteSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Pastes');7}89public function getApplicationClassName() {10return 'PhabricatorPasteApplication';11}1213public function newQuery() {14return id(new PhabricatorPasteQuery())15->needSnippets(true);16}1718protected function buildQueryFromParameters(array $map) {19$query = $this->newQuery();2021if ($map['authorPHIDs']) {22$query->withAuthorPHIDs($map['authorPHIDs']);23}2425if ($map['languages']) {26$query->withLanguages($map['languages']);27}2829if ($map['createdStart']) {30$query->withDateCreatedAfter($map['createdStart']);31}3233if ($map['createdEnd']) {34$query->withDateCreatedBefore($map['createdEnd']);35}3637if ($map['statuses']) {38$query->withStatuses($map['statuses']);39}4041return $query;42}4344protected function buildCustomSearchFields() {45return array(46id(new PhabricatorUsersSearchField())47->setAliases(array('authors'))48->setKey('authorPHIDs')49->setConduitKey('authors')50->setLabel(pht('Authors'))51->setDescription(52pht('Search for pastes with specific authors.')),53id(new PhabricatorSearchStringListField())54->setKey('languages')55->setLabel(pht('Languages'))56->setDescription(57pht('Search for pastes highlighted in specific languages.')),58id(new PhabricatorSearchDateField())59->setKey('createdStart')60->setLabel(pht('Created After'))61->setDescription(62pht('Search for pastes created after a given time.')),63id(new PhabricatorSearchDateField())64->setKey('createdEnd')65->setLabel(pht('Created Before'))66->setDescription(67pht('Search for pastes created before a given time.')),68id(new PhabricatorSearchCheckboxesField())69->setKey('statuses')70->setLabel(pht('Status'))71->setDescription(72pht('Search for archived or active pastes.'))73->setOptions(74id(new PhabricatorPaste())75->getStatusNameMap()),76);77}7879protected function getDefaultFieldOrder() {80return array(81'...',82'createdStart',83'createdEnd',84);85}8687protected function getURI($path) {88return '/paste/'.$path;89}9091protected function getBuiltinQueryNames() {92$names = array(93'active' => pht('Active Pastes'),94'all' => pht('All Pastes'),95);9697if ($this->requireViewer()->isLoggedIn()) {98$names['authored'] = pht('Authored');99}100101return $names;102}103104public function buildSavedQueryFromBuiltin($query_key) {105106$query = $this->newSavedQuery();107$query->setQueryKey($query_key);108109switch ($query_key) {110case 'active':111return $query->setParameter(112'statuses',113array(114PhabricatorPaste::STATUS_ACTIVE,115));116case 'all':117return $query;118case 'authored':119return $query->setParameter(120'authorPHIDs',121array($this->requireViewer()->getPHID()));122}123124return parent::buildSavedQueryFromBuiltin($query_key);125}126127protected function getRequiredHandlePHIDsForResultList(128array $pastes,129PhabricatorSavedQuery $query) {130return mpull($pastes, 'getAuthorPHID');131}132133protected function renderResultList(134array $pastes,135PhabricatorSavedQuery $query,136array $handles) {137assert_instances_of($pastes, 'PhabricatorPaste');138139$viewer = $this->requireViewer();140141$lang_map = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');142143$list = new PHUIObjectItemListView();144$list->setUser($viewer);145foreach ($pastes as $paste) {146$created = phabricator_date($paste->getDateCreated(), $viewer);147$author = $handles[$paste->getAuthorPHID()]->renderLink();148149$snippet_type = $paste->getSnippet()->getType();150$lines = phutil_split_lines($paste->getSnippet()->getContent());151152$preview = id(new PhabricatorSourceCodeView())153->setLines($lines)154->setTruncatedFirstBytes(155$snippet_type == PhabricatorPasteSnippet::FIRST_BYTES)156->setTruncatedFirstLines(157$snippet_type == PhabricatorPasteSnippet::FIRST_LINES)158->setURI(new PhutilURI($paste->getURI()));159160$source_code = phutil_tag(161'div',162array(163'class' => 'phabricator-source-code-summary',164),165$preview);166167$created = phabricator_datetime($paste->getDateCreated(), $viewer);168$line_count = $paste->getSnippet()->getContentLineCount();169$line_count = pht(170'%s Line(s)',171new PhutilNumber($line_count));172173$title = nonempty($paste->getTitle(), pht('(An Untitled Masterwork)'));174175$item = id(new PHUIObjectItemView())176->setObjectName('P'.$paste->getID())177->setHeader($title)178->setHref('/P'.$paste->getID())179->setObject($paste)180->addByline(pht('Author: %s', $author))181->addIcon('none', $created)182->addIcon('none', $line_count)183->appendChild($source_code);184185if ($paste->isArchived()) {186$item->setDisabled(true);187}188189$lang_name = $paste->getLanguage();190if ($lang_name) {191$lang_name = idx($lang_map, $lang_name, $lang_name);192$item->addIcon('none', $lang_name);193}194195$list->addItem($item);196}197198$result = new PhabricatorApplicationSearchResultView();199$result->setObjectList($list);200$result->setNoDataString(pht('No pastes found.'));201202return $result;203}204205protected function getNewUserBody() {206$viewer = $this->requireViewer();207208$create_button = id(new PhabricatorPasteEditEngine())209->setViewer($viewer)210->newNUXButton(pht('Create a Paste'));211212$icon = $this->getApplication()->getIcon();213$app_name = $this->getApplication()->getName();214$view = id(new PHUIBigInfoView())215->setIcon($icon)216->setTitle(pht('Welcome to %s', $app_name))217->setDescription(218pht('Store, share, and embed snippets of code.'))219->addAction($create_button);220221return $view;222}223}224225226