Skip to content

Commit

Permalink
When creating a tracker as non-manager you used to become only Owner
Browse files Browse the repository at this point in the history
and not Manager, which is not what we want.  Fixed this and a few
other possible errors (like loosing other local roles) in setting
the managers.
Fixes http://plone.org/products/poi/issues/218

svn path=/Products.Poi/trunk/; revision=96313
  • Loading branch information
mauritsvanrees committed Aug 31, 2009
1 parent b47f001 commit 3d363d7
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 3 deletions.
7 changes: 7 additions & 0 deletions Products/Poi/HISTORY.txt
Expand Up @@ -5,6 +5,13 @@ Changelog for Poi
1.2.6 (unreleased)
------------------

- When creating a tracker as non-manager you used to become only Owner
and not Manager, which is not what we want. Fixed this and a few
other possible errors (like loosing other local roles) in setting
the managers.
Fixes http://plone.org/products/poi/issues/218
[maurits]

- Catch and log SMTPExceptions when sending an email fails.
Fixes http://plone.org/products/poi/issues/223
[maurits]
Expand Down
23 changes: 20 additions & 3 deletions Products/Poi/content/PoiTracker.py
Expand Up @@ -489,10 +489,27 @@ def setManagers(self, managers):

toRemove = [m for m in currentManagers if m not in managers]
toAdd = [m for m in managers if m not in currentManagers]
if toRemove:
self.manage_delLocalRoles(toRemove)
toKeep = [m for m in managers if m in currentManagers]
for userId in toRemove:
local_roles = list(self.get_local_roles_for_userid(userId))
if 'Manager' in local_roles:
local_roles.remove('Manager')
if local_roles:
# One or more roles must be given
self.manage_setLocalRoles(userId, local_roles)
else:
self.manage_delLocalRoles(toRemove)
for userId in toAdd:
self.manage_setLocalRoles(userId, ['Manager'])
local_roles = list(self.get_local_roles_for_userid(userId))
local_roles.append('Manager')
self.manage_setLocalRoles(userId, local_roles)
# When creating a tracker as non-manager you used to become
# only Owner and not Manager, which is not what we want.
for userId in toKeep:
local_roles = list(self.get_local_roles_for_userid(userId))
if not 'Manager' in local_roles:
local_roles.append('Manager')
self.manage_setLocalRoles(userId, local_roles)

security.declarePublic('getIssueWorkflowStates')
def getIssueWorkflowStates(self):
Expand Down
15 changes: 15 additions & 0 deletions Products/Poi/tests/testTracker.py
Expand Up @@ -101,6 +101,21 @@ def testManagersGetLocalRole(self):
self.failUnless('Manager' in roles('member1'))
self.tracker.setManagers(('member2', ))
self.failIf('Manager' in roles('member1'))
self.failUnless('Manager' in roles('member2'))
# Now we mess with local roles and see if setting the tracker
# managers fixes it.
self.tracker.manage_delLocalRoles(['member2'])
self.tracker.setManagers(('member2', ))
self.failUnless('Manager' in roles('member2'))
self.tracker.manage_setLocalRoles('member2', ['Owner', 'Manager'])
self.tracker.manage_setLocalRoles('member1', ['Reviewer'])
self.tracker.setManagers(('member1', 'member2'))
self.failUnless('Manager' in roles('member2'))
self.failUnless('Manager' in roles('member1'))
self.failUnless('Owner' in roles('member2'))
self.failUnless('Reviewer' in roles('member1'))
self.tracker.setManagers(('member2', ))
self.failUnless('Reviewer' in roles('member1'))

def testIsUsingReleases(self):
self.tracker.setAvailableReleases(())
Expand Down

0 comments on commit 3d363d7

Please sign in to comment.