+++ /dev/null
-# -*- coding: utf-8 -*-
-## GroupUserFolder
-## Copyright (C)2006 Ingeniweb
-
-## 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; see the file COPYING. If not, write to the
-## Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-"""
-
-"""
-__version__ = "$Revision: $"
-# $Source: $
-# $Id: Install.py 30098 2006-09-08 12:35:01Z encolpe $
-__docformat__ = 'restructuredtext'
-
-from Products.GroupUserFolder import groupuserfolder_globals
-from Products.GroupUserFolder.GroupUserFolder import GroupUserFolder
-from StringIO import StringIO
-from Products.CMFCore.utils import getToolByName
-from Products.CMFCore.DirectoryView import addDirectoryViews
-from Acquisition import aq_base
-from OFS.Folder import manage_addFolder
-
-
-SKIN_NAME = "gruf"
-_globals = globals()
-
-def install_plone(self, out):
- pass
-
-def install_subskin(self, out, skin_name=SKIN_NAME, globals=groupuserfolder_globals):
- print >>out, " Installing subskin."
- skinstool=getToolByName(self, 'portal_skins')
- if skin_name not in skinstool.objectIds():
- print >>out, " Adding directory view for GRUF"
- addDirectoryViews(skinstool, 'skins', globals)
-
- for skinName in skinstool.getSkinSelections():
- path = skinstool.getSkinPath(skinName)
- path = [i.strip() for i in path.split(',')]
- try:
- if skin_name not in path:
- path.insert(path.index('custom') +1, skin_name)
- except ValueError:
- if skin_name not in path:
- path.append(skin_name)
-
- path = ','.join(path)
- skinstool.addSkinSelection( skinName, path)
- print >>out, " Done installing subskin."
-
-def walk(out, obj, operation):
- if obj.isPrincipiaFolderish:
- for content in obj.objectValues():
- walk(out, content, operation)
- operation(out, obj)
-
-
-def migrate_user_folder(obj, out, ):
- """
- Move a user folder into a temporary folder, create a GroupUserFolder,
- and then move the old user folder into the Users portion of the GRUF.
- NOTE: You cant copy/paste between CMF and Zope folder. *sigh*
- """
- id = obj.getId()
- if id == 'acl_users':
- if obj.__class__.__name__ == "GroupUserFolder":
- # Avoid already-created GRUFs
- print >>out, " Do NOT migrate acl_users at %s, as it is already a GroupUserFolder" % ('/'.join( obj.getPhysicalPath() ), )
- return out.getvalue()
-
- print >>out, " Migrating acl_users folder at %s to a GroupUserFolder" % ('/'.join( obj.getPhysicalPath() ), )
-
- container = obj.aq_parent
-
- # Instead of using Copy/Paste we hold a reference to the acl_users
- # and use that reference instead of physically moving objects in ZODB
- tmp_users=container._getOb('acl_users')
- tmp_allow=container.__allow_groups__
-
- del container.__allow_groups__
- if 'acl_users' in container.objectIds():
- container.manage_delObjects('acl_users')
-
- container.manage_addProduct['GroupUserFolder'].manage_addGroupUserFolder()
- container.acl_users.Users.manage_delObjects( 'acl_users' )
- container.acl_users.Users._setObject('acl_users', aq_base(tmp_users))
- container.__allow_groups__ = aq_base(getattr(container,'acl_users'))
-
- return out.getvalue()
-
-
-def migrate_plone_site_to_gruf(self, out = None):
- if out is None:
- out = StringIO()
- print >>out, " Attempting to migrate UserFolders to GroupUserFolders..."
- urltool=getToolByName(self, 'portal_url')
- plonesite = urltool.getPortalObject()
- ## We disable the 'walk' operation because if the acl_users object is deep inside
- ## the Plone site, that is a real problem. Furthermore, that may be because
- ## we're already digging an GRUF and have the risk to update a GRUF/User/acl_users
- ## object !
-## walk(out, plonesite, migrate_user_folder)
- for obj in plonesite.objectValues():
- migrate_user_folder(obj, out, )
- print >>out, " Done Migrating UserFolders to GroupUserFolders."
- return out.getvalue()
-
-def install(self):
- out = StringIO()
- print >>out, "Installing GroupUserFolder"
- install_subskin(self, out)
- install_plone(self, out)
- migrate_plone_site_to_gruf(self, out)
- print >>out, "Done."
- return out.getvalue()