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

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

Clean-up code http://codereview.corp.quintagroup.com/40241/show

File size: 5.6 KB
Line 
1import logging
2from zope.component import queryMultiAdapter
3
4from quintagroup.canonicalpath.interfaces  import ICanonicalLink
5from quintagroup.canonicalpath.adapters import PROPERTY_LINK
6
7logger = logging.getLogger('quintagroup.seoptimizer')
8FIX_PTYPES_DOMAIN = ['Document', 'File', 'News Item']
9REMOVE_SEOPROPERTIES = ['additional_keywords', 'settings_use_keywords_sg',
10                        'settings_use_keywords_lg', 'filter_keywords_by_content',
11                       ]
12
13def changeDomain(plone_tools):
14    """ Fix i18n_domain bug for some portal_types,
15        which present in earlier versions of the package.
16    """
17    types_tool = plone_tools.types()
18    for ptype in [ptypes for ptypes in types_tool.objectValues()
19                         if ptypes.id in FIX_PTYPES_DOMAIN]:
20        if ptype.i18n_domain == 'quintagroup.seoptimizer':
21            ptype.i18n_domain = 'plone'
22            logger.log(logging.INFO, "I18n Domain of the type \'%s\' "
23                       "changed to \'plone\'." % ptype.id)
24
25def changeMetatagsOrderList(plone_tools):
26    """ Change format metatags order list from "metaname accessor" to "metaname".
27    """
28    types_tool = plone_tools.types()
29    setup_tool = plone_tools.url().getPortalObject().portal_setup
30    seoprops_tool = plone_tools.properties().seo_properties
31    if seoprops_tool.hasProperty('metatags_order'):
32        mto = seoprops_tool.getProperty('metatags_order', [])
33        mto_new = [line.split(' ')[0].strip() for line in mto]
34        if not list(mto) == mto_new:
35            logger.log(logging.INFO, "Changed format metatags order list in "
36                       "configlet from \"metaname accessor\" to \"metaname\".")
37            seoprops_tool.manage_changeProperties(metatags_order=mto_new)
38    else:
39        setup_tool.runImportStepFromProfile('profile-quintagroup.seoptimizer:default',
40                                            'propertiestool')
41
42
43def migrationActions(plone_tools):
44    """ Migration actions from portal_types action to seoproperties tool
45        (for seoaction in portal_actions).
46    """
47    types_tool = plone_tools.types()
48    seoprops_tool = plone_tools.properties().seo_properties
49    ctws = list(seoprops_tool.getProperty('content_types_with_seoproperties', []))
50    flag = False
51    for ptype in types_tool.objectValues():
52        idxs = [idx_act[0] for idx_act in enumerate(ptype.listActions())
53                           if idx_act[1].id == 'seo_properties']
54        if idxs:
55            if ptype.id not in ctws:
56                ctws.append(ptype.id)
57                flag = True
58            ptype.deleteActions(idxs)
59            logger.log(logging.INFO, "Moved \"SEO Properties\" action from %s "
60                       "type in portal actions." % ptype.id)
61    if flag:
62        seoprops_tool.manage_changeProperties(content_types_with_seoproperties=ctws)
63
64def removeNonUseSeoProperties(plone_tools):
65    """ Revome properties used in earlier versions of the package
66    """
67    seoprops_tool = plone_tools.properties().seo_properties
68    remove_properties = []
69    for pr in REMOVE_SEOPROPERTIES:
70      if seoprops_tool.hasProperty(pr):
71          remove_properties.append(pr)
72          logger.log(logging.INFO, "Removed %s property in seoproperties tool." % pr)
73    if not remove_properties:
74        seoprops_tool.manage_delProperties(remove_properties)
75
76def removeSkin(plone_tools):
77    """ Remove skin layers.
78    """
79    layer = 'quintagroup.seoptimizer'
80    skins_tool = plone_tools.url().getPortalObject().portal_skins
81    for skinName in skins_tool.getSkinSelections():
82        skin_paths = skins_tool.getSkinPath(skinName).split(',') 
83        paths = [l.strip() for l in skin_paths if not (l == layer or l.startswith(layer+'/'))]
84        logger.log(logging.INFO, "Removed layers from %s skin." % skinName)
85        skins_tool.addSkinSelection(skinName, ','.join(paths))
86
87def migrateCanonical(plone_tools):
88    """ Rename qSEO_canonical property into PROPERTY_LINK
89        for all portal objects, which use SEO
90    """
91    types = plone_tools.types()
92    portal = plone_tools.url().getPortalObject()
93    allCTTypes = types.listContentTypes()
94    obj_metatypes =  [m.content_meta_type for m in types.objectValues() \
95                      if m.getId() in allCTTypes]
96    portal.ZopeFindAndApply(
97                            portal,
98                            obj_metatypes=','.join(obj_metatypes),
99                            apply_func=renameProperty
100                            )
101
102def renameProperty(obj, path):
103    """ Rename qSEO_canonical property into PROPERTY_LINK
104        for obj, which use SEO
105    """
106    if obj.hasProperty('qSEO_canonical'):
107        value = obj.getProperty('qSEO_canonical')
108
109        level, msg = logging.INFO, "For %(url)s object 'qSEO_canonical' "\
110                     "property renamed to '%(name)s'."
111        try:
112            ICanonicalLink(obj).canonical_link = value
113        except e:
114            level, msg = logging.ERROR, "%s on renaming 'qSEO_canonical' " \
115                         "property for %%(url)s object" % str(e)
116
117        logger.log(level, msg % {'url':obj.absolute_url(), 'name':PROPERTY_LINK} )
118        obj.manage_delProperties(['qSEO_canonical'])
119
120def upgrade_2_to_3(setuptool):
121    """ Upgrade quintagroup.seoptimizer from version 2.x.x to 3.0.0.
122    """
123    plone_tools = queryMultiAdapter((setuptool, setuptool.REQUEST), name="plone_tools")
124    setuptool.runAllImportStepsFromProfile('profile-quintagroup.seoptimizer:upgrade_2_to_3')
125    migrationActions(plone_tools)
126    changeDomain(plone_tools)
127    changeMetatagsOrderList(plone_tools)
128    removeNonUseSeoProperties(plone_tools)
129    removeSkin(plone_tools)
130    migrateCanonical(plone_tools)
Note: See TracBrowser for help on using the repository browser.