mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 08:52:39 +01:00
Tasks can be searched with task id in differential Task Selector
Summary: Task selector didn't support searching tasks with their IDs, e.g., 'T17'. This was confusing, because in the task list the task ID was visible, but you could not search them. Test Plan: * Checked that searching 'T<task_id>' works with all the filters * Checked that using multiple task IDs in the same query works * Check that mixing task IDs and free text works Reviewers: epriestley CC: jungejason Differential Revision: 105
This commit is contained in:
parent
d5ee8c792c
commit
d6d8598d68
2 changed files with 33 additions and 3 deletions
|
@ -23,7 +23,18 @@ class ManiphestTaskSelectorSearchController extends ManiphestController {
|
||||||
$user = $request->getUser();
|
$user = $request->getUser();
|
||||||
|
|
||||||
$query = new PhabricatorSearchQuery();
|
$query = new PhabricatorSearchQuery();
|
||||||
$query->setQuery($request->getStr('query'));
|
|
||||||
|
$query_str = $request->getStr('query');
|
||||||
|
$matches = array();
|
||||||
|
$task_ids = array();
|
||||||
|
|
||||||
|
// Collect all task IDs, e.g., T12 T651 T631, from the query string
|
||||||
|
preg_match_all('/\bT(\d+)\b/', $query_str, $matches);
|
||||||
|
if ($matches) {
|
||||||
|
$task_ids = $matches[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
$query->setQuery($query_str);
|
||||||
$query->setParameter('type', PhabricatorPHIDConstants::PHID_TYPE_TASK);
|
$query->setParameter('type', PhabricatorPHIDConstants::PHID_TYPE_TASK);
|
||||||
|
|
||||||
switch ($request->getStr('filter')) {
|
switch ($request->getStr('filter')) {
|
||||||
|
@ -42,9 +53,27 @@ class ManiphestTaskSelectorSearchController extends ManiphestController {
|
||||||
|
|
||||||
$exec = new PhabricatorSearchMySQLExecutor();
|
$exec = new PhabricatorSearchMySQLExecutor();
|
||||||
$results = $exec->executeSearch($query);
|
$results = $exec->executeSearch($query);
|
||||||
$results = ipull($results, 'phid');
|
|
||||||
|
|
||||||
$handles = id(new PhabricatorObjectHandleData($results))
|
$phids = array();
|
||||||
|
|
||||||
|
foreach ($results as $result) {
|
||||||
|
$phids[$result['phid']] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do a separate query for task IDs if the query had them
|
||||||
|
if ($task_ids) {
|
||||||
|
$task_object = new ManiphestTask();
|
||||||
|
|
||||||
|
// It's OK to ignore filters, if user wants specific task IDs
|
||||||
|
$tasks = $task_object->loadAllWhere('id IN (%Ls)', $task_ids);
|
||||||
|
|
||||||
|
foreach ($tasks as $task) {
|
||||||
|
$phids[$task->getPHID()] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$phids = array_keys($phids);
|
||||||
|
$handles = id(new PhabricatorObjectHandleData($phids))
|
||||||
->loadHandles();
|
->loadHandles();
|
||||||
|
|
||||||
$data = array();
|
$data = array();
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
phutil_require_module('phabricator', 'aphront/response/ajax');
|
phutil_require_module('phabricator', 'aphront/response/ajax');
|
||||||
phutil_require_module('phabricator', 'applications/maniphest/controller/base');
|
phutil_require_module('phabricator', 'applications/maniphest/controller/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/maniphest/storage/task');
|
||||||
phutil_require_module('phabricator', 'applications/phid/constants');
|
phutil_require_module('phabricator', 'applications/phid/constants');
|
||||||
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||||
phutil_require_module('phabricator', 'applications/phid/handle/view/selector');
|
phutil_require_module('phabricator', 'applications/phid/handle/view/selector');
|
||||||
|
|
Loading…
Reference in a new issue