source: products/qPloneCaptchas/trunk/Extensions/Install.py

Last change on this file was 1084, checked in by liebster, 15 years ago

Added support of Plone 3.2 version

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1from Products.qPloneCaptchas.config import *
2from Products.CMFCore.utils import getToolByName
3from StringIO import StringIO
4from Products.CMFCore.DirectoryView import addDirectoryViews
5import string
6from App.Common import package_home
7from os.path import exists as path_exists, join as path_join
8
9try:
10    from Products.CMFCore.permissions import ManagePortal
11except:
12    from Products.CMFCore.CMFCorePermissions import ManagePortal
13
14from random import randint
15from Products.CMFPlone.migrations.migration_util import safeEditProperty
16
17def install(self):
18    out=StringIO()
19    portal = getToolByName(self, 'portal_url').getPortalObject()
20    # add captchas_tool
21    install_tool(self, out)
22
23    safeEditProperty(self, 'captcha_key', generateKey(8))
24
25    # add Property sheet to portal_properies
26    pp = getToolByName(self, 'portal_properties')
27    if not 'qPloneCaptchas' in pp.objectIds():
28        pp.addPropertySheet(id='qPloneCaptchas', title= '%s Properties' % 'qPloneCaptchas')
29        out.write("Adding %s property sheet to portal_properies\n" % 'qPloneCaptchas' )
30    props_sheet = pp['qPloneCaptchas']
31    updateProperties(props_sheet, out, PROPERTIES)
32
33    Layers = []
34    Layers += LAYERS
35    Layers.append(LAYER_STATIC_CAPTCHAS)
36
37    mtool = getToolByName(self, 'portal_migration')
38    plone_version = mtool.getFileSystemVersion()
39
40    if plone_version.startswith('2.1'):
41        plone_version = '2.1.2'
42    elif plone_version.startswith('2.0'):
43        plone_version = '2.0.5'
44    elif plone_version.startswith('2.5'):
45        plone_version = '2.5'
46    elif plone_version.startswith('3.0'):
47        plone_version = '3.0'
48    elif plone_version.startswith('3.1'):
49        plone_version = '3.1'
50    elif plone_version.startswith('3.2'):
51        plone_version = '3.2'
52    else:
53        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-3.2")
54
55    DiscussionLayer = LAYER_DISCUSSION
56    qi = getToolByName(self, 'portal_quickinstaller')
57    if qi.isProductInstalled('PloneFormMailer'):
58        formmailer_layer = LAYER_FORMMAILER+'/'+ plone_version
59        Layers.append(formmailer_layer)
60    discussion_layer = '/'.join([DiscussionLayer, plone_version])
61    Layers.append(discussion_layer)
62
63    join_form_layer = '/'.join([LAYER_JOIN_FORM, plone_version])
64    Layers.append(join_form_layer)
65
66    sendto_form_layer = '/'.join([LAYER_SENDTO_FORM, plone_version])
67    Layers.append(sendto_form_layer)
68
69    out.write('Call setupSkin... \n')
70    setupSkin(self, out, Layers)
71
72    # Add Configlet. Delete old version before adding, if exist one.
73    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
74    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
75    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
76                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
77                                        appId=PRODUCT_NAME, permission=ManagePortal, imageUrl='group.gif')
78    return out.getvalue()
79
80def setupSkin(self, out, layers):
81    """Setup skins"""
82    skinstool=getToolByName(self, 'portal_skins')
83    addDirectoryViews(skinstool, 'skins', GLOBALS)
84
85    for skin in skinstool.getSkinSelections():
86        modified = False
87        path = skinstool.getSkinPath(skin)
88        path = map( string.strip, string.split( path,',' ) )
89        for layer in layers:
90            if not layer in path:
91                try:
92                    path.insert(path.index('custom')+1, layer )
93                except ValueError:
94                    path.append(layer)
95                modified = True
96                out.write('  Layer %s sucessfully installed into skin %s.\n' % (layer,skin))
97            else:
98                out.write('  Layer %s was already installed into skin %s.\n' % (layer,skin))
99        if modified:
100            path = string.join( path, ',' )
101            skinstool.addSkinSelection( skin, path )
102
103def uninstall(self):
104    skinstool = getToolByName(self, 'portal_skins')
105    for skinName in skinstool.getSkinSelections():
106        path = skinstool.getSkinPath(skinName)
107        path = [i.strip() for i in  path.split(',')]
108        pth  = [x for x in path
109                    if not ((x in ALL_LAYERS) or
110                            filter(lambda y:x.startswith(y), ALL_LAYERS))]
111        skinstool.addSkinSelection(skinName, ','.join(pth))
112
113     # Remove configlet
114    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
115    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
116    # Remove Product's property sheet from portal_properties
117    pp = getToolByName(self, 'portal_properties')
118    if 'qPloneCaptchas' in pp.objectIds():
119        pp.manage_delObjects(ids=['qPloneCaptchas'])
120
121def updateProperties(pp_ps, out, *args):
122    for prop in args:
123        for prop_id, prop_value, prop_type in prop:
124            if not pp_ps.hasProperty(prop_id):
125                pp_ps.manage_addProperty(prop_id, prop_value, prop_type)
126                out.write("Adding %s property to %s property sheet\n" % (prop_id, 'qPloneComments'))
127
128def generateKey(length):
129    key = ''
130    for i in range(length): key += str(randint(0, 9))
131    return key
132
133def install_tool(self, out):
134    if not hasattr(self, 'portal_captchas'):
135        addTool = self.manage_addProduct['qPloneCaptchas'].manage_addTool
136        addTool('CaptchaTool')
137
138def updateProperties(pp_ps, out, *args):
139    for prop in args:
140        for prop_id, prop_value, prop_type in prop:
141            if not pp_ps.hasProperty(prop_id):
142                pp_ps.manage_addProperty(prop_id, prop_value, prop_type)
143                out.write("Adding %s property to %s property sheet\n" % (prop_id, 'qPloneComments'))
Note: See TracBrowser for help on using the repository browser.