Path: blob/master/src/applications/herald/query/HeraldTranscriptSearchEngine.php
12256 views
<?php12final class HeraldTranscriptSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Herald Transcripts');7}89public function getApplicationClassName() {10return 'PhabricatorHeraldApplication';11}1213public function canUseInPanelContext() {14return false;15}1617public function buildSavedQueryFromRequest(AphrontRequest $request) {18$saved = new PhabricatorSavedQuery();1920$object_monograms = $request->getStrList('objectMonograms');21$saved->setParameter('objectMonograms', $object_monograms);2223$ids = $request->getStrList('ids');24foreach ($ids as $key => $id) {25if (!$id || !is_numeric($id)) {26unset($ids[$key]);27} else {28$ids[$key] = $id;29}30}31$saved->setParameter('ids', $ids);3233return $saved;34}3536public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {37$query = id(new HeraldTranscriptQuery());3839$object_monograms = $saved->getParameter('objectMonograms');40if ($object_monograms) {41$objects = id(new PhabricatorObjectQuery())42->setViewer($this->requireViewer())43->withNames($object_monograms)44->execute();45$query->withObjectPHIDs(mpull($objects, 'getPHID'));46}4748$ids = $saved->getParameter('ids');49if ($ids) {50$query->withIDs($ids);51}5253return $query;54}5556public function buildSearchForm(57AphrontFormView $form,58PhabricatorSavedQuery $saved) {5960$object_monograms = $saved->getParameter('objectMonograms', array());61$ids = $saved->getParameter('ids', array());6263$form64->appendChild(65id(new AphrontFormTextControl())66->setName('objectMonograms')67->setLabel(pht('Object Monograms'))68->setValue(implode(', ', $object_monograms)))69->appendChild(70id(new AphrontFormTextControl())71->setName('ids')72->setLabel(pht('Transcript IDs'))73->setValue(implode(', ', $ids)));74}7576protected function getURI($path) {77return '/herald/transcript/'.$path;78}7980protected function getBuiltinQueryNames() {81return array(82'all' => pht('All Transcripts'),83);84}8586public function buildSavedQueryFromBuiltin($query_key) {87$query = $this->newSavedQuery();88$query->setQueryKey($query_key);8990$viewer_phid = $this->requireViewer()->getPHID();9192switch ($query_key) {93case 'all':94return $query;95}9697return parent::buildSavedQueryFromBuiltin($query_key);98}99100protected function getRequiredHandlePHIDsForResultList(101array $transcripts,102PhabricatorSavedQuery $query) {103return mpull($transcripts, 'getObjectPHID');104}105106protected function renderResultList(107array $transcripts,108PhabricatorSavedQuery $query,109array $handles) {110assert_instances_of($transcripts, 'HeraldTranscript');111112$viewer = $this->requireViewer();113114$list = new PHUIObjectItemListView();115foreach ($transcripts as $xscript) {116$view_href = phutil_tag(117'a',118array(119'href' => '/herald/transcript/'.$xscript->getID().'/',120),121pht('View Full Transcript'));122123$item = new PHUIObjectItemView();124$item->setObjectName($xscript->getID());125$item->setHeader($view_href);126if ($xscript->getDryRun()) {127$item->addAttribute(pht('Dry Run'));128}129$item->addAttribute($handles[$xscript->getObjectPHID()]->renderLink());130$item->addAttribute(131pht('%s ms', new PhutilNumber((int)(1000 * $xscript->getDuration()))));132$item->addIcon(133'none',134phabricator_datetime($xscript->getTime(), $viewer));135136$list->addItem($item);137}138139$result = new PhabricatorApplicationSearchResultView();140$result->setObjectList($list);141$result->setNoDataString(pht('No transcripts found.'));142143return $result;144}145146}147148149