@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
at upstream/main 157 lines 4.0 kB view raw
1<?php 2 3 4final class DiffusionCloneURIView extends AphrontView { 5 6 private $repository; 7 private $repositoryURI; 8 private $displayURI; 9 10 public function setRepository(PhabricatorRepository $repository) { 11 $this->repository = $repository; 12 return $this; 13 } 14 15 public function getRepository() { 16 return $this->repository; 17 } 18 19 public function setRepositoryURI(PhabricatorRepositoryURI $repository_uri) { 20 $this->repositoryURI = $repository_uri; 21 return $this; 22 } 23 24 public function getRepositoryURI() { 25 return $this->repositoryURI; 26 } 27 28 public function setDisplayURI($display_uri) { 29 $this->displayURI = $display_uri; 30 return $this; 31 } 32 33 public function getDisplayURI() { 34 return $this->displayURI; 35 } 36 37 public function render() { 38 $viewer = $this->getViewer(); 39 40 require_celerity_resource('diffusion-icons-css'); 41 42 Javelin::initBehavior('select-content'); 43 Javelin::initBehavior('phabricator-clipboard-copy'); 44 45 $uri_id = celerity_generate_unique_node_id(); 46 47 $display = $this->getDisplayURI(); 48 49 $input = javelin_tag( 50 'input', 51 array( 52 'id' => $uri_id, 53 'type' => 'text', 54 'value' => $display, 55 'class' => 'diffusion-clone-uri', 56 'readonly' => 'true', 57 'sigil' => 'select-content', 58 'meta' => array( 59 'selectID' => $uri_id, 60 'once' => true, 61 ), 62 )); 63 64 $uri = $this->getRepositoryURI(); 65 switch ($uri->getEffectiveIOType()) { 66 case PhabricatorRepositoryURI::IO_READ: 67 $io_icon = 'fa-eye'; 68 $io_tip = pht('Read-Only'); 69 break; 70 case PhabricatorRepositoryURI::IO_READWRITE: 71 $io_icon = 'fa-download'; 72 $io_tip = pht('Read / Write'); 73 break; 74 default: 75 $io_icon = 'fa-cloud'; 76 $io_tip = pht('External'); 77 break; 78 } 79 80 $io = javelin_tag( 81 'span', 82 array( 83 'class' => 'diffusion-clone-uri-io', 84 'sigil' => 'has-tooltip', 85 'meta' => array( 86 'tip' => $io_tip, 87 ), 88 ), 89 id(new PHUIIconView())->setIcon($io_icon)); 90 91 $copy = id(new PHUIButtonView()) 92 ->setTag('a') 93 ->setColor(PHUIButtonView::GREY) 94 ->setIcon('fa-clipboard') 95 ->setHref('#') 96 ->addSigil('clipboard-copy') 97 ->addSigil('has-tooltip') 98 ->setMetadata( 99 array( 100 'tip' => pht('Copy repository URI'), 101 'text' => $display, 102 'successMessage' => pht('Repository URI copied.'), 103 'errorMessage' => pht('Copying failed.'), 104 )); 105 106 switch ($uri->getEffectiveIOType()) { 107 case PhabricatorRepositoryURI::IO_READ: 108 case PhabricatorRepositoryURI::IO_READWRITE: 109 switch ($uri->getBuiltinProtocol()) { 110 case PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH: 111 $auth_uri = id(new PhabricatorSSHKeysSettingsPanel()) 112 ->setViewer($viewer) 113 ->setUser($viewer) 114 ->getPanelURI(); 115 $auth_tip = pht('Manage SSH Keys'); 116 $auth_disabled = false; 117 break; 118 default: 119 $auth_uri = id(new DiffusionSetPasswordSettingsPanel()) 120 ->setViewer($viewer) 121 ->setUser($viewer) 122 ->getPanelURI(); 123 $auth_tip = pht('Manage Password'); 124 $auth_disabled = false; 125 break; 126 } 127 break; 128 default: 129 $auth_disabled = true; 130 $auth_tip = pht('External'); 131 $auth_uri = '#'; 132 break; 133 } 134 135 $credentials = id(new PHUIButtonView()) 136 ->setTag('a') 137 ->setColor(PHUIButtonView::GREY) 138 ->setIcon('fa-key') 139 ->setTooltip($auth_tip) 140 ->setHref($auth_uri) 141 ->setDisabled($auth_disabled); 142 143 $elements = array(); 144 $elements[] = $io; 145 $elements[] = $input; 146 $elements[] = $copy; 147 $elements[] = $credentials; 148 149 return phutil_tag( 150 'div', 151 array( 152 'class' => 'diffusion-clone-uri-wrapper', 153 ), 154 $elements); 155 } 156 157}