source: products/qPloneComments/tags/1.6/Extensions/Install.py @ 1591

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

Building directory structure

File size: 4.8 KB
Line 
1from StringIO import StringIO
2from Products.CMFCore.utils import getToolByName
3from Products.CMFCore.DirectoryView import addDirectoryViews
4from Products.CMFCore.CMFCorePermissions import ManagePortal
5
6from Products.qPloneComments.config import *
7
8import string
9   
10def install(self):
11    out=StringIO()
12    skinsTool = getToolByName(self, 'portal_skins')
13    # Add directory views
14    try: 
15        addDirectoryViews(skinsTool, SKINS_DIR, GLOBALS)
16        out.write( "Added directory views to portal_skins.\n" )
17    except:
18        out.write( '*** Unable to add directory views to portal_skins.\n')
19
20    # Checking for presense SKIN_NAME Layer in available skins
21    avail_skin_names = skinsTool.getSkinSelections()
22    if SKIN_NAME in avail_skin_names :
23        out.write("Skipping creation %s skin, %s already set up\n" % (SKIN_NAME) )
24        return
25
26    for skin in avail_skin_names:
27        # Get skin's layers
28        skin_layers = skinsTool.getSkinPath(skin)
29        skin_layers_list = map( string.strip, string.split(skin_layers,',') )
30        if not (SKIN_NAME in skin_layers_list) :
31            # Insert new layer after 'custom'
32            try: 
33                skin_layers_list.insert(skin_layers_list.index('custom')+1 \
34                                        , string.lower(SKIN_NAME) )
35            except ValueError:
36                skin_layers_list.append(string.lower(SKIN_NAME) )
37
38            # Add new skin Layer
39            new_skin_layers = string.join(skin_layers_list, ', ')
40            skinsTool.addSkinSelection(skin, new_skin_layers)
41            out.write("%s skin-layer was added to %s skin\n" % (SKIN_NAME, skin) )
42        else:
43            out.write("Skipping adding %s skin-layer, to %s skin\n" % (SKIN_NAME, skin) )
44
45    # add Property sheet to portal_properies
46    pp = getToolByName(self, 'portal_properties')
47    if not PROPERTY_SHEET in pp.objectIds():
48        pp.addPropertySheet(id=PROPERTY_SHEET, title= '%s Properties' % PROPERTY_SHEET)
49        out.write("Adding %s property sheet to portal_properies\n" % PROPERTY_SHEET )
50    props_sheet = pp[PROPERTY_SHEET]
51    updateProperty(props_sheet, id="Enable_Moderation", value="True", property_type='boolean', out=out)
52    updateProperty(props_sheet, id="Enable_Anonymous_Commenting", value="True", property_type='boolean', out=out)
53    updateProperty(props_sheet, id="Enable_Notification", value="True", property_type='boolean', out=out)
54    updateProperty(props_sheet, id="Email_Discussion_Manager", value="", property_type='string', out=out)
55    updateProperty(props_sheet, id="Email_Subject_Prefix", value="", property_type='string', out=out)
56
57    out.write("Updating properties of %s property sheet\n" % PROPERTY_SHEET )
58
59    # Add Configlet. Delete old version before adding, if exist one.
60    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
61    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
62    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
63                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
64                                        appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif')
65
66    # Add DiscussionManager role to Portal
67    roles = list(self.__ac_roles__)
68    roles.append( 'DiscussionManager' )
69    roles = tuple(roles)
70    self.__ac_roles__ = roles
71    out.write("Added DiscussionManager role top portal.\n")
72
73    #  Add 'DiscussionManagers' group
74    portal_groups = getToolByName(self, 'portal_groups')
75    portal_groups.addGroup('DiscussionManager', roles=['DiscussionManager'])
76    out.write("Added DiscussionManagers group to portal_groups with DiscussionManager role.\n")
77
78    out.write('Installation successfully completed.\n')
79    return out.getvalue()
80
81
82def updateProperty(pp_ps, id, value, property_type, out):
83    if not pp_ps.hasProperty(id):
84        pp_ps.manage_addProperty(id, value, property_type)
85        out.write("Adding %s property to %s property sheet\n" % (id, PROPERTY_SHEET) )
86
87
88def uninstall(self) :
89    skinstool = getToolByName(self, 'portal_skins')
90    # Remove skin
91    for skinName in skinstool.getSkinSelections():
92        path = skinstool.getSkinPath(skinName)
93        path = [i.strip() for i in  path.split(',')]
94        if SKIN_NAME in path:
95            path.remove(SKIN_NAME)
96            path = ','.join(path)
97            skinstool.addSkinSelection(skinName, path)
98    # Remove configlet
99    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
100    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
101    # Remove Product's property sheet from portal_properties
102    pp = getToolByName(self, 'portal_properties')
103    if PROPERTY_SHEET in pp.objectIds():
104        pp.manage_delObjects(ids=[PROPERTY_SHEET,])
Note: See TracBrowser for help on using the repository browser.