@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.

Require TokenizerControl to always have a datasource

Summary:
Ref T4100. I can simplify the logic a bit here by moving some rendering into the datasources, but a few TokenizerControls currently don't have datasources.

Require datasources and always provide datasources.

Test Plan:
- Used previously-datasourceless controls (e.g., "Add Reviewers").
- Used normal controls.
- Manually verified that no other controls are missing datasources.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T4100

Differential Revision: https://secure.phabricator.com/D12456

+40 -43
+7 -5
src/applications/differential/view/DifferentialAddCommentView.php
··· 67 67 'resign' => pht('Suggest Reviewers'), 68 68 ); 69 69 70 + $mailable_source = new PhabricatorMetaMTAMailableDatasource(); 71 + $reviewer_source = new PhabricatorProjectOrUserDatasource(); 72 + 70 73 $form = new AphrontFormView(); 71 74 $form 72 75 ->setWorkflow(true) ··· 88 91 ->setControlID('add-reviewers') 89 92 ->setControlStyle($enable_reviewers ? null : 'display: none') 90 93 ->setID('add-reviewers-tokenizer') 91 - ->setDisableBehavior(true)) 94 + ->setDisableBehavior(true) 95 + ->setDatasource($reviewer_source)) 92 96 ->appendControl( 93 97 id(new AphrontFormTokenizerControl()) 94 98 ->setLabel(pht('Add Subscribers')) ··· 96 100 ->setControlID('add-ccs') 97 101 ->setControlStyle($enable_ccs ? null : 'display: none') 98 102 ->setID('add-ccs-tokenizer') 99 - ->setDisableBehavior(true)) 103 + ->setDisableBehavior(true) 104 + ->setDatasource($mailable_source)) 100 105 ->appendChild( 101 106 id(new PhabricatorRemarkupControl()) 102 107 ->setName('comment') ··· 107 112 ->appendChild( 108 113 id(new AphrontFormSubmitControl()) 109 114 ->setValue(pht('Submit'))); 110 - 111 - $mailable_source = new PhabricatorMetaMTAMailableDatasource(); 112 - $reviewer_source = new PhabricatorProjectOrUserDatasource(); 113 115 114 116 Javelin::initBehavior( 115 117 'differential-add-reviewers-and-ccs',
+7 -5
src/applications/diffusion/controller/DiffusionCommitController.php
··· 677 677 678 678 $actions = $this->getAuditActions($commit, $audit_requests); 679 679 680 + $mailable_source = new PhabricatorMetaMTAMailableDatasource(); 681 + $auditor_source = new DiffusionAuditorDatasource(); 682 + 680 683 $form = id(new AphrontFormView()) 681 684 ->setUser($user) 682 685 ->setAction('/audit/addcomment/') ··· 694 697 ->setControlID('add-auditors') 695 698 ->setControlStyle('display: none') 696 699 ->setID('add-auditors-tokenizer') 697 - ->setDisableBehavior(true)) 700 + ->setDisableBehavior(true) 701 + ->setDatasource($auditor_source)) 698 702 ->appendControl( 699 703 id(new AphrontFormTokenizerControl()) 700 704 ->setLabel(pht('Add CCs')) ··· 702 706 ->setControlID('add-ccs') 703 707 ->setControlStyle('display: none') 704 708 ->setID('add-ccs-tokenizer') 705 - ->setDisableBehavior(true)) 709 + ->setDisableBehavior(true) 710 + ->setDatasource($mailable_source)) 706 711 ->appendChild( 707 712 id(new PhabricatorRemarkupControl()) 708 713 ->setLabel(pht('Comments')) ··· 717 722 $header = new PHUIHeaderView(); 718 723 $header->setHeader( 719 724 $is_serious ? pht('Audit Commit') : pht('Creative Accounting')); 720 - 721 - $mailable_source = new PhabricatorMetaMTAMailableDatasource(); 722 - $auditor_source = new DiffusionAuditorDatasource(); 723 725 724 726 Javelin::initBehavior( 725 727 'differential-add-reviewers-and-ccs',
+10 -7
src/applications/maniphest/controller/ManiphestTaskDetailController.php
··· 182 182 $draft_text = null; 183 183 } 184 184 185 + $projects_source = new PhabricatorProjectDatasource(); 186 + $users_source = new PhabricatorPeopleDatasource(); 187 + $mailable_source = new PhabricatorMetaMTAMailableDatasource(); 188 + 185 189 $comment_form = new AphrontFormView(); 186 190 $comment_form 187 191 ->setUser($user) ··· 209 213 ->setControlID('assign_to') 210 214 ->setControlStyle('display: none') 211 215 ->setID('assign-tokenizer') 212 - ->setDisableBehavior(true)) 216 + ->setDisableBehavior(true) 217 + ->setDatasource($users_source)) 213 218 ->appendControl( 214 219 id(new AphrontFormTokenizerControl()) 215 220 ->setLabel(pht('CCs')) ··· 217 222 ->setControlID('ccs') 218 223 ->setControlStyle('display: none') 219 224 ->setID('cc-tokenizer') 220 - ->setDisableBehavior(true)) 225 + ->setDisableBehavior(true) 226 + ->setDatasource($mailable_source)) 221 227 ->appendChild( 222 228 id(new AphrontFormSelectControl()) 223 229 ->setLabel(pht('Priority')) ··· 233 239 ->setControlID('projects') 234 240 ->setControlStyle('display: none') 235 241 ->setID('projects-tokenizer') 236 - ->setDisableBehavior(true)) 242 + ->setDisableBehavior(true) 243 + ->setDatasource($projects_source)) 237 244 ->appendChild( 238 245 id(new AphrontFormFileControl()) 239 246 ->setLabel(pht('File')) ··· 259 266 ManiphestTransaction::TYPE_PRIORITY => 'priority', 260 267 PhabricatorTransactions::TYPE_EDGE => 'projects', 261 268 ); 262 - 263 - $projects_source = new PhabricatorProjectDatasource(); 264 - $users_source = new PhabricatorPeopleDatasource(); 265 - $mailable_source = new PhabricatorMetaMTAMailableDatasource(); 266 269 267 270 $tokenizer_map = array( 268 271 PhabricatorTransactions::TYPE_EDGE => array(
+16 -26
src/view/form/control/AphrontFormTokenizerControl.php
··· 51 51 } 52 52 53 53 $datasource = $this->datasource; 54 - if ($datasource) { 55 - $datasource->setViewer($this->getUser()); 54 + if (!$datasource) { 55 + throw new Exception( 56 + pht('You must set a datasource to use a TokenizerControl.')); 56 57 } 58 + $datasource->setViewer($this->getUser()); 57 59 58 60 $placeholder = null; 59 61 if (!strlen($this->placeholder)) { 60 - if ($datasource) { 61 - $placeholder = $datasource->getPlaceholderText(); 62 - } 63 - } else { 64 - $placeholder = $this->placeholder; 62 + $placeholder = $datasource->getPlaceholderText(); 65 63 } 66 64 67 65 $tokens = array(); ··· 71 69 $token = PhabricatorTypeaheadTokenView::newFromHandle($handles[$value]); 72 70 } else { 73 71 $token = null; 74 - if ($datasource) { 75 - $function = $datasource->parseFunction($value); 76 - if ($function) { 77 - $token_list = $datasource->renderFunctionTokens( 78 - $function['name'], 79 - array($function['argv'])); 80 - $token = head($token_list); 81 - } 72 + 73 + $function = $datasource->parseFunction($value); 74 + if ($function) { 75 + $token_list = $datasource->renderFunctionTokens( 76 + $function['name'], 77 + array($function['argv'])); 78 + $token = head($token_list); 82 79 } 83 80 84 81 if (!$token) { ··· 105 102 $username = $this->user->getUsername(); 106 103 } 107 104 108 - $datasource_uri = null; 109 - $browse_uri = null; 110 - if ($datasource) { 111 - $datasource->setViewer($this->getUser()); 112 - 113 - $datasource_uri = $datasource->getDatasourceURI(); 114 - 115 - $browse_uri = $datasource->getBrowseURI(); 116 - if ($browse_uri) { 117 - $template->setBrowseURI($browse_uri); 118 - } 105 + $datasource_uri = $datasource->getDatasourceURI(); 106 + $browse_uri = $datasource->getBrowseURI(); 107 + if ($browse_uri) { 108 + $template->setBrowseURI($browse_uri); 119 109 } 120 110 121 111 if (!$this->disableBehavior) {