source: products/quintagroup.seoptimizer/branches/refactoring2.3.0/quintagroup/seoptimizer/adapters.py @ 1908

Last change on this file since 1908 was 1900, checked in by mylan, 14 years ago

#166: Force usage ISEOConfigletSchema adapter for getting seo properties

  • Property svn:eol-style set to native
File size: 2.9 KB
Line 
1import re, commands
2
3from zope.component import adapts
4from zope.interface import implements
5from zope.component import queryAdapter
6from zope.component import queryMultiAdapter
7
8from Acquisition import aq_inner
9from OFS.interfaces import IPropertyManager
10from Products.CMFCore.utils import getToolByName
11
12from quintagroup.seoptimizer.util import SortedDict
13from quintagroup.seoptimizer.interfaces import IMetaKeywords, IMappingMetaTags
14from quintagroup.seoptimizer.browser.seo_configlet import ISEOConfigletSchema
15
16METADATA_MAPS = dict([
17    ("DC.publisher", "Publisher"),
18    ("DC.description", "Description"),
19    ("DC.contributors", "Contributors"),
20    ("DC.creator", "Creator"),
21    ("DC.format", "Format"),
22    ("DC.rights", "Rights"),
23    ("DC.language", "Language"),
24    ("DC.date.modified", "ModificationDate"),
25    ("DC.date.created", "CreationDate"),
26    ("DC.type", "Type"),
27    ("DC.subject", "Subject"),
28    ("DC.distribution", "seo_distribution"),
29    ("description", "seo_description"),
30    ("keywords", "meta_keywords"),
31    ("robots", "seo_robots"),
32    ("distribution", "seo_distribution")])
33
34class MetaKeywordsAdapter(object):
35    implements(IMetaKeywords)
36
37    def __init__(self, context):
38        self.context = context
39
40    def getMetaKeywords(self):
41        """ See interface.
42        """
43        request = self.context.REQUEST
44        meta_keywords = []
45        filtered_keywords = []
46        seo_context = queryMultiAdapter((self.context, request), name='seo_context')
47        if seo_context:
48            meta_keywords = list(seo_context['meta_keywords'])
49        return ', '.join(meta_keywords)
50
51
52class MappingMetaTags(object):
53    implements(IMappingMetaTags)
54
55    def __init__(self, context):
56        self.context = context
57        pps = queryMultiAdapter((self.context, self.context.REQUEST),
58                                name="plone_portal_state")
59        self.gseo = queryAdapter(pps.portal(), ISEOConfigletSchema)
60
61    def getMappingMetaTags(self):
62        """ See interface.
63        """
64        metadata_name = SortedDict()
65        if self.gseo:
66            for mt in self.gseo.metatags_order:
67                if METADATA_MAPS.has_key(mt):
68                    metadata_name[mt] = METADATA_MAPS[mt]
69        return metadata_name
70
71
72class canonicalPathAdapter(object):
73    """Adapts base content to canonical path, with taking into consideration
74       SEO canonical path value.
75    """
76
77    def __init__(self, context):
78        self.context = aq_inner(context)
79
80    def canonical_path(self):
81        purl = getToolByName(self.context,'portal_url')
82
83        # Calculate canonical path from qSEO_canonical property
84        if IPropertyManager.providedBy(self.context):
85            prop = self.context.getProperty('qSEO_canonical', None)
86            if prop is not None:
87                return prop[len(purl()):]
88
89        # Fallback for canonical path calculation
90        return '/'+'/'.join(purl.getRelativeContentPath(self.context))
Note: See TracBrowser for help on using the repository browser.