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