summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-05-05 22:13:11 -0400
committerFrederic Guillot <fred@kanboard.net>2016-05-05 22:13:11 -0400
commitcfb96c87497f3878f6b2a602d396194eae9efbe9 (patch)
treeab099ff01fc8f23162e0d4e2c92ba5f9095de4cf
parentab56d9aff280d4e5b436d8f5d843f586bef9c059 (diff)
Allow a project owner to manage his own public project
-rw-r--r--ChangeLog1
-rw-r--r--app/Model/ProjectUserRole.php9
-rw-r--r--tests/units/Model/ProjectUserRoleTest.php20
3 files changed, 28 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 7e77a7d7..2b31ab7b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,7 @@ Improvements:
Bug fixes:
+* Allow a project owner to manage his own public project
* Fixed PHP warning when removing a user with no Avatar image
* Fixed improper Markdown escaping for some tooltips
* Closing all tasks by column, also update closed tasks
diff --git a/app/Model/ProjectUserRole.php b/app/Model/ProjectUserRole.php
index 2956c524..db26fd5f 100644
--- a/app/Model/ProjectUserRole.php
+++ b/app/Model/ProjectUserRole.php
@@ -69,8 +69,13 @@ class ProjectUserRole extends Base
*/
public function getUserRole($project_id, $user_id)
{
- if ($this->projectPermission->isEverybodyAllowed($project_id)) {
- return Role::PROJECT_MEMBER;
+ $projectInfo = $this->db->table(Project::TABLE)
+ ->eq('id', $project_id)
+ ->columns('owner_id', 'is_everybody_allowed')
+ ->findOne();
+
+ if ($projectInfo['is_everybody_allowed'] == 1) {
+ return $projectInfo['owner_id'] == $user_id ? Role::PROJECT_MANAGER : Role::PROJECT_MEMBER;
}
$role = $this->db->table(self::TABLE)->eq('user_id', $user_id)->eq('project_id', $project_id)->findOneColumn('role');
diff --git a/tests/units/Model/ProjectUserRoleTest.php b/tests/units/Model/ProjectUserRoleTest.php
index 06cd1b70..0e06ac5e 100644
--- a/tests/units/Model/ProjectUserRoleTest.php
+++ b/tests/units/Model/ProjectUserRoleTest.php
@@ -101,6 +101,26 @@ class ProjectUserRoleTest extends Base
$this->assertEquals('', $userRoleModel->getUserRole(1, 2));
}
+ public function testGetRoleWithPublicProject()
+ {
+ $projectModel = new Project($this->container);
+ $userRoleModel = new ProjectUserRole($this->container);
+ $userModel = new User($this->container);
+
+ $this->assertEquals(2, $userModel->create(array('username' => 'user1', 'name' => 'User1')));
+ $this->assertEquals(3, $userModel->create(array('username' => 'user2', 'name' => 'User2')));
+
+ $this->assertEquals(1, $projectModel->create(array('name' => 'Test'), 2, true));
+
+ $this->assertEquals(Role::PROJECT_MANAGER, $userRoleModel->getUserRole(1, 2));
+ $this->assertEquals(null, $userRoleModel->getUserRole(1, 3));
+
+ $this->assertTrue($projectModel->update(array('id' => 1, 'is_everybody_allowed' => 1)));
+
+ $this->assertEquals(Role::PROJECT_MANAGER, $userRoleModel->getUserRole(1, 2));
+ $this->assertEquals(Role::PROJECT_MEMBER, $userRoleModel->getUserRole(1, 3));
+ }
+
public function testGetAssignableUsersWithDisabledUsers()
{
$projectModel = new Project($this->container);