[zopeorg-checkins] CVS: Products/ZopeOrg-NV/Extensions - NZOMigrate.py:1.16
Sidnei da Silva
sidnei at x3ng.com.br
Tue Feb 18 15:47:14 EST 2003
Update of /cvs-zopeorg/Products/ZopeOrg-NV/Extensions
In directory cvs.zope.org:/tmp/cvs-serv17016/Extensions
Modified Files:
NZOMigrate.py
Log Message:
More fixes to migration. New helper methods to fix ownership and publishing. A typo (HowTo -> How-To).
=== Products/ZopeOrg-NV/Extensions/NZOMigrate.py 1.15 => 1.16 ===
"Image": "CMF Default Image",
"File": "CMF Default File",
"Tip": "ZopeOrg Tip",
- "HowTo": "ZopeOrg HowTo",
+ "How-To": "ZopeOrg HowTo",
"Software Product": "CMF Software Package",
"Product Release": "CMF Software Release",
"Tracker": "CMF Collector",
@@ -120,12 +120,120 @@
return res
+def recursiveOwnerFix(ob, new_uid=None, fix_children=0):
+ try: changed = ob._p_changed
+ except: changed = 0
+
+ if ob is None:
+ return
+
+ try:
+ owner = ob.getOwner(info=1)
+ except:
+ owner = None
+
+ udb = None
+ uid = None
+ root = ob.getPhysicalRoot()
+ if owner:
+ udb, uid = owner
+ if not new_uid: return
+ p = ob
+ old_udb = udb
+ udb = None
+ if new_uid != uid:
+ while p is not None:
+ if hasattr(p, 'acl_users'):
+ acl_users = getattr(p, 'acl_users')
+ try:
+ user = acl_users.getUserById(new_uid).__of__(acl_users)
+ except:
+ user = None
+ if user is not None:
+ # Found the right database.
+ udb = acl_users.getPhysicalPath()[1:]
+ break
+ p = aq_parent(aq_inner(p))
+ if udb is not None:
+ ob.changeOwnership(user)
+ log('Changed ownership of %s from %s!%s to %s!%s.\n' %
+ ('/'.join(ob.getPhysicalPath()),
+ '/'.join(old_udb), uid,
+ '/'.join(udb), user,))
+ else:
+ log('Could not fix the ownership of %s, '
+ 'which is set to %s!%s.\n' %
+ ('/'.join(ob.getPhysicalPath()),
+ '/'.join(old_udb), uid,))
+
+ if fix_children:
+ if hasattr(ob, 'objectValues'):
+ for subob in ob.objectValues():
+ recursiveOwnerFix(subob, new_uid, 1)
+ # Deactivate object if possible.
+ if changed is None: ob._p_deactivate()
+
+ return
+
+def log(message, summary='', severity=0, dup=1):
+ zLOG.LOG('NZOMigration: ',severity,summary,message)
+
+def setLocalRoles(self, ids, role):
+ pm = getToolByName(self, 'portal_membership')
+ try:
+ pm.setLocalRoles( self
+ , member_ids=ids
+ , member_role=role
+ )
+ log('Set roles %s for %s on %s.\n' %
+ (role, ids, self.absolute_url(relative=1)))
+ except:
+ log('Failed to set roles %s for %s on %s.\n' %
+ (role, ids, self.absolute_url(relative=1)))
+
+
+def fixMembers(self, skip=None):
+ members = self.Members.objectIds()
+ if skip is None:
+ skip = []
+ members = [id for id in members if not id in skip]
+ members.sort()
+ for id in members:
+ log('Starting recursiveFixOwnership in Members/%s. \n' % id)
+ folder = getattr(self.Members, id, None)
+ if folder.meta_type not in ['Folder', 'Portal Folder', 'BTreeFolder2', 'Plone Folder']:
+ continue
+ res = recursiveOwnerFix(folder, id, 1)
+ setLocalRoles(folder, (id, ), 'Owner')
+ updateRoleMappings(folder)
+ massPublish(folder)
+ log('Finished recursiveFixOwnership in Members/%s. \n' % id)
+ get_transaction().commit()
+ return 'Done!'
+
+def updateRoleMappings(self):
+
+ """ Allow workflows to update the role-permission mappings.
+ """
+ wfs = {}
+ wf_tool = getToolByName(self, 'portal_workflow')
+ for id in wf_tool.objectIds():
+ wf = wf_tool.getWorkflowById(id)
+ if hasattr(aq_base(wf), 'updateRoleMappingsFor'):
+ wfs[id] = wf
+ count = wf_tool._recursiveUpdateRoleMappings(self, wfs)
+ log('updateRoleMappings: %d object(s) updated.\n' % count)
+ return count
+
def massPublish(self):
wf_tool = getToolByName(self, 'portal_workflow')
+ try:
+ wf_tool.doActionFor(self, 'publish')
+ log('Published %s.\n' % self.getId())
+ except: pass
+ get_transaction().commit()
if hasattr(self, 'objectValues'):
for subob in self.objectValues():
- try: wf_tool.doActionFor(subob, 'publish')
- except: pass
massPublish(subob)
def filterList(alist):
@@ -176,6 +284,8 @@
if hasattr(aq_base(root), id):
logo_id = '%s_logo' % id
root.manage_renameObject(id=id, new_id=logo_id)
+ else:
+ logo_id = ''
try:
root.invokeFactory(id=id, type_name='Zope Service Provider')
except:
@@ -655,9 +765,10 @@
if type in ('selection', 'multiple selection'):
for p in orig._properties:
if p['id'] == prop:
- value = p['select_variable']
- if not hasattr(new, value):
- setattr(new, value, [])
+ value = str(p['select_variable'])
+ break
+ if not hasattr(aq_base(new), value):
+ setattr(new, str(value), [])
else:
try:
value = orig.getProperty(prop)
More information about the zopeorg-checkins
mailing list