[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhrequentSearchEngine extends PhabricatorApplicationSearchEngine { 4 5 public function getResultTypeDescription() { 6 return pht('Phrequent Time'); 7 } 8 9 public function getApplicationClassName() { 10 return 'PhabricatorPhrequentApplication'; 11 } 12 13 public function getPageSize(PhabricatorSavedQuery $saved) { 14 return $saved->getParameter('limit', 1000); 15 } 16 17 public function buildSavedQueryFromRequest(AphrontRequest $request) { 18 $saved = new PhabricatorSavedQuery(); 19 20 $saved->setParameter( 21 'userPHIDs', 22 $this->readUsersFromRequest($request, 'users')); 23 24 $saved->setParameter('ended', $request->getStr('ended')); 25 26 $saved->setParameter('order', $request->getStr('order')); 27 28 return $saved; 29 } 30 31 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 32 $query = id(new PhrequentUserTimeQuery()) 33 ->needPreemptingEvents(true); 34 35 $user_phids = $saved->getParameter('userPHIDs'); 36 if ($user_phids) { 37 $query->withUserPHIDs($user_phids); 38 } 39 40 $ended = $saved->getParameter('ended'); 41 if ($ended != null) { 42 $query->withEnded($ended); 43 } 44 45 $order = $saved->getParameter('order'); 46 if ($order != null) { 47 $query->setOrder($order); 48 } 49 50 return $query; 51 } 52 53 public function buildSearchForm( 54 AphrontFormView $form, 55 PhabricatorSavedQuery $saved_query) { 56 57 $user_phids = $saved_query->getParameter('userPHIDs', array()); 58 $ended = $saved_query->getParameter( 59 'ended', PhrequentUserTimeQuery::ENDED_ALL); 60 $order = $saved_query->getParameter( 61 'order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); 62 63 $phids = array_merge($user_phids); 64 $handles = id(new PhabricatorHandleQuery()) 65 ->setViewer($this->requireViewer()) 66 ->withPHIDs($phids) 67 ->execute(); 68 69 $form 70 ->appendChild( 71 id(new AphrontFormTokenizerControl()) 72 ->setDatasource(new PhabricatorPeopleDatasource()) 73 ->setName('users') 74 ->setLabel(pht('Users')) 75 ->setValue($handles)) 76 ->appendChild( 77 id(new AphrontFormSelectControl()) 78 ->setLabel(pht('Ended')) 79 ->setName('ended') 80 ->setValue($ended) 81 ->setOptions(PhrequentUserTimeQuery::getEndedSearchOptions())) 82 ->appendChild( 83 id(new AphrontFormSelectControl()) 84 ->setLabel(pht('Order')) 85 ->setName('order') 86 ->setValue($order) 87 ->setOptions(PhrequentUserTimeQuery::getOrderSearchOptions())); 88 } 89 90 protected function getURI($path) { 91 return '/phrequent/'.$path; 92 } 93 94 public function getBuiltinQueryNames() { 95 return array( 96 'tracking' => pht('Currently Tracking'), 97 'all' => pht('All Tracked'), 98 ); 99 } 100 101 public function buildSavedQueryFromBuiltin($query_key) { 102 $query = $this->newSavedQuery(); 103 $query->setQueryKey($query_key); 104 105 switch ($query_key) { 106 case 'all': 107 return $query 108 ->setParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); 109 case 'tracking': 110 return $query 111 ->setParameter('ended', PhrequentUserTimeQuery::ENDED_NO) 112 ->setParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); 113 } 114 115 return parent::buildSavedQueryFromBuiltin($query_key); 116 } 117 118 protected function getRequiredHandlePHIDsForResultList( 119 array $usertimes, 120 PhabricatorSavedQuery $query) { 121 return array_mergev( 122 array( 123 mpull($usertimes, 'getUserPHID'), 124 mpull($usertimes, 'getObjectPHID'), 125 )); 126 } 127 128 protected function renderResultList( 129 array $usertimes, 130 PhabricatorSavedQuery $query, 131 array $handles) { 132 assert_instances_of($usertimes, 'PhrequentUserTime'); 133 $viewer = $this->requireViewer(); 134 135 $view = id(new PHUIObjectItemListView()) 136 ->setUser($viewer); 137 138 foreach ($usertimes as $usertime) { 139 $item = new PHUIObjectItemView(); 140 if ($usertime->getObjectPHID() === null) { 141 $item->setHeader($usertime->getNote()); 142 } else { 143 $obj = $handles[$usertime->getObjectPHID()]; 144 $item->setHeader($obj->getLinkName()); 145 $item->setHref($obj->getURI()); 146 } 147 $item->setObject($usertime); 148 149 $item->addByline( 150 pht( 151 'Tracked: %s', 152 $handles[$usertime->getUserPHID()]->renderLink())); 153 154 $started_date = phabricator_date($usertime->getDateStarted(), $viewer); 155 $item->addIcon('none', $started_date); 156 157 $block = new PhrequentTimeBlock(array($usertime)); 158 $time_spent = $block->getTimeSpentOnObject( 159 $usertime->getObjectPHID(), 160 PhabricatorTime::getNow()); 161 162 $time_spent = $time_spent == 0 ? 'none' : 163 phutil_format_relative_time_detailed($time_spent); 164 165 if ($usertime->getDateEnded() !== null) { 166 $item->addAttribute( 167 pht( 168 'Tracked %s', 169 $time_spent)); 170 $item->addAttribute( 171 pht( 172 'Ended on %s', 173 phabricator_datetime($usertime->getDateEnded(), $viewer))); 174 } else { 175 $item->addAttribute( 176 pht( 177 'Tracked %s so far', 178 $time_spent)); 179 if ($usertime->getObjectPHID() !== null && 180 $usertime->getUserPHID() === $viewer->getPHID()) { 181 $item->addAction( 182 id(new PHUIListItemView()) 183 ->setIcon('fa-stop') 184 ->addSigil('phrequent-stop-tracking') 185 ->setWorkflow(true) 186 ->setRenderNameAsTooltip(true) 187 ->setName(pht('Stop')) 188 ->setHref( 189 '/phrequent/track/stop/'. 190 $usertime->getObjectPHID().'/')); 191 } 192 $item->setBarColor('green'); 193 } 194 195 $view->addItem($item); 196 } 197 198 return $view; 199 } 200 201 }
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 |