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

Last change on this file since 2816 was 2816, checked in by fenix, 14 years ago
  • added tests;
  • fixed bugs;
  • Property svn:eol-style set to native
File size: 3.0 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 _
12from Products.CMFCore.utils import getToolByName
13
14from Products.PloneFormGen.interfaces import  IPloneFormGenForm
15from plone.app.vocabularies.catalog import SearchableTextSourceBinder
16from plone.app.form.widgets.uberselectionwidget import UberSelectionWidget
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
29class Assignment(base.Assignment):
30    implements(IPFGPortlet)
31
32    def __init__(self, target_form=''):
33        self.target_form = target_form
34
35    @property
36    def title(self):
37        return _(u"PFG Portlet")
38
39class Renderer(base.Renderer):
40
41    _template = ViewPageTemplateFile('pfg.pt')
42
43    def __init__(self, *args):
44        base.Renderer.__init__(self, *args)
45        self.portal_state = getMultiAdapter((self.context, self.request),
46                                       name=u'plone_portal_state')
47        self.portal = self.portal_state.portal()
48
49
50    def render(self):
51        return xhtml_compress(self._template())
52
53    def pfg_object(self):
54        pfg_path = self.data.target_form
55        if pfg_path.startswith('/'):
56            pfg_path = pfg_path[1:]
57
58        return self.portal.restrictedTraverse(pfg_path, default=None)
59
60    def pfgTitle(self):
61        form = self.pfg_object()
62        if form is not None:
63            return form.Title()
64
65    def available(self):
66        return self.pfg_object() and True or False
67
68    def render_form(self):
69        form = self.pfg_object()
70        if form is not None:
71            form_path = '/'.join(form.getPhysicalPath()[2:])
72            form_view = self.portal.restrictedTraverse('%s/@@embedded' % form_path)
73            form_view.prefix = 'pfgportlet'
74            return form_view()
75
76class AddForm(base.AddForm):
77
78    form_fields = form.Fields(IPFGPortlet)
79    form_fields['target_form'].custom_widget = UberSelectionWidget
80
81    label = _(u"Add PFG Portlet")
82    description = _(u"This portlet displays pfg content.")
83
84    def create(self, data):
85        return Assignment(target_form=data.get('target_form', ''))
86
87class EditForm(base.EditForm):
88
89    form_fields = form.Fields(IPFGPortlet)
90    form_fields['target_form'].custom_widget = UberSelectionWidget
91
92    label = _(u"Edit PFG Portlet")
93    description = _(u"This portlet displays pfg content.")
Note: See TracBrowser for help on using the repository browser.