From 793eced32dd2fced9fb89112d340c600e94bb4dd Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 10 Jul 2014 17:28:29 -0700 Subject: [PATCH] Modernize "projects" typeahead datasource Summary: Ref T4420. Update "projects" source. Test Plan: - Edited projects on a Differential revision. - Edited projects on a commit. - Edited projects on a repository. - Edited projects in feed search. - Edited projects in a Herald rule field. - Edited projects in a Herald rule action. - Edited projects in Maniphest batch editor. - Edited projects on Maniphest task. - Edited projects in "Associate Projects..." action in Maniphest. - Edited projects on Maniphest search in "all projects", "any project" and "not projects" fields. - Edited projects on a Paste. - Edited projects on a Pholio mock. - Edited projects on a custom policy rule. - Edited projects on a Ponder question. - Edited projects on a Diffusion search query. - Edited projects on a global search query. - Edited projects on a slowvote. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T4420 Differential Revision: https://secure.phabricator.com/D9884 --- src/__phutil_library_map__.php | 2 + .../customfield/DifferentialProjectsField.php | 2 +- .../DiffusionCommitEditController.php | 2 +- ...DiffusionRepositoryEditBasicController.php | 2 +- .../query/PhabricatorFeedSearchEngine.php | 2 +- .../controller/HeraldRuleController.php | 2 +- .../ManiphestBatchEditController.php | 6 ++- .../ManiphestTaskDetailController.php | 6 ++- .../ManiphestTaskEditController.php | 2 +- .../query/ManiphestTaskSearchEngine.php | 6 +-- .../PhabricatorPasteEditController.php | 2 +- .../controller/PholioMockEditController.php | 41 ++++++++-------- .../rule/PhabricatorPolicyRuleProjects.php | 6 ++- .../PonderQuestionEditController.php | 2 +- .../PhabricatorProjectDatasource.php | 47 +++++++++++++++++++ .../PhabricatorRepositorySearchEngine.php | 2 +- ...abricatorSearchApplicationSearchEngine.php | 2 +- .../PhabricatorSlowvoteEditController.php | 2 +- ...torTypeaheadCommonDatasourceController.php | 3 -- 19 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 src/applications/project/typeahead/PhabricatorProjectDatasource.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 305ed09675..d898002c79 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1984,6 +1984,7 @@ phutil_register_library_map(array( 'PhabricatorProjectCustomFieldStorage' => 'applications/project/storage/PhabricatorProjectCustomFieldStorage.php', 'PhabricatorProjectCustomFieldStringIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldStringIndex.php', 'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php', + 'PhabricatorProjectDatasource' => 'applications/project/typeahead/PhabricatorProjectDatasource.php', 'PhabricatorProjectDescriptionField' => 'applications/project/customfield/PhabricatorProjectDescriptionField.php', 'PhabricatorProjectEditDetailsController' => 'applications/project/controller/PhabricatorProjectEditDetailsController.php', 'PhabricatorProjectEditIconController' => 'applications/project/controller/PhabricatorProjectEditIconController.php', @@ -4857,6 +4858,7 @@ phutil_register_library_map(array( 'PhabricatorProjectCustomFieldStorage' => 'PhabricatorCustomFieldStorage', 'PhabricatorProjectCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'PhabricatorProjectDAO' => 'PhabricatorLiskDAO', + 'PhabricatorProjectDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorProjectDescriptionField' => 'PhabricatorProjectStandardCustomField', 'PhabricatorProjectEditDetailsController' => 'PhabricatorProjectController', 'PhabricatorProjectEditIconController' => 'PhabricatorProjectController', diff --git a/src/applications/differential/customfield/DifferentialProjectsField.php b/src/applications/differential/customfield/DifferentialProjectsField.php index 7266e5ac31..461c60b1b2 100644 --- a/src/applications/differential/customfield/DifferentialProjectsField.php +++ b/src/applications/differential/customfield/DifferentialProjectsField.php @@ -56,7 +56,7 @@ final class DifferentialProjectsField public function renderEditControl(array $handles) { return id(new AphrontFormTokenizerControl()) ->setName($this->getFieldKey()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setValue($handles) ->setLabel($this->getFieldName()); } diff --git a/src/applications/diffusion/controller/DiffusionCommitEditController.php b/src/applications/diffusion/controller/DiffusionCommitEditController.php index f695ba4c50..35445cabe3 100644 --- a/src/applications/diffusion/controller/DiffusionCommitEditController.php +++ b/src/applications/diffusion/controller/DiffusionCommitEditController.php @@ -70,7 +70,7 @@ final class DiffusionCommitEditController extends DiffusionController { 'sigil' => 'project-create', ), pht('Create New Project'))) - ->setDatasource('/typeahead/common/projects/'));; + ->setDatasource(new PhabricatorProjectDatasource())); Javelin::initBehavior('project-create', array( 'tokenizerID' => $tokenizer_id, diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php index 24c71428c9..7fa932f551 100644 --- a/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php @@ -125,7 +125,7 @@ final class DiffusionRepositoryEditBasicController ->setValue($v_desc)) ->appendChild( id(new AphrontFormTokenizerControl()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setName('projectPHIDs') ->setLabel(pht('Projects')) ->setValue($project_handles)) diff --git a/src/applications/feed/query/PhabricatorFeedSearchEngine.php b/src/applications/feed/query/PhabricatorFeedSearchEngine.php index 086798fdf3..f9c996c5a6 100644 --- a/src/applications/feed/query/PhabricatorFeedSearchEngine.php +++ b/src/applications/feed/query/PhabricatorFeedSearchEngine.php @@ -84,7 +84,7 @@ final class PhabricatorFeedSearchEngine ->setValue($user_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setName('projectPHIDs') ->setLabel(pht('Include Projects')) ->setValue($proj_handles)) diff --git a/src/applications/herald/controller/HeraldRuleController.php b/src/applications/herald/controller/HeraldRuleController.php index e91da23692..6bf1cb7c3f 100644 --- a/src/applications/herald/controller/HeraldRuleController.php +++ b/src/applications/herald/controller/HeraldRuleController.php @@ -595,13 +595,13 @@ final class HeraldRuleController extends HeraldController { 'buildplan' => new HarbormasterBuildPlanDatasource(), 'arcanistprojects' => new DiffusionArcanistProjectDatasource(), 'package' => new PhabricatorOwnersPackageDatasource(), + 'project' => new PhabricatorProjectDatasource(), ); $sources = mpull($sources, 'getDatasourceURI'); $sources += array( 'email' => '/typeahead/common/mailable/', 'user' => '/typeahead/common/accounts/', - 'project' => '/typeahead/common/projects/', 'userorproject' => '/typeahead/common/accountsorprojects/', ); diff --git a/src/applications/maniphest/controller/ManiphestBatchEditController.php b/src/applications/maniphest/controller/ManiphestBatchEditController.php index b338293585..fbcb84884b 100644 --- a/src/applications/maniphest/controller/ManiphestBatchEditController.php +++ b/src/applications/maniphest/controller/ManiphestBatchEditController.php @@ -61,6 +61,8 @@ final class ManiphestBatchEditController extends ManiphestController { $template = new AphrontTokenizerTemplateView(); $template = $template->render(); + $projects_source = new PhabricatorProjectDatasource(); + require_celerity_resource('maniphest-batch-editor'); Javelin::initBehavior( 'maniphest-batch-editor', @@ -69,8 +71,8 @@ final class ManiphestBatchEditController extends ManiphestController { 'tokenizerTemplate' => $template, 'sources' => array( 'project' => array( - 'src' => '/typeahead/common/projects/', - 'placeholder' => pht('Type a project name...'), + 'src' => $projects_source->getDatasourceURI(), + 'placeholder' => $projects_source->getPlaceholderText(), ), 'owner' => array( 'src' => '/typeahead/common/searchowner/', diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php index 39542840cc..8d24d59a49 100644 --- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php +++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php @@ -282,11 +282,13 @@ final class ManiphestTaskDetailController extends ManiphestController { ManiphestTransaction::TYPE_PROJECTS => 'projects', ); + $projects_source = new PhabricatorProjectDatasource(); + $tokenizer_map = array( ManiphestTransaction::TYPE_PROJECTS => array( 'id' => 'projects-tokenizer', - 'src' => '/typeahead/common/projects/', - 'placeholder' => pht('Type a project name...'), + 'src' => $projects_source->getDatasourceURI(), + 'placeholder' => $projects_source->getPlaceholderText(), ), ManiphestTransaction::TYPE_OWNER => array( 'id' => 'assign-tokenizer', diff --git a/src/applications/maniphest/controller/ManiphestTaskEditController.php b/src/applications/maniphest/controller/ManiphestTaskEditController.php index 08c9414fe4..438151d81c 100644 --- a/src/applications/maniphest/controller/ManiphestTaskEditController.php +++ b/src/applications/maniphest/controller/ManiphestTaskEditController.php @@ -650,7 +650,7 @@ final class ManiphestTaskEditController extends ManiphestController { 'sigil' => 'project-create', ), pht('Create New Project'))) - ->setDatasource('/typeahead/common/projects/')); + ->setDatasource(new PhabricatorProjectDatasource())); } $field_list->appendFieldsToForm($form); diff --git a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php index 501e095aba..9a948ffc65 100644 --- a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php +++ b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php @@ -322,7 +322,7 @@ final class ManiphestTaskSearchEngine $with_unassigned)) ->appendChild( id(new AphrontFormTokenizerControl()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setName('allProjects') ->setLabel(pht('In All Projects')) ->setValue($all_project_handles)); @@ -341,13 +341,13 @@ final class ManiphestTaskSearchEngine $form ->appendChild( id(new AphrontFormTokenizerControl()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setName('anyProjects') ->setLabel(pht('In Any Project')) ->setValue($any_project_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setName('excludeProjects') ->setLabel(pht('Not In Projects')) ->setValue($exclude_project_handles)) diff --git a/src/applications/paste/controller/PhabricatorPasteEditController.php b/src/applications/paste/controller/PhabricatorPasteEditController.php index de4b20b70d..a15f4a3af5 100644 --- a/src/applications/paste/controller/PhabricatorPasteEditController.php +++ b/src/applications/paste/controller/PhabricatorPasteEditController.php @@ -186,7 +186,7 @@ final class PhabricatorPasteEditController extends PhabricatorPasteController { ->setLabel(pht('Projects')) ->setName('projects') ->setValue($project_handles) - ->setDatasource('/typeahead/common/projects/')); + ->setDatasource(new PhabricatorProjectDatasource())); $form ->appendChild( diff --git a/src/applications/pholio/controller/PholioMockEditController.php b/src/applications/pholio/controller/PholioMockEditController.php index 575dcb11d1..669c0fc1a8 100644 --- a/src/applications/pholio/controller/PholioMockEditController.php +++ b/src/applications/pholio/controller/PholioMockEditController.php @@ -341,40 +341,41 @@ final class PholioMockEditController extends PholioController { $form->addHiddenInput('status', 'open'); } - $form->appendChild( + $form + ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Projects')) ->setName('projects') ->setValue($project_handles) - ->setDatasource('/typeahead/common/projects/')) + ->setDatasource(new PhabricatorProjectDatasource())) ->appendChild( id(new AphrontFormTokenizerControl()) - ->setLabel(pht('CC')) - ->setName('cc') - ->setValue($handles) - ->setUser($user) - ->setDatasource('/typeahead/common/mailable/')) + ->setLabel(pht('CC')) + ->setName('cc') + ->setValue($handles) + ->setUser($user) + ->setDatasource('/typeahead/common/mailable/')) ->appendChild( id(new AphrontFormPolicyControl()) - ->setUser($user) - ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) - ->setPolicyObject($mock) - ->setPolicies($policies) - ->setName('can_view')) + ->setUser($user) + ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) + ->setPolicyObject($mock) + ->setPolicies($policies) + ->setName('can_view')) ->appendChild( id(new AphrontFormPolicyControl()) - ->setUser($user) - ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) - ->setPolicyObject($mock) - ->setPolicies($policies) - ->setName('can_edit')) + ->setUser($user) + ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) + ->setPolicyObject($mock) + ->setPolicies($policies) + ->setName('can_edit')) ->appendChild( id(new AphrontFormMarkupControl()) - ->setValue($list_control)) + ->setValue($list_control)) ->appendChild( id(new AphrontFormMarkupControl()) - ->setValue($drop_control) - ->setError($e_images)) + ->setValue($drop_control) + ->setError($e_images)) ->appendChild($submit); $form_box = id(new PHUIObjectBoxView()) diff --git a/src/applications/policy/rule/PhabricatorPolicyRuleProjects.php b/src/applications/policy/rule/PhabricatorPolicyRuleProjects.php index ccb29bdf8b..490f8b2930 100644 --- a/src/applications/policy/rule/PhabricatorPolicyRuleProjects.php +++ b/src/applications/policy/rule/PhabricatorPolicyRuleProjects.php @@ -39,10 +39,12 @@ final class PhabricatorPolicyRuleProjects } public function getValueControlTemplate() { + $projects_source = new PhabricatorProjectDatasource(); + return array( 'markup' => new AphrontTokenizerTemplateView(), - 'uri' => '/typeahead/common/projects/', - 'placeholder' => pht('Type a project name...'), + 'uri' => $projects_source->getDatasourceURI(), + 'placeholder' => $projects_source->getPlaceholderText(), ); } diff --git a/src/applications/ponder/controller/PonderQuestionEditController.php b/src/applications/ponder/controller/PonderQuestionEditController.php index ca4accf4ba..55bfb75d5b 100644 --- a/src/applications/ponder/controller/PonderQuestionEditController.php +++ b/src/applications/ponder/controller/PonderQuestionEditController.php @@ -115,7 +115,7 @@ final class PonderQuestionEditController extends PonderController { ->setLabel(pht('Projects')) ->setName('projects') ->setValue($project_handles) - ->setDatasource('/typeahead/common/projects/')); + ->setDatasource(new PhabricatorProjectDatasource())); $form ->appendChild( id(new AphrontFormSubmitControl()) diff --git a/src/applications/project/typeahead/PhabricatorProjectDatasource.php b/src/applications/project/typeahead/PhabricatorProjectDatasource.php new file mode 100644 index 0000000000..8b2343132d --- /dev/null +++ b/src/applications/project/typeahead/PhabricatorProjectDatasource.php @@ -0,0 +1,47 @@ +getViewer(); + $raw_query = $this->getRawQuery(); + + $results = array(); + + $projs = id(new PhabricatorProjectQuery()) + ->setViewer($viewer) + ->needImages(true) + ->execute(); + foreach ($projs as $proj) { + $closed = null; + if ($proj->isArchived()) { + $closed = pht('Archived'); + } + + $proj_result = id(new PhabricatorTypeaheadResult()) + ->setName($proj->getName()) + ->setDisplayType('Project') + ->setURI('/tag/'.$proj->getPrimarySlug().'/') + ->setPHID($proj->getPHID()) + ->setIcon($proj->getIcon()) + ->setPriorityType('proj') + ->setClosed($closed); + + $proj_result->setImageURI($proj->getProfileImageURI()); + + $results[] = $proj_result; + } + + return $results; + } + +} diff --git a/src/applications/repository/query/PhabricatorRepositorySearchEngine.php b/src/applications/repository/query/PhabricatorRepositorySearchEngine.php index 90f5e02160..a0ca1e3039 100644 --- a/src/applications/repository/query/PhabricatorRepositorySearchEngine.php +++ b/src/applications/repository/query/PhabricatorRepositorySearchEngine.php @@ -106,7 +106,7 @@ final class PhabricatorRepositorySearchEngine ->setValue($name)) ->appendChild( id(new AphrontFormTokenizerControl()) - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setName('anyProjects') ->setLabel(pht('In Any Project')) ->setValue($any_project_handles)) diff --git a/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php b/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php index 477aba5290..249089f380 100644 --- a/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php +++ b/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php @@ -161,7 +161,7 @@ final class PhabricatorSearchApplicationSearchEngine id(new AphrontFormTokenizerControl()) ->setName('projectPHIDs') ->setLabel('In Any Project') - ->setDatasource('/typeahead/common/projects/') + ->setDatasource(new PhabricatorProjectDatasource()) ->setValue($project_handles)); } diff --git a/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php b/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php index 9336fdb943..1f2766a43b 100644 --- a/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php +++ b/src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php @@ -171,7 +171,7 @@ final class PhabricatorSlowvoteEditController ->setLabel(pht('Projects')) ->setName('projects') ->setValue($project_handles) - ->setDatasource('/typeahead/common/projects/')); + ->setDatasource(new PhabricatorProjectDatasource())); if ($is_new) { for ($ii = 0; $ii < 10; $ii++) { diff --git a/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php b/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php index 1dfb0983d5..b424ea00a8 100644 --- a/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php +++ b/src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php @@ -59,9 +59,6 @@ final class PhabricatorTypeaheadCommonDatasourceController $need_lists = true; $need_projs = true; break; - case 'projects': - $need_projs = true; - break; case 'usersorprojects': case 'accountsorprojects': $need_users = true; -- 2.51.2