def prepare_site(context, check_marker=True): # We check from our GenericSetup context whether we are running # add-on installation for our own or any other product if check_marker and context.readDataFile('cnrd.vctypes.marker') is None: # Not our add-on return try: site = context.getSite() from zope.site.hooks import setSite setSite(site) except: from zope.site.hooks import getSite site = getSite() # make shure we have a default workflow, this may be needed for tests: portal_workflow = getToolByName(site, 'portal_workflow') if not portal_workflow.getDefaultChain(): portal_workflow.setDefaultChain('simple_publication_workflow') print '### Preparing site "%s" ###' % site objects = [ {'id': 'home', 'title': u'CNRD Virtual Center', 'portal_type': 'cnrd.Homepage', 'exclude': True}, {'id': 'challenges', 'title': u'Challenges', 'portal_type': 'cnrd.ChallengeFolder'}, {'id': 'workspaces', 'title': u'Workspaces', 'portal_type': 'cnrd.WorkspaceFolder', 'publish': False}, {'id': 'universities', 'title': u'Universities', 'portal_type': 'cnrd.UniversityFolder'}, {'id': 'welcome', 'title': u'Welcome', 'portal_type': 'Document', 'exclude': True}, {'id': 'people', 'title': u'People', 'portal_type': 'cnrd.MemberFolder', 'publish': False}, {'id': 'library', 'title': u'Library', 'portal_type': 'LibrarySearch'}, {'id': 'news', 'exclude': True}, {'id': 'events', 'exclude': True}, {'id': 'Members', 'exclude': True}, ] for i, o in enumerate(objects): if not o['id'] in site: if 'portal_type' in o: print " - Creating '%s'." % o['id'] replicator.add_content( parent=site, portal_type=o['portal_type'], id=o['id'], title=o.get('title', o['id']), publish=o.get('publish', True) ) else: print " - '%s' does not exist and can't be created." % o['id'] continue else: print " - '%s' exists." % o['id'] print " Moving '%s' to position %i." % (o['id'], i) site.moveObjectToPosition(o['id'], i) if o.get('exclude'): print " Excluding '%s' from navigation." % o['id'] site[o['id']].exclude_from_nav = True print " Reindexing '%s'." % o['id'] site[o['id']].reindexObject() # set the homepage as default view for the site-root site.setDefaultPage('home') # delete plones standard front-page if 'front-page' in site: site.manage_delObjects(['front-page']) # configure the member-folder: intids = getUtility(IIntIds) site['people'].welcomePage = RelationValue(intids.getId(site['welcome'])) # set the the scope for the library-search: site['library'].librarySearchScope = [RelationValue( intids.getId(site['workspaces']))] site['library'].libraryExtraSearchArgs = { 'review_state': 'published'} # add groups: groupPrefs = [ {'id': 'Students', 'roles': ['Member', 'Student']}, {'id': 'Teachers', 'roles': ['Member', 'Teacher']}, {'id': 'Externs', 'roles': ['Extern']}, {'id': 'Alumni'}, ] groups_tool = getToolByName(site, 'portal_groups') for prefs in groupPrefs: if not prefs['id'] in groups_tool.getGroupIds(): groups_tool.addGroup(prefs['id'], roles=prefs.get('roles', []))
def migrate_workspaces(context): fields = [ 'autoAcceptNewMembers', 'challenges', 'creation_date', 'description', 'effective_date', 'fromDate', 'goals', 'images', 'invitedExterns', 'invitedManagers', 'invitedMembers', 'lecture', 'librarySearchScope', 'location', 'managers', 'maxMembers', 'members', 'previouslyEdited', 'tillDate', 'title', ] MARKER = '#marker#' catalog = getToolByName(context, 'portal_catalog') pw = getToolByName(context, 'portal_workflow') query = {'object_provides': IWorkspace.__identifier__, } wsbs = catalog(query) for wsb in wsbs: old_ws = wsb.getObject() ws_id = old_ws.id ws_old_id = 'old_stuff_' + old_ws.id owner_id = old_ws.getOwnerTuple()[1] parent = old_ws.aq_parent review_state = pw.getInfoFor(old_ws, 'review_state') print ' updating %s ("%s") owned by %s' % (ws_id, old_ws.title, owner_id) if review_state == 'draft' and old_ws.title == 'Workspace Draft': parent.manage_delObjects(ws_old_id) print " ^ removed draft" continue attributes = {} for key in fields: value = getattr(old_ws, key, MARKER) if value != MARKER: attributes[key] = value parent.manage_renameObjects([ws_id], [ws_old_id]) if owner_id != 'admin': new_ws = add_content(parent, portal_type='ixds.Workspace', id=ws_id, publish=False, as_user=owner_id, **attributes) else: new_ws = add_content(parent, portal_type='ixds.Workspace', id=ws_id, publish=False, **attributes) new_ws.update_image_fields() pw.doActionFor(new_ws, 'publish-for-site-members') modified(new_ws) clip = old_ws.manage_cutObjects(old_ws.keys()) new_ws.manage_pasteObjects(clip) parent.manage_delObjects(ws_old_id)