from StringIO import StringIO from Products.Archetypes.public import listTypes from Products.Archetypes.Extensions.utils import installTypes, install_subskin from Products.CMFCore.CMFCorePermissions import ManagePortal from Products.CMFCore.utils import getToolByName from Products.qPingTool.config import * from Products.qPingTool import PingTool from Products.CMFCore.TypesTool import ContentFactoryMetadata from Products.CMFCore.utils import getToolByName from Products.CMFPlone.migrations.migration_util import safeEditProperty def install(self): out = StringIO() installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME) portal = getToolByName(self, 'portal_url').getPortalObject() if not hasattr(portal, TOOL_ID): portal.invokeFactory(id=TOOL_ID, type_name='PingTool') # Add PortalActions Tool Configlet. Delete old version before adding, if exist one. controlpanel_tool = getToolByName(self, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(TOOL_ID) controlpanel_tool.registerConfiglet(id=TOOL_ID, name='Ping Tool', category='Products', action='string:${portal_url}/'+TOOL_ID+'/folder_contents', appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif') # Add 'portal_actionstool' to action provider list, if not yet exist action_tool = getToolByName(portal, 'portal_actions') if TOOL_ID not in action_tool.listActionProviders(): action_tool.addActionProvider(TOOL_ID) install_subskin(self,out,GLOBALS) existent_sites = portal.portal_pingtool.objectIds() for site in SITES_LIST: if not site[0] in existent_sites: portal.portal_pingtool.invokeFactory(id = site[0], type_name = "PingInfo", title = site[1],url = site[2]) pp = getToolByName(self,'portal_properties') np = getattr(pp,'navtree_properties') meta_types = list(np.getProperty('metaTypesNotToList')) if 'PingTool' not in meta_types: meta_types.append('PingTool') safeEditProperty(np,'metaTypesNotToList', meta_types, 'lines') sp = getattr(pp,'site_properties', None) if hasattr(sp, 'typesUseViewActionInListings'): sp.typesUseViewActionInListings += ('PingInfo',) print >> out, "\nSuccessfully installed %s." % PROJECTNAME return out.getvalue() def uninstall(portal): action_tool = getToolByName(portal, 'portal_actions') # Delete ActionProvider action_tool.deleteActionProvider(TOOL_ID) controlpanel_tool = getToolByName(portal, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(TOOL_ID) removeSkin(portal, ('ping_tool.pt',)) #wf_tool=getToolByName(self, 'portal_workflow') #wf=wf_tool.plone_workflow #tdef = wf.transitions['publish'] #tdef.after_script_name=None return '%s actionProvider successfully uninstalled' % TOOL_ID def removeSkin(self, skins = []): if skins: skinstool = getToolByName(self, 'portal_skins') for skinName in skinstool.getSkinSelections(): path = skinstool.getSkinPath(skinName) path = [i.strip() for i in path.split(',')] for s in skins: if s in path: path.remove(s) path = ','.join(path) skinstool.addSkinSelection(skinName, path)