Skip to content

Commit b2ec51f

Browse files
committed
Display user data in custom form responses
Show usernames, names, and email addresses in custom form responses. Previously only the user id was visible, which didn't make for a good UI. Fixes Github issue #547.
1 parent f036afa commit b2ec51f

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

esp/esp/customforms/DynamicForm.py

+15-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from esp.customforms.forms import NameField, AddressField
1212
from esp.customforms.DynamicModel import DMH
1313
from esp.utils.forms import DummyField
14-
from esp.users.models import ContactInfo
14+
from esp.users.models import ContactInfo, ESPUser
1515
from esp.cache import cache_function
1616
from esp.program.models import Program
1717

@@ -623,7 +623,10 @@ def getResponseData(self, form):
623623

624624
# Add in the user column if form is not anonymous
625625
if not form.anonymous:
626-
response_data['questions'].append(['user_id', 'User', 'fk'])
626+
response_data['questions'].append(['user_id', 'User ID', 'fk'])
627+
response_data['questions'].append(['user_display', 'User', 'textField'])
628+
response_data['questions'].append(['user_email', 'User e-mail', 'textField'])
629+
response_data['questions'].append(['username', 'Username', 'textField'])
627630

628631
# Add in the column for link fields, if any
629632
if form.link_type != "-1":
@@ -646,14 +649,23 @@ def getResponseData(self, form):
646649
# Include this field only if it isn't a dummy field
647650
elif generic_fields[ftype]['typeMap'] is not DummyField:
648651
response_data['questions'].append([qname, field['label'], ftype])
649-
652+
653+
users = ESPUser.objects.filter(id__in=map(lambda response: response['user_id'], responses)).distinct()
654+
users_dict = {}
655+
for user in users:
656+
users_dict[user.id] = user
657+
650658
# Now let's set up the responses
651659
for response in responses:
652660
link_instances_cache={}
653661

654662
# Add in user if form is not anonymous
655663
if not form.anonymous:
664+
user = users_dict[response['user_id']]
656665
response['user_id'] = unicode(response['user_id'])
666+
response['user_display'] = user.name()
667+
response['user_email'] = user.email
668+
response['username'] = user.username
657669

658670
# Add in links
659671
if only_fkey_model is not None:

esp/esp/customforms/tests.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ def testForms(self):
200200
for field_spec in indiv_response:
201201
self.assertEqual(self.map_form_value(responses_corrected[key]), indiv_response[key])
202202
self.assertTrue('questions' in response_data)
203-
self.assertEqual(len(response_data['questions']), len(responses_initial) + 1) # provided fields plus user_id
203+
self.assertEqual(len(response_data['questions']), len(responses_initial) + 4) # provided fields plus user_id, user_display, user_email, username
204204
for entry in response_data['questions']:
205-
if entry[0] == 'user_id':
205+
if entry[0] in ['user_id', 'user_display', 'user_email', 'username']:
206206
continue
207207
self.assertTrue(entry[0] in responses_corrected)

0 commit comments

Comments
 (0)