source: products/qPloneGoogleSitemaps/branches/contenttype/browser/configletview.py @ 447

Last change on this file since 447 was 437, checked in by crchemist, 18 years ago

Clean up code.

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1from zope.component import queryMultiAdapter
2from zope.interface import implements, Interface, Attribute
3
4from Products.Five import BrowserView
5from Products.CMFCore.utils import getToolByName
6
7from Products.qPloneGoogleSitemaps import qPloneGoogleSitemapsMessageFactory as _
8from Products.qPloneGoogleSitemaps.interfaces import ISitemap
9
10def splitNum(num):
11    res = []
12    prefn = 3
13    for c in str(num)[::-1]:
14        res.insert(0,c)
15        if not len(res)%prefn:
16            res.insert(0,',')
17            prefn += 4
18    return "".join(res[0]==',' and res[1:] or res)
19
20class IConfigletSettingsView(Interface):
21    """
22    Sitemap view interface
23    """
24
25    sitemaps = Attribute("return mapping of sitemap's type to list of appropriate objects")
26
27    def sitemapsKeys(self):
28        """Return sitemap type existent
29        """
30
31    def getSMDataByType(self, smtype):
32        """ Return dictionary like object with data for table
33        """
34
35class ConfigletSettingsView(BrowserView):
36    """
37    Configlet settings browser view
38    """
39    implements(IConfigletSettingsView)
40
41    def __init__(self, context, request):
42        self.context = context
43        self.request = request
44
45    @property
46    def portal_catalog(self):
47        return getToolByName(self.context, 'portal_catalog')
48
49    @property
50    def GSMPSheet(self):
51        return getToolByName(self.context, 'portal_properties').googlesitemap_properties
52
53    @property
54    def portal(self):
55        return getToolByName(self.context, 'portal_url').getPortalObject()
56
57    @property
58    def sitemaps(self):
59        sitemaps = {}
60        smbrains = self.portal_catalog(portal_type="Sitemap")
61        for smbrain in smbrains:
62            sm = smbrain.getObject()
63            sm_type = sm.getSitemapType()
64            sitemap = sitemaps.setdefault(sm_type, [])
65            sitemap.append(sm)
66        return sitemaps
67
68    def sitemapsKeys(self):
69        return self.sitemaps.keys()
70
71    def getSitemapData(self, ob):
72        size, entries = (0, 0)
73        view = ob and ob.defaultView() or None
74        if view:
75            resp = self.request.RESPONSE
76            bview = queryMultiAdapter((ob,self.request), name=view)
77            if bview:
78                try:
79                    size = len(bview())
80                    entries = bview.numEntries
81                    self.request.RESPONSE.setHeader('Content-Type', 'text/html')
82                except:
83                    pass
84        return (size, entries)
85
86    def getSMDataByType(self, smtype):
87        data = self.sitemaps[smtype]
88        lpp = len(self.portal.getPhysicalPath())
89
90        default = None
91        def_path = getattr(self.GSMPSheet, "%s_default" % smtype, '')
92        if def_path:
93            default = [sm for sm in data if '/'.join(sm.getPhysicalPath()[lpp:])==def_path]
94            default = default and default[0] or None
95        def_size, def_entries = self.getSitemapData(default)
96        return {'smtype_title'      : smtype.capitalize(),
97                'sm_list'           : [(sm.id, '/'.join(sm.getPhysicalPath()[lpp:]), 
98                                        def_path=='/'.join(sm.getPhysicalPath()[lpp:])) for sm in data],
99                'sm_def_id'         : default and default.id or '',
100                'sm_def_editurl'    : default and '%s/edit' % default.absolute_url() or '',
101                'sm_def_size'       : def_size and splitNum(def_size) or '',
102                'sm_def_entries'    : def_entries and splitNum(def_entries) or '',
103               }
Note: See TracBrowser for help on using the repository browser.