source: products/qPloneComments/tags/1.7b/Extensions/Install.py @ 458

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

Building directory structure

File size: 4.9 KB
Line 
1from StringIO import StringIO
2from Products.CMFCore.utils import getToolByName
3from Products.CMFCore.DirectoryView import addDirectoryViews
4from Products.CMFCore.CMFCorePermissions import ManagePortal,ReplyToItem
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    # Tern on Anonymous commenting
57    self.manage_permission(ReplyToItem, ['Anonymous','Manager','Member'], 1)
58
59    out.write("Updating properties of %s property sheet\n" % PROPERTY_SHEET )
60
61    # Add Configlet. Delete old version before adding, if exist one.
62    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
63    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
64    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
65                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
66                                        appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif')
67
68    # Add DiscussionManager role to Portal
69    roles = list(self.__ac_roles__)
70    roles.append( 'DiscussionManager' )
71    roles = tuple(roles)
72    self.__ac_roles__ = roles
73    out.write("Added DiscussionManager role top portal.\n")
74
75    #  Add 'DiscussionManagers' group
76    portal_groups = getToolByName(self, 'portal_groups')
77    portal_groups.addGroup('DiscussionManager', roles=['DiscussionManager'])
78    out.write("Added DiscussionManagers group to portal_groups with DiscussionManager role.\n")
79
80    out.write('Installation successfully completed.\n')
81    return out.getvalue()
82
83
84def updateProperty(pp_ps, id, value, property_type, out):
85    if not pp_ps.hasProperty(id):
86        pp_ps.manage_addProperty(id, value, property_type)
87        out.write("Adding %s property to %s property sheet\n" % (id, PROPERTY_SHEET) )
88
89
90def uninstall(self) :
91    skinstool = getToolByName(self, 'portal_skins')
92    # Remove skin
93    for skinName in skinstool.getSkinSelections():
94        path = skinstool.getSkinPath(skinName)
95        path = [i.strip() for i in  path.split(',')]
96        if SKIN_NAME in path:
97            path.remove(SKIN_NAME)
98            path = ','.join(path)
99            skinstool.addSkinSelection(skinName, path)
100    # Remove configlet
101    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
102    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
103    # Remove Product's property sheet from portal_properties
104    pp = getToolByName(self, 'portal_properties')
105    if PROPERTY_SHEET in pp.objectIds():
106        pp.manage_delObjects(ids=[PROPERTY_SHEET,])
Note: See TracBrowser for help on using the repository browser.