1 | from StringIO import StringIO |
---|
2 | from Products.CMFCore.utils import getToolByName |
---|
3 | from Products.CMFCore.DirectoryView import addDirectoryViews |
---|
4 | from Products.CMFCore.CMFCorePermissions import ManagePortal |
---|
5 | |
---|
6 | from Products.qPloneComments.config import * |
---|
7 | |
---|
8 | import string |
---|
9 | |
---|
10 | def 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 | |
---|
82 | def 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 | |
---|
88 | def 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,]) |
---|