from Products.qPloneCaptchas.config import * from Products.CMFCore.utils import getToolByName from StringIO import StringIO from Products.CMFCore.DirectoryView import addDirectoryViews import string from App.Common import package_home from os.path import exists as path_exists, join as path_join try: from Products.CMFCore.permissions import ManagePortal except: from Products.CMFCore.CMFCorePermissions import ManagePortal from random import randint from Products.CMFPlone.migrations.migration_util import safeEditProperty def install(self): out=StringIO() portal = getToolByName(self, 'portal_url').getPortalObject() # add captchas_tool install_tool(self, out) safeEditProperty(self, 'captcha_key', generateKey(8)) # add Property sheet to portal_properies pp = getToolByName(self, 'portal_properties') if not 'qPloneCaptchas' in pp.objectIds(): pp.addPropertySheet(id='qPloneCaptchas', title= '%s Properties' % 'qPloneCaptchas') out.write("Adding %s property sheet to portal_properies\n" % 'qPloneCaptchas' ) props_sheet = pp['qPloneCaptchas'] updateProperties(props_sheet, out, PROPERTIES) Layers = [] Layers += LAYERS Layers.append(LAYER_STATIC_CAPTCHAS) mtool = getToolByName(self, 'portal_migration') plone_version = mtool.getFileSystemVersion() if plone_version.startswith('2.1'): plone_version = '2.1.2' elif plone_version.startswith('2.0'): plone_version = '2.0.5' elif plone_version.startswith('2.5'): plone_version = '2.5' elif plone_version.startswith('3.0'): plone_version = '3.0' elif plone_version.startswith('3.1'): plone_version = '3.1' elif plone_version.startswith('3.2'): plone_version = '3.2' else: raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-3.2") DiscussionLayer = LAYER_DISCUSSION qi = getToolByName(self, 'portal_quickinstaller') if qi.isProductInstalled('PloneFormMailer'): formmailer_layer = LAYER_FORMMAILER+'/'+ plone_version Layers.append(formmailer_layer) discussion_layer = '/'.join([DiscussionLayer, plone_version]) Layers.append(discussion_layer) join_form_layer = '/'.join([LAYER_JOIN_FORM, plone_version]) Layers.append(join_form_layer) sendto_form_layer = '/'.join([LAYER_SENDTO_FORM, plone_version]) Layers.append(sendto_form_layer) out.write('Call setupSkin... \n') setupSkin(self, out, Layers) # Add Configlet. Delete old version before adding, if exist one. controlpanel_tool = getToolByName(self, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(CONFIGLET_ID) controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products', action='string:${portal_url}/%s' % CONFIGLET_ID, appId=PRODUCT_NAME, permission=ManagePortal, imageUrl='group.gif') return out.getvalue() def setupSkin(self, out, layers): """Setup skins""" skinstool=getToolByName(self, 'portal_skins') addDirectoryViews(skinstool, 'skins', GLOBALS) for skin in skinstool.getSkinSelections(): modified = False path = skinstool.getSkinPath(skin) path = map( string.strip, string.split( path,',' ) ) for layer in layers: if not layer in path: try: path.insert(path.index('custom')+1, layer ) except ValueError: path.append(layer) modified = True out.write(' Layer %s sucessfully installed into skin %s.\n' % (layer,skin)) else: out.write(' Layer %s was already installed into skin %s.\n' % (layer,skin)) if modified: path = string.join( path, ',' ) skinstool.addSkinSelection( skin, path ) def uninstall(self): skinstool = getToolByName(self, 'portal_skins') for skinName in skinstool.getSkinSelections(): path = skinstool.getSkinPath(skinName) path = [i.strip() for i in path.split(',')] pth = [x for x in path if not ((x in ALL_LAYERS) or filter(lambda y:x.startswith(y), ALL_LAYERS))] skinstool.addSkinSelection(skinName, ','.join(pth)) # Remove configlet controlpanel_tool = getToolByName(self, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(CONFIGLET_ID) # Remove Product's property sheet from portal_properties pp = getToolByName(self, 'portal_properties') if 'qPloneCaptchas' in pp.objectIds(): pp.manage_delObjects(ids=['qPloneCaptchas']) def updateProperties(pp_ps, out, *args): for prop in args: for prop_id, prop_value, prop_type in prop: if not pp_ps.hasProperty(prop_id): pp_ps.manage_addProperty(prop_id, prop_value, prop_type) out.write("Adding %s property to %s property sheet\n" % (prop_id, 'qPloneComments')) def generateKey(length): key = '' for i in range(length): key += str(randint(0, 9)) return key def install_tool(self, out): if not hasattr(self, 'portal_captchas'): addTool = self.manage_addProduct['qPloneCaptchas'].manage_addTool addTool('CaptchaTool') def updateProperties(pp_ps, out, *args): for prop in args: for prop_id, prop_value, prop_type in prop: if not pp_ps.hasProperty(prop_id): pp_ps.manage_addProperty(prop_id, prop_value, prop_type) out.write("Adding %s property to %s property sheet\n" % (prop_id, 'qPloneComments'))