source: products/quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/__init__.py @ 1312

Last change on this file since 1312 was 1312, checked in by koval, 15 years ago

fixed NameError? in listMetaTags function

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1from AccessControl import allow_module
2from util import SortedDict
3from Acquisition import aq_inner
4from DateTime import DateTime
5
6from Products.CMFCore.utils import getToolByName
7
8allow_module('quintagroup.seoptimizer.util')
9qSEO_globals = globals()
10
11
12try:
13    from Products.CMFPlone.PloneTool import PloneTool, METADATA_DCNAME, \
14        FLOOR_DATE, CEILING_DATE
15    _present = hasattr(PloneTool, "listMetaTags")
16except ImportError:
17    _present = False
18
19
20
21if _present:
22    old_lmt = PloneTool.listMetaTags
23
24    def listMetaTags(self, context):
25        """Lists meta tags helper.
26
27        Creates a mapping of meta tags -> values for the listMetaTags script.
28        """
29        result = {}
30        site_props = getToolByName(self, 'portal_properties').site_properties
31        use_all = site_props.getProperty('exposeDCMetaTags', None)
32
33        if not use_all:
34            metadata_names = {'Description': METADATA_DCNAME['Description']}
35        else:
36            metadata_names = METADATA_DCNAME
37
38        for accessor, key in metadata_names.items():
39            method = getattr(aq_inner(context).aq_explicit, accessor, None)
40            if not callable(method):
41                continue
42
43            # Catch AttributeErrors raised by some AT applications
44            try:
45                value = method()
46            except AttributeError:
47                value = None
48
49            if not value:
50                # No data
51                continue
52            if accessor == 'Publisher' and value == 'No publisher':
53                # No publisher is hardcoded (TODO: still?)
54                continue
55            if isinstance(value, (list, tuple)):
56                # convert a list to a string
57                value = ', '.join(value)
58
59#          Exclusion meta tag description and keywords
60#            # Special cases
61#            if accessor == 'Description':
62#                result['description'] = value
63#            elif accessor == 'Subject':
64#                result['keywords'] = value
65
66            if use_all:
67                result[key] = value
68
69        if use_all:
70            created = context.CreationDate()
71
72            try:
73                effective = context.EffectiveDate()
74                if effective == 'None':
75                    effective = None
76                if effective:
77                    effective = DateTime(effective)
78            except AttributeError:
79                effective = None
80
81            try:
82                expires = context.ExpirationDate()
83                if expires == 'None':
84                    expires = None
85                if expires:
86                    expires = DateTime(expires)
87            except AttributeError:
88                expires = None
89
90            # Filter out DWIMish artifacts on effective / expiration dates
91            if effective is not None and \
92               effective > FLOOR_DATE and \
93               effective != created:
94                eff_str = effective.Date()
95            else:
96                eff_str = ''
97
98            if expires is not None and expires < CEILING_DATE:
99                exp_str = expires.Date()
100            else:
101                exp_str = ''
102
103            if exp_str or exp_str:
104                result['DC.date.valid_range'] = '%s - %s' % (eff_str, exp_str)
105
106        return result
107
108    PloneTool.listMetaTags = listMetaTags
Note: See TracBrowser for help on using the repository browser.