source: products/qPloneComments/branches/plone-2.1/Extensions/Install.py @ 1

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

Building directory structure

File size: 5.4 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 'qPloneComments' in pp.objectIds():
48        pp.addPropertySheet(id='qPloneComments', title= '%s Properties' % 'qPloneComments')
49        out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' )
50    props_sheet = pp['qPloneComments']
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" % 'qPloneComments' )
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    if not 'DiscussionManager' in roles:
72        roles.append( 'DiscussionManager' )
73        roles = tuple(roles)
74        self.__ac_roles__ = roles
75        out.write("Added DiscussionManager role top portal.\n")
76
77    #  Add 'DiscussionManagers' group
78    portal_groups = getToolByName(self, 'portal_groups')
79    if not 'DiscussionManager' in portal_groups.listGroupIds():
80        portal_groups.addGroup('DiscussionManager', roles=['DiscussionManager'])
81        out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n")
82
83    # Remove workflow-chain for Discussion Item
84    wf_tool = getToolByName(self, 'portal_workflow')
85    wf_tool.setChainForPortalTypes( ('Discussion Item',), []) 
86    out.write("Removed workflow chain for Discussion Item type.\n")
87   
88    out.write('Installation successfully completed.\n')
89    return out.getvalue()
90
91
92def updateProperty(pp_ps, id, value, property_type, out):
93    if not pp_ps.hasProperty(id):
94        pp_ps.manage_addProperty(id, value, property_type)
95        out.write("Adding %s property to %s property sheet\n" % (id, 'qPloneComments') )
96
97
98def uninstall(self) :
99    skinstool = getToolByName(self, 'portal_skins')
100    # Remove skin
101    for skinName in skinstool.getSkinSelections():
102        path = skinstool.getSkinPath(skinName)
103        path = [i.strip() for i in  path.split(',')]
104        if SKIN_NAME in path:
105            path.remove(SKIN_NAME)
106            path = ','.join(path)
107            skinstool.addSkinSelection(skinName, path)
108    # Remove configlet
109    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
110    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
111    # Remove Product's property sheet from portal_properties
112    pp = getToolByName(self, 'portal_properties')
113    if 'qPloneComments' in pp.objectIds():
114        pp.manage_delObjects(ids=['qPloneComments',])
Note: See TracBrowser for help on using the repository browser.