1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-27 01:02:42 +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 $priority = null;
private $minPriority = null;
private $maxPriority = null;
private $groupBy = 'group-none'; private $groupBy = 'group-none';
const GROUP_NONE = 'group-none'; const GROUP_NONE = 'group-none';
const GROUP_PRIORITY = 'group-priority'; const GROUP_PRIORITY = 'group-priority';
@ -119,6 +122,12 @@ final class ManiphestTaskQuery {
return $this; return $this;
} }
public function withPrioritiesBetween($min, $max) {
$this->minPriority = $min;
$this->maxPriority = $max;
return $this;
}
public function withSubscribers(array $subscribers) { public function withSubscribers(array $subscribers) {
$this->subscriberPHIDs = $subscribers; $this->subscriberPHIDs = $subscribers;
return $this; return $this;
@ -316,14 +325,20 @@ final class ManiphestTaskQuery {
} }
private function buildPriorityWhereClause($conn) { private function buildPriorityWhereClause($conn) {
if ($this->priority === null) { if ($this->priority !== null) {
return 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 qsprintf( return null;
$conn,
'priority = %d',
$this->priority);
} }
private function buildAuthorWhereClause($conn) { private function buildAuthorWhereClause($conn) {

View file

@ -28,6 +28,11 @@ final class ManiphestTaskPriority extends ManiphestConstants {
const PRIORITY_LOW = 25; const PRIORITY_LOW = 25;
const PRIORITY_WISH = 0; const PRIORITY_WISH = 0;
/**
* Get the priorities and their full descriptions.
*
* @return map Priorities to descriptions.
*/
public static function getTaskPriorityMap() { public static function getTaskPriorityMap() {
return array( return array(
self::PRIORITY_UNBREAK_NOW => 'Unbreak Now!', 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() { public static function getTaskBriefPriorityMap() {
return array( return array(
self::PRIORITY_UNBREAK_NOW => 'Unbreak!', 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() { public static function getLoadMap() {
return array( return array(
self::PRIORITY_UNBREAK_NOW => 16, 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) { public static function getTaskPriorityName($priority) {
return idx(self::getTaskPriorityMap(), $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 = $request->getStr('set_search');
$search_text = nonempty($search_text, null); $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() $uri = $request->getRequestURI()
->alter('users', $this->getArrToStrList('set_users')) ->alter('users', $this->getArrToStrList('set_users'))
->alter('projects', $this->getArrToStrList('set_projects')) ->alter('projects', $this->getArrToStrList('set_projects'))
->alter('xprojects', $this->getArrToStrList('set_xprojects')) ->alter('xprojects', $this->getArrToStrList('set_xprojects'))
->alter('owners', $this->getArrToStrList('set_owners')) ->alter('owners', $this->getArrToStrList('set_owners'))
->alter('authors', $this->getArrToStrList('set_authors')) ->alter('authors', $this->getArrToStrList('set_authors'))
->alter('lpriority', $min_priority)
->alter('hpriority', $max_priority)
->alter('tasks', $task_ids) ->alter('tasks', $task_ids)
->alter('search', $search_text); ->alter('search', $search_text);
@ -113,6 +121,9 @@ final class ManiphestTaskListController extends ManiphestController {
$exclude_project_phids = $query->getParameter( $exclude_project_phids = $query->getParameter(
'excludeProjectPHIDs', 'excludeProjectPHIDs',
array()); array());
$low_priority = $query->getParameter('lowPriority');
$high_priority = $query->getParameter('highPriority');
$page_size = $query->getParameter('limit'); $page_size = $query->getParameter('limit');
$page = $query->getParameter('offset'); $page = $query->getParameter('offset');
@ -209,6 +220,32 @@ final class ManiphestTaskListController extends ManiphestController {
->setName('set_xprojects') ->setName('set_xprojects')
->setLabel('Exclude Projects') ->setLabel('Exclude Projects')
->setValue($tokens)); ->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 $form
@ -377,6 +414,13 @@ final class ManiphestTaskListController extends ManiphestController {
$owner_phids = $search_query->getParameter('ownerPHIDs', array()); $owner_phids = $search_query->getParameter('ownerPHIDs', array());
$author_phids = $search_query->getParameter('authorPHIDs', 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 = new ManiphestTaskQuery();
$query->withProjects($project_phids); $query->withProjects($project_phids);
$query->withTaskIDs($task_ids); $query->withTaskIDs($task_ids);
@ -428,6 +472,9 @@ final class ManiphestTaskListController extends ManiphestController {
case 'projectall': case 'projectall':
$any_project = true; $any_project = true;
break; break;
case 'custom':
$query->withPrioritiesBetween($low_priority, $high_priority);
break;
} }
$query->withAnyProject($any_project); $query->withAnyProject($any_project);
@ -639,8 +686,8 @@ final class ManiphestTaskListController extends ManiphestController {
} }
private function buildQueryFromRequest() { private function buildQueryFromRequest() {
$request = $this->getRequest(); $request = $this->getRequest();
$user = $request->getUser(); $user = $request->getUser();
$status = $this->getStatusValueFromRequest(); $status = $this->getStatusValueFromRequest();
$group = $this->getGroupValueFromRequest(); $group = $this->getGroupValueFromRequest();
@ -681,10 +728,13 @@ final class ManiphestTaskListController extends ManiphestController {
$task_ids = $numeric_task_ids; $task_ids = $numeric_task_ids;
} }
$owner_phids = $request->getStrList('owners'); $owner_phids = $request->getStrList('owners');
$author_phids = $request->getStrList('authors'); $author_phids = $request->getStrList('authors');
$search_string = $request->getStr('search'); $search_string = $request->getStr('search');
$low_priority = $request->getInt('lpriority');
$high_priority = $request->getInt('hpriority');
$page = $request->getInt('offset'); $page = $request->getInt('offset');
$page_size = self::DEFAULT_PAGE_SIZE; $page_size = self::DEFAULT_PAGE_SIZE;
@ -701,6 +751,8 @@ final class ManiphestTaskListController extends ManiphestController {
'ownerPHIDs' => $owner_phids, 'ownerPHIDs' => $owner_phids,
'authorPHIDs' => $author_phids, 'authorPHIDs' => $author_phids,
'taskIDs' => $task_ids, 'taskIDs' => $task_ids,
'lowPriority' => $low_priority,
'highPriority' => $high_priority,
'group' => $group, 'group' => $group,
'order' => $order, 'order' => $order,
'offset' => $page, 'offset' => $page,