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

Move repository actions (notify, autoclose) to new UI

Summary: Ref T2231. Brings "Notify/Publish" and "Autoclose" to the new UI.

Test Plan: See screenshots.

Reviewers: btrahan, chad

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2231

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

+225
+2
src/__phutil_library_map__.php
··· 504 504 'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php', 505 505 'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php', 506 506 'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php', 507 + 'DiffusionRepositoryEditActionsController' => 'applications/diffusion/controller/DiffusionRepositoryEditActionsController.php', 507 508 'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php', 508 509 'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php', 509 510 'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php', ··· 2677 2678 'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject', 2678 2679 'DiffusionRepositoryController' => 'DiffusionController', 2679 2680 'DiffusionRepositoryCreateController' => 'DiffusionController', 2681 + 'DiffusionRepositoryEditActionsController' => 'DiffusionController', 2680 2682 'DiffusionRepositoryEditActivateController' => 'DiffusionController', 2681 2683 'DiffusionRepositoryEditBasicController' => 'DiffusionController', 2682 2684 'DiffusionRepositoryEditBranchesController' => 'DiffusionController',
+1
src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
··· 71 71 'policy/' => 'DiffusionRepositoryEditPolicyController', 72 72 'branches/' => 'DiffusionRepositoryEditBranchesController', 73 73 'subversion/' => 'DiffusionRepositoryEditSubversionController', 74 + 'actions/' => 'DiffusionRepositoryEditActionsController', 74 75 ), 75 76 ), 76 77 'inline/' => array(
+126
src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php
··· 1 + <?php 2 + 3 + final class DiffusionRepositoryEditActionsController 4 + extends DiffusionController { 5 + 6 + public function processRequest() { 7 + $request = $this->getRequest(); 8 + $viewer = $request->getUser(); 9 + $drequest = $this->diffusionRequest; 10 + $repository = $drequest->getRepository(); 11 + 12 + $repository = id(new PhabricatorRepositoryQuery()) 13 + ->setViewer($viewer) 14 + ->requireCapabilities( 15 + array( 16 + PhabricatorPolicyCapability::CAN_VIEW, 17 + PhabricatorPolicyCapability::CAN_EDIT, 18 + )) 19 + ->withIDs(array($repository->getID())) 20 + ->executeOne(); 21 + 22 + if (!$repository) { 23 + return new Aphront404Response(); 24 + } 25 + 26 + $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 27 + 28 + // NOTE: We're inverting these here, because the storage is silly. 29 + $v_notify = !$repository->getHumanReadableDetail('herald-disabled'); 30 + $v_autoclose = !$repository->getHumanReadableDetail('disable-autoclose'); 31 + 32 + if ($request->isFormPost()) { 33 + $v_notify = $request->getBool('notify'); 34 + $v_autoclose = $request->getBool('autoclose'); 35 + 36 + $xactions = array(); 37 + $template = id(new PhabricatorRepositoryTransaction()); 38 + 39 + $type_notify = PhabricatorRepositoryTransaction::TYPE_NOTIFY; 40 + $type_autoclose = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE; 41 + 42 + $xactions[] = id(clone $template) 43 + ->setTransactionType($type_notify) 44 + ->setNewValue($v_notify); 45 + 46 + $xactions[] = id(clone $template) 47 + ->setTransactionType($type_autoclose) 48 + ->setNewValue($v_autoclose); 49 + 50 + id(new PhabricatorRepositoryEditor()) 51 + ->setContinueOnNoEffect(true) 52 + ->setContentSourceFromRequest($request) 53 + ->setActor($viewer) 54 + ->applyTransactions($repository, $xactions); 55 + 56 + return id(new AphrontRedirectResponse())->setURI($edit_uri); 57 + } 58 + 59 + $content = array(); 60 + 61 + $crumbs = $this->buildCrumbs(); 62 + $crumbs->addCrumb( 63 + id(new PhabricatorCrumbView()) 64 + ->setName(pht('Edit Actions'))); 65 + 66 + $title = pht('Edit Actions (%s)', $repository->getName()); 67 + 68 + $policies = id(new PhabricatorPolicyQuery()) 69 + ->setViewer($viewer) 70 + ->setObject($repository) 71 + ->execute(); 72 + 73 + $form = id(new AphrontFormView()) 74 + ->setUser($viewer) 75 + ->appendRemarkupInstructions( 76 + pht( 77 + "Normally, Phabricator publishes notifications when it discovers ". 78 + "new commits. You can disable publishing for this repository by ". 79 + "turning off **Notify/Publish**. This will disable notifications, ". 80 + "feed, and Herald for this repository.". 81 + "\n\n". 82 + "When Phabricator discovers a new commit, it can automatically ". 83 + "close associated revisions and tasks. If you don't want ". 84 + "Phabricator to close objects when it discovers new commits in ". 85 + "this repository, you can disable **Autoclose**.")) 86 + ->appendChild( 87 + id(new AphrontFormSelectControl()) 88 + ->setName('notify') 89 + ->setLabel(pht('Notify/Publish')) 90 + ->setValue((int)$v_notify) 91 + ->setOptions( 92 + array( 93 + 1 => pht('Enable Notifications, Feed and Herald'), 94 + 0 => pht('Disable Notifications, Feed and Herald'), 95 + ))) 96 + ->appendChild( 97 + id(new AphrontFormSelectControl()) 98 + ->setName('autoclose') 99 + ->setLabel(pht('Autoclose')) 100 + ->setValue((int)$v_autoclose) 101 + ->setOptions( 102 + array( 103 + 1 => pht('Enable Autoclose'), 104 + 0 => pht('Disable Autoclose'), 105 + ))) 106 + ->appendChild( 107 + id(new AphrontFormSubmitControl()) 108 + ->setValue(pht('Save Actions')) 109 + ->addCancelButton($edit_uri)); 110 + 111 + $form_box = id(new PHUIObjectBoxView()) 112 + ->setHeaderText($title) 113 + ->setForm($form); 114 + 115 + return $this->buildApplicationPage( 116 + array( 117 + $crumbs, 118 + $form_box, 119 + ), 120 + array( 121 + 'title' => $title, 122 + 'device' => true, 123 + )); 124 + } 125 + 126 + }
+56
src/applications/diffusion/controller/DiffusionRepositoryEditController.php
··· 68 68 $this->buildSubversionActions($repository)); 69 69 } 70 70 71 + $actions_properties = $this->buildActionsProperties( 72 + $repository, 73 + $this->buildActionsActions($repository)); 74 + 71 75 $xactions = id(new PhabricatorRepositoryTransactionQuery()) 72 76 ->setViewer($user) 73 77 ->withObjectPHIDs(array($repository->getPHID())) ··· 103 107 if ($subversion_properties) { 104 108 $obj_box->addPropertyList($subversion_properties); 105 109 } 110 + 111 + $obj_box->addPropertyList($actions_properties); 106 112 107 113 return $this->buildApplicationPage( 108 114 array( ··· 385 391 $repository->getHumanReadableDetail('svn-subpath'), 386 392 phutil_tag('em', array(), pht('Import Entire Repository'))); 387 393 $view->addProperty(pht('Import Only'), $svn_subpath); 394 + 395 + return $view; 396 + } 397 + 398 + private function buildActionsActions(PhabricatorRepository $repository) { 399 + $viewer = $this->getRequest()->getUser(); 400 + 401 + $view = id(new PhabricatorActionListView()) 402 + ->setObjectURI($this->getRequest()->getRequestURI()) 403 + ->setUser($viewer); 404 + 405 + $can_edit = PhabricatorPolicyFilter::hasCapability( 406 + $viewer, 407 + $repository, 408 + PhabricatorPolicyCapability::CAN_EDIT); 409 + 410 + $edit = id(new PhabricatorActionView()) 411 + ->setIcon('edit') 412 + ->setName(pht('Edit Actions')) 413 + ->setHref( 414 + $this->getRepositoryControllerURI($repository, 'edit/actions/')) 415 + ->setWorkflow(!$can_edit) 416 + ->setDisabled(!$can_edit); 417 + $view->addAction($edit); 418 + 419 + return $view; 420 + } 421 + 422 + private function buildActionsProperties( 423 + PhabricatorRepository $repository, 424 + PhabricatorActionListView $actions) { 425 + 426 + $viewer = $this->getRequest()->getUser(); 427 + 428 + $view = id(new PHUIPropertyListView()) 429 + ->setUser($viewer) 430 + ->setActionList($actions) 431 + ->addSectionHeader(pht('Actions')); 432 + 433 + $notify = $repository->getDetail('herald-disabled') 434 + ? pht('Off') 435 + : pht('On'); 436 + $notify = phutil_tag('em', array(), $notify); 437 + $view->addProperty(pht('Publish/Notify'), $notify); 438 + 439 + $autoclose = $repository->getDetail('disable-autoclose') 440 + ? pht('Off') 441 + : pht('On'); 442 + $autoclose = phutil_tag('em', array(), $autoclose); 443 + $view->addProperty(pht('Autoclose'), $autoclose); 388 444 389 445 return $view; 390 446 }
+15
src/applications/repository/editor/PhabricatorRepositoryEditor.php
··· 15 15 $types[] = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY; 16 16 $types[] = PhabricatorRepositoryTransaction::TYPE_UUID; 17 17 $types[] = PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH; 18 + $types[] = PhabricatorRepositoryTransaction::TYPE_NOTIFY; 19 + $types[] = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE; 18 20 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 19 21 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 20 22 ··· 44 46 return $object->getUUID(); 45 47 case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH: 46 48 return $object->getDetail('svn-subpath'); 49 + case PhabricatorRepositoryTransaction::TYPE_NOTIFY: 50 + return (int)!$object->getDetail('herald-disabled'); 51 + case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: 52 + return (int)!$object->getDetail('disable-autoclose'); 47 53 } 48 54 } 49 55 ··· 62 68 case PhabricatorRepositoryTransaction::TYPE_UUID: 63 69 case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH: 64 70 return $xaction->getNewValue(); 71 + case PhabricatorRepositoryTransaction::TYPE_NOTIFY: 72 + case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: 73 + return (int)$xaction->getNewValue(); 65 74 } 66 75 } 67 76 ··· 97 106 break; 98 107 case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH: 99 108 $object->setDetail('svn-subpath', $xaction->getNewValue()); 109 + break; 110 + case PhabricatorRepositoryTransaction::TYPE_NOTIFY: 111 + $object->setDetail('herald-disabled', (int)!$xaction->getNewValue()); 112 + break; 113 + case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: 114 + $object->setDetail('disable-autoclose', (int)!$xaction->getNewValue()); 100 115 break; 101 116 case PhabricatorRepositoryTransaction::TYPE_ENCODING: 102 117 // Make sure the encoding is valid by converting to UTF-8. This tests
+25
src/applications/repository/storage/PhabricatorRepositoryTransaction.php
··· 12 12 const TYPE_AUTOCLOSE_ONLY = 'repo:autoclose-only'; 13 13 const TYPE_SVN_SUBPATH = 'repo:svn-subpath'; 14 14 const TYPE_UUID = 'repo:uuid'; 15 + const TYPE_NOTIFY = 'repo:notify'; 16 + const TYPE_AUTOCLOSE = 'repo:autoclose'; 15 17 16 18 public function getApplicationName() { 17 19 return 'repository'; ··· 163 165 $new); 164 166 } 165 167 break; 168 + case self::TYPE_NOTIFY: 169 + if ($new) { 170 + return pht( 171 + '%s enabled notifications and publishing for this repository.', 172 + $this->renderHandleLink($author_phid)); 173 + } else { 174 + return pht( 175 + '%s disabled notifications and publishing for this repository.', 176 + $this->renderHandleLink($author_phid)); 177 + } 178 + break; 179 + case self::TYPE_AUTOCLOSE: 180 + if ($new) { 181 + return pht( 182 + '%s enabled autoclose for this repository.', 183 + $this->renderHandleLink($author_phid)); 184 + } else { 185 + return pht( 186 + '%s disabled autoclose for this repository.', 187 + $this->renderHandleLink($author_phid)); 188 + } 189 + break; 190 + 166 191 } 167 192 168 193 return parent::getTitle();