source: products/quintagroup.portlet.pfg/trunk/quintagroup/portlet/pfg/pfg.py @ 3635

Last change on this file since 3635 was 3635, checked in by kroman0, 11 years ago

Pep8,pyflakes

  • Property svn:eol-style set to native
File size: 2.9 KB
Line 
1from zope import schema
2from zope.component import getMultiAdapter
3from zope.formlib import form
4from zope.interface import implements
5
6from plone.app.portlets.portlets import base
7from plone.memoize.compress import xhtml_compress
8from plone.portlets.interfaces import IPortletDataProvider
9
10from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
11from Products.CMFPlone import PloneMessageFactory as _
12
13from Products.PloneFormGen.interfaces import IPloneFormGenForm
14from plone.app.vocabularies.catalog import SearchableTextSourceBinder
15from plone.app.form.widgets.uberselectionwidget import UberSelectionWidget
16
17
18class IPFGPortlet(IPortletDataProvider):
19
20    target_form = schema.Choice(
21        title=_(u"Target form"),
22        description=_(u"Find the form which you want to be",
23                      "displayed in portlet."),
24        required=True,
25        source=SearchableTextSourceBinder(
26            {'object_provides': IPloneFormGenForm.__identifier__},
27            default_query='path:'))
28
29
30class Assignment(base.Assignment):
31    implements(IPFGPortlet)
32
33    def __init__(self, target_form=''):
34        self.target_form = target_form
35
36    @property
37    def title(self):
38        return _(u"PFG Portlet")
39
40
41class Renderer(base.Renderer):
42
43    _template = ViewPageTemplateFile('pfg.pt')
44
45    def __init__(self, *args):
46        base.Renderer.__init__(self, *args)
47        self.portal_state = getMultiAdapter((self.context, self.request),
48                                            name=u'plone_portal_state')
49        self.portal = self.portal_state.portal()
50
51    def render(self):
52        return xhtml_compress(self._template())
53
54    def pfg_object(self):
55        pfg_path = self.data.target_form
56        if pfg_path.startswith('/'):
57            pfg_path = pfg_path[1:]
58
59        return self.portal.restrictedTraverse(pfg_path, default=None)
60
61    def pfgTitle(self):
62        form = self.pfg_object()
63        if form is not None:
64            return form.Title()
65
66    def available(self):
67        return self.pfg_object() and True or False
68
69    def render_form(self):
70        form = self.pfg_object()
71        if form is not None:
72            form_path = '/'.join(form.getPhysicalPath()[2:])
73            form_view = self.portal.restrictedTraverse(
74                '%s/@@embedded' % form_path)
75            form_view.prefix = 'pfgportlet'
76            return form_view()
77
78
79class AddForm(base.AddForm):
80
81    form_fields = form.Fields(IPFGPortlet)
82    form_fields['target_form'].custom_widget = UberSelectionWidget
83
84    label = _(u"Add PFG Portlet")
85    description = _(u"This portlet displays pfg content.")
86
87    def create(self, data):
88        return Assignment(target_form=data.get('target_form', ''))
89
90
91class EditForm(base.EditForm):
92
93    form_fields = form.Fields(IPFGPortlet)
94    form_fields['target_form'].custom_widget = UberSelectionWidget
95
96    label = _(u"Edit PFG Portlet")
97    description = _(u"This portlet displays pfg content.")
Note: See TracBrowser for help on using the repository browser.