source: products/quintagroup.seoptimizer/branches/refactoring2.3.0/quintagroup/seoptimizer/upgrades.py @ 1896

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

#159: Added upgrade steps from earlier version package to 3.0.0.

File size: 3.4 KB
Line 
1import logging
2from zope.component import queryMultiAdapter
3from Products.CMFCore.utils import getToolByName
4
5logger = logging.getLogger('quintagroup.seoptimizer')
6FIX_PTYPES_DOMAIN = ['Document', 'File', 'News Item']
7REMOVE_SEOPROPERTIES = ['additional_keywords', 'settings_use_keywords_sg',
8                        'settings_use_keywords_lg', 'filter_keywords_by_content',
9                       ]
10
11def changeDomain(plone_tools):
12    """ Fix i18n_domain bug for some portal_types, which present in earlier versions of the package.
13    """
14    types_tool = plone_tools.types()
15    for ptype in [ptypes for ptypes in types_tool.objectValues() if ptypes.id in FIX_PTYPES_DOMAIN]:
16        if ptype.i18n_domain == 'quintagroup.seoptimizer':
17            ptype.i18n_domain = 'plone'
18            logger.log(logging.INFO, "I18n Domain of the type \'%s\' changed to \'plone\'." % ptype.id)
19
20def changeMetatagsOrderList(plone_tools):
21    """ Change format metatags order list from "metaname accessor" to "metaname".
22    """
23    types_tool = plone_tools.types()
24    setup_tool = plone_tools.url().getPortalObject().portal_setup
25    seoprops_tool = plone_tools.properties().seo_properties
26    if seoprops_tool.hasProperty('metatags_order'):
27        mto = seoprops_tool.getProperty('metatags_order', [])
28        mto_new = [line.split(' ')[0].strip() for line in mto]
29        if not list(mto) == mto_new:
30            logger.log(logging.INFO, "Changed format metatags order list in configlet from \"metaname accessor\" to \"metaname\".")
31            seoprops_tool.manage_changeProperties(metatags_order=mto_new)
32    else:
33        setup_tool.runImportStepFromProfile('profile-quintagroup.seoptimizer:default', 'propertiestool')
34
35
36def migrationActions(plone_tools):
37    """ Migration actions from portal_types action to seoproperties tool (for seoaction in portal_actions).
38    """
39    types_tool = plone_tools.types()
40    seoprops_tool = plone_tools.properties().seo_properties
41    ctws = list(seoprops_tool.getProperty('content_types_with_seoproperties', []))
42    flag = False
43    for ptype in types_tool.objectValues():
44        idxs = [idx_act[0] for idx_act in enumerate(ptype.listActions()) if idx_act[1].id == 'seo_properties']
45        if idxs:
46            if ptype.id not in ctws:
47                ctws.append(ptype.id)
48                flag = True
49            ptype.deleteActions(idxs)
50            logger.log(logging.INFO, "Moved \"SEO Properties\" action from %s type in portal actions." % ptype.id)
51    if flag:
52        seoprops_tool.manage_changeProperties(content_types_with_seoproperties=ctws)
53
54def removeNonUseSeoProperties(plone_tools):
55    """ Revome properties used in earlier versions of the package
56    """
57    seoprops_tool = plone_tools.properties().seo_properties
58    remove_properties = []
59    for pr in REMOVE_SEOPROPERTIES:
60      if seoprops_tool.hasProperty(pr):
61          remove_properties.append(pr)
62          logger.log(logging.INFO, "Removed %s property in seoproperties tool." % pr)
63    if not remove_properties:
64        seoprops_tool.manage_delProperties(remove_properties)
65
66def upgrade_2_to_3(setuptool):
67    """ Upgrade quintagroup.seoptimizer from version 2.x.x to 3.0.0.
68    """
69    plone_tools = queryMultiAdapter((setuptool, setuptool.REQUEST), name="plone_tools")
70    setuptool.runAllImportStepsFromProfile('profile-quintagroup.seoptimizer:upgrade_2_to_3')
71    migrationActions(plone_tools)
72    changeDomain(plone_tools)
73    changeMetatagsOrderList(plone_tools)
74    removeNonUseSeoProperties(plone_tools)
Note: See TracBrowser for help on using the repository browser.