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

Allow editPolicy, viewPolicy, and repositoryPHID to be edited from the web UI in Differential

Summary: Ref T603. I think T2222 is fraught with peril so I'm not going to try to sequence it ahead of T603 for Differential. Provide access to policy controls in Differential's edit view.

Test Plan: See screenshot.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T603

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

+144
+6
src/__phutil_library_map__.php
··· 352 352 'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php', 353 353 'DifferentialDiffViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialDiffViewPolicyFieldSpecification.php', 354 354 'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'applications/differential/doorkeeper/DifferentialDoorkeeperRevisionFeedStoryPublisher.php', 355 + 'DifferentialEditPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialEditPolicyFieldSpecification.php', 355 356 'DifferentialException' => 'applications/differential/exception/DifferentialException.php', 356 357 'DifferentialExceptionMail' => 'applications/differential/mail/DifferentialExceptionMail.php', 357 358 'DifferentialExportPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php', ··· 393 394 'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php', 394 395 'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php', 395 396 'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php', 397 + 'DifferentialRepositoryFieldSpecification' => 'applications/differential/field/specification/DifferentialRepositoryFieldSpecification.php', 396 398 'DifferentialResultsTableView' => 'applications/differential/view/DifferentialResultsTableView.php', 397 399 'DifferentialRevertPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php', 398 400 'DifferentialReviewRequestMail' => 'applications/differential/mail/DifferentialReviewRequestMail.php', ··· 431 433 'DifferentialUnitFieldSpecification' => 'applications/differential/field/specification/DifferentialUnitFieldSpecification.php', 432 434 'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php', 433 435 'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php', 436 + 'DifferentialViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php', 434 437 'DiffusionBranchInformation' => 'applications/diffusion/data/DiffusionBranchInformation.php', 435 438 'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php', 436 439 'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php', ··· 2425 2428 'DifferentialDiffViewController' => 'DifferentialController', 2426 2429 'DifferentialDiffViewPolicyFieldSpecification' => 'DifferentialFieldSpecification', 2427 2430 'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher', 2431 + 'DifferentialEditPolicyFieldSpecification' => 'DifferentialFieldSpecification', 2428 2432 'DifferentialException' => 'Exception', 2429 2433 'DifferentialExceptionMail' => 'DifferentialMail', 2430 2434 'DifferentialExportPatchFieldSpecification' => 'DifferentialFieldSpecification', ··· 2465 2469 'DifferentialReleephRequestFieldSpecification' => 'DifferentialFieldSpecification', 2466 2470 'DifferentialRemarkupRule' => 'PhabricatorRemarkupRuleObject', 2467 2471 'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler', 2472 + 'DifferentialRepositoryFieldSpecification' => 'DifferentialFieldSpecification', 2468 2473 'DifferentialResultsTableView' => 'AphrontView', 2469 2474 'DifferentialRevertPlanFieldSpecification' => 'DifferentialFieldSpecification', 2470 2475 'DifferentialReviewRequestMail' => 'DifferentialMail', ··· 2505 2510 'DifferentialTransaction' => 'PhabricatorApplicationTransaction', 2506 2511 'DifferentialTransactionComment' => 'PhabricatorApplicationTransactionComment', 2507 2512 'DifferentialUnitFieldSpecification' => 'DifferentialFieldSpecification', 2513 + 'DifferentialViewPolicyFieldSpecification' => 'DifferentialFieldSpecification', 2508 2514 'DiffusionBranchTableController' => 'DiffusionController', 2509 2515 'DiffusionBranchTableView' => 'DiffusionView', 2510 2516 'DiffusionBrowseController' => 'DiffusionController',
+3
src/applications/differential/field/selector/DifferentialDefaultFieldSelector.php
··· 13 13 new DifferentialReviewersFieldSpecification(), 14 14 new DifferentialReviewedByFieldSpecification(), 15 15 new DifferentialCCsFieldSpecification(), 16 + new DifferentialRepositoryFieldSpecification(), 17 + new DifferentialViewPolicyFieldSpecification(), 18 + new DifferentialEditPolicyFieldSpecification(), 16 19 new DifferentialLintFieldSpecification(), 17 20 new DifferentialUnitFieldSpecification(), 18 21 new DifferentialCommitsFieldSpecification(),
+45
src/applications/differential/field/specification/DifferentialEditPolicyFieldSpecification.php
··· 1 + <?php 2 + 3 + final class DifferentialEditPolicyFieldSpecification 4 + extends DifferentialFieldSpecification { 5 + 6 + private $value; 7 + 8 + public function shouldAppearOnEdit() { 9 + return true; 10 + } 11 + 12 + protected function didSetRevision() { 13 + $this->value = $this->getRevision()->getEditPolicy(); 14 + } 15 + 16 + public function setValueFromRequest(AphrontRequest $request) { 17 + $this->value = $request->getStr('editPolicy'); 18 + return $this; 19 + } 20 + 21 + public function renderEditControl() { 22 + $viewer = $this->getUser(); 23 + $revision = $this->getRevision(); 24 + 25 + $policies = id(new PhabricatorPolicyQuery()) 26 + ->setViewer($viewer) 27 + ->setObject($revision) 28 + ->execute(); 29 + 30 + return id(new AphrontFormPolicyControl()) 31 + ->setUser($viewer) 32 + ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) 33 + ->setPolicyObject($revision) 34 + ->setPolicies($policies) 35 + ->setName('editPolicy') 36 + ->setCaption( 37 + pht( 38 + 'NOTE: These policy features are not yet fully supported.')); 39 + } 40 + 41 + public function willWriteRevision(DifferentialRevisionEditor $editor) { 42 + $this->getRevision()->setEditPolicy($this->value); 43 + } 44 + 45 + }
+48
src/applications/differential/field/specification/DifferentialRepositoryFieldSpecification.php
··· 1 + <?php 2 + 3 + final class DifferentialRepositoryFieldSpecification 4 + extends DifferentialFieldSpecification { 5 + 6 + private $value; 7 + 8 + public function shouldAppearOnEdit() { 9 + return true; 10 + } 11 + 12 + protected function didSetRevision() { 13 + $this->value = $this->getRevision()->getRepositoryPHID(); 14 + } 15 + 16 + public function setValueFromRequest(AphrontRequest $request) { 17 + $value = head($request->getArr('repositoryPHID')); 18 + $this->value = nonempty($value, null); 19 + return $this; 20 + } 21 + 22 + 23 + public function getRequiredHandlePHIDsForRevisionEdit() { 24 + return array_filter(array($this->value)); 25 + } 26 + 27 + public function renderEditControl() { 28 + $value = array(); 29 + if ($this->value) { 30 + $value = array( 31 + $this->getHandle($this->value), 32 + ); 33 + } 34 + 35 + return id(new AphrontFormTokenizerControl()) 36 + ->setLabel('Repository') 37 + ->setName('repositoryPHID') 38 + ->setUser($this->getUser()) 39 + ->setLimit(1) 40 + ->setDatasource('/typeahead/common/repositories/') 41 + ->setValue($value); 42 + } 43 + 44 + public function willWriteRevision(DifferentialRevisionEditor $editor) { 45 + $this->getRevision()->setRepositoryPHID($this->value); 46 + } 47 + 48 + }
+42
src/applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php
··· 1 + <?php 2 + 3 + final class DifferentialViewPolicyFieldSpecification 4 + extends DifferentialFieldSpecification { 5 + 6 + private $value; 7 + 8 + public function shouldAppearOnEdit() { 9 + return true; 10 + } 11 + 12 + protected function didSetRevision() { 13 + $this->value = $this->getRevision()->getViewPolicy(); 14 + } 15 + 16 + public function setValueFromRequest(AphrontRequest $request) { 17 + $this->value = $request->getStr('viewPolicy'); 18 + return $this; 19 + } 20 + 21 + public function renderEditControl() { 22 + $viewer = $this->getUser(); 23 + $revision = $this->getRevision(); 24 + 25 + $policies = id(new PhabricatorPolicyQuery()) 26 + ->setViewer($viewer) 27 + ->setObject($revision) 28 + ->execute(); 29 + 30 + return id(new AphrontFormPolicyControl()) 31 + ->setUser($viewer) 32 + ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) 33 + ->setPolicyObject($revision) 34 + ->setPolicies($policies) 35 + ->setName('viewPolicy'); 36 + } 37 + 38 + public function willWriteRevision(DifferentialRevisionEditor $editor) { 39 + $this->getRevision()->setViewPolicy($this->value); 40 + } 41 + 42 + }