@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 repositories to be activate/deactivated in a transaction-aware way

Summary: Adds activate/deactivate action plus transactions.

Test Plan: See screenshot.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

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

+117 -2
+2
src/__phutil_library_map__.php
··· 494 494 'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php', 495 495 'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php', 496 496 'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php', 497 + 'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php', 497 498 'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php', 498 499 'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php', 499 500 'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php', ··· 2554 2555 'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject', 2555 2556 'DiffusionRepositoryController' => 'DiffusionController', 2556 2557 'DiffusionRepositoryCreateController' => 'DiffusionController', 2558 + 'DiffusionRepositoryEditActivateController' => 'DiffusionController', 2557 2559 'DiffusionRepositoryEditBasicController' => 'DiffusionController', 2558 2560 'DiffusionRepositoryEditController' => 'DiffusionController', 2559 2561 'DiffusionRepositoryEditEncodingController' => 'DiffusionController',
+1
src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
··· 67 67 '' => 'DiffusionRepositoryEditController', 68 68 'basic/' => 'DiffusionRepositoryEditBasicController', 69 69 'encoding/' => 'DiffusionRepositoryEditEncodingController', 70 + 'activate/' => 'DiffusionRepositoryEditActivateController', 70 71 ), 71 72 ), 72 73 'inline/' => array(
+66
src/applications/diffusion/controller/DiffusionRepositoryEditActivateController.php
··· 1 + <?php 2 + 3 + final class DiffusionRepositoryEditActivateController 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 + if ($request->isFormPost()) { 29 + $xaction = id(new PhabricatorRepositoryTransaction()) 30 + ->setTransactionType(PhabricatorRepositoryTransaction::TYPE_ACTIVATE) 31 + ->setNewValue(!$repository->isTracked()); 32 + 33 + $editor = id(new PhabricatorRepositoryEditor()) 34 + ->setContinueOnNoEffect(true) 35 + ->setContentSourceFromRequest($request) 36 + ->setActor($viewer) 37 + ->applyTransactions($repository, array($xaction)); 38 + 39 + return id(new AphrontReloadResponse())->setURI($edit_uri); 40 + } 41 + 42 + $dialog = id(new AphrontDialogView()) 43 + ->setUser($viewer); 44 + 45 + if ($repository->isTracked()) { 46 + $dialog 47 + ->setTitle(pht('Deactivate Repository?')) 48 + ->appendChild( 49 + pht('Deactivate this repository?')) 50 + ->addSubmitButton(pht('Deactivate Repository')) 51 + ->addCancelButton($edit_uri); 52 + } else { 53 + $dialog 54 + ->setTitle(pht('Activate Repository?')) 55 + ->appendChild( 56 + pht('Activate this repository?')) 57 + ->addSubmitButton(pht('Activate Repository')) 58 + ->addCancelButton($edit_uri); 59 + } 60 + 61 + return id(new AphrontDialogResponse()) 62 + ->setDialog($dialog); 63 + } 64 + 65 + 66 + }
+30 -2
src/applications/diffusion/controller/DiffusionRepositoryEditController.php
··· 18 18 19 19 $title = pht('Edit %s', $repository->getName()); 20 20 21 - $content[] = id(new PHUIHeaderView()) 21 + $header = id(new PHUIHeaderView()) 22 22 ->setHeader($title); 23 + if (!$repository->isTracked()) { 24 + $header->addTag( 25 + id(new PhabricatorTagView()) 26 + ->setType(PhabricatorTagView::TYPE_STATE) 27 + ->setName(pht('Inactive')) 28 + ->setBackgroundColor(PhabricatorTagView::COLOR_BLACK)); 29 + } 30 + 31 + $content[] = $header; 23 32 24 33 $content[] = $this->buildBasicActions($repository); 25 34 $content[] = $this->buildBasicProperties($repository); ··· 82 91 ->setIcon('edit') 83 92 ->setName(pht('Edit Basic Information')) 84 93 ->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/')) 85 - ->setDisabled(!$can_edit); 94 + ->setDisabled(!$can_edit) 95 + ->setWorkflow(!$can_edit); 86 96 $view->addAction($edit); 97 + 98 + $activate = id(new PhabricatorActionView()) 99 + ->setHref( 100 + $this->getRepositoryControllerURI($repository, 'edit/activate/')) 101 + ->setDisabled(!$can_edit) 102 + ->setWorkflow(true); 103 + 104 + if ($repository->isTracked()) { 105 + $activate 106 + ->setIcon('disable') 107 + ->setName(pht('Deactivate Repository')); 108 + } else { 109 + $activate 110 + ->setIcon('enable') 111 + ->setName(pht('Activate Repository')); 112 + } 113 + 114 + $view->addAction($activate); 87 115 88 116 return $view; 89 117 }
+7
src/applications/repository/editor/PhabricatorRepositoryEditor.php
··· 6 6 public function getTransactionTypes() { 7 7 $types = parent::getTransactionTypes(); 8 8 9 + $types[] = PhabricatorRepositoryTransaction::TYPE_ACTIVATE; 9 10 $types[] = PhabricatorRepositoryTransaction::TYPE_NAME; 10 11 $types[] = PhabricatorRepositoryTransaction::TYPE_DESCRIPTION; 11 12 $types[] = PhabricatorRepositoryTransaction::TYPE_ENCODING; ··· 18 19 PhabricatorApplicationTransaction $xaction) { 19 20 20 21 switch ($xaction->getTransactionType()) { 22 + case PhabricatorRepositoryTransaction::TYPE_ACTIVATE: 23 + return $object->isTracked(); 21 24 case PhabricatorRepositoryTransaction::TYPE_NAME: 22 25 return $object->getName(); 23 26 case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION: ··· 32 35 PhabricatorApplicationTransaction $xaction) { 33 36 34 37 switch ($xaction->getTransactionType()) { 38 + case PhabricatorRepositoryTransaction::TYPE_ACTIVATE: 35 39 case PhabricatorRepositoryTransaction::TYPE_NAME: 36 40 case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION: 37 41 case PhabricatorRepositoryTransaction::TYPE_ENCODING: ··· 44 48 PhabricatorApplicationTransaction $xaction) { 45 49 46 50 switch ($xaction->getTransactionType()) { 51 + case PhabricatorRepositoryTransaction::TYPE_ACTIVATE: 52 + $object->setDetail('tracking-enabled', $xaction->getNewValue()); 53 + break; 47 54 case PhabricatorRepositoryTransaction::TYPE_NAME: 48 55 $object->setName($xaction->getNewValue()); 49 56 break;
+11
src/applications/repository/storage/PhabricatorRepositoryTransaction.php
··· 3 3 final class PhabricatorRepositoryTransaction 4 4 extends PhabricatorApplicationTransaction { 5 5 6 + const TYPE_ACTIVATE = 'repo:activate'; 6 7 const TYPE_NAME = 'repo:name'; 7 8 const TYPE_DESCRIPTION = 'repo:description'; 8 9 const TYPE_ENCODING = 'repo:encoding'; ··· 26 27 $new = $this->getNewValue(); 27 28 28 29 switch ($this->getTransactionType()) { 30 + case self::TYPE_ACTIVATE: 31 + if ($new) { 32 + return pht( 33 + '%s activated this repository.', 34 + $this->renderHandleLink($author_phid)); 35 + } else { 36 + return pht( 37 + '%s deactivated this repository.', 38 + $this->renderHandleLink($author_phid)); 39 + } 29 40 case self::TYPE_NAME: 30 41 return pht( 31 42 '%s renamed this repository from "%s" to "%s".',