@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
3final class PhabricatorDiffusionApplication extends PhabricatorApplication {
4
5 public function getName() {
6 return pht('Diffusion');
7 }
8
9 public function getShortDescription() {
10 return pht('Host and Browse Repositories');
11 }
12
13 public function getBaseURI() {
14 return '/diffusion/';
15 }
16
17 public function getIcon() {
18 return 'fa-code';
19 }
20
21 public function isPinnedByDefault(PhabricatorUser $viewer) {
22 return true;
23 }
24
25 public function getHelpDocumentationArticles(PhabricatorUser $viewer) {
26 return array(
27 array(
28 'name' => pht('Diffusion User Guide'),
29 'href' => PhabricatorEnv::getDoclink('Diffusion User Guide'),
30 ),
31 array(
32 'name' => pht('Audit User Guide'),
33 'href' => PhabricatorEnv::getDoclink('Audit User Guide'),
34 ),
35 );
36 }
37
38 public function getRemarkupRules() {
39 return array(
40 new DiffusionCommitRemarkupRule(),
41 new DiffusionRepositoryRemarkupRule(),
42 new DiffusionRepositoryByIDRemarkupRule(),
43 new DiffusionSourceLinkRemarkupRule(),
44 );
45 }
46
47 public function getMonograms() {
48 // This is a special case, as r and R mean different things.
49 return array('r', 'R');
50 }
51
52 public function getRoutes() {
53 $repository_routes = array(
54 '/' => array(
55 '' => 'DiffusionRepositoryController',
56 'repository/(?P<dblob>.*)' => 'DiffusionRepositoryController',
57 'change/(?P<dblob>.*)' => 'DiffusionChangeController',
58 'clone/' => 'DiffusionCloneController',
59 'history/(?P<dblob>.*)' => 'DiffusionHistoryController',
60 'browse/(?P<dblob>.*)' => 'DiffusionBrowseController',
61 'document/(?P<dblob>.*)'
62 => 'DiffusionDocumentController',
63 'blame/(?P<dblob>.*)'
64 => 'DiffusionBlameController',
65 'lastmodified/(?P<dblob>.*)' => 'DiffusionLastModifiedController',
66 'diff/' => 'DiffusionDiffController',
67 'tags/(?P<dblob>.*)' => 'DiffusionTagListController',
68 'branches/(?P<dblob>.*)' => 'DiffusionBranchTableController',
69 'refs/(?P<dblob>.*)' => 'DiffusionRefTableController',
70 'lint/(?P<dblob>.*)' => 'DiffusionLintController',
71 'commit/(?P<commit>[a-z0-9]+)' => array(
72 '/?' => 'DiffusionCommitController',
73 '/branches/' => 'DiffusionCommitBranchesController',
74 '/tags/' => 'DiffusionCommitTagsController',
75 ),
76 'compare/' => 'DiffusionCompareController',
77 'manage/(?:(?P<panel>[^/]+)/)?'
78 => 'DiffusionRepositoryManagePanelsController',
79 'uri/' => array(
80 'view/(?P<id>[0-9]\d*)/' => 'DiffusionRepositoryURIViewController',
81 'disable/(?P<id>[0-9]\d*)/'
82 => 'DiffusionRepositoryURIDisableController',
83 $this->getEditRoutePattern('edit/')
84 => 'DiffusionRepositoryURIEditController',
85 'credential/(?P<id>[0-9]\d*)/(?P<action>edit|remove)/'
86 => 'DiffusionRepositoryURICredentialController',
87 ),
88 'edit/' => array(
89 'activate/' => 'DiffusionRepositoryEditActivateController',
90 'dangerous/' => 'DiffusionRepositoryEditDangerousController',
91 'enormous/' => 'DiffusionRepositoryEditEnormousController',
92 'delete/' => 'DiffusionRepositoryEditDeleteController',
93 'update/' => 'DiffusionRepositoryEditUpdateController',
94 'publish/' => 'DiffusionRepositoryEditPublishingController',
95 'testautomation/' => 'DiffusionRepositoryTestAutomationController',
96 ),
97 'pathtree/(?P<dblob>.*)' => 'DiffusionPathTreeController',
98 ),
99
100 // NOTE: This must come after the rules above; it just gives us a
101 // catch-all for serving repositories over HTTP. We must accept requests
102 // without the trailing "/" because SVN commands don't necessarily
103 // include it.
104 '(?:/.*)?' => 'DiffusionRepositoryDefaultController',
105 );
106
107 return array(
108 '/(?:'.
109 'r(?P<repositoryCallsign>[A-Z]+)'.
110 '|'.
111 'R(?P<repositoryID>[1-9]\d*):'.
112 ')(?P<commit>[a-f0-9]+)'
113 => 'DiffusionCommitController',
114
115 '/source/(?P<repositoryShortName>[^/]+)'
116 => $repository_routes,
117
118 '/diffusion/' => array(
119 $this->getQueryRoutePattern()
120 => 'DiffusionRepositoryListController',
121 $this->getEditRoutePattern('edit/') =>
122 'DiffusionRepositoryEditController',
123 'pushlog/' => array(
124 $this->getQueryRoutePattern() => 'DiffusionPushLogListController',
125 'view/(?P<id>\d+)/' => 'DiffusionPushEventViewController',
126 ),
127 'synclog/' => array(
128 $this->getQueryRoutePattern() => 'DiffusionSyncLogListController',
129 ),
130 'pulllog/' => array(
131 $this->getQueryRoutePattern() => 'DiffusionPullLogListController',
132 ),
133 '(?P<repositoryCallsign>[A-Z]+)' => $repository_routes,
134 '(?P<repositoryID>[1-9]\d*)' => $repository_routes,
135
136 'identity/' => array(
137 $this->getQueryRoutePattern() =>
138 'DiffusionIdentityListController',
139 $this->getEditRoutePattern('edit/') =>
140 'DiffusionIdentityEditController',
141 'view/(?P<id>[^/]+)/' =>
142 'DiffusionIdentityViewController',
143 ),
144
145 'inline/' => array(
146 'edit/(?P<phid>[^/]+)/' => 'DiffusionInlineCommentController',
147 ),
148 'services/' => array(
149 'path/' => array(
150 'complete/' => 'DiffusionPathCompleteController',
151 'validate/' => 'DiffusionPathValidateController',
152 ),
153 ),
154 'symbol/(?P<name>[^/]+)/' => 'DiffusionSymbolController',
155 'external/' => 'DiffusionExternalController',
156 'lint/' => 'DiffusionLintController',
157
158 'commit/' => array(
159 $this->getQueryRoutePattern() =>
160 'DiffusionCommitListController',
161 $this->getEditRoutePattern('edit/') =>
162 'DiffusionCommitEditController',
163 ),
164 'picture/(?P<id>[0-9]\d*)/'
165 => 'DiffusionRepositoryProfilePictureController',
166 ),
167 );
168 }
169
170 public function getApplicationOrder() {
171 return 0.120;
172 }
173
174 protected function getCustomCapabilities() {
175 return array(
176 DiffusionDefaultViewCapability::CAPABILITY => array(
177 'template' => PhabricatorRepositoryRepositoryPHIDType::TYPECONST,
178 'capability' => PhabricatorPolicyCapability::CAN_VIEW,
179 ),
180 DiffusionDefaultEditCapability::CAPABILITY => array(
181 'default' => PhabricatorPolicies::POLICY_ADMIN,
182 'template' => PhabricatorRepositoryRepositoryPHIDType::TYPECONST,
183 'capability' => PhabricatorPolicyCapability::CAN_EDIT,
184 ),
185 DiffusionDefaultPushCapability::CAPABILITY => array(
186 'template' => PhabricatorRepositoryRepositoryPHIDType::TYPECONST,
187 ),
188 DiffusionCreateRepositoriesCapability::CAPABILITY => array(
189 'default' => PhabricatorPolicies::POLICY_ADMIN,
190 ),
191 PhabricatorRepositoryIdentityEditViewCapability::CAPABILITY => array(
192 'default' => PhabricatorPolicies::POLICY_USER,
193 ),
194 );
195 }
196
197 public function getMailCommandObjects() {
198 return array(
199 'commit' => array(
200 'name' => pht('Email Commands: Commits'),
201 'header' => pht('Interacting with Commits'),
202 'object' => new PhabricatorRepositoryCommit(),
203 'summary' => pht(
204 'This page documents the commands you can use to interact with '.
205 'commits and audits in Diffusion.'),
206 ),
207 );
208 }
209
210 public function getApplicationSearchDocumentTypes() {
211 return array(
212 PhabricatorRepositoryCommitPHIDType::TYPECONST,
213 );
214 }
215
216}