1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-23 15:22:41 +01:00

Add minimum and maximum priority select boxes to Maniphest Custom Query.

Summary:
Added the boxes.

NOTE: I am not sure how to deal with the user choosing a minimum higher than the maximum; it causes an empty result set, but if we can avoid allowing it, that'd be better, I think.

Test Plan: See the boxes there, not filtering.  Change them, see them filtering.

Reviewers: epriestley

CC: aran, Korvin

Maniphest Tasks: T1565

Differential Revision: https://secure.phabricator.com/D3109
This commit is contained in:
Jonathan Lomas 2012-07-31 22:52:46 -07:00
parent 9092994e45
commit 54d1b95141
3 changed files with 118 additions and 12 deletions

View file

@ -48,6 +48,9 @@ final class ManiphestTaskQuery {
private $priority = null;
private $minPriority = null;
private $maxPriority = null;
private $groupBy = 'group-none';
const GROUP_NONE = 'group-none';
const GROUP_PRIORITY = 'group-priority';
@ -119,6 +122,12 @@ final class ManiphestTaskQuery {
return $this;
}
public function withPrioritiesBetween($min, $max) {
$this->minPriority = $min;
$this->maxPriority = $max;
return $this;
}
public function withSubscribers(array $subscribers) {
$this->subscriberPHIDs = $subscribers;
return $this;
@ -316,14 +325,20 @@ final class ManiphestTaskQuery {
}
private function buildPriorityWhereClause($conn) {
if ($this->priority === null) {
return null;
}
if ($this->priority !== null) {
return qsprintf(
$conn,
'priority = %d',
$this->priority);
} elseif ($this->minPriority !== null && $this->maxPriority !== null) {
return qsprintf(
$conn,
'priority >= %d AND priority <= %d',
$this->minPriority,
$this->maxPriority);
}
return null;
}
private function buildAuthorWhereClause($conn) {

View file

@ -28,6 +28,11 @@ final class ManiphestTaskPriority extends ManiphestConstants {
const PRIORITY_LOW = 25;
const PRIORITY_WISH = 0;
/**
* Get the priorities and their full descriptions.
*
* @return map Priorities to descriptions.
*/
public static function getTaskPriorityMap() {
return array(
self::PRIORITY_UNBREAK_NOW => 'Unbreak Now!',
@ -39,6 +44,11 @@ final class ManiphestTaskPriority extends ManiphestConstants {
);
}
/**
* Get the priorities and their related short (one-word) descriptions.
*
* @return map Priorities to brief descriptions.
*/
public static function getTaskBriefPriorityMap() {
return array(
self::PRIORITY_UNBREAK_NOW => 'Unbreak!',
@ -50,7 +60,11 @@ final class ManiphestTaskPriority extends ManiphestConstants {
);
}
/**
* Get the priorities and some bits for bitwise fun.
*
* @return map Priorities to bits.
*/
public static function getLoadMap() {
return array(
self::PRIORITY_UNBREAK_NOW => 16,
@ -62,6 +76,31 @@ final class ManiphestTaskPriority extends ManiphestConstants {
);
}
/**
* Get the lowest defined priority.
*
* @return int The value of the lowest priority constant.
*/
public static function getLowestPriority() {
return self::PRIORITY_WISH;
}
/**
* Get the highest defined priority.
*
* @return int The value of the highest priority constant.
*/
public static function getHighestPriority() {
return self::PRIORITY_UNBREAK_NOW;
}
/**
* Retrieve the full name of the priority level provided.
*
* @param int A priority level.
* @return string The priority name if the level is a valid one,
* or `???` if it is not.
*/
public static function getTaskPriorityName($priority) {
return idx(self::getTaskPriorityMap(), $priority, '???');
}

View file

@ -49,12 +49,20 @@ final class ManiphestTaskListController extends ManiphestController {
$search_text = $request->getStr('set_search');
$search_text = nonempty($search_text, null);
$min_priority = $request->getInt('set_lpriority');
$min_priority = nonempty($min_priority, null);
$max_priority = $request->getInt('set_hpriority');
$max_priority = nonempty($max_priority, null);
$uri = $request->getRequestURI()
->alter('users', $this->getArrToStrList('set_users'))
->alter('projects', $this->getArrToStrList('set_projects'))
->alter('xprojects', $this->getArrToStrList('set_xprojects'))
->alter('owners', $this->getArrToStrList('set_owners'))
->alter('authors', $this->getArrToStrList('set_authors'))
->alter('lpriority', $min_priority)
->alter('hpriority', $max_priority)
->alter('tasks', $task_ids)
->alter('search', $search_text);
@ -113,6 +121,9 @@ final class ManiphestTaskListController extends ManiphestController {
$exclude_project_phids = $query->getParameter(
'excludeProjectPHIDs',
array());
$low_priority = $query->getParameter('lowPriority');
$high_priority = $query->getParameter('highPriority');
$page_size = $query->getParameter('limit');
$page = $query->getParameter('offset');
@ -209,6 +220,32 @@ final class ManiphestTaskListController extends ManiphestController {
->setName('set_xprojects')
->setLabel('Exclude Projects')
->setValue($tokens));
$priority = ManiphestTaskPriority::getLowestPriority();
if ($low_priority) {
$priority = $low_priority;
}
$form->appendChild(
id(new AphrontFormSelectControl())
->setLabel('From Priority')
->setName('set_lpriority')
->setValue($priority)
->setOptions(array_reverse(
ManiphestTaskPriority::getTaskPriorityMap(), true)));
$priority = ManiphestTaskPriority::getHighestPriority();
if ($high_priority) {
$priority = $high_priority;
}
$form->appendChild(
id(new AphrontFormSelectControl())
->setLabel('To Priority')
->setName('set_hpriority')
->setValue($priority)
->setOptions(ManiphestTaskPriority::getTaskPriorityMap()));
}
$form
@ -377,6 +414,13 @@ final class ManiphestTaskListController extends ManiphestController {
$owner_phids = $search_query->getParameter('ownerPHIDs', array());
$author_phids = $search_query->getParameter('authorPHIDs', array());
$low_priority = $search_query->getParameter('lowPriority');
$low_priority = nonempty($low_priority,
ManiphestTaskPriority::getLowestPriority());
$high_priority = $search_query->getParameter('highPriority');
$high_priority = nonempty($high_priority,
ManiphestTaskPriority::getHighestPriority());
$query = new ManiphestTaskQuery();
$query->withProjects($project_phids);
$query->withTaskIDs($task_ids);
@ -428,6 +472,9 @@ final class ManiphestTaskListController extends ManiphestController {
case 'projectall':
$any_project = true;
break;
case 'custom':
$query->withPrioritiesBetween($low_priority, $high_priority);
break;
}
$query->withAnyProject($any_project);
@ -686,6 +733,9 @@ final class ManiphestTaskListController extends ManiphestController {
$search_string = $request->getStr('search');
$low_priority = $request->getInt('lpriority');
$high_priority = $request->getInt('hpriority');
$page = $request->getInt('offset');
$page_size = self::DEFAULT_PAGE_SIZE;
@ -701,6 +751,8 @@ final class ManiphestTaskListController extends ManiphestController {
'ownerPHIDs' => $owner_phids,
'authorPHIDs' => $author_phids,
'taskIDs' => $task_ids,
'lowPriority' => $low_priority,
'highPriority' => $high_priority,
'group' => $group,
'order' => $order,
'offset' => $page,