X-Git-Url: https://scm.cri.minesparis.psl.eu/git/Plinn.git/blobdiff_plain/3c4367d8e03450e9a73e61f4247145d2b6c86a33..959d888c17d1403d2eeecc19bc4b5e2c8d1debf6:/GroupDataTool.py?ds=sidebyside diff --git a/GroupDataTool.py b/GroupDataTool.py deleted file mode 100755 index 92617a3..0000000 --- a/GroupDataTool.py +++ /dev/null @@ -1,202 +0,0 @@ -# -*- coding: utf-8 -*- -####################################################################################### -# Plinn - http://plinn.org # -# Copyright (C) 2005-2007 Benoît PIN # -# # -# This program is free software; you can redistribute it and/or # -# modify it under the terms of the GNU General Public License # -# as published by the Free Software Foundation; either version 2 # -# of the License, or (at your option) any later version. # -# # -# This program is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program; if not, write to the Free Software # -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # -####################################################################################### -""" - - -""" - -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo -from Acquisition import aq_inner, aq_parent, aq_base - -from Products.GroupUserFolder.GroupDataTool import GroupDataTool as BaseTool -from Products.GroupUserFolder.GroupDataTool import GroupData as BaseGroupData -from Products.GroupUserFolder.GroupsToolPermissions import ManageGroups, ViewGroups -from Products.CMFCore.utils import getToolByName -from ZPublisher.Converters import type_converters - -from GroupsTool import CACHE_ROOT_GROUPS, CACHE_GROUPS_OF_GROUP, CACHE_USER_NAMES_OF_GROUP - -try: - from Products.CMFCore.MemberDataTool import CleanupTemp - _have_cleanup_temp = 1 -except: - _have_cleanup_temp = None - - -class GroupDataTool(BaseTool) : - """ Group Data Tool """ - - meta_type = 'Plinn Group Data Tool' - - security = ClassSecurityInfo() - - security.declarePrivate('wrapGroup') - def wrapGroup(self, g): - """Returns an object implementing the GroupData interface""" - id = g.getId() - members = self._members - if not members.has_key(id): - # Get a temporary member that might be - # registered later via registerMemberData(). - temps = self._v_temps - if temps is not None and temps.has_key(id): - portal_group = temps[id] - else: - base = aq_base(self) - portal_group = GroupData(base, id) - if temps is None: - self._v_temps = {id:portal_group} - if hasattr(self, 'REQUEST'): - # No REQUEST during tests. - # XXX jcc => CleanupTemp doesn't seem to work on Plone 1.0.3. - # Have to find a way to pass around... - if _have_cleanup_temp: - self.REQUEST._hold(CleanupTemp(self)) - else: - temps[id] = portal_group - else: - portal_group = members[id] - # Return a wrapper with self as containment and - # the user as context. - return portal_group.__of__(self).__of__(g) - -class GroupData(BaseGroupData) : - """ """ - - security = ClassSecurityInfo() - - security.declareProtected(ViewGroups, 'getGroups') - security.declareProtected(ManageGroups, 'setGroupProperties') - def setGroupProperties(self, mapping): - '''Sets the properties of the group. - ''' - # Sets the properties given in the MemberDataTool. - tool = self.getTool() - self = self.aq_inner.aq_self - for id in tool.propertyIds(): - if mapping.has_key(id): - if not self.__class__.__dict__.has_key(id): - value = mapping[id] - if type(value)==type(''): - proptype = tool.getPropertyType(id) or 'string' - if type_converters.has_key(proptype): - value = type_converters[proptype](value) - setattr(self, id, value) - # Hopefully we can later make notifyModified() implicit. - self.notifyModified() - - security.declareProtected(ManageGroups, 'removeMember') - def removeMember(self, id): - """ Remove the member with the provided id from the group """ - - user = self.acl_users.getUser(id) - - groups = list(user.getGroups(no_recurse=1)) - prefix = self.acl_users.getGroupPrefix() - try : groups.remove(prefix + self.getGroupName()) - except ValueError : return # the user (id) is an implicit member of this group (self) - - roles_no_recurse = tuple(filter(lambda x: x not in ('Authenticated', 'Shared'), user.getUserRoles())) - - if user.isGroup() : - self.acl_users._doChangeGroup(id, roles_no_recurse, groups = groups) - else : - self.acl_users._doChangeUser(id, - None, - roles_no_recurse, - user.getDomains(), - groups=tuple(groups)) - - gtool = getToolByName(self, "portal_groups") - if gtool.ZCacheable_isCachingEnabled() : - # humm... there's a bug on Cacheable / RamCacheManger - #gtool.ZCacheable_invalidate(view_name=CACHE_USER_NAMES_OF_GROUP) - gtool.ZCacheable_set(None, view_name=CACHE_USER_NAMES_OF_GROUP, keywords={'no_recurse' : 0}) - gtool.ZCacheable_set(None, view_name=CACHE_USER_NAMES_OF_GROUP, keywords={'no_recurse' : 1}) - - - - security.declareProtected(ManageGroups, 'addMember') - def addMember(self, id): - """ Add the existing member with the given id to the group""" - aclu = self.aq_inner.acl_users - user = aclu.getUser(id) - prefix = aclu.getGroupPrefix() - - userRoles = tuple(filter(lambda x: x not in ('Authenticated', 'Shared'), user.getUserRoles())) - groups = user.getGroups(no_recurse = 1) - groups += (self.id, ) - - aclu.changeUser(user.id, groups = groups, roles = userRoles) - gtool = getToolByName(self, 'portal_groups') - if gtool.ZCacheable_isCachingEnabled() : - # humm... there's a bug on Cacheable / RamCacheManger - #gtool.ZCacheable_invalidate(view_name=CACHE_USER_NAMES_OF_GROUP) - gtool.ZCacheable_set(None, view_name=CACHE_USER_NAMES_OF_GROUP, keywords={'no_recurse' : 0}) - gtool.ZCacheable_set(None, view_name=CACHE_USER_NAMES_OF_GROUP, keywords={'no_recurse' : 1}) - - - - security.declareProtected(ManageGroups, 'removeGroup') - def removeGroup(self, id) : - """ Remove the existing group with the given id to the group""" - aclu = self.aq_inner.acl_users - groupPrefix = aclu.getGroupPrefix() - group = aclu.getGroup(id) - - # get group roles - groupRoles = tuple(filter(lambda x: x not in ('Authenticated', 'Shared'), group.getUserRoles())) - superGroupIds = list(group.getGroups(no_recurse = 1)) - superGroupIds.remove(self.id) - - aclu.changeUser(groupPrefix + group.id, groups = superGroupIds, roles = groupRoles) - - gtool = getToolByName(self, "portal_groups") - if gtool.ZCacheable_isCachingEnabled() : - gtool.ZCacheable_set(None, view_name=CACHE_GROUPS_OF_GROUP) - if not superGroupIds : - gtool.ZCacheable_set(None, view_name=CACHE_ROOT_GROUPS) - - - security.declareProtected(ManageGroups, 'addGroup') - def addGroup(self, id) : - """ Add the existing group with the given id to the group""" - aclu = self.aq_inner.acl_users - groupPrefix = aclu.getGroupPrefix() - group = aclu.getGroup(id) - - # get group roles - groupRoles = tuple(filter(lambda x: x not in ('Authenticated', 'Shared'), group.getUserRoles())) - superGroupIds = list(group.getGroups(no_recurse = 1)) - newSuperGroupIds = superGroupIds[:] - newSuperGroupIds.append(self.id) - - aclu.changeUser(groupPrefix + group.id, groups = newSuperGroupIds, roles = groupRoles) - - gtool = getToolByName(self, "portal_groups") - if gtool.ZCacheable_isCachingEnabled() : - gtool.ZCacheable_set(None, view_name=CACHE_GROUPS_OF_GROUP) - if not superGroupIds : - gtool.ZCacheable_set(None, view_name=CACHE_ROOT_GROUPS) - - - -InitializeClass(GroupDataTool)