@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.

Implement "Sort by Points" on workboards

Summary: Depends on D20275. Fixes T10578. This is a static sorting (like "By Date Created") where you can't change point values by dragging. You can still drag cards between columns, or use the "Edit" icon to change point values.

Test Plan: {F6265191}

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T10578

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

+106 -5
+2
src/__phutil_library_map__.php
··· 4059 4059 'PhabricatorProjectColumnOrder' => 'applications/project/order/PhabricatorProjectColumnOrder.php', 4060 4060 'PhabricatorProjectColumnOwnerOrder' => 'applications/project/order/PhabricatorProjectColumnOwnerOrder.php', 4061 4061 'PhabricatorProjectColumnPHIDType' => 'applications/project/phid/PhabricatorProjectColumnPHIDType.php', 4062 + 'PhabricatorProjectColumnPointsOrder' => 'applications/project/order/PhabricatorProjectColumnPointsOrder.php', 4062 4063 'PhabricatorProjectColumnPosition' => 'applications/project/storage/PhabricatorProjectColumnPosition.php', 4063 4064 'PhabricatorProjectColumnPositionQuery' => 'applications/project/query/PhabricatorProjectColumnPositionQuery.php', 4064 4065 'PhabricatorProjectColumnPriorityOrder' => 'applications/project/order/PhabricatorProjectColumnPriorityOrder.php', ··· 10145 10146 'PhabricatorProjectColumnOrder' => 'Phobject', 10146 10147 'PhabricatorProjectColumnOwnerOrder' => 'PhabricatorProjectColumnOrder', 10147 10148 'PhabricatorProjectColumnPHIDType' => 'PhabricatorPHIDType', 10149 + 'PhabricatorProjectColumnPointsOrder' => 'PhabricatorProjectColumnOrder', 10148 10150 'PhabricatorProjectColumnPosition' => array( 10149 10151 'PhabricatorProjectDAO', 10150 10152 'PhabricatorPolicyInterface',
+14 -2
src/applications/project/controller/PhabricatorProjectBoardViewController.php
··· 616 616 617 617 $order_key = $this->sortKey; 618 618 619 - $ordering_map = PhabricatorProjectColumnOrder::getAllOrders(); 619 + $ordering_map = PhabricatorProjectColumnOrder::getEnabledOrders(); 620 620 $ordering = id(clone $ordering_map[$order_key]) 621 621 ->setViewer($viewer); 622 622 ··· 635 635 $order_maps[] = $ordering->toDictionary(); 636 636 637 637 $properties = array(); 638 + foreach ($all_tasks as $task) { 639 + $properties[$task->getPHID()] = array( 640 + 'points' => (double)$task->getPoints(), 641 + 'status' => $task->getStatus(), 642 + ); 643 + } 638 644 639 645 $behavior_config = array( 640 646 'moveURI' => $this->getApplicationURI('move/'.$project->getID().'/'), ··· 771 777 } 772 778 773 779 private function isValidSort($sort) { 774 - $map = PhabricatorProjectColumnOrder::getAllOrders(); 780 + $map = PhabricatorProjectColumnOrder::getEnabledOrders(); 775 781 return isset($map[$sort]); 776 782 } 777 783 ··· 819 825 $viewer, 820 826 $project, 821 827 PhabricatorPolicyCapability::CAN_EDIT); 828 + 829 + $items[] = id(new PhabricatorActionView()) 830 + ->setType(PhabricatorActionView::TYPE_DIVIDER); 822 831 823 832 $items[] = id(new PhabricatorActionView()) 824 833 ->setIcon('fa-floppy-o') ··· 917 926 $viewer, 918 927 $project, 919 928 PhabricatorPolicyCapability::CAN_EDIT); 929 + 930 + $items[] = id(new PhabricatorActionView()) 931 + ->setType(PhabricatorActionView::TYPE_DIVIDER); 920 932 921 933 $items[] = id(new PhabricatorActionView()) 922 934 ->setIcon('fa-floppy-o')
+6 -2
src/applications/project/order/PhabricatorProjectColumnCreatedOrder.php
··· 21 21 return false; 22 22 } 23 23 24 + public function getMenuOrder() { 25 + return 3000; 26 + } 27 + 24 28 protected function newSortVectorForObject($object) { 25 29 return array( 26 - (int)-$object->getDateCreated(), 27 - (int)-$object->getID(), 30 + -(int)$object->getDateCreated(), 31 + -(int)$object->getID(), 28 32 ); 29 33 } 30 34
+4
src/applications/project/order/PhabricatorProjectColumnNaturalOrder.php
··· 17 17 return true; 18 18 } 19 19 20 + public function getMenuOrder() { 21 + return 0; 22 + } 23 + 20 24 }
+21
src/applications/project/order/PhabricatorProjectColumnOrder.php
··· 22 22 return id(new PhutilClassMapQuery()) 23 23 ->setAncestorClass(__CLASS__) 24 24 ->setUniqueMethod('getColumnOrderKey') 25 + ->setSortMethod('getMenuOrder') 25 26 ->execute(); 27 + } 28 + 29 + final public static function getEnabledOrders() { 30 + $map = self::getAllOrders(); 31 + 32 + foreach ($map as $key => $order) { 33 + if (!$order->isEnabled()) { 34 + unset($map[$key]); 35 + } 36 + } 37 + 38 + return $map; 26 39 } 27 40 28 41 final public static function getOrderByKey($key) { ··· 70 83 abstract public function getDisplayName(); 71 84 abstract public function getHasHeaders(); 72 85 abstract public function getCanReorder(); 86 + 87 + public function getMenuOrder() { 88 + return 9000; 89 + } 90 + 91 + public function isEnabled() { 92 + return true; 93 + } 73 94 74 95 protected function newColumnTransactions($object, array $header) { 75 96 return array();
+4
src/applications/project/order/PhabricatorProjectColumnOwnerOrder.php
··· 21 21 return true; 22 22 } 23 23 24 + public function getMenuOrder() { 25 + return 2000; 26 + } 27 + 24 28 protected function newHeaderKeyForObject($object) { 25 29 return $this->newHeaderKeyForOwnerPHID($object->getOwnerPHID()); 26 30 }
+50
src/applications/project/order/PhabricatorProjectColumnPointsOrder.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectColumnPointsOrder 4 + extends PhabricatorProjectColumnOrder { 5 + 6 + const ORDERKEY = 'points'; 7 + 8 + public function getDisplayName() { 9 + return pht('Sort by Points'); 10 + } 11 + 12 + protected function newMenuIconIcon() { 13 + return 'fa-map-pin'; 14 + } 15 + 16 + public function isEnabled() { 17 + return ManiphestTaskPoints::getIsEnabled(); 18 + } 19 + 20 + public function getHasHeaders() { 21 + return false; 22 + } 23 + 24 + public function getCanReorder() { 25 + return false; 26 + } 27 + 28 + public function getMenuOrder() { 29 + return 4000; 30 + } 31 + 32 + protected function newSortVectorForObject($object) { 33 + $points = $object->getPoints(); 34 + 35 + // Put cards with no points on top. 36 + $has_points = ($points !== null); 37 + if (!$has_points) { 38 + $overall_order = 0; 39 + } else { 40 + $overall_order = 1; 41 + } 42 + 43 + return array( 44 + $overall_order, 45 + -(double)$points, 46 + -(int)$object->getID(), 47 + ); 48 + } 49 + 50 + }
+5 -1
src/applications/project/order/PhabricatorProjectColumnPriorityOrder.php
··· 21 21 return true; 22 22 } 23 23 24 + public function getMenuOrder() { 25 + return 1000; 26 + } 27 + 24 28 protected function newHeaderKeyForObject($object) { 25 29 return $this->newHeaderKeyForPriority($object->getPriority()); 26 30 } ··· 35 39 36 40 private function newSortVectorForPriority($priority) { 37 41 return array( 38 - (int)-$priority, 42 + -(int)$priority, 39 43 ); 40 44 } 41 45