source: products/qPloneComments/tags/3.0.2/Extensions/Install.py @ 1591

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

Building directory structure

  • Property svn:eol-style set to native
File size: 5.9 KB
Line 
1from StringIO import StringIO
2from Products.CMFCore.utils import getToolByName
3from Products.CMFCore.DirectoryView import addDirectoryViews
4try:
5    from Products.CMFCore.permissions import ManagePortal, ReplyToItem
6except ImportError:
7    from Products.CMFCore.CMFCorePermissions import ManagePortal,ReplyToItem
8from App.Common import package_home
9from os.path import exists as path_exists, join as path_join
10
11from plone.browserlayer.utils import register_layer, unregister_layer
12from Products.qPloneComments.config import *
13from Products.qPloneComments.interfaces import IPloneCommentsLayer
14
15import string
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') or plone_version.startswith('3.0'):
52        plone_version = '2.5'
53    else:
54        raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-3.0")
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    # register our browser layer
65    register_layer(IPloneCommentsLayer, name='qPloneComments')
66
67    # add Property sheet to portal_properies
68    pp = getToolByName(self, 'portal_properties')
69    if not 'qPloneComments' in pp.objectIds():
70        pp.addPropertySheet(id='qPloneComments', title= '%s Properties' % 'qPloneComments')
71        out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' )
72    props_sheet = pp['qPloneComments']
73    updateProperties(props_sheet, out, PROPERTIES)
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    if plone_version == '2.5':
88        uf = getToolByName(self, 'acl_users')
89        rmanager = uf.portal_role_manager
90        existing = rmanager.listRoleIds()
91        if not 'DiscussionManager' in existing:
92            rmanager.addRole('DiscussionManager')
93            out.write("Added DiscussionManager role top portal.\n")
94    else:
95        roles = list(self.__ac_roles__)
96        if not 'DiscussionManager' in roles:
97            roles.append('DiscussionManager')
98            roles = tuple(roles)
99            self.__ac_roles__ = roles
100            out.write("Added DiscussionManager role top portal.\n")
101
102    self.manage_permission('Moderate Discussion', ['DiscussionManager', 'Manager'])
103    #  Add 'DiscussionManagers' group
104    gtool = getToolByName(self, 'portal_groups')
105    existing = gtool.listGroupIds()
106    if not 'DiscussionManager' in existing:
107        gtool.addGroup('DiscussionManager', roles=['DiscussionManager'])
108        out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n")
109
110    # Remove workflow-chain for Discussion Item
111    wf_tool = getToolByName(self, 'portal_workflow')
112    wf_tool.setChainForPortalTypes( ('Discussion Item',), []) 
113    out.write("Removed workflow chain for Discussion Item type.\n")
114
115    out.write('Installation successfully completed.\n')
116    return out.getvalue()
117
118
119def updateProperties(pp_ps, out, *args):
120    for prop in args:
121        for prop_id, prop_value, prop_type in prop:
122            if not pp_ps.hasProperty(prop_id):
123                pp_ps.manage_addProperty(prop_id, prop_value, prop_type)
124                out.write("Adding %s property to %s property sheet\n" % (prop_id, 'qPloneComments') )
125
126def uninstall(self):
127    skinstool = getToolByName(self, 'portal_skins')
128    # Remove skin
129    for skinName in skinstool.getSkinSelections():
130        old_path = skinstool.getSkinPath(skinName)
131        old_path = [i.strip() for i in  old_path.split(',')]
132        path = []
133        for p in old_path:
134            if not p.startswith(SKIN_NAME):
135                path.append(p)
136        path = ','.join(path)
137        skinstool.addSkinSelection(skinName, path)
138           
139    # remove browser layer
140    try:
141        unregister_layer(name='qPloneComments')
142    except KeyError:
143        pass
144           
145    # Remove configlet
146    controlpanel_tool = getToolByName(self, 'portal_controlpanel')
147    controlpanel_tool.unregisterConfiglet(CONFIGLET_ID)
148    # Remove Product's property sheet from portal_properties
149    pp = getToolByName(self, 'portal_properties')
Note: See TracBrowser for help on using the repository browser.