add 'views' to formdef (#1213)

This commit is contained in:
Thomas NOËL 2012-08-16 12:02:41 +02:00 committed by Frédéric Péters
parent c3a068ea9b
commit 6a88d9b02b
3 changed files with 102 additions and 19 deletions

View File

@ -200,7 +200,8 @@ class FormDefPage(Directory):
'archive', 'invite', 'enable', 'workflow', 'category',
'recipient', ('workflow-options', 'workflow_options'),
('workflow-status-remapping', 'workflow_status_remapping'),
'roles', 'title', 'options', ('acl-read', 'acl_read')]
'roles', 'title', 'options', ('acl-read', 'acl_read'),
'views']
def __init__(self, component):
try:
@ -331,6 +332,7 @@ class FormDefPage(Directory):
def get_sidebar [html] (self):
'<ul>'
'<li><a href="views">%s</a></li>' % _('Views')
'<li><a href="delete" rel="popup">%s</a></li>' % _('Delete')
'<li><a href="duplicate">%s</a></li>' % _('Duplicate')
if ET:
@ -885,6 +887,76 @@ class FormDefPage(Directory):
self.formdef.workflow_options[widget.name] = widget.parse()
self.formdef.store()
def views [html] (self):
form = Form(enctype='multipart/form-data')
if self.formdef.views:
view_backoffice_summary = self.formdef.views.get('backoffice_summary')
else:
view_backoffice_summary = None
form.add(StringWidget, 'backoffice_summary',
title = _('Backoffice summary'), size=80,
value = view_backoffice_summary)
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
if form.get_widget('cancel').parse():
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('views', _('Views')))
html_top('forms', title = _('Views'))
'<h2>%s</h2>' % _('Views')
'<p>%s</p>' % _('Common substitution variables are available with the [variable] syntax.')
form.render()
else:
return self.views_submit(form)
def views_submit(self, form):
if not self.formdef.views:
self.formdef.views = {}
for v in ('backoffice_summary', ):
widget = form.get_widget(v)
if widget:
self.formdef.views[v] = widget.parse()
self.formdef.store()
return redirect('.')
def views [html] (self):
form = Form(enctype='multipart/form-data')
if self.formdef.views:
view_backoffice_summary = self.formdef.views.get('backoffice_summary')
else:
view_backoffice_summary = None
form.add(StringWidget, 'backoffice_summary',
title = _('Backoffice summary'), size=80,
value = view_backoffice_summary)
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
if form.get_widget('cancel').parse():
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('views', _('Views')))
html_top('forms', title = _('Views'))
'<h2>%s</h2>' % _('Views')
'<p>%s</p>' % _('Common substitution variables are available with the [variable] syntax.')
form.render()
else:
return self.views_submit(form)
def views_submit(self, form):
if not self.formdef.views:
self.formdef.views = {}
for v in ('backoffice_summary', ):
widget = form.get_widget(v)
if widget:
self.formdef.views[v] = widget.parse()
self.formdef.store()
return redirect('.')
class FormsDirectory(Directory):
_q_exports = ['', 'new', ('import', 'p_import')]

View File

@ -191,15 +191,9 @@ class RootDirectory(BackofficeRootDirectory):
'<ul>'
for f in status_forms:
try:
u = get_publisher().user_class.get(f.user_id)
userlabel = u.display_name
except KeyError:
userlabel = _('unknown user')
'<li><a href="%s/%s/">%s, %s</a></li>' % (
'<li><a href="%s/%s/">%s</a></li>' % (
formdef.url_name, f.id,
misc.localstrftime(f.receipt_time),
userlabel)
formdef.get_backoffice_summary_form(f))
'</ul>'
'</div>'
'</div>'
@ -371,15 +365,9 @@ class FormPage(Directory):
'<ul>'
for f in status_forms:
try:
u = get_publisher().user_class.get(f.user_id)
userlabel = u.display_name
except KeyError:
userlabel = _('unknown user')
'<li><a href="%s/">%s, %s</a></li>' % (
'<li><a href="%s/">%s</a></li>' % (
f.id,
misc.localstrftime(f.receipt_time),
userlabel)
self.formdef.get_backoffice_summary_form(f))
'</ul>'
'</div>'
'</div>'

View File

@ -38,7 +38,7 @@ from quixote import get_request, get_session, get_publisher
from qommon import emails
from qommon.form import *
from qommon.misc import simplify, date_format, strftime
from qommon.misc import simplify, date_format, strftime, localstrftime
from qommon import get_cfg
from qommon.substitution import Substitutions
@ -46,7 +46,8 @@ from formdata import FormData
from roles import Role, logged_users_role
from categories import Category
from wcs.workflows import Workflow, CommentableWorkflowStatusItem, \
SendmailWorkflowStatusItem, ChoiceWorkflowStatusItem
SendmailWorkflowStatusItem, ChoiceWorkflowStatusItem, \
template_on_formdata
import fields
import sql
@ -81,6 +82,8 @@ class FormDef(StorableObject):
publication_date = None
expiration_date = None
views = None
acl_read = 'owner' # one of ('none', 'owner', 'roles', 'all')
private_status_and_history = False
@ -436,6 +439,26 @@ class FormDef(StorableObject):
details.append('')
return '\n'.join(details)
def get_view_form(self, formdata, view):
if self.views is None or self.views.get(view) is None:
return None
get_publisher().substitutions.feed(formdata)
return template_on_formdata(formdata, self.views[view])
def get_backoffice_summary_form(self, formdata):
summary = self.get_view_form(formdata, 'backoffice_summary')
if summary is None:
try:
u = get_publisher().user_class.get(formdata.user_id)
userlabel = u.display_name
except KeyError:
if formdata.user_hash:
userlabel = _('anonymous user')
else:
userlabel = _('unknown user')
summary = '%s, %s' % (localstrftime(formdata.receipt_time), userlabel)
return summary
def get_submitter_email(self, formdata):
users_cfg = get_cfg('users', {})
field_email = users_cfg.get('field_email') or 'email'