source: products/qPloneCaptchas/tags/0.9/Extensions/Install.py @ 2284

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

Building directory structure

  • Property svn:eol-style set to native
File size: 3.2 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
11from Products.Transience.Transience import constructTransientObjectContainer
12
13def install(self):
14    out=StringIO()
15    portal = getToolByName(self, 'portal_url').getPortalObject()
16    if not hasattr(portal, TOOL_ID):
17        constructTransientObjectContainer(portal, id=TOOL_ID, timeout_mins=60)
18   
19    safeEditProperty(self, 'captcha_key', generateKey(8))
20    Layers = []
21    Layers += LAYERS
22    qi = getToolByName(self, 'portal_quickinstaller')
23    mtool = getToolByName(self, 'portal_migration')
24    plone_version = mtool.getFileSystemVersion()
25   
26    if plone_version.startswith('2.1'):
27        plone_version = '2.1.2'
28    elif plone_version.startswith('2.0'):
29        plone_version = '2.0.5'
30    elif plone_version.startswith('2.5'):
31        plone_version = '2.5'
32    else:
33        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-2.5")
34   
35    DiscussionLayer = LAYER_DISCUSSION
36    if qi.isProductInstalled('qPloneComments'):
37        DiscussionLayer = LAYER_QCOMMENTS
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   
47def setupSkin(self, out, layers):
48    """Setup skins"""
49    skinstool=getToolByName(self, 'portal_skins')
50    addDirectoryViews(skinstool, 'skins', GLOBALS)
51
52    for skin in skinstool.getSkinSelections():
53        modified = False
54        path = skinstool.getSkinPath(skin)
55        path = map( string.strip, string.split( path,',' ) )
56        for layer in layers:
57            if not layer in path:
58                try:
59                    path.insert(path.index('custom')+1, layer )
60                except ValueError:
61                    path.append(layer)
62                modified = True
63                out.write('  Layer %s sucessfully installed into skin %s.\n' % (layer,skin))
64            else:
65                out.write('  Layer %s was already installed into skin %s.\n' % (layer,skin))
66        if modified:
67            path = string.join( path, ', ' )
68            skinstool.addSkinSelection( skin, path )
69
70def uninstall(self):
71    skinstool = getToolByName(self, 'portal_skins')
72    for skinName in skinstool.getSkinSelections():
73        path = skinstool.getSkinPath(skinName)
74        path = [i.strip() for i in  path.split(',')]
75        for skin in ALL_LAYERS:
76            for l in path:
77                if (l == skin) or (l.startswith(skin+'/')):
78                    path.remove(l)
79        skinstool.addSkinSelection(skinName, ','.join(path))
80
81def generateKey(length):
82    key = ''
83    for i in range(length): key += str(randint(0, 9))
84    return key
Note: See TracBrowser for help on using the repository browser.