@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<?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}