Skip to content

Commit

Permalink
Add default View, Edit, and Join Policies to Projects
Browse files Browse the repository at this point in the history
Summary: Fixes T6567, lets admins set a default policy for new Projects.

Test Plan: Changed the default Policy, created a new Project. Project had correct defaults.

Reviewers: btrahan, epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T6567

Differential Revision: https://secure.phabricator.com/D10890
  • Loading branch information
chadlittle committed Nov 21, 2014
1 parent 1a8d876 commit 32b1ffd
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 3 deletions.
6 changes: 6 additions & 0 deletions src/__phutil_library_map__.php
Original file line number Diff line number Diff line change
Expand Up @@ -2848,6 +2848,9 @@
'ProjectConduitAPIMethod' => 'applications/project/conduit/ProjectConduitAPIMethod.php',
'ProjectCreateConduitAPIMethod' => 'applications/project/conduit/ProjectCreateConduitAPIMethod.php',
'ProjectCreateProjectsCapability' => 'applications/project/capability/ProjectCreateProjectsCapability.php',
'ProjectDefaultEditCapability' => 'applications/project/capability/ProjectDefaultEditCapability.php',
'ProjectDefaultJoinCapability' => 'applications/project/capability/ProjectDefaultJoinCapability.php',
'ProjectDefaultViewCapability' => 'applications/project/capability/ProjectDefaultViewCapability.php',
'ProjectQueryConduitAPIMethod' => 'applications/project/conduit/ProjectQueryConduitAPIMethod.php',
'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php',
Expand Down Expand Up @@ -6090,6 +6093,9 @@
'ProjectConduitAPIMethod' => 'ConduitAPIMethod',
'ProjectCreateConduitAPIMethod' => 'ProjectConduitAPIMethod',
'ProjectCreateProjectsCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultEditCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultJoinCapability' => 'PhabricatorPolicyCapability',
'ProjectDefaultViewCapability' => 'PhabricatorPolicyCapability',
'ProjectQueryConduitAPIMethod' => 'ProjectConduitAPIMethod',
'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,18 @@ protected function getCustomCapabilities() {
ProjectCanLockProjectsCapability::CAPABILITY => array(
'default' => PhabricatorPolicies::POLICY_ADMIN,
),
ProjectDefaultViewCapability::CAPABILITY => array(
'caption' => pht(
'Default view policy for newly created projects.'),
),
ProjectDefaultEditCapability::CAPABILITY => array(
'caption' => pht(
'Default edit policy for newly created projects.'),
),
ProjectDefaultJoinCapability::CAPABILITY => array(
'caption' => pht(
'Default join policy for newly created projects.'),
),
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

final class ProjectDefaultEditCapability
extends PhabricatorPolicyCapability {

const CAPABILITY = 'project.default.edit';

public function getCapabilityName() {
return pht('Default Edit Policy');
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

final class ProjectDefaultJoinCapability
extends PhabricatorPolicyCapability {

const CAPABILITY = 'project.default.join';

public function getCapabilityName() {
return pht('Default Join Policy');
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

final class ProjectDefaultViewCapability
extends PhabricatorPolicyCapability {

const CAPABILITY = 'project.default.view';

public function getCapabilityName() {
return pht('Default View Policy');
}

public function shouldAllowPublicPolicySetting() {
return true;
}
}
18 changes: 15 additions & 3 deletions src/applications/project/storage/PhabricatorProject.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,26 @@ final class PhabricatorProject extends PhabricatorProjectDAO
const TABLE_DATASOURCE_TOKEN = 'project_datasourcetoken';

public static function initializeNewProject(PhabricatorUser $actor) {
$app = id(new PhabricatorApplicationQuery())
->setViewer(PhabricatorUser::getOmnipotentUser())
->withClasses(array('PhabricatorProjectApplication'))
->executeOne();

$view_policy = $app->getPolicy(
ProjectDefaultViewCapability::CAPABILITY);
$edit_policy = $app->getPolicy(
ProjectDefaultEditCapability::CAPABILITY);
$join_policy = $app->getPolicy(
ProjectDefaultJoinCapability::CAPABILITY);

return id(new PhabricatorProject())
->setName('')
->setAuthorPHID($actor->getPHID())
->setIcon(self::DEFAULT_ICON)
->setColor(self::DEFAULT_COLOR)
->setViewPolicy(PhabricatorPolicies::POLICY_USER)
->setEditPolicy(PhabricatorPolicies::POLICY_USER)
->setJoinPolicy(PhabricatorPolicies::POLICY_USER)
->setViewPolicy($view_policy)
->setEditPolicy($edit_policy)
->setJoinPolicy($join_policy)
->setIsMembershipLocked(0)
->attachMemberPHIDs(array())
->attachSlugs(array());
Expand Down

0 comments on commit 32b1ffd

Please sign in to comment.