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

Flesh out more web UI actions for new URI interface

Summary:
Ref T10748.

- Allow users to add new URIs by clicking a button instead of knowing a secret URI.
- Validate that URIs are actually valid URIs.
- Add enable/disable action and strings.

Test Plan:
- Created a new URI.
- Tried to create a nonsense URI, created a good URI.
- Enabled/disabled a URI.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10748

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

+138 -7
+3 -1
src/__phutil_library_map__.php
··· 789 789 'DiffusionRepositorySymbolsManagementPanel' => 'applications/diffusion/management/DiffusionRepositorySymbolsManagementPanel.php', 790 790 'DiffusionRepositoryTag' => 'applications/diffusion/data/DiffusionRepositoryTag.php', 791 791 'DiffusionRepositoryTestAutomationController' => 'applications/diffusion/controller/DiffusionRepositoryTestAutomationController.php', 792 + 'DiffusionRepositoryURIDisableController' => 'applications/diffusion/controller/DiffusionRepositoryURIDisableController.php', 792 793 'DiffusionRepositoryURIEditController' => 'applications/diffusion/controller/DiffusionRepositoryURIEditController.php', 793 794 'DiffusionRepositoryURIViewController' => 'applications/diffusion/controller/DiffusionRepositoryURIViewController.php', 794 795 'DiffusionRepositoryURIsIndexEngineExtension' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsIndexEngineExtension.php', ··· 5019 5020 'DiffusionRepositorySymbolsManagementPanel' => 'DiffusionRepositoryManagementPanel', 5020 5021 'DiffusionRepositoryTag' => 'Phobject', 5021 5022 'DiffusionRepositoryTestAutomationController' => 'DiffusionRepositoryEditController', 5022 - 'DiffusionRepositoryURIEditController' => 'DiffusionRepositoryEditController', 5023 + 'DiffusionRepositoryURIDisableController' => 'DiffusionController', 5024 + 'DiffusionRepositoryURIEditController' => 'DiffusionController', 5023 5025 'DiffusionRepositoryURIViewController' => 'DiffusionController', 5024 5026 'DiffusionRepositoryURIsIndexEngineExtension' => 'PhabricatorIndexEngineExtension', 5025 5027 'DiffusionRepositoryURIsManagementPanel' => 'DiffusionRepositoryManagementPanel',
+2
src/applications/diffusion/application/PhabricatorDiffusionApplication.php
··· 93 93 => 'DiffusionRepositoryManageController', 94 94 'uri/' => array( 95 95 'view/(?P<id>[0-9]\d*)/' => 'DiffusionRepositoryURIViewController', 96 + 'disable/(?P<id>[0-9]\d*)/' 97 + => 'DiffusionRepositoryURIDisableController', 96 98 $this->getEditRoutePattern('edit/') 97 99 => 'DiffusionRepositoryURIEditController', 98 100 ),
+72
src/applications/diffusion/controller/DiffusionRepositoryURIDisableController.php
··· 1 + <?php 2 + 3 + final class DiffusionRepositoryURIDisableController 4 + extends DiffusionController { 5 + 6 + public function handleRequest(AphrontRequest $request) { 7 + $response = $this->loadDiffusionContextForEdit(); 8 + if ($response) { 9 + return $response; 10 + } 11 + 12 + $viewer = $this->getViewer(); 13 + $drequest = $this->getDiffusionRequest(); 14 + $repository = $drequest->getRepository(); 15 + 16 + $id = $request->getURIData('id'); 17 + $uri = id(new PhabricatorRepositoryURIQuery()) 18 + ->setViewer($viewer) 19 + ->withIDs(array($id)) 20 + ->withRepositories(array($repository)) 21 + ->requireCapabilities( 22 + array( 23 + PhabricatorPolicyCapability::CAN_VIEW, 24 + PhabricatorPolicyCapability::CAN_EDIT, 25 + )) 26 + ->executeOne(); 27 + if (!$uri) { 28 + return new Aphront404Response(); 29 + } 30 + 31 + $is_disabled = $uri->getIsDisabled(); 32 + $view_uri = $uri->getViewURI(); 33 + 34 + if ($request->isFormPost()) { 35 + $xactions = array(); 36 + 37 + $xactions[] = id(new PhabricatorRepositoryURITransaction()) 38 + ->setTransactionType(PhabricatorRepositoryURITransaction::TYPE_DISABLE) 39 + ->setNewValue(!$is_disabled); 40 + 41 + $editor = id(new DiffusionURIEditor()) 42 + ->setActor($viewer) 43 + ->setContinueOnNoEffect(true) 44 + ->setContinueOnMissingFields(true) 45 + ->setContentSourceFromRequest($request) 46 + ->applyTransactions($uri, $xactions); 47 + 48 + return id(new AphrontRedirectResponse())->setURI($view_uri); 49 + } 50 + 51 + if ($is_disabled) { 52 + $title = pht('Enable URI'); 53 + $body = pht( 54 + 'Enable this URI? Any configured behaviors will begin working '. 55 + 'again.'); 56 + $button = pht('Enable URI'); 57 + } else { 58 + $title = pht('Disable URI'); 59 + $body = pht( 60 + 'Disable this URI? It will no longer be observed, fetched, mirrored, '. 61 + 'served or shown to users.'); 62 + $button = pht('Disable URI'); 63 + } 64 + 65 + return $this->newDialog() 66 + ->setTitle($title) 67 + ->appendParagraph($body) 68 + ->addCancelButton($view_uri) 69 + ->addSubmitButton($button); 70 + } 71 + 72 + }
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryURIEditController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryURIEditController 4 - extends DiffusionRepositoryEditController { 4 + extends DiffusionController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $response = $this->loadDiffusionContextForEdit();
+21 -1
src/applications/diffusion/controller/DiffusionRepositoryURIViewController.php
··· 82 82 83 83 private function buildCurtain(PhabricatorRepositoryURI $uri) { 84 84 $viewer = $this->getViewer(); 85 + $id = $uri->getID(); 85 86 86 87 $can_edit = PhabricatorPolicyFilter::hasCapability( 87 88 $viewer, 88 89 $uri, 89 90 PhabricatorPolicyCapability::CAN_EDIT); 90 91 91 - $edit_uri = $uri->getEditURI(); 92 92 93 93 $curtain = $this->newCurtainView($uri); 94 94 95 + $edit_uri = $uri->getEditURI(); 96 + 95 97 $curtain->addAction( 96 98 id(new PhabricatorActionView()) 97 99 ->setIcon('fa-pencil') 98 100 ->setName(pht('Edit URI')) 99 101 ->setHref($edit_uri) 100 102 ->setWorkflow(!$can_edit) 103 + ->setDisabled(!$can_edit)); 104 + 105 + if ($uri->getIsDisabled()) { 106 + $disable_name = pht('Enable URI'); 107 + $disable_icon = 'fa-check'; 108 + } else { 109 + $disable_name = pht('Disable URI'); 110 + $disable_icon = 'fa-ban'; 111 + } 112 + 113 + $disable_uri = $uri->getRepository()->getPathURI("uri/disable/{$id}/"); 114 + 115 + $curtain->addAction( 116 + id(new PhabricatorActionView()) 117 + ->setIcon($disable_icon) 118 + ->setName($disable_name) 119 + ->setHref($disable_uri) 120 + ->setWorkflow(true) 101 121 ->setDisabled(!$can_edit)); 102 122 103 123 return $curtain;
+19
src/applications/diffusion/editor/DiffusionURIEditor.php
··· 217 217 $errors[] = $error; 218 218 break; 219 219 } 220 + 221 + foreach ($xactions as $xaction) { 222 + $new_uri = $xaction->getNewValue(); 223 + if ($new_uri == $object->getURI()) { 224 + continue; 225 + } 226 + 227 + try { 228 + PhabricatorRepository::assertValidRemoteURI($new_uri); 229 + } catch (Exception $ex) { 230 + $errors[] = new PhabricatorApplicationTransactionValidationError( 231 + $type, 232 + pht('Invalid'), 233 + $ex->getMessage(), 234 + $xaction); 235 + continue; 236 + } 237 + } 238 + 220 239 break; 221 240 case PhabricatorRepositoryURITransaction::TYPE_IO: 222 241 $available = $object->getAvailableIOTypeOptions();
+8 -2
src/applications/diffusion/management/DiffusionRepositoryURIsManagementPanel.php
··· 91 91 null, 92 92 )); 93 93 94 - $doc_href = PhabricatorEnv::getDoclink( 95 - 'Diffusion User Guide: URIs'); 94 + $doc_href = PhabricatorEnv::getDoclink('Diffusion User Guide: URIs'); 95 + $add_href = $repository->getPathURI('uri/edit/'); 96 96 97 97 $header = id(new PHUIHeaderView()) 98 98 ->setHeader(pht('Repository URIs')) 99 + ->addActionLink( 100 + id(new PHUIButtonView()) 101 + ->setIcon('fa-plus') 102 + ->setHref($add_href) 103 + ->setTag('a') 104 + ->setText(pht('Add New URI'))) 99 105 ->addActionLink( 100 106 id(new PHUIButtonView()) 101 107 ->setIcon('fa-book')
+2 -2
src/applications/repository/storage/PhabricatorRepository.php
··· 1829 1829 1830 1830 throw new Exception( 1831 1831 pht( 1832 - "The URI protocol is unrecognized. It should begin ". 1833 - "'%s', '%s', '%s', '%s', '%s', '%s', or be in the form '%s'.", 1832 + 'The URI protocol is unrecognized. It should begin with '. 1833 + '"%s", "%s", "%s", "%s", "%s", "%s", or be in the form "%s".', 1834 1834 'ssh://', 1835 1835 'http://', 1836 1836 'https://',
+10
src/applications/repository/storage/PhabricatorRepositoryURITransaction.php
··· 51 51 $this->renderHandleLink($author_phid), 52 52 $old_label, 53 53 $new_label); 54 + case self::TYPE_DISABLE: 55 + if ($new) { 56 + return pht( 57 + '%s disabled this URI.', 58 + $this->renderHandleLink($author_phid)); 59 + } else { 60 + return pht( 61 + '%s enabled this URI.', 62 + $this->renderHandleLink($author_phid)); 63 + } 54 64 55 65 } 56 66