@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added sort order and ended filter to Phrequent.

Summary:
Fixed order by duration, wasn't order by duration.

Added some sorting and filtering.

Test Plan: set some timers, stop them, look at phrequent, sort and filter them.

Reviewers: epriestley, hach-que

CC: aran, Korvin, hach-que

Maniphest Tasks: T2857

Differential Revision: https://secure.phabricator.com/D5554

authored by

Gareth Evans and committed by
epriestley
7d35625e d5841fe4

+92 -6
+64 -5
src/applications/phrequent/controller/PhrequentListController.php
··· 8 8 9 9 $nav = $this->buildNav('usertime'); 10 10 11 + $form = id(new AphrontFormView()) 12 + ->setUser($user) 13 + ->setNoShading(true); 14 + 15 + $form->appendChild( 16 + id(new AphrontFormToggleButtonsControl()) 17 + ->setName('o') 18 + ->setLabel(pht('Sort Order')) 19 + ->setBaseURI($request->getRequestURI(), 'o') 20 + ->setValue($request->getStr('o', 's')) 21 + ->setButtons( 22 + array( 23 + 's' => pht('Started'), 24 + 'e' => pht('Ended'), 25 + 'd' => pht('Duration'), 26 + ))); 27 + 28 + $form->appendChild( 29 + id(new AphrontFormToggleButtonsControl()) 30 + ->setName('e') 31 + ->setLabel(pht('Ended')) 32 + ->setBaseURI($request->getRequestURI(), 'e') 33 + ->setValue($request->getStr('e', 'a')) 34 + ->setButtons( 35 + array( 36 + 'y' => pht('Yes'), 37 + 'n' => pht('No'), 38 + 'a' => pht('All'), 39 + ))); 40 + 41 + $filter = new AphrontListFilterView(); 42 + $filter->appendChild($form); 43 + 11 44 $query = new PhrequentUserTimeQuery(); 12 - $query->setOrder(PhrequentUserTimeQuery::ORDER_ENDED); 45 + 46 + switch ($request->getStr('o', 's')) { 47 + case 's': 48 + $order = PhrequentUserTimeQuery::ORDER_STARTED; 49 + break; 50 + case 'e': 51 + $order = PhrequentUserTimeQuery::ORDER_ENDED; 52 + break; 53 + case 'd': 54 + $order = PhrequentUserTimeQuery::ORDER_DURATION; 55 + break; 56 + default: 57 + throw new Exception("Unknown order!"); 58 + } 59 + $query->setOrder($order); 60 + 61 + switch ($request->getStr('e', 'a')) { 62 + case 'a': 63 + $ended = PhrequentUserTimeQuery::ENDED_ALL; 64 + break; 65 + case 'y': 66 + $ended = PhrequentUserTimeQuery::ENDED_YES; 67 + break; 68 + case 'n': 69 + $ended = PhrequentUserTimeQuery::ENDED_NO; 70 + break; 71 + default: 72 + throw new Exception("Unknown ended!"); 73 + } 74 + $query->setEnded($ended); 13 75 14 76 $pager = new AphrontPagerView(); 15 77 $pager->setPageSize(500); ··· 20 82 21 83 $title = pht('Time Tracked'); 22 84 23 - $header = id(new PhabricatorHeaderView()) 24 - ->setHeader($title); 25 - 26 85 $table = $this->buildTableView($logs); 27 86 $table->appendChild($pager); 28 87 29 88 $nav->appendChild( 30 89 array( 31 - $header, 90 + $filter, 32 91 $table, 33 92 $pager, 34 93 ));
+28 -1
src/applications/phrequent/query/PhrequentUserTimeQuery.php
··· 7 7 const ORDER_ENDED = 'order-ended'; 8 8 const ORDER_DURATION = 'order-duration'; 9 9 10 + const ENDED_YES = "ended-yes"; 11 + const ENDED_NO = "ended-no"; 12 + const ENDED_ALL = "ended-all"; 13 + 10 14 private $userPHIDs; 11 15 private $objectPHIDs; 12 16 private $order = self::ORDER_ID; 17 + private $ended = self::ENDED_ALL; 13 18 14 19 public function setUsers($user_phids) { 15 20 $this->userPHIDs = $user_phids; ··· 23 28 24 29 public function setOrder($order) { 25 30 $this->order = $order; 31 + return $this; 32 + } 33 + 34 + public function setEnded($ended) { 35 + $this->ended = $ended; 26 36 return $this; 27 37 } 28 38 ··· 58 68 $this->objectPHIDs); 59 69 } 60 70 71 + switch ($this->ended) { 72 + case self::ENDED_ALL: 73 + break; 74 + case self::ENDED_YES: 75 + $where[] = qsprintf( 76 + $conn, 77 + 'dateEnded IS NOT NULL'); 78 + break; 79 + case self::ENDED_NO: 80 + $where[] = qsprintf( 81 + $conn, 82 + 'dateEnded IS NULL'); 83 + break; 84 + default: 85 + throw new Exception("Unknown ended '{$this->ended}'!"); 86 + } 87 + 61 88 return $this->formatWhereClause($where); 62 89 } 63 90 ··· 70 97 case self::ORDER_ENDED: 71 98 return 'ORDER BY dateEnded IS NULL, dateEnded DESC, dateStarted DESC'; 72 99 case self::ORDER_DURATION: 73 - return 'ORDER BY (COALESCE(dateEnded, UNIX_TIMESTAMP() - dateStarted) '. 100 + return 'ORDER BY COALESCE(dateEnded, UNIX_TIMESTAMP()) - dateStarted '. 74 101 'DESC'; 75 102 default: 76 103 throw new Exception("Unknown order '{$this->order}'!");