Déplacement pour eggification.
[Plinn.git] / GroupDataTool.py
diff --git a/GroupDataTool.py b/GroupDataTool.py
deleted file mode 100755 (executable)
index 92617a3..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################
-#   Plinn - http://plinn.org                                                          #
-#   Copyright (C) 2005-2007  Benoît PIN <benoit.pin@ensmp.fr>                         #
-#                                                                                     #
-#   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)