@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
2
fork

Configure Feed

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

at upstream/main 116 lines 2.9 kB view raw
1<?php 2 3final class PhabricatorProjectColumnStatusOrder 4 extends PhabricatorProjectColumnOrder { 5 6 const ORDERKEY = 'status'; 7 8 public function getDisplayName() { 9 return pht('Group by Status'); 10 } 11 12 protected function newMenuIconIcon() { 13 return 'fa-check'; 14 } 15 16 public function getHasHeaders() { 17 return true; 18 } 19 20 public function getCanReorder() { 21 return true; 22 } 23 24 public function getMenuOrder() { 25 return 4000; 26 } 27 28 protected function newHeaderKeyForObject($object) { 29 return $this->newHeaderKeyForStatus($object->getStatus()); 30 } 31 32 private function newHeaderKeyForStatus($status) { 33 return sprintf('status(%s)', $status); 34 } 35 36 protected function newSortVectorsForObjects(array $objects) { 37 $status_sequence = $this->newStatusSequence(); 38 39 $vectors = array(); 40 foreach ($objects as $object_key => $object) { 41 $vectors[$object_key] = array( 42 (int)idx($status_sequence, $object->getStatus(), 0), 43 ); 44 } 45 46 return $vectors; 47 } 48 49 private function newStatusSequence() { 50 $statuses = ManiphestTaskStatus::getTaskStatusMap(); 51 return array_combine( 52 array_keys($statuses), 53 range(1, count($statuses))); 54 } 55 56 protected function newHeadersForObjects(array $objects) { 57 $headers = array(); 58 59 $statuses = ManiphestTaskStatus::getTaskStatusMap(); 60 $sequence = $this->newStatusSequence(); 61 62 foreach ($statuses as $status_key => $status_name) { 63 $header_key = $this->newHeaderKeyForStatus($status_key); 64 65 $sort_vector = array( 66 (int)idx($sequence, $status_key, 0), 67 ); 68 69 $status_icon = ManiphestTaskStatus::getStatusIcon($status_key); 70 $status_color = ManiphestTaskStatus::getStatusColor($status_key); 71 72 $icon_view = id(new PHUIIconView()) 73 ->setIcon($status_icon, $status_color); 74 75 $drop_effect = $this->newEffect() 76 ->setIcon($status_icon) 77 ->setColor($status_color) 78 ->addCondition('status', '!=', $status_key) 79 ->setContent( 80 pht( 81 'Change status to %s.', 82 phutil_tag('strong', array(), $status_name))); 83 84 $header = $this->newHeader() 85 ->setHeaderKey($header_key) 86 ->setSortVector($sort_vector) 87 ->setName($status_name) 88 ->setIcon($icon_view) 89 ->setEditProperties( 90 array( 91 'value' => $status_key, 92 )) 93 ->addDropEffect($drop_effect); 94 95 $headers[] = $header; 96 } 97 98 return $headers; 99 } 100 101 protected function newColumnTransactions($object, array $header) { 102 $new_status = idx($header, 'value'); 103 104 if ($object->getStatus() === $new_status) { 105 return null; 106 } 107 108 $xactions = array(); 109 $xactions[] = $this->newTransaction($object) 110 ->setTransactionType(ManiphestTaskStatusTransaction::TRANSACTIONTYPE) 111 ->setNewValue($new_status); 112 113 return $xactions; 114 } 115 116}