1 | from five import grok |
---|
2 | from zope import schema |
---|
3 | |
---|
4 | from plone.directives import form, dexterity |
---|
5 | |
---|
6 | from plone.app.textfield import RichText |
---|
7 | from plone.namedfile.field import NamedImage |
---|
8 | |
---|
9 | from ngren.theme import _ |
---|
10 | |
---|
11 | from plone.dexterity.content import Item, Container |
---|
12 | |
---|
13 | from plone.app.layout.viewlets.common import ViewletBase |
---|
14 | from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile |
---|
15 | from Products.CMFCore.utils import getToolByName |
---|
16 | from frontpagecontent import IFrontpageContent |
---|
17 | from zope.app.component.hooks import getSite |
---|
18 | |
---|
19 | |
---|
20 | class IBanner(form.Schema): |
---|
21 | """A Banner element which will be displayed in the Partners Banner |
---|
22 | """ |
---|
23 | title = schema.TextLine( title=_(u"Title"), required=True ) |
---|
24 | picture = NamedImage(title=_(u"Banner Image (Partners Banner)"), description=_(u"Please upload an image"), required=False) |
---|
25 | link = schema.TextLine(title=_(u"Link"), required=False) |
---|
26 | |
---|
27 | class Banner( Item ): |
---|
28 | grok.implements(IBanner) |
---|
29 | |
---|
30 | def __init__(self, *args): |
---|
31 | super(Banner, self).__init__(*args) |
---|
32 | self.exclude_from_nav = True |
---|
33 | |
---|
34 | |
---|
35 | |
---|
36 | |
---|
37 | class BannerViewlet(ViewletBase): |
---|
38 | index = ViewPageTemplateFile('templates/bannerviewlet.pt') |
---|
39 | |
---|
40 | def update(self): |
---|
41 | self.banner = [] |
---|
42 | portal = getSite() |
---|
43 | catalog = getToolByName(portal, "portal_catalog") |
---|
44 | path = "/".join(portal.getPhysicalPath()) |
---|
45 | frontpagecontents = catalog.searchResults( |
---|
46 | object_provides=IFrontpageContent.__identifier__, |
---|
47 | path={'query':path, 'depth':1}, |
---|
48 | sort_on='getObjPositionInParent') |
---|
49 | |
---|
50 | if len(frontpagecontents) > 0: |
---|
51 | path2 = "/".join(frontpagecontents[0].getObject().getPhysicalPath()) |
---|
52 | banner = catalog.searchResults( |
---|
53 | object_provides=IBanner.__identifier__, |
---|
54 | path={'query':path2, 'depth':1}, |
---|
55 | sort_on='getObjPositionInParent', |
---|
56 | review_state='published') |
---|
57 | |
---|
58 | self.banner = [i.getObject() for i in banner] |
---|
59 | |
---|