mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-28 12:08:14 +01:00
Summary: Depends on D20278. Ref T5474. This change creates some new empty objects that do nothing, and some new views for looking at those objects. There's no actual useful behavior yet. The "Edit" controller is custom instead of being driven by "EditEngine" because I expect it to be a Herald-style "add new rules" UI, and EditEngine isn't a clean match for those today (although maybe I'll try to move it over). The general idea here is: - Triggers are "real" objects with a real PHID. - Each trigger has a name and a collection of rules, like "Change status to: X" or "Play sound: Y". - Each column may be bound to a trigger. - Multiple columns may share the same trigger. - Later UI refinements will make the cases around "copy trigger" vs "reference the same trigger" vs "create a new ad-hoc trigger" more clear. - Triggers have their own edit policy. - Triggers are always world-visible, like Herald rules. Test Plan: Poked around, created some empty trigger objects, and nothing exploded. This doesn't actually do anything useful yet since triggers can't have any rule behavior and columns can't actually be bound to triggers. Reviewers: amckinley Reviewed By: amckinley Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam Maniphest Tasks: T5474 Differential Revision: https://secure.phabricator.com/D20279
162 lines
5.6 KiB
PHP
162 lines
5.6 KiB
PHP
<?php
|
|
|
|
final class PhabricatorProjectApplication extends PhabricatorApplication {
|
|
|
|
public function getName() {
|
|
return pht('Projects');
|
|
}
|
|
|
|
public function getShortDescription() {
|
|
return pht('Projects, Tags, and Teams');
|
|
}
|
|
|
|
public function isPinnedByDefault(PhabricatorUser $viewer) {
|
|
return true;
|
|
}
|
|
|
|
public function getBaseURI() {
|
|
return '/project/';
|
|
}
|
|
|
|
public function getIcon() {
|
|
return 'fa-briefcase';
|
|
}
|
|
|
|
public function getFlavorText() {
|
|
return pht('Group stuff into big piles.');
|
|
}
|
|
|
|
public function getRemarkupRules() {
|
|
return array(
|
|
new ProjectRemarkupRule(),
|
|
);
|
|
}
|
|
|
|
public function getEventListeners() {
|
|
return array(
|
|
new PhabricatorProjectUIEventListener(),
|
|
);
|
|
}
|
|
|
|
public function getRoutes() {
|
|
return array(
|
|
'/project/' => array(
|
|
'(?:query/(?P<queryKey>[^/]+)/)?' => 'PhabricatorProjectListController',
|
|
'filter/(?P<filter>[^/]+)/' => 'PhabricatorProjectListController',
|
|
'archive/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectArchiveController',
|
|
'lock/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectLockController',
|
|
'members/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectMembersViewController',
|
|
'members/(?P<id>[1-9]\d*)/add/'
|
|
=> 'PhabricatorProjectMembersAddController',
|
|
'(?P<type>members|watchers)/(?P<id>[1-9]\d*)/remove/'
|
|
=> 'PhabricatorProjectMembersRemoveController',
|
|
'profile/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectProfileController',
|
|
'view/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectViewController',
|
|
'picture/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectEditPictureController',
|
|
$this->getEditRoutePattern('edit/')
|
|
=> 'PhabricatorProjectEditController',
|
|
'(?P<projectID>[1-9]\d*)/item/' => $this->getProfileMenuRouting(
|
|
'PhabricatorProjectMenuItemController'),
|
|
'subprojects/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectSubprojectsController',
|
|
'board/(?P<id>[1-9]\d*)/'.
|
|
'(?P<filter>filter/)?'.
|
|
'(?:query/(?P<queryKey>[^/]+)/)?'
|
|
=> 'PhabricatorProjectBoardViewController',
|
|
'move/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectMoveController',
|
|
'cover/' => 'PhabricatorProjectCoverController',
|
|
'board/(?P<projectID>[1-9]\d*)/' => array(
|
|
'edit/(?:(?P<id>\d+)/)?'
|
|
=> 'PhabricatorProjectColumnEditController',
|
|
'hide/(?:(?P<id>\d+)/)?'
|
|
=> 'PhabricatorProjectColumnHideController',
|
|
'column/(?:(?P<id>\d+)/)?'
|
|
=> 'PhabricatorProjectColumnDetailController',
|
|
'import/'
|
|
=> 'PhabricatorProjectBoardImportController',
|
|
'reorder/'
|
|
=> 'PhabricatorProjectBoardReorderController',
|
|
'disable/'
|
|
=> 'PhabricatorProjectBoardDisableController',
|
|
'manage/'
|
|
=> 'PhabricatorProjectBoardManageController',
|
|
'background/'
|
|
=> 'PhabricatorProjectBoardBackgroundController',
|
|
),
|
|
'trigger/' => array(
|
|
$this->getQueryRoutePattern() =>
|
|
'PhabricatorProjectTriggerListController',
|
|
'(?P<id>[1-9]\d*)/' =>
|
|
'PhabricatorProjectTriggerViewController',
|
|
$this->getEditRoutePattern('edit/') =>
|
|
'PhabricatorProjectTriggerEditController',
|
|
),
|
|
'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/'
|
|
=> 'PhabricatorProjectUpdateController',
|
|
'manage/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectManageController',
|
|
'(?P<action>watch|unwatch)/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectWatchController',
|
|
'silence/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectSilenceController',
|
|
'warning/(?P<id>[1-9]\d*)/'
|
|
=> 'PhabricatorProjectSubprojectWarningController',
|
|
'default/(?P<projectID>[1-9]\d*)/(?P<target>[^/]+)/'
|
|
=> 'PhabricatorProjectDefaultController',
|
|
),
|
|
'/tag/' => array(
|
|
'(?P<slug>[^/]+)/' => 'PhabricatorProjectViewController',
|
|
'(?P<slug>[^/]+)/board/' => 'PhabricatorProjectBoardViewController',
|
|
),
|
|
);
|
|
}
|
|
|
|
protected function getCustomCapabilities() {
|
|
return array(
|
|
ProjectCreateProjectsCapability::CAPABILITY => array(),
|
|
ProjectCanLockProjectsCapability::CAPABILITY => array(
|
|
'default' => PhabricatorPolicies::POLICY_ADMIN,
|
|
),
|
|
ProjectDefaultViewCapability::CAPABILITY => array(
|
|
'caption' => pht('Default view policy for newly created projects.'),
|
|
'template' => PhabricatorProjectProjectPHIDType::TYPECONST,
|
|
'capability' => PhabricatorPolicyCapability::CAN_VIEW,
|
|
),
|
|
ProjectDefaultEditCapability::CAPABILITY => array(
|
|
'caption' => pht('Default edit policy for newly created projects.'),
|
|
'template' => PhabricatorProjectProjectPHIDType::TYPECONST,
|
|
'capability' => PhabricatorPolicyCapability::CAN_EDIT,
|
|
),
|
|
ProjectDefaultJoinCapability::CAPABILITY => array(
|
|
'caption' => pht('Default join policy for newly created projects.'),
|
|
'template' => PhabricatorProjectProjectPHIDType::TYPECONST,
|
|
'capability' => PhabricatorPolicyCapability::CAN_JOIN,
|
|
),
|
|
);
|
|
}
|
|
|
|
public function getApplicationSearchDocumentTypes() {
|
|
return array(
|
|
PhabricatorProjectProjectPHIDType::TYPECONST,
|
|
);
|
|
}
|
|
|
|
public function getApplicationOrder() {
|
|
return 0.150;
|
|
}
|
|
|
|
public function getHelpDocumentationArticles(PhabricatorUser $viewer) {
|
|
return array(
|
|
array(
|
|
'name' => pht('Projects User Guide'),
|
|
'href' => PhabricatorEnv::getDoclink('Projects User Guide'),
|
|
),
|
|
);
|
|
}
|
|
|
|
}
|