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="Email_of_discussion_manager", value="", property_type='string', out=out) |
---|
52 | updateProperty(props_sheet, id="Turning_on/off_notification", value="True", property_type='boolean', out=out) |
---|
53 | updateProperty(props_sheet, id="Turning_on/off_Moderation", value="True", property_type='boolean', out=out) |
---|
54 | updateProperty(props_sheet, id="Turning_on/off_Anonymous_Commenting", value="True", property_type='boolean', out=out) |
---|
55 | out.write("Updating properties of %s property sheet\n" % PROPERTY_SHEET ) |
---|
56 | |
---|
57 | # Add Configlet. Delete old version before adding, if exist one. |
---|
58 | controlpanel_tool = getToolByName(self, 'portal_controlpanel') |
---|
59 | controlpanel_tool.unregisterConfiglet(CONFIGLET_ID) |
---|
60 | controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products', |
---|
61 | action='string:${portal_url}/qPloneComments_config', |
---|
62 | appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif') |
---|
63 | |
---|
64 | |
---|
65 | |
---|
66 | out.write('Installation successfully completed.\n') |
---|
67 | return out.getvalue() |
---|
68 | |
---|
69 | |
---|
70 | def updateProperty(pp_ps, id, value, property_type, out): |
---|
71 | if not pp_ps.hasProperty(id): |
---|
72 | pp_ps.manage_addProperty(id, value, property_type) |
---|
73 | out.write("Adding %s property to %s property sheet\n" % (id, PROPERTY_SHEET) ) |
---|
74 | |
---|
75 | |
---|
76 | def uninstall(self) : |
---|
77 | skinstool = getToolByName(self, 'portal_skins') |
---|
78 | |
---|
79 | for skinName in skinstool.getSkinSelections(): |
---|
80 | path = skinstool.getSkinPath(skinName) |
---|
81 | path = [i.strip() for i in path.split(',')] |
---|
82 | if SKIN_NAME in path: |
---|
83 | path.remove(SKIN_NAME) |
---|
84 | path = ','.join(path) |
---|
85 | skinstool.addSkinSelection(skinName, path) |
---|