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

Last change on this file since 1902 was 1898, checked in by mylan, 14 years ago

#161: Fix browser layer uninstallation

File size: 2.3 KB
Line 
1import logging
2
3from zope.component import getSiteManager
4from plone.browserlayer.utils import unregister_layer
5from plone.browserlayer.interfaces import ILocalBrowserLayerType
6
7from Products.CMFCore.utils import getToolByName
8
9logger = logging.getLogger('quintagroup.seoptimizer')
10
11def removeSkin(site, layer):
12    """ Remove layers.
13    """
14    skins_tool = getToolByName(site, 'portal_skins')
15    for skinName in skins_tool.getSkinSelections():
16        skin_paths = skins_tool.getSkinPath(skinName).split(',') 
17        paths = [l.strip() for l in skin_paths if not (l == layer or l.startswith(layer+'/'))]
18        logger.log(logging.INFO, "Removed layers from %s skin." % skinName)
19        skins_tool.addSkinSelection(skinName, ','.join(paths))
20
21def removeActions(site):
22    """ Remove actions.
23    """
24    types_tool = getToolByName(site, 'portal_types')
25    for ptype in types_tool.objectValues():
26        idxs = [idx_act[0] for idx_act in enumerate(ptype.listActions()) if idx_act[1].id == 'seo_properties']
27        if idxs:
28            ptype.deleteActions(idxs)
29            logger.log(logging.INFO, "Deleted \"SEO Properties\" action for %s type." % ptype.id)
30
31def removeConfiglet(site, conf_id):
32    """ Remove configlet.
33    """
34    controlpanel_tool = getToolByName(site, 'portal_controlpanel')
35    if controlpanel_tool:
36        controlpanel_tool.unregisterConfiglet(conf_id)
37        logger.log(logging.INFO, "Unregistered \"%s\" configlet." % conf_id)
38
39def removeBrowserLayer(site):
40    """ Remove configlet.
41    """
42    name="qSEOptimizer"
43    site = getSiteManager(site)
44    registeredLayers = [r.name for r in site.registeredUtilities()
45                        if r.provided == ILocalBrowserLayerType]
46    if name in registeredLayers:
47        unregister_layer(name, site_manager=site)
48        logger.log(logging.INFO, "Unregistered \"%s\" browser layer." % name)
49
50def importVarious(context):
51    """ Do customized installation.
52    """
53    if context.readDataFile('seo_install.txt') is None:
54        return
55
56def uninstall(context):
57    """ Do customized uninstallation.
58    """
59    if context.readDataFile('seo_uninstall.txt') is None:
60        return
61    site = context.getSite()
62    removeSkin(site, 'quintagroup.seoptimizer' )
63    removeActions(site)
64    removeConfiglet(site, 'quintagroup.seoptimizer')
65    removeBrowserLayer(site)
Note: See TracBrowser for help on using the repository browser.