allow entering of survey data for other person; prerequisite: keep URL params in title and breadcrumbs links

This commit is contained in:
Helmut Merz 2015-04-05 10:40:07 +02:00
parent 60604cd38b
commit 396e17c0dc
5 changed files with 36 additions and 4 deletions

View file

@ -252,6 +252,16 @@ class BaseView(GenericView, I18NView, SortableMixin):
result.append(view) result.append(view)
return result return result
@Lazy
def urlParamString(self):
return self.getUrlParamString()
def getUrlParamString(self):
qs = self.request.get('QUERY_STRING')
if qs:
return '?' + qs
return ''
@Lazy @Lazy
def principalId(self): def principalId(self):
principal = self.request.principal principal = self.request.principal

View file

@ -51,7 +51,7 @@
<h1 tal:define="tabview item/tabview|nothing" <h1 tal:define="tabview item/tabview|nothing"
tal:attributes="ondblclick item/openEditWindow"> tal:attributes="ondblclick item/openEditWindow">
<a tal:omit-tag="python: level > 1" <a tal:omit-tag="python: level > 1"
tal:attributes="href request/URL" tal:attributes="href string:${request/URL}${item/urlParamString}"
tal:content="item/title">Title</a> tal:content="item/title">Title</a>
<a title="Show tabular view" <a title="Show tabular view"
i18n:attributes="title" i18n:attributes="title"

View file

@ -120,6 +120,9 @@ class NodeView(BaseView):
url=absoluteURL(p, self.request))) url=absoluteURL(p, self.request)))
if self.virtualTarget: if self.virtualTarget:
data.extend(self.virtualTarget.breadcrumbs()) data.extend(self.virtualTarget.breadcrumbs())
if data and not '?' in data[-1]['url']:
if self.urlParamString:
data[-1]['url'] += self.urlParamString
return data return data
def viewModes(self): def viewModes(self):

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de # Copyright (c) 2015 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -52,6 +52,16 @@ class SurveyView(ConceptView):
self.registerDojo() self.registerDojo()
return template.macros['survey'] return template.macros['survey']
@Lazy
def title(self):
title = self.context.title
personId = self.request.form.get('person')
if personId:
person = adapted(getObjectForUid(personId))
if person is not None:
return '%s: %s' % (title, person.title)
return title
@Lazy @Lazy
def tabview(self): def tabview(self):
if self.editable: if self.editable:
@ -147,6 +157,8 @@ class SurveyView(ConceptView):
if 'submit' not in form: if 'submit' not in form:
return [] return []
respManager = Responses(self.context) respManager = Responses(self.context)
respManager.personId = (self.request.form.get('person') or
respManager.getPersonId())
data = {} data = {}
response = Response(self.adapted, None) response = Response(self.adapted, None)
for key, value in form.items(): for key, value in form.items():
@ -222,7 +234,10 @@ class SurveyView(ConceptView):
def getValues(self, question): def getValues(self, question):
setting = None setting = None
if self.data is None: if self.data is None:
self.data = Responses(self.context).load() respManager = Responses(self.context)
respManager.personId = (self.request.form.get('person') or
respManager.getPersonId())
self.data = respManager.load()
if self.data: if self.data:
setting = self.data.get(question.uid) setting = self.data.get(question.uid)
if setting is None: if setting is None:

View file

@ -45,7 +45,7 @@
<div class="button" id="show_questionnaire"> <div class="button" id="show_questionnaire">
<a href="" xxonclick="back(); return false" <a href="" xxonclick="back(); return false"
i18n:translate="" i18n:translate=""
tal:attributes="href view/virtualTargetUrl"> tal:attributes="href string:${request/URL}${item/urlParamString}">
Back to Questionnaire</a> Back to Questionnaire</a>
<br /> <br />
</div> </div>
@ -67,6 +67,10 @@
</div> </div>
<form method="post"> <form method="post">
<table class="listing"> <table class="listing">
<input type="hidden" name="person"
tal:define="personId request/person|nothing"
tal:condition="personId"
tal:attributes="value personId" />
<tal:group repeat="group item/groups"> <tal:group repeat="group item/groups">
<tr> <tr>
<td>&nbsp;</td> <td>&nbsp;</td>