@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+96 -43
+2
src/__phutil_library_map__.php
··· 1984 1984 'PhabricatorProjectCustomFieldStorage' => 'applications/project/storage/PhabricatorProjectCustomFieldStorage.php', 1985 1985 'PhabricatorProjectCustomFieldStringIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldStringIndex.php', 1986 1986 'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php', 1987 + 'PhabricatorProjectDatasource' => 'applications/project/typeahead/PhabricatorProjectDatasource.php', 1987 1988 'PhabricatorProjectDescriptionField' => 'applications/project/customfield/PhabricatorProjectDescriptionField.php', 1988 1989 'PhabricatorProjectEditDetailsController' => 'applications/project/controller/PhabricatorProjectEditDetailsController.php', 1989 1990 'PhabricatorProjectEditIconController' => 'applications/project/controller/PhabricatorProjectEditIconController.php', ··· 4857 4858 'PhabricatorProjectCustomFieldStorage' => 'PhabricatorCustomFieldStorage', 4858 4859 'PhabricatorProjectCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 4859 4860 'PhabricatorProjectDAO' => 'PhabricatorLiskDAO', 4861 + 'PhabricatorProjectDatasource' => 'PhabricatorTypeaheadDatasource', 4860 4862 'PhabricatorProjectDescriptionField' => 'PhabricatorProjectStandardCustomField', 4861 4863 'PhabricatorProjectEditDetailsController' => 'PhabricatorProjectController', 4862 4864 'PhabricatorProjectEditIconController' => 'PhabricatorProjectController',
+1 -1
src/applications/differential/customfield/DifferentialProjectsField.php
··· 56 56 public function renderEditControl(array $handles) { 57 57 return id(new AphrontFormTokenizerControl()) 58 58 ->setName($this->getFieldKey()) 59 - ->setDatasource('/typeahead/common/projects/') 59 + ->setDatasource(new PhabricatorProjectDatasource()) 60 60 ->setValue($handles) 61 61 ->setLabel($this->getFieldName()); 62 62 }
+1 -1
src/applications/diffusion/controller/DiffusionCommitEditController.php
··· 70 70 'sigil' => 'project-create', 71 71 ), 72 72 pht('Create New Project'))) 73 - ->setDatasource('/typeahead/common/projects/'));; 73 + ->setDatasource(new PhabricatorProjectDatasource())); 74 74 75 75 Javelin::initBehavior('project-create', array( 76 76 'tokenizerID' => $tokenizer_id,
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php
··· 125 125 ->setValue($v_desc)) 126 126 ->appendChild( 127 127 id(new AphrontFormTokenizerControl()) 128 - ->setDatasource('/typeahead/common/projects/') 128 + ->setDatasource(new PhabricatorProjectDatasource()) 129 129 ->setName('projectPHIDs') 130 130 ->setLabel(pht('Projects')) 131 131 ->setValue($project_handles))
+1 -1
src/applications/feed/query/PhabricatorFeedSearchEngine.php
··· 84 84 ->setValue($user_handles)) 85 85 ->appendChild( 86 86 id(new AphrontFormTokenizerControl()) 87 - ->setDatasource('/typeahead/common/projects/') 87 + ->setDatasource(new PhabricatorProjectDatasource()) 88 88 ->setName('projectPHIDs') 89 89 ->setLabel(pht('Include Projects')) 90 90 ->setValue($proj_handles))
+1 -1
src/applications/herald/controller/HeraldRuleController.php
··· 595 595 'buildplan' => new HarbormasterBuildPlanDatasource(), 596 596 'arcanistprojects' => new DiffusionArcanistProjectDatasource(), 597 597 'package' => new PhabricatorOwnersPackageDatasource(), 598 + 'project' => new PhabricatorProjectDatasource(), 598 599 ); 599 600 600 601 $sources = mpull($sources, 'getDatasourceURI'); 601 602 $sources += array( 602 603 'email' => '/typeahead/common/mailable/', 603 604 'user' => '/typeahead/common/accounts/', 604 - 'project' => '/typeahead/common/projects/', 605 605 'userorproject' => '/typeahead/common/accountsorprojects/', 606 606 ); 607 607
+4 -2
src/applications/maniphest/controller/ManiphestBatchEditController.php
··· 61 61 $template = new AphrontTokenizerTemplateView(); 62 62 $template = $template->render(); 63 63 64 + $projects_source = new PhabricatorProjectDatasource(); 65 + 64 66 require_celerity_resource('maniphest-batch-editor'); 65 67 Javelin::initBehavior( 66 68 'maniphest-batch-editor', ··· 69 71 'tokenizerTemplate' => $template, 70 72 'sources' => array( 71 73 'project' => array( 72 - 'src' => '/typeahead/common/projects/', 73 - 'placeholder' => pht('Type a project name...'), 74 + 'src' => $projects_source->getDatasourceURI(), 75 + 'placeholder' => $projects_source->getPlaceholderText(), 74 76 ), 75 77 'owner' => array( 76 78 'src' => '/typeahead/common/searchowner/',
+4 -2
src/applications/maniphest/controller/ManiphestTaskDetailController.php
··· 282 282 ManiphestTransaction::TYPE_PROJECTS => 'projects', 283 283 ); 284 284 285 + $projects_source = new PhabricatorProjectDatasource(); 286 + 285 287 $tokenizer_map = array( 286 288 ManiphestTransaction::TYPE_PROJECTS => array( 287 289 'id' => 'projects-tokenizer', 288 - 'src' => '/typeahead/common/projects/', 289 - 'placeholder' => pht('Type a project name...'), 290 + 'src' => $projects_source->getDatasourceURI(), 291 + 'placeholder' => $projects_source->getPlaceholderText(), 290 292 ), 291 293 ManiphestTransaction::TYPE_OWNER => array( 292 294 'id' => 'assign-tokenizer',
+1 -1
src/applications/maniphest/controller/ManiphestTaskEditController.php
··· 650 650 'sigil' => 'project-create', 651 651 ), 652 652 pht('Create New Project'))) 653 - ->setDatasource('/typeahead/common/projects/')); 653 + ->setDatasource(new PhabricatorProjectDatasource())); 654 654 } 655 655 656 656 $field_list->appendFieldsToForm($form);
+3 -3
src/applications/maniphest/query/ManiphestTaskSearchEngine.php
··· 322 322 $with_unassigned)) 323 323 ->appendChild( 324 324 id(new AphrontFormTokenizerControl()) 325 - ->setDatasource('/typeahead/common/projects/') 325 + ->setDatasource(new PhabricatorProjectDatasource()) 326 326 ->setName('allProjects') 327 327 ->setLabel(pht('In All Projects')) 328 328 ->setValue($all_project_handles)); ··· 341 341 $form 342 342 ->appendChild( 343 343 id(new AphrontFormTokenizerControl()) 344 - ->setDatasource('/typeahead/common/projects/') 344 + ->setDatasource(new PhabricatorProjectDatasource()) 345 345 ->setName('anyProjects') 346 346 ->setLabel(pht('In Any Project')) 347 347 ->setValue($any_project_handles)) 348 348 ->appendChild( 349 349 id(new AphrontFormTokenizerControl()) 350 - ->setDatasource('/typeahead/common/projects/') 350 + ->setDatasource(new PhabricatorProjectDatasource()) 351 351 ->setName('excludeProjects') 352 352 ->setLabel(pht('Not In Projects')) 353 353 ->setValue($exclude_project_handles))
+1 -1
src/applications/paste/controller/PhabricatorPasteEditController.php
··· 186 186 ->setLabel(pht('Projects')) 187 187 ->setName('projects') 188 188 ->setValue($project_handles) 189 - ->setDatasource('/typeahead/common/projects/')); 189 + ->setDatasource(new PhabricatorProjectDatasource())); 190 190 191 191 $form 192 192 ->appendChild(
+21 -20
src/applications/pholio/controller/PholioMockEditController.php
··· 341 341 $form->addHiddenInput('status', 'open'); 342 342 } 343 343 344 - $form->appendChild( 344 + $form 345 + ->appendChild( 345 346 id(new AphrontFormTokenizerControl()) 346 347 ->setLabel(pht('Projects')) 347 348 ->setName('projects') 348 349 ->setValue($project_handles) 349 - ->setDatasource('/typeahead/common/projects/')) 350 + ->setDatasource(new PhabricatorProjectDatasource())) 350 351 ->appendChild( 351 352 id(new AphrontFormTokenizerControl()) 352 - ->setLabel(pht('CC')) 353 - ->setName('cc') 354 - ->setValue($handles) 355 - ->setUser($user) 356 - ->setDatasource('/typeahead/common/mailable/')) 353 + ->setLabel(pht('CC')) 354 + ->setName('cc') 355 + ->setValue($handles) 356 + ->setUser($user) 357 + ->setDatasource('/typeahead/common/mailable/')) 357 358 ->appendChild( 358 359 id(new AphrontFormPolicyControl()) 359 - ->setUser($user) 360 - ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) 361 - ->setPolicyObject($mock) 362 - ->setPolicies($policies) 363 - ->setName('can_view')) 360 + ->setUser($user) 361 + ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) 362 + ->setPolicyObject($mock) 363 + ->setPolicies($policies) 364 + ->setName('can_view')) 364 365 ->appendChild( 365 366 id(new AphrontFormPolicyControl()) 366 - ->setUser($user) 367 - ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) 368 - ->setPolicyObject($mock) 369 - ->setPolicies($policies) 370 - ->setName('can_edit')) 367 + ->setUser($user) 368 + ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) 369 + ->setPolicyObject($mock) 370 + ->setPolicies($policies) 371 + ->setName('can_edit')) 371 372 ->appendChild( 372 373 id(new AphrontFormMarkupControl()) 373 - ->setValue($list_control)) 374 + ->setValue($list_control)) 374 375 ->appendChild( 375 376 id(new AphrontFormMarkupControl()) 376 - ->setValue($drop_control) 377 - ->setError($e_images)) 377 + ->setValue($drop_control) 378 + ->setError($e_images)) 378 379 ->appendChild($submit); 379 380 380 381 $form_box = id(new PHUIObjectBoxView())
+4 -2
src/applications/policy/rule/PhabricatorPolicyRuleProjects.php
··· 39 39 } 40 40 41 41 public function getValueControlTemplate() { 42 + $projects_source = new PhabricatorProjectDatasource(); 43 + 42 44 return array( 43 45 'markup' => new AphrontTokenizerTemplateView(), 44 - 'uri' => '/typeahead/common/projects/', 45 - 'placeholder' => pht('Type a project name...'), 46 + 'uri' => $projects_source->getDatasourceURI(), 47 + 'placeholder' => $projects_source->getPlaceholderText(), 46 48 ); 47 49 } 48 50
+1 -1
src/applications/ponder/controller/PonderQuestionEditController.php
··· 115 115 ->setLabel(pht('Projects')) 116 116 ->setName('projects') 117 117 ->setValue($project_handles) 118 - ->setDatasource('/typeahead/common/projects/')); 118 + ->setDatasource(new PhabricatorProjectDatasource())); 119 119 120 120 $form ->appendChild( 121 121 id(new AphrontFormSubmitControl())
+47
src/applications/project/typeahead/PhabricatorProjectDatasource.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectDatasource 4 + extends PhabricatorTypeaheadDatasource { 5 + 6 + public function getPlaceholderText() { 7 + return pht('Type a project name...'); 8 + } 9 + 10 + public function getDatasourceApplicationClass() { 11 + return 'PhabricatorApplicationProject'; 12 + } 13 + 14 + public function loadResults() { 15 + $viewer = $this->getViewer(); 16 + $raw_query = $this->getRawQuery(); 17 + 18 + $results = array(); 19 + 20 + $projs = id(new PhabricatorProjectQuery()) 21 + ->setViewer($viewer) 22 + ->needImages(true) 23 + ->execute(); 24 + foreach ($projs as $proj) { 25 + $closed = null; 26 + if ($proj->isArchived()) { 27 + $closed = pht('Archived'); 28 + } 29 + 30 + $proj_result = id(new PhabricatorTypeaheadResult()) 31 + ->setName($proj->getName()) 32 + ->setDisplayType('Project') 33 + ->setURI('/tag/'.$proj->getPrimarySlug().'/') 34 + ->setPHID($proj->getPHID()) 35 + ->setIcon($proj->getIcon()) 36 + ->setPriorityType('proj') 37 + ->setClosed($closed); 38 + 39 + $proj_result->setImageURI($proj->getProfileImageURI()); 40 + 41 + $results[] = $proj_result; 42 + } 43 + 44 + return $results; 45 + } 46 + 47 + }
+1 -1
src/applications/repository/query/PhabricatorRepositorySearchEngine.php
··· 106 106 ->setValue($name)) 107 107 ->appendChild( 108 108 id(new AphrontFormTokenizerControl()) 109 - ->setDatasource('/typeahead/common/projects/') 109 + ->setDatasource(new PhabricatorProjectDatasource()) 110 110 ->setName('anyProjects') 111 111 ->setLabel(pht('In Any Project')) 112 112 ->setValue($any_project_handles))
+1 -1
src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php
··· 161 161 id(new AphrontFormTokenizerControl()) 162 162 ->setName('projectPHIDs') 163 163 ->setLabel('In Any Project') 164 - ->setDatasource('/typeahead/common/projects/') 164 + ->setDatasource(new PhabricatorProjectDatasource()) 165 165 ->setValue($project_handles)); 166 166 } 167 167
+1 -1
src/applications/slowvote/controller/PhabricatorSlowvoteEditController.php
··· 171 171 ->setLabel(pht('Projects')) 172 172 ->setName('projects') 173 173 ->setValue($project_handles) 174 - ->setDatasource('/typeahead/common/projects/')); 174 + ->setDatasource(new PhabricatorProjectDatasource())); 175 175 176 176 if ($is_new) { 177 177 for ($ii = 0; $ii < 10; $ii++) {
-3
src/applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php
··· 59 59 $need_lists = true; 60 60 $need_projs = true; 61 61 break; 62 - case 'projects': 63 - $need_projs = true; 64 - break; 65 62 case 'usersorprojects': 66 63 case 'accountsorprojects': 67 64 $need_users = true;