source: products/quintagroup.seoptimizer/branches/refactoring2.3.0/quintagroup/seoptimizer/setuphandlers.py @ 1830

Last change on this file since 1830 was 1830, checked in by liebster, 14 years ago

Clean up code in setuphandlers

File size: 3.3 KB
Line 
1import logging
2from Products.CMFCore.utils import getToolByName
3from Products.CMFCore.Expression import Expression
4
5logger = logging.getLogger('quintagroup.seoptimizer')
6FIX_PTYPES_DOMAIN = ['Document', 'File', 'News Item']
7
8def removeSkin(site, layer):
9    """ Remove layers.
10    """
11    skins_tool = getToolByName(site, 'portal_skins')
12    for skinName in skins_tool.getSkinSelections():
13        skin_paths = skins_tool.getSkinPath(skinName).split(',') 
14        paths = [l.strip() for l in skin_paths if not (l == layer or l.startswith(layer+'/'))]
15        logger.log(logging.INFO, "Removed layers from %s skin." % skinName)
16        skins_tool.addSkinSelection(skinName, ','.join(paths))
17
18def removeActions(site):
19    """ Remove actions.
20    """
21    types_tool = getToolByName(site, 'portal_types')
22    for ptype in types_tool.objectValues():
23        idxs = [idx_act[0] for idx_act in enumerate(ptype.listActions()) if idx_act[1].id == 'seo_properties']
24        if idxs:
25            ptype.deleteActions(idxs)
26            logger.log(logging.INFO, "Deleted \"SEO Properties\" action for %s type." % ptype.id)
27
28def removeConfiglet(site, conf_id):
29    """ Remove configlet.
30    """
31    controlpanel_tool = getToolByName(site, 'portal_controlpanel')
32    if controlpanel_tool:
33        controlpanel_tool.unregisterConfiglet(conf_id)
34        logger.log(logging.INFO, "Unregistered \"%s\" configlet." % conf_id)
35
36def changeDomain(site):
37    """ Fixes old versions bug: Change of content type's domain to 'plone'.
38    """
39    types_tool = getToolByName(site, 'portal_types')
40    for ptype in [ptypes for ptypes in types_tool.objectValues() if ptypes.id in FIX_PTYPES_DOMAIN]:
41        if ptype.i18n_domain == 'quintagroup.seoptimizer':
42            ptype.i18n_domain = 'plone'
43            logger.log(logging.INFO, "I18n Domain of the type \'%s\' changed to \'plone\'." % ptype.id)
44
45def migrationActions(site):
46    """ Migration actions from portal_types action to portal_actions.
47    """
48    types_tool = getToolByName(site, 'portal_types')
49    pprops_tool = getToolByName(site, 'portal_properties')
50    seoprops_tool = getToolByName(pprops_tool, 'seo_properties')
51    ctws = list(seoprops_tool.getProperty('content_types_with_seoproperties', []))
52
53    for ptype in types_tool.objectValues():
54        idxs = [idx_act[0] for idx_act in enumerate(ptype.listActions()) if idx_act[1].id == 'seo_properties']
55        if idxs:
56            if ptype.id not in ctws:
57                ctws.append(ptype.id)
58            ptype.deleteActions(idxs)
59            logger.log(logging.INFO, "Moved \"SEO Properties\" action from %s type in portal actions." % ptype.id)
60    seoprops_tool.manage_changeProperties(content_types_with_seoproperties=ctws)
61
62def importVarious(context):
63    """ Do customized installation.
64    """
65    if context.readDataFile('seo_install.txt') is None:
66        return
67
68def reinstall(context):
69    """ Do customized reinstallation.
70    """
71    if context.readDataFile('seo_reinstall.txt') is None:
72        return
73    site = context.getSite()
74    migrationActions(site)
75    changeDomain(site)
76
77def uninstall(context):
78    """ Do customized uninstallation.
79    """
80    if context.readDataFile('seo_uninstall.txt') is None:
81        return
82    site = context.getSite()
83    removeSkin(site, 'quintagroup.seoptimizer' )
84    removeActions(site)
85    removeConfiglet(site, 'quintagroup.seoptimizer')
Note: See TracBrowser for help on using the repository browser.