[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PonderQuestionSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Ponder Questions'); 8 } 9 10 public function getApplicationClassName() { 11 return 'PhabricatorPonderApplication'; 12 } 13 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 15 $saved = new PhabricatorSavedQuery(); 16 17 $saved->setParameter( 18 'authorPHIDs', 19 $this->readUsersFromRequest($request, 'authors')); 20 21 $saved->setParameter( 22 'answererPHIDs', 23 $this->readUsersFromRequest($request, 'answerers')); 24 25 $saved->setParameter('status', $request->getStr('status')); 26 27 return $saved; 28 } 29 30 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 31 $query = id(new PonderQuestionQuery()); 32 33 $author_phids = $saved->getParameter('authorPHIDs'); 34 if ($author_phids) { 35 $query->withAuthorPHIDs($author_phids); 36 } 37 38 $answerer_phids = $saved->getParameter('answererPHIDs'); 39 if ($answerer_phids) { 40 $query->withAnswererPHIDs($answerer_phids); 41 } 42 43 $status = $saved->getParameter('status'); 44 if ($status != null) { 45 switch ($status) { 46 case 0: 47 $query->withStatus(PonderQuestionQuery::STATUS_OPEN); 48 break; 49 case 1: 50 $query->withStatus(PonderQuestionQuery::STATUS_CLOSED); 51 break; 52 } 53 } 54 55 return $query; 56 } 57 58 public function buildSearchForm( 59 AphrontFormView $form, 60 PhabricatorSavedQuery $saved_query) { 61 62 $author_phids = $saved_query->getParameter('authorPHIDs', array()); 63 $answerer_phids = $saved_query->getParameter('answererPHIDs', array()); 64 $status = $saved_query->getParameter( 65 'status', PonderQuestionStatus::STATUS_OPEN); 66 67 $phids = array_merge($author_phids, $answerer_phids); 68 $handles = id(new PhabricatorHandleQuery()) 69 ->setViewer($this->requireViewer()) 70 ->withPHIDs($phids) 71 ->execute(); 72 73 $form 74 ->appendChild( 75 id(new AphrontFormTokenizerControl()) 76 ->setDatasource(new PhabricatorPeopleDatasource()) 77 ->setName('authors') 78 ->setLabel(pht('Authors')) 79 ->setValue(array_select_keys($handles, $author_phids))) 80 ->appendChild( 81 id(new AphrontFormTokenizerControl()) 82 ->setDatasource(new PhabricatorPeopleDatasource()) 83 ->setName('answerers') 84 ->setLabel(pht('Answered By')) 85 ->setValue(array_select_keys($handles, $answerer_phids))) 86 ->appendChild( 87 id(new AphrontFormSelectControl()) 88 ->setLabel(pht('Status')) 89 ->setName('status') 90 ->setValue($status) 91 ->setOptions(PonderQuestionStatus::getQuestionStatusMap())); 92 } 93 94 protected function getURI($path) { 95 return '/ponder/'.$path; 96 } 97 98 public function getBuiltinQueryNames() { 99 $names = array( 100 'open' => pht('Open Questions'), 101 'all' => pht('All Questions'), 102 ); 103 104 if ($this->requireViewer()->isLoggedIn()) { 105 $names['authored'] = pht('Authored'); 106 $names['answered'] = pht('Answered'); 107 } 108 109 return $names; 110 } 111 112 public function buildSavedQueryFromBuiltin($query_key) { 113 114 $query = $this->newSavedQuery(); 115 $query->setQueryKey($query_key); 116 117 switch ($query_key) { 118 case 'all': 119 return $query; 120 case 'open': 121 return $query->setParameter('status', PonderQuestionQuery::STATUS_OPEN); 122 case 'authored': 123 return $query->setParameter( 124 'authorPHIDs', 125 array($this->requireViewer()->getPHID())); 126 case 'answered': 127 return $query->setParameter( 128 'answererPHIDs', 129 array($this->requireViewer()->getPHID())); 130 } 131 132 return parent::buildSavedQueryFromBuiltin($query_key); 133 } 134 135 protected function getRequiredHandlePHIDsForResultList( 136 array $questions, 137 PhabricatorSavedQuery $query) { 138 return mpull($questions, 'getAuthorPHID'); 139 } 140 141 protected function renderResultList( 142 array $questions, 143 PhabricatorSavedQuery $query, 144 array $handles) { 145 assert_instances_of($questions, 'PonderQuestion'); 146 147 $viewer = $this->requireViewer(); 148 149 $view = id(new PHUIObjectItemListView()) 150 ->setUser($viewer); 151 152 foreach ($questions as $question) { 153 $item = new PHUIObjectItemView(); 154 $item->setObjectName('Q'.$question->getID()); 155 $item->setHeader($question->getTitle()); 156 $item->setHref('/Q'.$question->getID()); 157 $item->setObject($question); 158 $item->setBarColor( 159 PonderQuestionStatus::getQuestionStatusTagColor( 160 $question->getStatus())); 161 162 $created_date = phabricator_date($question->getDateCreated(), $viewer); 163 $item->addIcon('none', $created_date); 164 $item->addByline( 165 pht( 166 'Asked by %s', 167 $handles[$question->getAuthorPHID()]->renderLink())); 168 169 $item->addAttribute( 170 pht('%d Answer(s)', $question->getAnswerCount())); 171 172 $view->addItem($item); 173 } 174 175 return $view; 176 } 177 178 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |