source: products/qPloneComments/tags/2.2.0/Extensions/Install.py @ 1

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

Building directory structure

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