Changeset 1158

Show
Ignore:
Timestamp:
07/16/08 00:42:30
Author:
deo
Message:

Added the new GS import step.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneComments/branches/plone-3.0/setuphandlers.py

    r1124 r1158  
    1 from StringIO import StringIO 
    21from Products.CMFCore.utils import getToolByName 
    3 from Products.CMFCore.DirectoryView import addDirectoryViews 
    4 try: 
    5     from Products.CMFCore.permissions import ManagePortal, ReplyToItem 
    6 except ImportError: 
    7     from Products.CMFCore.CMFCorePermissions import ManagePortal,ReplyToItem 
    8 from App.Common import package_home 
    9 from os.path import exists as path_exists, join as path_join 
    102 
    11 from plone.browserlayer.utils import register_layer, unregister_layer 
    12 from Products.qPloneComments.config import * 
    13 from Products.qPloneComments.interfaces import IPloneCommentsLayer 
     3def setupVarious(context): 
     4    """Run the various non-Generic Setup profile import steps. 
     5    """ 
     6    if context.readDataFile('qPloneComments-default.txt') is None: 
     7        return 
    148 
    15 import string 
     9    portal = context.getSite() 
     10    logger = context.getLogger('qPloneComments') 
    1611 
    17 def 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  
    41 def 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') 
     12    # Add 'DiscussionManagers' group 
     13    gtool = getToolByName(portal, 'portal_groups') 
    10514    existing = gtool.listGroupIds() 
    10615    if not 'DiscussionManager' in existing: 
    10716        gtool.addGroup('DiscussionManager', roles=['DiscussionManager']) 
    108         out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n"
     17        logger.info('Added DiscussionManager group to portal_groups with DiscussionManager role.'
    10918 
    11019    # 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  
    119 def 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  
    126 def 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') 
     20    wf_tool = getToolByName(portal, 'portal_workflow') 
     21    wf_tool.setChainForPortalTypes(('Discussion Item',), []) 
     22    logger.info('Removed workflow chain for Discussion Item type.')