• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

"""
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)