"""
for setup widgets for those annoying little tasks that
only need to happen occasionally
"""
from Products.CMFCore import CMFCorePermissions
from Products.CMFCore.utils import getToolByName
from Products.CMFPlone.setup.SetupBase import SetupWidget
from Products.CMFPlone import MigrationTool
from Products.Archetypes.public import listTypes
from Products.Archetypes.Extensions.utils import installTypes
from Products.ViC import config
from Products.ViC.workflows import PLACEFUL_POLICIES, WORKFLOW_MAP
from Products.ViC.Extensions.Install import monkeyPatchSchema
from Products.ViC.content.project import ViCProject
from zLOG import INFO, ERROR
from Products.ViC.managers import *
from Products.OpenPlans.Extensions.Install import install_local_transient_message_utility
from logging import getLogger , WARNING
from Install import installWorkflows, installWorkflowPolicies, registerUtilities, createUserCalendars, setMemberType, setPermissions, updateRosterFeaturelet, installTools, setupPortalActions, setProjectFolderPermissions, fixKupu, setupAliases, roleSetup, installCategoryTool, addGettingStarted, createELMProps
from cStringIO import StringIO
try:
set = set
except NameError:
from sets import Set as set
from Products.ViC.config import PROJECTNAME
import mimetypes
out = StringIO()
def removeFirstPage(self, portal):
l = getLogger("removeFirstPage")
groups = portal._getOb("groups")
l.info("got groups")
for oid in groups.objectIds():
l.info("looking at %s"%oid)
if not oid.startswith("."):
group = groups._getOb(oid)
l.info("got group %s"%group)
l.info("oids ars %s"%group.objectIds())
if "portal_resource_categories" in group.objectIds():
l.info("renaming...")
rc = group._getOb("portal_resource_categories")
l.info("object ids are %s"%rc.objectIds())
for id in rc.objectIds():
cat = rc._getOb(id)
l.info("got %s"%cat.Title())
if cat.Title().find("First Page") != -1:
l.info("renaming...")
cat.setTitle( cat.Title().replace("First Page", "") )
if cat.Title().startswith("/"):
cat.setTitle( cat.Title()[1:] )
def convertFunc(func):
"""
turns a standard install function into a
setup widget function
"""
def new_func(self, portal):
func(portal, out)
#blank out
out=StringIO()
return new_func
def reinstallWorkflows(self, portal):
l = getLogger("reinstallWorkflows")
l.setLevel(WARNING)
l.info("1")
wftool = getToolByName(portal, 'portal_workflow')
qi = getToolByName(portal, 'portal_quickinstaller')
l.info("2")
product = getattr(qi, PROJECTNAME)
wfs = product.getWorkflows()
delWfs = list()
for wf in wfs:
l.info("looking at %s"%wf)
if wf in WORKFLOW_MAP:
delWfs.append(wf)
l.info("3")
wftool.manage_delObjects(ids=delWfs)
out = StringIO()
installWorkflows(portal, out)
l.info("4")
def reinstallWorkflowPolicies(self, portal):
l = getLogger("reinstallWorkflowPolicies")
l.setLevel(WARNING)
l.info("1")
pwftool = getToolByName(portal, 'portal_placeful_workflow')
policies = set(pwftool.objectIds())
l.info("2")
deletes = policies.intersection(set(PLACEFUL_POLICIES.keys()))
pwftool.manage_delObjects(ids=list(deletes))
l.info("3")
out = StringIO()
installWorkflowPolicies(portal, out)
def reinstallTypes(self, portal):
out = StringIO()
installTypes(portal, out, listTypes(config.PROJECTNAME),
config.PROJECTNAME)
#hideActionTabs(portal, out)
def reregisterUtilities(self, portal):
l = getLogger("reregisterUtilities")
l.setLevel(WARNING)
out = StringIO()
registerUtilities(portal, out)
l.info(out.getvalue())
def recreateUserCalendars(self, portal):
portal = getToolByName(portal, 'portal_url').getPortalObject()
out = StringIO()
createUserCalendars(portal, out)
def resetMemberType(self, portal):
out = StringIO()
setMemberType(portal, out)
l = getLogger("resetMemberType")
l.setLevel(WARNING)
l.info( out.getvalue())
def resetPermissions(self, portal):
out = StringIO()
setPermissions(portal, out)
l = getLogger("resetPermissions")
l.setLevel(WARNING)
l.info(out.getvalue())
def resetProjectFolderPermissions(self, portal):
out = StringIO()
print portal, out
setProjectFolderPermissions(portal, out)
def resetTools(self, portal):
l = getLogger("resetRecordingAndCategories")
l.setLevel(WARNING)
out = StringIO()
installTools(portal, out)
l.info( out.getvalue() )
def migrateToViCRoster(self, portal):
out = StringIO()
updateRosterFeaturelet(portal, out)
l = getLogger("migrateToViCRoster")
l.setLevel(WARNING)
l.info( out.getvalue() )
def resetAliases(self, portal):
out = StringIO()
setupAliases(portal, out)
def resetRoles(self, portal):
l = getLogger("resetRoles")
l.setLevel(WARNING)
out = StringIO()
roleSetup(portal, out)
l.info(out.getvalue())
def migratePortalActions(self, portal):
out = StringIO()
setupPortalActions(portal, out)
l = getLogger("migrateToViCRoster")
l.setLevel(WARNING)
l.info( out.getvalue() )
def refixKupu(self, portal):
out = StringIO()
fixKupu(portal, out)
l = getLogger("kupu")
l.setLevel(WARNING)
l.info( out.getvalue() )
def updateProjects(self, portal):
l = getLogger("updateProjects")
l.setLevel(WARNING)
groups = portal.groups
l.info(groups)
for g in groups.objectIds():
if not g.startswith("."):
gr = groups._getOb(g)
l.info(gr.aq_base.meta_type)
l.info(gr.__class__)
ViCProject.__init__( gr.aq_base, gr.getId(),gr.Title())
if not gr.aq_base.has_key("index_html"):
default = gr.getProperty("default_page")
l.info("default = %s"%default)
page = gr.aq_base._getOb(default)
l.info("got default page, renaming")
#page.setId("index_Dhtml")
#l.info("new id is index_html")
#for i in dir(gr.aq_base):
# if i.startswith("_"):
# l.info(i)
def updateProjects(self, portal):
l = getLogger("updateProjects")
l.setLevel(WARNING)
groups = portal.groups
l.info(groups)
for g in groups.objectIds():
gr = groups._getOb(g)
l.info(gr.aq_base.meta_type)
gr.aq_base.__init__( gr, gr.id, gr.title)
gr.aq_base.has_key = ViCProject.has_key
for i in dir(gr):
if i.startswith("_"):
l.info(i)
def recreateELMProps(self, portal):
out = StringIO()
createELMProps(portal, out)
def installTransientMessage(self, portal):
out = StringIO()
install_local_transient_message_utility(portal, out)
l = getLogger("intallTransientMessage")
l.setLevel(WARNING)
l.info( out.getvalue() )
def clearElluminate(self, portal):
from Products.ViC.featurelets.content.eventtypes.interfaces import IElluminateUser
from zope.component import getAdapter
pm = getToolByName(portal, "portal_membership")
members = pm.listMemberIds()
for m in members:
member = pm.getMemberById(m)
u = getAdapter(member, IElluminateUser)
u.set("uid", None)
def categoryTool(self, portal):
out = StringIO()
installCategoryTool(portal, out)
l = getLogger("intallTransientMessage")
l.setLevel(WARNING)
l.info( out.getvalue() )
def insertGettingStarted(self, portal):
out = StringIO()
addGettingStarted(portal, out)
return out.getvalue().replace("\n", "<br />")
def fixEventsHome(self, portal):
from zope.interface import Interface
from zope.interface import implements
from zope.interface import alsoProvides
from Products.ViC.featurelets.interfaces import *
from StringIO import StringIO
from logging import getLogger, WARNING
import traceback
groups = portal._getOb('groups')
groupIds = groups.objectIds()
for id in groupIds:
try:
group = groups._getOb(id)
events = group._getOb('events')
alsoProvides(events, IEventContainer)
events.manage_addProperty(id="layout", type="string", value="forwardtodashboard")
except:
log = getLogger("fixEventHome")
log.setLevel(WARNING)
s = StringIO()
traceback.print_exc(file=s)
log.info(s.getvalue())
def fixAllowedTypesForProjects(self, portal):
groups = portal._getOb("groups")
for g in groups.objectIds():
if not g.startswith("."):
gr = groups._getOb(g)
if hasattr(gr, "setMembershipType"):
gr.setMembershipType(gr.getMembershipType() )
def syncGroupWithDiscussion(self, portal):
groups = portal._getOb("groups")
for g in groups.objectIds():
o = groups._getOb(g)
pt = getToolByName(o, "portal_teams")
if hasattr(o, "lists"):
teams = o.getTeams()
for t in teams:
for mship in t.getActiveMemberships():
member_joined_project_listen(mship, None)
def showEvents(self, portal):
groups = portal._getOb("groups")
l = getLogger("showEvents")
for g in groups.objectIds():
if not g.startswith("."):
gr = groups._getOb(g)
for id in gr.objectIds():
if id == "events":
ev = gr._getOb(id)
for e in ev.objectIds():
event = ev._getOb(e)
l.info(event, hasattr(event, 'setcalendarVisible'))
if len(event.Title())>0 and hasattr(event, 'setcalendarVisible'):
event.setcalendarVisible(True)
functions = dict(
reinstallWorkflows = reinstallWorkflows,
reinstallWorkflowPolicies = reinstallWorkflowPolicies,
reinstallTypes = reinstallTypes,
monkeyPatchSchema = monkeyPatchSchema,
reregisterUtilities = reregisterUtilities,
recreateUserCalendars=recreateUserCalendars,
resetMemberType = resetMemberType,
resetPermissions = resetPermissions,
migrateToViCRoster = migrateToViCRoster,
resetTools = resetTools,
migratePortalActions = migratePortalActions,
resetProjectFolderPermissions = resetProjectFolderPermissions,
refixKupu = refixKupu,
resetAliases = resetAliases,
updateProjects = updateProjects,
installTransientMessage = installTransientMessage,
clearElluminate = clearElluminate,
resetRoles = resetRoles,
reinstallCategoryTool = categoryTool,
fixEventsHome = fixEventsHome,
addGettingStarted=insertGettingStarted,
removeFirstPage=removeFirstPage,
recreateELMProps=recreateELMProps,
fixAllowedTypesForProjects=fixAllowedTypesForProjects,
makeOldEventsVisible=showEvents,
syncGroupWithDiscussion=syncGroupWithDiscussion,
)
class ViCSetup(SetupWidget):
""" ViC Setup Bucket Brigade """
type = 'ViC Setup'
description = ' utillity methods for ViC site setup '
def setup(self):
pass
def run(self, fn, **kwargs):
out = []
out.append((functions[fn](self, self.portal, **kwargs),INFO))
out.append(('Function %s has been applied' % fn, INFO))
return out
def addItems(self, fns):
out = []
for fn in fns:
out.append((functions[fn](self, self.portal),INFO))
out.append(('Function %s has been applied' % fn, INFO))
return out
def installed(self):
return []
def available(self):
""" Go get the functions """
return functions.keys()
MigrationTool.registerSetupWidget(ViCSetup)