[1] | 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,ReplyToItem |
---|
| 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_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 | |
---|
| 85 | def 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 | |
---|
| 91 | def 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,]) |
---|