source: products/qPloneComments/branches/plone205-21merge/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.7 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
5from App.Common import package_home
6from os.path import exists as path_exists, join as path_join
7
8from Products.qPloneComments.config import *
9
10import string
11try:
12    True
13except:
14    True = 1
15    False = 0
16
17def setupSkin(self, out, layers):
18    """Setup skins"""
19    skinstool=getToolByName(self, 'portal_skins')
20    addDirectoryViews(skinstool, 'skins', GLOBALS)
21
22    for skin in skinstool.getSkinSelections():
23        modified = False
24        path = skinstool.getSkinPath(skin)
25        path = map( string.strip, string.split( path,',' ) )
26        for layer in layers:
27            if not layer in path:
28                try:
29                    path.insert(path.index('custom')+1, layer )
30                except ValueError:
31                    path.append(layer)
32                modified = True
33                out.write('  Layer %s sucessfully installed into skin %s.\n' % (layer,skin))
34            else:
35                out.write('  Layer %s was already installed into skin %s.\n' % (layer,skin))
36        if modified:
37            path = string.join( path, ', ' )
38            skinstool.addSkinSelection( skin, path )
39
40   
41def install(self):
42    out=StringIO()
43
44    Layers = []
45    mtool = getToolByName(self, 'portal_migration')
46    plone_version = mtool.getFileSystemVersion()
47    if plone_version.startswith('2.1'):
48        plone_version = '2.1'
49    elif plone_version.startswith('2.0'):
50        plone_version = '2.0.5'
51    else:
52        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-2.1.2")
53
54    product_path = package_home(GLOBALS)
55    versioned_skin = path_join(product_path, 'skins', PROJECTNAME, plone_version)
56
57    Layers.append(SKIN_NAME)
58    Layers.append('%s/%s' % (SKIN_NAME, plone_version) )
59    out.write('Call setupSkin... \n')
60    setupSkin(self, out, Layers)
61
62    # add Property sheet to portal_properies
63    pp = getToolByName(self, 'portal_properties')
64    if not 'qPloneComments' in pp.objectIds():
65        pp.addPropertySheet(id='qPloneComments', title= '%s Properties' % 'qPloneComments')
66        out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' )
67    props_sheet = pp['qPloneComments']
68    updateProperty(props_sheet, id="enable_moderation", value="True", property_type='boolean', out=out)
69    updateProperty(props_sheet, id="enable_anonymous_commenting", value="True", property_type='boolean', out=out)
70    updateProperty(props_sheet, id="enable_published_notification", value="True", property_type='boolean', out=out)
71    updateProperty(props_sheet, id="enable_approve_notification", value="True", property_type='boolean', out=out)
72    updateProperty(props_sheet, id="email_discussion_manager", value="", property_type='string', out=out)
73    updateProperty(props_sheet, id="email_subject_prefix", value="", property_type='string', out=out)
74    # Tern on Anonymous commenting
75    self.manage_permission(ReplyToItem, ['Anonymous','Manager','Member'], 1)
76
77    out.write("Updating properties of %s property sheet\n" % 'qPloneComments' )
78
79    # Add Configlet. Delete old version before adding, if exist one.
80    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
81    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
82    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
83                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
84                                        appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif')
85
86    # Add DiscussionManager role to Portal
87    roles = list(self.__ac_roles__)
88    if not 'DiscussionManager' in roles:
89        roles.append( 'DiscussionManager' )
90        roles = tuple(roles)
91        self.__ac_roles__ = roles
92        out.write("Added DiscussionManager role top portal.\n")
93
94    #  Add 'DiscussionManagers' group
95    portal_groups = getToolByName(self, 'portal_groups')
96    if not 'DiscussionManager' in portal_groups.listGroupIds():
97        portal_groups.addGroup('DiscussionManager', roles=['DiscussionManager'])
98        out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n")
99
100    # Remove workflow-chain for Discussion Item
101    wf_tool = getToolByName(self, 'portal_workflow')
102    wf_tool.setChainForPortalTypes( ('Discussion Item',), []) 
103    out.write("Removed workflow chain for Discussion Item type.\n")
104   
105    out.write('Installation successfully completed.\n')
106    return out.getvalue()
107
108
109def updateProperty(pp_ps, id, value, property_type, out):
110    if not pp_ps.hasProperty(id):
111        pp_ps.manage_addProperty(id, value, property_type)
112        out.write("Adding %s property to %s property sheet\n" % (id, 'qPloneComments') )
113
114
115def uninstall(self) :
116    skinstool = getToolByName(self, 'portal_skins')
117    # Remove skin
118    for skinName in skinstool.getSkinSelections():
119        path = skinstool.getSkinPath(skinName)
120        path = [i.strip() for i in  path.split(',')]
121        if SKIN_NAME in path:
122            path.remove(SKIN_NAME)
123            path = ','.join(path)
124            skinstool.addSkinSelection(skinName, path)
125    # Remove configlet
126    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
127    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
128    # Remove Product's property sheet from portal_properties
129    pp = getToolByName(self, 'portal_properties')
130    if 'qPloneComments' in pp.objectIds():
131        pp.manage_delObjects(ids=['qPloneComments',])
Note: See TracBrowser for help on using the repository browser.