source: products/qPloneCaptchas/tags/1.3.0/Extensions/Install.py

Last change on this file was 1, checked in by myroslav, 18 years ago

Building directory structure

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