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

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

Added field to show form text

  • Property svn:eol-style set to native
File size: 3.3 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    show_text = schema.Bool(
30        title=_(u"Show form text"),
31        description=_(u"If selected, the form prologue and epilogue will "
32                      u"shown in portlet."),
33        default=False,
34        required=False)
35
36
37class Assignment(base.Assignment):
38    implements(IPFGPortlet)
39
40    show_text = False
41
42    def __init__(self, target_form='', show_text=False):
43        self.target_form = target_form
44        self.show_text = show_text
45
46    @property
47    def title(self):
48        return _(u"PFG Portlet")
49
50
51class Renderer(base.Renderer):
52
53    _template = ViewPageTemplateFile('pfg.pt')
54
55    def __init__(self, *args):
56        base.Renderer.__init__(self, *args)
57        self.portal_state = getMultiAdapter((self.context, self.request),
58                                            name=u'plone_portal_state')
59        self.portal = self.portal_state.portal()
60
61    def render(self):
62        return xhtml_compress(self._template())
63
64    def pfg_object(self):
65        pfg_path = self.data.target_form
66        if pfg_path.startswith('/'):
67            pfg_path = pfg_path[1:]
68
69        return self.portal.restrictedTraverse(pfg_path, default=None)
70
71    def pfgTitle(self):
72        form = self.pfg_object()
73        if form is not None:
74            return form.Title()
75
76    def available(self):
77        return self.pfg_object() and True or False
78
79    def render_form(self):
80        form = self.pfg_object()
81        if form is not None:
82            form_path = '/'.join(form.getPhysicalPath()[2:])
83            form_view = self.portal.restrictedTraverse(
84                '%s/@@embedded' % form_path)
85            form_view.prefix = 'pfgportlet'
86            return form_view()
87
88
89class AddForm(base.AddForm):
90
91    form_fields = form.Fields(IPFGPortlet)
92    form_fields['target_form'].custom_widget = UberSelectionWidget
93
94    label = _(u"Add PFG Portlet")
95    description = _(u"This portlet displays pfg content.")
96
97    def create(self, data):
98        return Assignment(target_form=data.get('target_form', ''),
99                          show_text=data.get('show_text', False))
100
101
102class EditForm(base.EditForm):
103
104    form_fields = form.Fields(IPFGPortlet)
105    form_fields['target_form'].custom_widget = UberSelectionWidget
106
107    label = _(u"Edit PFG Portlet")
108    description = _(u"This portlet displays pfg content.")
Note: See TracBrowser for help on using the repository browser.