1 | import re |
---|
2 | |
---|
3 | from plone.memoize import ram |
---|
4 | from plone.app.layout.navigation.root import getNavigationRoot |
---|
5 | |
---|
6 | from Products.CMFCore.utils import getToolByName |
---|
7 | from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile |
---|
8 | |
---|
9 | from qi.portlet.TagClouds.tagcloudportlet import _cachekey |
---|
10 | from qi.portlet.TagClouds.tagcloudportlet import Renderer as BaseRenderer |
---|
11 | |
---|
12 | REPATH = "\%spath=[^\&]*" |
---|
13 | |
---|
14 | class Renderer(BaseRenderer): |
---|
15 | """ |
---|
16 | """ |
---|
17 | |
---|
18 | render = ViewPageTemplateFile('tagcloudportlet.pt') |
---|
19 | |
---|
20 | def __init__(self, context, request, view, manager, data): |
---|
21 | super(Renderer, self).__init__(context, request, view, manager, data) |
---|
22 | self.portal = getToolByName(context, 'portal_url') |
---|
23 | |
---|
24 | def removePath(self, href, sep): |
---|
25 | newhref = re.sub(REPATH % sep, sep, href) |
---|
26 | return re.sub("%s$" % sep, "", newhref) |
---|
27 | |
---|
28 | @ram.cache(_cachekey) |
---|
29 | def getTags(self): |
---|
30 | res = BaseRenderer.getTags(self) |
---|
31 | if self.root: |
---|
32 | navblogurl = getNavigationRoot(self.context, |
---|
33 | relativeRoot=self.root) |
---|
34 | blog = self.portal.restrictedTraverse(navblogurl) |
---|
35 | href_base = blog.absolute_url() |
---|
36 | else: |
---|
37 | href_base = self.portal_url |
---|
38 | |
---|
39 | for d in res: |
---|
40 | old_href = d["href"] |
---|
41 | q = "?" + old_href.split("?")[1] |
---|
42 | if '&path=' in q: |
---|
43 | newq = self.removePath(q, "&") |
---|
44 | elif '?path=' in q: |
---|
45 | newq = self.removePath(q, "?") |
---|
46 | else: |
---|
47 | newq = '' |
---|
48 | d['href'] = href_base + newq |
---|
49 | |
---|
50 | return res |
---|