source: products/qPloneCaptchas/tags/1.0/Extensions/Install.py @ 458

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

Building directory structure

  • Property svn:eol-style set to native
File size: 4.1 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    Layers = []
21    Layers += LAYERS
22    Layers.append(LAYER_DYNAMIC_CAPTCHAS)
23
24    mtool = getToolByName(self, 'portal_migration')
25    plone_version = mtool.getFileSystemVersion()
26
27    if plone_version.startswith('2.1'):
28        plone_version = '2.1.2'
29    elif plone_version.startswith('2.0'):
30        plone_version = '2.0.5'
31    elif plone_version.startswith('2.5'):
32        plone_version = '2.5'
33    else:
34        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-2.5")
35
36    DiscussionLayer = LAYER_DISCUSSION
37    qi = getToolByName(self, 'portal_quickinstaller')
38    if qi.isProductInstalled('PloneFormMailer'):
39        formmailer_layer = LAYER_FORMMAILER+'/'+plone_version
40        Layers.append(formmailer_layer)
41    discussion_layer = DiscussionLayer+'/'+plone_version
42    Layers.append(discussion_layer)
43    out.write('Call setupSkin... \n')
44    setupSkin(self, out, Layers)
45
46    # Add Configlet. Delete old version before adding, if exist one.
47    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
48    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
49    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
50                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
51                                        appId=PRODUCT_NAME, permission=ManagePortal, imageUrl='group.gif')
52
53def setupSkin(self, out, layers):
54    """Setup skins"""
55    skinstool=getToolByName(self, 'portal_skins')
56    addDirectoryViews(skinstool, 'skins', GLOBALS)
57
58    for skin in skinstool.getSkinSelections():
59        modified = False
60        path = skinstool.getSkinPath(skin)
61        path = map( string.strip, string.split( path,',' ) )
62        for layer in layers:
63            if not layer in path:
64                try:
65                    path.insert(path.index('custom')+1, layer )
66                except ValueError:
67                    path.append(layer)
68                modified = True
69                out.write('  Layer %s sucessfully installed into skin %s.\n' % (layer,skin))
70            else:
71                out.write('  Layer %s was already installed into skin %s.\n' % (layer,skin))
72        if modified:
73            path = string.join( path, ', ' )
74            skinstool.addSkinSelection( skin, path )
75
76def uninstall(self):
77    skinstool = getToolByName(self, 'portal_skins')
78    for skinName in skinstool.getSkinSelections():
79        path = skinstool.getSkinPath(skinName)
80        path = [i.strip() for i in  path.split(',')]
81        pth  = [x for x in path
82                    if not ((x in ALL_LAYERS) or
83                            filter(lambda y:x.startswith(y), ALL_LAYERS))]
84        skinstool.addSkinSelection(skinName, ','.join(pth))
85
86     # Remove configlet
87    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
88    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
89
90def updateProperties(pp_ps, out, *args):
91    for prop in args:
92        for prop_id, prop_value, prop_type in prop:
93            if not pp_ps.hasProperty(prop_id):
94                pp_ps.manage_addProperty(prop_id, prop_value, prop_type)
95                out.write("Adding %s property to %s property sheet\n" % (prop_id, 'qPloneComments'))
96
97def generateKey(length):
98    key = ''
99    for i in range(length): key += str(randint(0, 9))
100    return key
101
102def install_tool(self, out):
103    if not hasattr(self, 'portal_captchas'):
104        addTool = self.manage_addProduct['qPloneCaptchas'].manage_addTool
105        addTool('CaptchaTool')
Note: See TracBrowser for help on using the repository browser.