source: products/qPloneDropDownMenu/trunk/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.6 KB
Line 
1import string
2from cStringIO import StringIO
3
4from Products.CMFCore.utils import getToolByName
5from Products.CMFCore.DirectoryView import addDirectoryViews
6
7from Products.CMFPlone.migrations.migration_util import safeEditProperty
8from Products.CMFCore.Expression import Expression, createExprContext
9
10from Products.qPloneDropDownMenu.config import *
11
12configlets = ({'id':PROJECT_NAME,
13    'name':'Drop Down Menu',
14    'action':'string:${portal_url}/prefs_dropdownmenu_edit_form',
15    'condition':'',
16    'category':'Products',
17    'visible':1,
18    'appId':PROJECT_NAME,
19    'permission':VIEW_PERMISSION,
20    'imageUrl':'qplonedropdownmenu.gif'},
21   {'id':'csshover',
22    'name':'CSS Hover',
23    'action':'string:${portal_url}/prefs_csshover_edit_form',
24    'condition':'',
25    'category':'Products',
26    'visible':1,
27    'appId':'csshover',
28    'permission':VIEW_PERMISSION},)
29
30def registerCSS(self, out):
31
32    qi = getToolByName(self, 'portal_quickinstaller', None)
33    if qi is not None:
34        try:
35            if not qi.isProductInstalled('ResourceRegistries'):
36                qi.installProduct('ResourceRegistries', locked=0)
37            cssreg = getToolByName(self, 'portal_css', None)
38            if cssreg is not None:
39                stylesheet_ids = cssreg.getResourceIds()
40
41                if 'drop_down.css' not in stylesheet_ids:
42                    cssreg.registerStylesheet('drop_down.css',
43                                               expression="python:portal.portal_dropdownmenu")
44                    out.write('Register drop_down.css... \n')
45                else:
46                    out.write('drop_down.css already exists... \n')
47        except:
48            pass
49
50def unregisterCSS(self, out):
51
52    qi = getToolByName(self, 'portal_quickinstaller', None)
53    if qi is not None:
54        try:
55            if not qi.isProductInstalled('ResourceRegistries'):
56                qi.installProduct('ResourceRegistries', locked=0)
57            cssreg = getToolByName(self, 'portal_css', None)
58            if cssreg is not None:
59                stylesheet_ids = cssreg.getResourceIds()
60
61                if 'drop_down.css' in stylesheet_ids:
62                    cssreg.unregisterResource('drop_down.css')
63                    out.write('Unregister drop_down.css... \n')
64        except:
65            pass
66
67def updateMenu(self):
68    out = ''
69
70    pu = getToolByName(self, 'plone_utils')
71
72    if hasattr(pu, 'createTopLevelTabs'):
73        pactions = getToolByName(self, 'portal_actions').listFilteredActionsFor(self)
74        tl_tabs = pu.createTopLevelTabs(pactions)
75
76        for act in tl_tabs:
77                out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">' % \
78                    (act['id'], act['url']) + act['name'] + '</a></li>\n'
79    else:
80        portal = getToolByName(self, 'portal_url').getPortalObject()
81
82        portal_act = getToolByName(self, 'portal_actions')
83        actions=portal_act._cloneActions()
84
85        for act in actions:
86            if act.category == 'portal_tabs':
87                out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">%s</a></li>\n' % \
88                    (act.id, \
89                     Expression(act.getActionExpression())(createExprContext(portal, portal, portal)), \
90                     act.title)
91
92    portal_props = getToolByName(self, 'portal_properties')
93    if not hasattr(portal_props, PROPERTY_SHEET):
94        portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties')
95    ap = getattr(portal_props, PROPERTY_SHEET)
96    safeEditProperty(ap, 'menu', out, 'text')
97
98def setupSkin(self, out, skinFolder):
99
100    skinstool=getToolByName(self, 'portal_skins')
101
102    addDirectoryViews(skinstool, SKINS_DIR, GLOBALS)
103
104    for skin in skinstool.getSkinSelections():
105        path = skinstool.getSkinPath(skin)
106        path = map( string.strip, string.split( path,',' ) )
107
108        if not skinFolder in path:
109            try:
110                path.insert( path.index( 'custom')+1, skinFolder )
111            except ValueError:
112                path.append(skinFolder)
113            path = string.join( path, ', ' )
114            skinstool.addSkinSelection( skin, path )
115            out.write(%s layer sucessfully installed into skin %s.\n' % (skinFolder, skin))
116        else:
117            out.write(%s layer was already installed into skin %s.\n' % (skinFolder, skin))
118
119def setupTool(self):
120
121    portal_url = getToolByName(self, 'portal_url')
122    p = portal_url.getPortalObject()
123    x = p.manage_addProduct[PROJECT_NAME].manage_addTool(type='DropDownMenu Tool')
124
125def install(self):
126    out = StringIO()
127
128    registerCSS(self, out)
129
130    configTool = getToolByName(self, 'portal_controlpanel', None)
131    if configTool:
132        for conf in configlets:
133            configTool.registerConfiglet(**conf)
134            out.write('Added configlet %s\n' % conf['id'])
135
136    if hasattr(self, UNIQUE_ID):
137        self.manage_delObjects([UNIQUE_ID])
138        out.write('Deleting old %s\n' % (UNIQUE_ID))
139    setupTool(self)
140    out.write('Added %s to the portal root folder\n' % (UNIQUE_ID))
141
142    portal_props = getToolByName(self, 'portal_properties')
143    if not hasattr(portal_props, PROPERTY_SHEET):
144        out.write('updateMenu... \n')
145        updateMenu(self)
146    else:
147        out.write('skipping updateMenu... \n')
148
149    out.write('setupSkin... \n')
150    setupSkin(self, out, 'qPloneDropDownMenu')
151
152    return out.getvalue()
153
154def uninstall(self):
155    out = StringIO()
156
157    unregisterCSS(self, out)
158
159    configTool = getToolByName(self, 'portal_controlpanel', None)
160    if configTool:
161        for conf in configlets:
162            configTool.unregisterConfiglet(conf['id'])
163            out.write('Removed configlet %s\n' % conf['id'])
164
165    return out.getvalue()
Note: See TracBrowser for help on using the repository browser.