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()); | |||||
} | |||||
} |