source: products/qPloneComments/branches/plone-2.5-i18n/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: 6.0 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    elif plone_version.startswith('2.5'):
52        plone_version = '2.5'
53    else:
54        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-2.5")
55
56    product_path = package_home(GLOBALS)
57    versioned_skin = path_join(product_path, 'skins', PROJECTNAME, plone_version)
58
59    Layers.append(SKIN_NAME)
60    Layers.append('%s/%s' % (SKIN_NAME, plone_version) )
61    out.write('Call setupSkin... \n')
62    setupSkin(self, out, Layers)
63
64    # add Property sheet to portal_properies
65    pp = getToolByName(self, 'portal_properties')
66    if not 'qPloneComments' in pp.objectIds():
67        pp.addPropertySheet(id='qPloneComments', title= '%s Properties' % 'qPloneComments')
68        out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' )
69    props_sheet = pp['qPloneComments']
70    updateProperty(props_sheet, id="enable_moderation", value="True", property_type='boolean', out=out)
71    updateProperty(props_sheet, id="enable_anonymous_commenting", value="True", property_type='boolean', out=out)
72    updateProperty(props_sheet, id="enable_published_notification", value="True", property_type='boolean', out=out)
73    updateProperty(props_sheet, id="enable_approve_notification", value="True", property_type='boolean', out=out)
74    updateProperty(props_sheet, id="email_discussion_manager", value="", property_type='string', out=out)
75    updateProperty(props_sheet, id="email_subject_prefix", value="", property_type='string', out=out)
76    # Tern on Anonymous commenting
77    self.manage_permission(ReplyToItem, ['Anonymous','Manager','Member'], 1)
78
79    out.write("Updating properties of %s property sheet\n" % 'qPloneComments' )
80
81    # Add Configlet. Delete old version before adding, if exist one.
82    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
83    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
84    controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products',
85                                        action='string:${portal_url}/%s' % CONFIGLET_ID,
86                                        appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif')
87
88    # Add DiscussionManager role to Portal
89    if plone_version == '2.5':
90        uf = getToolByName(self, 'acl_users')
91        rmanager = uf.portal_role_manager
92        existing = rmanager.listRoleIds()
93        if not 'DiscussionManager' in existing:
94            rmanager.addRole('DiscussionManager')
95            out.write("Added DiscussionManager role top portal.\n")
96    else:
97        roles = list(self.__ac_roles__)
98        if not 'DiscussionManager' in roles:
99            roles.append('DiscussionManager')
100            roles = tuple(roles)
101            self.__ac_roles__ = roles
102            out.write("Added DiscussionManager role top portal.\n")
103
104    self.manage_permission('Moderate Discussion', ['DiscussionManager', 'Manager'])
105    #  Add 'DiscussionManagers' group
106    gtool = getToolByName(self, 'portal_groups')
107    existing = gtool.listGroupIds()
108    if not 'DiscussionManager' in existing:
109        gtool.addGroup('DiscussionManager', roles=['DiscussionManager'])
110        out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n")
111
112    # Remove workflow-chain for Discussion Item
113    wf_tool = getToolByName(self, 'portal_workflow')
114    wf_tool.setChainForPortalTypes( ('Discussion Item',), []) 
115    out.write("Removed workflow chain for Discussion Item type.\n")
116
117    out.write('Installation successfully completed.\n')
118    return out.getvalue()
119
120
121def updateProperty(pp_ps, id, value, property_type, out):
122    if not pp_ps.hasProperty(id):
123        pp_ps.manage_addProperty(id, value, property_type)
124        out.write("Adding %s property to %s property sheet\n" % (id, 'qPloneComments') )
125
126
127def uninstall(self) :
128    skinstool = getToolByName(self, 'portal_skins')
129    # Remove skin
130    for skinName in skinstool.getSkinSelections():
131        path = skinstool.getSkinPath(skinName)
132        path = [i.strip() for i in  path.split(',')]
133        if SKIN_NAME in path:
134            path.remove(SKIN_NAME)
135            path = ','.join(path)
136            skinstool.addSkinSelection(skinName, path)
137    # Remove configlet
138    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
139    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
140    # Remove Product's property sheet from portal_properties
141    pp = getToolByName(self, 'portal_properties')
142    if 'qPloneComments' in pp.objectIds():
143        pp.manage_delObjects(ids=['qPloneComments',])
Note: See TracBrowser for help on using the repository browser.