Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/order/PhabricatorProjectColumnOrder.php
- This file was added.
| <?php | |||||
| abstract class PhabricatorProjectColumnOrder | |||||
| extends Phobject { | |||||
| private $viewer; | |||||
| final public function setViewer(PhabricatorUser $viewer) { | |||||
| $this->viewer = $viewer; | |||||
| return $this; | |||||
| } | |||||
| final public function getViewer() { | |||||
| return $this->viewer; | |||||
| } | |||||
| final public function getColumnOrderKey() { | |||||
| return $this->getPhobjectClassConstant('ORDERKEY'); | |||||
| } | |||||
| final public static function getAllOrders() { | |||||
| return id(new PhutilClassMapQuery()) | |||||
| ->setAncestorClass(__CLASS__) | |||||
| ->setUniqueMethod('getColumnOrderKey') | |||||
| ->execute(); | |||||
| } | |||||
| final public static function getOrderByKey($key) { | |||||
| $map = self::getAllOrders(); | |||||
| if (!isset($map[$key])) { | |||||
| throw new Exception( | |||||
| pht( | |||||
| 'No column ordering exists with key "%s".', | |||||
| $key)); | |||||
| } | |||||
| return $map[$key]; | |||||
| } | |||||
| final public function getColumnTransactions($object, array $header) { | |||||
| $result = $this->newColumnTransactions($object, $header); | |||||
| if (!is_array($result) && !is_null($result)) { | |||||
| throw new Exception( | |||||
| pht( | |||||
| 'Expected "newColumnTransactions()" on "%s" to return "null" or a '. | |||||
| 'list of transactions, but got "%s".', | |||||
| get_class($this), | |||||
| phutil_describe_type($result))); | |||||
| } | |||||
| if ($result === null) { | |||||
| $result = array(); | |||||
| } | |||||
| assert_instances_of($result, 'PhabricatorApplicationTransaction'); | |||||
| return $result; | |||||
| } | |||||
| final public function getMenuIconIcon() { | |||||
| return $this->newMenuIconIcon(); | |||||
| } | |||||
| protected function newMenuIconIcon() { | |||||
| return 'fa-sort-amount-asc'; | |||||
| } | |||||
| abstract public function getDisplayName(); | |||||
| protected function newColumnTransactions($object, array $header) { | |||||
| return array(); | |||||
| } | |||||
| final public function getHeadersForObjects(array $objects) { | |||||
| $headers = $this->newHeadersForObjects($objects); | |||||
| if (!is_array($headers)) { | |||||
| throw new Exception( | |||||
| pht( | |||||
| 'Expected "newHeadersForObjects()" on "%s" to return a list '. | |||||
| 'of headers, but got "%s".', | |||||
| get_class($this), | |||||
| phutil_describe_type($headers))); | |||||
| } | |||||
| assert_instances_of($headers, 'PhabricatorProjectColumnHeader'); | |||||
| // Add a "0" to the end of each header. This makes them sort above object | |||||
| // cards in the same group. | |||||
| foreach ($headers as $header) { | |||||
| $vector = $header->getSortVector(); | |||||
| $vector[] = 0; | |||||
| $header->setSortVector($vector); | |||||
| } | |||||
| return $headers; | |||||
| } | |||||
| protected function newHeadersForObjects(array $objects) { | |||||
| return array(); | |||||
| } | |||||
| final public function getSortVectorsForObjects(array $objects) { | |||||
| $vectors = $this->newSortVectorsForObjects($objects); | |||||
| if (!is_array($vectors)) { | |||||
| throw new Exception( | |||||
| pht( | |||||
| 'Expected "newSortVectorsForObjects()" on "%s" to return a '. | |||||
| 'map of vectors, but got "%s".', | |||||
| get_class($this), | |||||
| phutil_describe_type($vectors))); | |||||
| } | |||||
| assert_same_keys($objects, $vectors); | |||||
| return $vectors; | |||||
| } | |||||
| protected function newSortVectorsForObjects(array $objects) { | |||||
| $vectors = array(); | |||||
| foreach ($objects as $key => $object) { | |||||
| $vectors[$key] = $this->newSortVectorForObject($object); | |||||
| } | |||||
| return $vectors; | |||||
| } | |||||
| protected function newSortVectorForObject($object) { | |||||
| return array(); | |||||
| } | |||||
| final public function getHeaderKeysForObjects(array $objects) { | |||||
| $header_keys = $this->newHeaderKeysForObjects($objects); | |||||
| if (!is_array($header_keys)) { | |||||
| throw new Exception( | |||||
| pht( | |||||
| 'Expected "newHeaderKeysForObject()" on "%s" to return a '. | |||||
| 'map of header keys, but got "%s".', | |||||
| get_class($this), | |||||
| phutil_describe_type($header_keys))); | |||||
| } | |||||
| assert_same_keys($objects, $header_keys); | |||||
| return $header_keys; | |||||
| } | |||||
| protected function newHeaderKeysForObjects(array $objects) { | |||||
| $header_keys = array(); | |||||
| foreach ($objects as $key => $object) { | |||||
| $header_keys[$key] = $this->newHeaderKeyForObject($object); | |||||
| } | |||||
| return $header_keys; | |||||
| } | |||||
| protected function newHeaderKeyForObject($object) { | |||||
| return null; | |||||
| } | |||||
| final protected function newTransaction($object) { | |||||
| return $object->getApplicationTransactionTemplate(); | |||||
| } | |||||
| final protected function newHeader() { | |||||
| return id(new PhabricatorProjectColumnHeader()) | |||||
| ->setOrderKey($this->getColumnOrderKey()); | |||||
| } | |||||
| } | |||||