@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 PhabricatorProjectApplication extends PhabricatorApplication {
4
5 public function getName() {
6 return pht('Projects');
7 }
8
9 public function getShortDescription() {
10 return pht('Projects, Tags, and Teams');
11 }
12
13 public function isPinnedByDefault(PhabricatorUser $viewer) {
14 return true;
15 }
16
17 public function getBaseURI() {
18 return '/project/';
19 }
20
21 public function getIcon() {
22 return 'fa-briefcase';
23 }
24
25 public function getFlavorText() {
26 return pht('Group stuff into big piles.');
27 }
28
29 public function getRemarkupRules() {
30 return array(
31 new ProjectRemarkupRule(),
32 );
33 }
34
35 public function getEventListeners() {
36 return array(
37 new PhabricatorProjectUIEventListener(),
38 );
39 }
40
41 public function getRoutes() {
42 return array(
43 '/project/' => array(
44 '(?:query/(?P<queryKey>[^/]+)/)?' => 'PhabricatorProjectListController',
45 'filter/(?P<filter>[^/]+)/' => 'PhabricatorProjectListController',
46 'archive/(?P<id>[1-9]\d*)/'
47 => 'PhabricatorProjectArchiveController',
48 'lock/(?P<id>[1-9]\d*)/'
49 => 'PhabricatorProjectLockController',
50 'members/(?P<id>[1-9]\d*)/'
51 => 'PhabricatorProjectMembersViewController',
52 'members/(?P<id>[1-9]\d*)/add/'
53 => 'PhabricatorProjectMembersAddController',
54 '(?P<type>members|watchers)/(?P<id>[1-9]\d*)/remove/'
55 => 'PhabricatorProjectMembersRemoveController',
56 'profile/(?P<id>[1-9]\d*)/'
57 => 'PhabricatorProjectProfileController',
58 'view/(?P<id>[1-9]\d*)/'
59 => 'PhabricatorProjectViewController',
60 'picture/(?P<id>[1-9]\d*)/'
61 => 'PhabricatorProjectEditPictureController',
62 $this->getEditRoutePattern('edit/')
63 => 'PhabricatorProjectEditController',
64 '(?P<projectID>[1-9]\d*)/item/' => $this->getProfileMenuRouting(
65 'PhabricatorProjectMenuItemController'),
66 'subprojects/(?P<id>[1-9]\d*)/'
67 => 'PhabricatorProjectSubprojectsController',
68 'board/(?P<id>[1-9]\d*)/'.
69 '(?:query/(?P<queryKey>[^/]+)/)?'
70 => 'PhabricatorProjectBoardViewController',
71 'move/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectMoveController',
72 'cover/' => 'PhabricatorProjectCoverController',
73 'reports/(?P<projectID>[1-9]\d*)/' =>
74 'PhabricatorProjectReportsController',
75 'board/(?P<projectID>[1-9]\d*)/' => array(
76 'edit/(?:(?P<id>\d+)/)?'
77 => 'PhabricatorProjectColumnEditController',
78 'hide/(?:(?P<id>\d+)/)?'
79 => 'PhabricatorProjectColumnHideController',
80 'column/(?:(?P<id>\d+)/)?'
81 => 'PhabricatorProjectColumnDetailController',
82 'viewquery/(?P<columnID>\d+)/'
83 => 'PhabricatorProjectColumnViewQueryController',
84 'bulk/(?P<columnID>\d+)/'
85 => 'PhabricatorProjectColumnBulkEditController',
86 'bulkmove/(?P<columnID>\d+)/(?P<mode>project|column)/'
87 => 'PhabricatorProjectColumnBulkMoveController',
88 'import/'
89 => 'PhabricatorProjectBoardImportController',
90 'reorder/'
91 => 'PhabricatorProjectBoardReorderController',
92 'disable/'
93 => 'PhabricatorProjectBoardDisableController',
94 'manage/'
95 => 'PhabricatorProjectBoardManageController',
96 'background/'
97 => 'PhabricatorProjectBoardBackgroundController',
98 'default/(?P<target>[^/]+)/'
99 => 'PhabricatorProjectBoardDefaultController',
100 'filter/(?:query/(?P<queryKey>[^/]+)/)?'
101 => 'PhabricatorProjectBoardFilterController',
102 'reload/'
103 => 'PhabricatorProjectBoardReloadController',
104 ),
105 'column/' => array(
106 'remove/(?P<id>\d+)/' =>
107 'PhabricatorProjectColumnRemoveTriggerController',
108 ),
109 'trigger/' => array(
110 $this->getQueryRoutePattern() =>
111 'PhabricatorProjectTriggerListController',
112 '(?P<id>[1-9]\d*)/' =>
113 'PhabricatorProjectTriggerViewController',
114 $this->getEditRoutePattern('edit/') =>
115 'PhabricatorProjectTriggerEditController',
116 ),
117 'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
118 => 'PhabricatorProjectUpdateController',
119 'manage/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectManageController',
120 '(?P<action>watch|unwatch)/(?P<id>[1-9]\d*)/'
121 => 'PhabricatorProjectWatchController',
122 'silence/(?P<id>[1-9]\d*)/'
123 => 'PhabricatorProjectSilenceController',
124 'warning/(?P<id>[1-9]\d*)/'
125 => 'PhabricatorProjectSubprojectWarningController',
126 ),
127 '/tag/' => array(
128 '(?P<slug>[^/]+)/' => 'PhabricatorProjectViewController',
129 '(?P<slug>[^/]+)/board/' => 'PhabricatorProjectBoardViewController',
130 ),
131 );
132 }
133
134 protected function getCustomCapabilities() {
135 return array(
136 ProjectCreateProjectsCapability::CAPABILITY => array(),
137 ProjectCanLockProjectsCapability::CAPABILITY => array(
138 'default' => PhabricatorPolicies::POLICY_ADMIN,
139 ),
140 ProjectDefaultViewCapability::CAPABILITY => array(
141 'caption' => pht('Default view policy for newly created projects.'),
142 'template' => PhabricatorProjectProjectPHIDType::TYPECONST,
143 'capability' => PhabricatorPolicyCapability::CAN_VIEW,
144 ),
145 ProjectDefaultEditCapability::CAPABILITY => array(
146 'caption' => pht('Default edit policy for newly created projects.'),
147 'template' => PhabricatorProjectProjectPHIDType::TYPECONST,
148 'capability' => PhabricatorPolicyCapability::CAN_EDIT,
149 ),
150 ProjectDefaultJoinCapability::CAPABILITY => array(
151 'caption' => pht('Default join policy for newly created projects.'),
152 'template' => PhabricatorProjectProjectPHIDType::TYPECONST,
153 'capability' => PhabricatorPolicyCapability::CAN_JOIN,
154 ),
155 );
156 }
157
158 public function getApplicationSearchDocumentTypes() {
159 return array(
160 PhabricatorProjectProjectPHIDType::TYPECONST,
161 );
162 }
163
164 public function getApplicationOrder() {
165 return 0.150;
166 }
167
168 public function getHelpDocumentationArticles(PhabricatorUser $viewer) {
169 return array(
170 array(
171 'name' => pht('Projects User Guide'),
172 'href' => PhabricatorEnv::getDoclink('Projects User Guide'),
173 ),
174 );
175 }
176
177}