source: products/qPloneDropDownMenu/branches/0.2/Extensions/Install.py @ 1

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

Building directory structure

File size: 5.1 KB
Line 
1import string
2from cStringIO import StringIO
3
4from Products.CMFCore.utils import getToolByName
5from Products.CMFCore.DirectoryView import addDirectoryViews
6from Products.CMFCore.CMFCorePermissions import ManagePortal
7
8from Products.qPloneDropDownMenu.config import *
9
10configlets = ({'id':PROJECTNAME,
11    'name':'Drop Down Menu',
12    'action':'string:${portal_url}/prefs_dropdownmenu_edit_form',
13    'condition':'',
14    'category':'Products',
15    'visible':1,
16    'appId':PROJECTNAME,
17    'permission':ManagePortal,
18    'imageUrl':'qplonedropdownmenu.gif'},)
19
20def setupConfiglets(self, out):
21    configTool = getToolByName(self, 'portal_controlpanel', None)
22    if configTool:
23        for conf in configlets:
24            configTool.registerConfiglet(**conf)
25            out.write('Added configlet %s\n' % conf['id'])
26
27def removeConfiglets(self, out):
28    configTool = getToolByName(self, 'portal_controlpanel', None)
29    if configTool:
30        for conf in configlets:
31            configTool.unregisterConfiglet(conf['id'])
32            out.write('Removed configlet %s\n' % conf['id'])
33
34def registerCSS(self, out):
35    qi = getToolByName(self, 'portal_quickinstaller', None)
36    if qi is not None:
37        try:
38            if not qi.isProductInstalled('ResourceRegistries'):
39                qi.installProduct('ResourceRegistries', locked=0)
40            cssreg = getToolByName(self, 'portal_css', None)
41            if cssreg is not None:
42                stylesheet_ids = cssreg.getResourceIds()
43
44                if 'drop_down.css' not in stylesheet_ids:
45                    cssreg.registerStylesheet('drop_down.css',
46                                               expression="python:portal.portal_dropdownmenu")
47                    out.write('Register drop_down.css... \n')
48                else:
49                    out.write('drop_down.css already exists... \n')
50        except:
51            pass
52
53def unregisterCSS(self, out):
54    qi = getToolByName(self, 'portal_quickinstaller', None)
55    if qi is not None:
56        try:
57            if not qi.isProductInstalled('ResourceRegistries'):
58                qi.installProduct('ResourceRegistries', locked=0)
59            cssreg = getToolByName(self, 'portal_css', None)
60            if cssreg is not None:
61                stylesheet_ids = cssreg.getResourceIds()
62
63                if 'drop_down.css' in stylesheet_ids:
64                    cssreg.unregisterResource('drop_down.css')
65                    out.write('Unregister drop_down.css... \n')
66        except:
67            pass
68
69def setupSkin(self, out, skinFolder):
70    skinstool=getToolByName(self, 'portal_skins')
71    for skin in skinstool.getSkinSelections():
72        path = skinstool.getSkinPath(skin)
73        path = map(string.strip, string.split(path,','))
74        if not skinFolder in path:
75            try:
76                path.insert(path.index('custom')+1, skinFolder)
77            except ValueError:
78                path.append(skinFolder)
79            path = string.join(path, ', ')
80            skinstool.addSkinSelection(skin, path)
81            out.write(%s layer sucessfully installed into skin %s.\n' % (skinFolder, skin))
82        else:
83            out.write(%s layer was already installed into skin %s.\n' % (skinFolder, skin))
84
85def removeSkin(self, skins=[]):
86    if skins:
87        skinstool = getToolByName(self, 'portal_skins')
88        for skinName in skinstool.getSkinSelections():
89            path = skinstool.getSkinPath(skinName)
90            path = [i.strip() for i in  path.split(',')]
91            for s in skins:
92                if s in path:
93                    path.remove(s)
94                s += '/'
95                for layer in path:
96                    if layer.startswith(s):
97                        path.remove(layer)
98            path = ','.join(path)
99            skinstool.addSkinSelection(skinName, path)
100
101def setupTool(self, out):
102    if hasattr(self, UNIQUE_ID):
103        self.manage_delObjects([UNIQUE_ID])
104        out.write('Deleting old %s\n' % (UNIQUE_ID))
105    portal_url = getToolByName(self, 'portal_url')
106    p = portal_url.getPortalObject()
107    x = p.manage_addProduct[PROJECTNAME].manage_addTool(type='DropDownMenu Tool')
108
109def deleteTool(self, out):
110    if hasattr(self, UNIQUE_ID):
111        self.manage_delObjects([UNIQUE_ID])
112        out.write('Deleted %s tool\n' % (UNIQUE_ID))
113
114def install(self):
115    out = StringIO()
116    registerCSS(self, out)
117    out.write('setupSkin... \n')
118    skinstool=getToolByName(self, 'portal_skins')
119    addDirectoryViews(skinstool, SKINS_DIR, GLOBALS)
120    setupSkin(self, out, 'qPloneDropDownMenu')
121    mtool = getToolByName(self, 'portal_migration')
122    plone_version = mtool.getFileSystemVersion()
123    if plone_version == '2.0.5':
124         setupSkin(self, out, PROJECTNAME+'/2.0.5')
125         out.write('Added %s/2.0.5 Layer to portal_skins\n' % PROJECTNAME)
126    setupConfiglets(self, out)
127    out.write('Added %s to the portal root folder\n' % (UNIQUE_ID))
128    setupTool(self, out)
129    return out.getvalue()
130
131def uninstall(self):
132    out = StringIO()
133    unregisterCSS(self, out)
134    removeConfiglets(self, out)
135    removeSkin(self, [PROJECTNAME, PROJECTNAME+'/2.0.5'])
136    deleteTool(self, out)
137    return out.getvalue()
Note: See TracBrowser for help on using the repository browser.