diff --git a/src/applications/project/application/PhabricatorProjectApplication.php b/src/applications/project/application/PhabricatorProjectApplication.php index 5f6f7add9f..60e4412273 100644 --- a/src/applications/project/application/PhabricatorProjectApplication.php +++ b/src/applications/project/application/PhabricatorProjectApplication.php @@ -1,138 +1,147 @@ <?php final class PhabricatorProjectApplication extends PhabricatorApplication { public function getName() { return pht('Projects'); } public function getShortDescription() { return pht('Get Organized'); } public function isPinnedByDefault(PhabricatorUser $viewer) { return true; } public function getBaseURI() { return '/project/'; } public function getFontIcon() { 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*)/panel/' => $this->getPanelRouting('PhabricatorProjectPanelController'), 'subprojects/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectSubprojectsController', 'milestones/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectMilestonesController', 'board/(?P<id>[1-9]\d*)/'. '(?P<filter>filter/)?'. '(?:query/(?P<queryKey>[^/]+)/)?' => 'PhabricatorProjectBoardViewController', 'move/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectMoveController', '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', ), 'update/(?P<id>[1-9]\d*)/(?P<action>[^/]+)/' => 'PhabricatorProjectUpdateController', 'history/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectHistoryController', '(?P<action>watch|unwatch)/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectWatchController', 'silence/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectSilenceController', ), '/tag/' => array( '(?P<slug>[^/]+)/' => 'PhabricatorProjectViewController', '(?P<slug>[^/]+)/board/' => 'PhabricatorProjectBoardViewController', ), ); } public function getQuickCreateItems(PhabricatorUser $viewer) { return id(new PhabricatorProjectEditEngine()) ->setViewer($viewer) ->loadQuickCreateItems(); } 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 getHelpDocumentationArticles(PhabricatorUser $viewer) { + return array( + array( + 'name' => pht('Projects User Guide'), + 'href' => PhabricatorEnv::getDoclink('Projects User Guide'), + ), + ); + } + } diff --git a/src/docs/user/userguide/projects.diviner b/src/docs/user/userguide/projects.diviner new file mode 100644 index 0000000000..77bc3523c7 --- /dev/null +++ b/src/docs/user/userguide/projects.diviner @@ -0,0 +1,53 @@ +@title Projects User Guide +@group userguide + +Organize users and objects with projects. + +Overview +======== + +NOTE: This document is only partially complete. + +Phabricator projects are flexible groups of users and objects. + + +Joining Projects +================ + +Once you join a project, you become a member and will receive mail sent to the +project, like a mailing list. For example, if a project is added as a +subscriber on a task or a reviewer on a revision, you will receive mail about +that task or revision. + +If you'd prefer not to receive mail sent to a project, you can go to +{nav Members} and select {nav Disable Mail}. If you disable mail for a project, +you will no longer receive mail sent to the project. + + +Watching Projects +================= + +Watching a project allows you to closely follow all activity related to a +project. + +You can **watch** a project by clicking {nav Watch Project} on the project +page. To stop watching a project, click {nav Unwatch Project}. + +When you watch a project, you will receive a copy of mail about any objects +(like tasks or revisions) that are tagged with the project, or that the project +is a subscriber, reviewer, or auditor for. For moderately active projects, this +may be a large volume of mail. + + +Edit Notifications +================== + +Edit notifications are generated when project details (like the project +description, name, or icon) are updated, or when users join or leave projects. + +By default, these notifications are are only sent to the acting user. These +notifications are usually not very interesting, and project mail is already +complicated by members and watchers. + +If you'd like to receive edit notifications for a project, you can write a +Herald rule to keep you in the loop.