source: products/qPloneGoogleSitemaps/tags/0.8/browser/configletview.py

Last change on this file was 458, checked in by fenix, 13 years ago

qPloneResolveUID import

  • Property svn:eol-style set to native
File size: 4.7 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    hasContentSM = Attribute("Return boolean about existance content sitemap")
27    hasMobileSM = Attribute("Return boolean about existance mobile sitemap")
28    hasNewsSM = Attribute("Return boolean about existance news sitemap")
29    sitemaps = Attribute("List of sitemap typs")
30    sm_types = Attribute("List of sitemap typs")
31
32    def sitemapsDict():
33        """ Return dictionary like object with data for table
34        """
35    def sitemapsURLByType():
36        """ Return dictionary like object with sitemap_type as key
37            and sitemap object(s) as value
38        """
39    def getVerificationFiles():
40        """ Return list of existent verification files on site.
41            Update googlesitemap_properties.verification_file
42            property for only existent files
43        """
44
45
46class ConfigletSettingsView(BrowserView):
47    """
48    Configlet settings browser view
49    """
50    implements(IConfigletSettingsView)
51
52    def __init__(self, context, request):
53        self.context = context
54        self.request = request
55
56        catalog = getToolByName(self.context, 'portal_catalog')
57        self.sitemaps = [i.getObject() for i in catalog(portal_type='Sitemap')]
58
59
60    @property
61    def sm_types(self):
62        return [i.getSitemapType() for i in self.sitemaps]
63
64    @property
65    def hasContentSM(self):
66        return 'content' in self.sm_types
67
68    @property
69    def hasMobileSM(self):
70        return 'mobile' in self.sm_types
71
72    @property
73    def hasNewsSM(self):
74        return 'news' in self.sm_types
75
76    def sitemapsURLByType(self):
77        sitemaps = {}
78        for sm in self.sitemaps:
79            smlist = sitemaps.setdefault(sm.getSitemapType(),[])
80            smlist.append({'url':sm.absolute_url(),'id':sm.id})
81        sitemaps['all'] = sitemaps.setdefault('content',[]) + \
82                          sitemaps.setdefault('mobile',[]) + \
83                          sitemaps.setdefault('news',[])
84        return sitemaps
85
86    def sitemapsURLs(self):
87        sitemaps = {}
88        for sm in self.sitemaps:
89            smlist = sitemaps.setdefault(sm.getSitemapType(),[])
90            smlist.append(sm.absolute_url())
91        return sitemaps
92
93
94    def sitemapsDict(self):
95        content, mobile, news = [],[],[]
96        for sm in self.sitemaps:
97            data = self.getSMData(sm)
98            if data['sm_type'] == 'Content':
99                content.append(data)
100            elif data['sm_type'] == 'Mobile':
101                mobile.append(data)
102            elif data['sm_type'] == 'News':
103                news.append(data)
104        return content + mobile + news
105
106    def getSMData(self, ob):
107        size, entries = self.getSitemapData(ob)
108        return {'sm_type'    : ob.getSitemapType().capitalize(),
109                'sm_id'      : ob.id,
110                'sm_url'     : ob.absolute_url(),
111                'sm_size'    : size and splitNum(size) or '',
112                'sm_entries' : entries and splitNum(entries) or '',
113               }
114
115    def getSitemapData(self, ob):
116        size, entries = (0, 0)
117        view = ob and ob.defaultView() or None
118        if view:
119            resp = self.request.RESPONSE
120            bview = queryMultiAdapter((ob,self.request), name=view)
121            if bview:
122                try:
123                    size = len(bview())
124                    entries = bview.numEntries
125                    self.request.RESPONSE.setHeader('Content-Type', 'text/html')
126                except:
127                    pass
128        return (size, entries)
129
130    def getVerificationFiles(self):
131        vfs = []
132        pp = getToolByName(self.context, 'portal_properties')
133        props = getattr(pp,'googlesitemap_properties')
134        if props:
135            portal_ids = getToolByName(self.context, 'portal_url').getPortalObject().objectIds()
136            props_vfs = list(props.getProperty('verification_filenames',[]))
137            vfs = [vf for vf in props_vfs if vf in portal_ids]
138            if not props_vfs==vfs:
139                props._updateProperty('verification_filenames', vfs)
140        return vfs
Note: See TracBrowser for help on using the repository browser.