author | Lennard de Rijk <ljvderijk@gmail.com> |
Sat, 25 Jul 2009 13:13:20 +0200 | |
changeset 2680 | b96ba702e82c |
parent 2670 | 884f808d8469 |
child 2683 | 8ea17736a10d |
permissions | -rw-r--r-- |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.5 |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
2 |
# |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2009 the Melange authors. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
4 |
# |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
6 |
# you may not use this file except in compliance with the License. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
7 |
# You may obtain a copy of the License at |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
8 |
# |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
10 |
# |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
13 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
14 |
# See the License for the specific language governing permissions and |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
15 |
# limitations under the License. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
16 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
17 |
"""Custom widgets used for Survey form fields, plus the SurveyContent form. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
18 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
19 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
20 |
__authors__ = [ |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
21 |
'"Daniel Diniz" <ajaksu@gmail.com>', |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
22 |
'"James Levy" <jamesalexanderlevy@gmail.com>', |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
23 |
'"Lennard de Rijk" <ljvderijk@gmail.com>', |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
24 |
] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
25 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
26 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
27 |
from itertools import chain |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
28 |
import csv |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
29 |
import datetime |
2442
dd1f94c3594c
Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents:
2439
diff
changeset
|
30 |
import logging |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
31 |
import StringIO |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
32 |
|
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
33 |
from google.appengine.ext import db |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
34 |
from google.appengine.ext.db import djangoforms |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
35 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
36 |
from django import forms |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
37 |
from django.forms import widgets |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
38 |
from django.forms.fields import CharField |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
39 |
from django.template import loader |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
40 |
from django.utils.datastructures import SortedDict |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
41 |
from django.utils.encoding import force_unicode |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
42 |
from django.utils.html import escape |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
43 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
44 |
from soc.logic import dicts |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
45 |
from soc.logic.lists import Lists |
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
46 |
from soc.models.survey import COMMENT_PREFIX |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
47 |
from soc.models.survey import SurveyContent |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
48 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
49 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
50 |
CHOICE_TYPES = set(('selection', 'pick_multi', 'choice', 'pick_quant')) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
51 |
|
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
52 |
# TODO(ajaksu) add this to template |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
53 |
REQUIRED_COMMENT_TPL = """ |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
54 |
<label for="required_for_{{ name }}">Required</label> |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
55 |
<select id="required_for_{{ name }}" name="required_for_{{ name }}"> |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
56 |
<option value="True" {% if is_required %} selected='selected' {% endif %} |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
57 |
>True</option> |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
58 |
<option value="False" {% if not is_required %} selected='selected' |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
59 |
{% endif %}>False</option> |
2526
8f29bfb9eb52
Survey editing/taking Javascript and CSS fixes.
James Levy <jamesalexanderlevy@gmail.com>
parents:
2520
diff
changeset
|
60 |
</select> |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
61 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
62 |
<label for="comment_for_{{ name }}">Allow Comments</label> |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
63 |
<select id="comment_for_{{ name }}" name="comment_for_{{ name }}"> |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
64 |
<option value="True" {% if has_comment %} selected='selected' {% endif %} |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
65 |
>True</option> |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
66 |
<option value="False" {% if not has_comment %} selected='selected' |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
67 |
{% endif %}>False</option> |
2526
8f29bfb9eb52
Survey editing/taking Javascript and CSS fixes.
James Levy <jamesalexanderlevy@gmail.com>
parents:
2520
diff
changeset
|
68 |
</select> |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
69 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
70 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
71 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
72 |
class SurveyTakeForm(djangoforms.ModelForm): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
73 |
"""SurveyContent form for recording survey answers. |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
74 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
75 |
This class is used to produce survey forms for survey taking: |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
76 |
- User taking survey |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
77 |
- User updating already taken survey |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
78 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
79 |
Using dynamic properties of the survey model (if passed as an arg) the |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
80 |
survey form is dynamically formed. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
81 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
82 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
83 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
84 |
"""Store special kwargs as attributes. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
85 |
|
2520
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
86 |
params: |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
87 |
survey_content: a SuveryContent entity. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
88 |
survey_logic: instance of SurveyLogic. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
89 |
survey_record: a SurveyRecord entity. |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
90 |
read_only: controls whether the survey taking UI allows data entry. |
2527
ce657149b90a
Add a grade field to the Grading Project Survey form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2526
diff
changeset
|
91 |
data: dictionary mapping fields to data for validation. |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
92 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
93 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
94 |
self.kwargs = kwargs |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
95 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
96 |
self.survey_content = self.kwargs.pop('survey_content', None) |
2463
05af53239799
Add more flexibility to the Survey helper for use with the new Survey types.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2451
diff
changeset
|
97 |
self.survey_logic = self.kwargs.pop('survey_logic', None) |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
98 |
self.survey_record = self.kwargs.pop('survey_record', None) |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
99 |
self.read_only = self.kwargs.pop('read_only', None) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
100 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
101 |
self.fields_map = dict( |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
102 |
long_answer=self.addLongField, |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
103 |
short_answer=self.addShortField, |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
104 |
selection=self.addSingleField, |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
105 |
pick_multi=self.addMultiField, |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
106 |
pick_quant=self.addQuantField, |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
107 |
) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
108 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
109 |
# get the POST data dict if present |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
110 |
data = self.kwargs.pop('data', None) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
111 |
|
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
112 |
# set cleaner methods for fields, only needed if we have POST data |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
113 |
if data: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
114 |
# prepare to render a bound, validating form |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
115 |
clean_data = self.setCleaners(data) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
116 |
else: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
117 |
clean_data = self.setCleaners() |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
118 |
|
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
119 |
# update with fields from subclasses |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
120 |
if hasattr(self, 'data') and self.data: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
121 |
clean_data.update(self.data) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
122 |
delattr(self, 'data') |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
123 |
|
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
124 |
# pass data, so form is bound |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
125 |
if data: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
126 |
self.kwargs['data'] = clean_data |
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
127 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
128 |
super(SurveyTakeForm, self).__init__(*args, **self.kwargs) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
129 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
130 |
self.fields = self.getFields(clean_data) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
131 |
|
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
132 |
def setCleaners(self, post_dict=None): |
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
133 |
"""Set cleaner methods for dynamic fields. |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
134 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
135 |
Used for storing textual input as Text instead of StringProperty. If |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
136 |
passed a dict of field names/values (as the kwarg 'data' to __init__), |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
137 |
it's possible to set clean_[field_id] methods for validation. |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
138 |
|
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
139 |
This method populates the 'data' dict used for generating form fields. |
2564
81b36f56d61a
Ensure that the Grade field data stays in clean_data.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2560
diff
changeset
|
140 |
|
81b36f56d61a
Ensure that the Grade field data stays in clean_data.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2560
diff
changeset
|
141 |
Args: |
81b36f56d61a
Ensure that the Grade field data stays in clean_data.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2560
diff
changeset
|
142 |
post_dict: dictionary used to populate the fields |
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
143 |
""" |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
144 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
145 |
# prefix for method names |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
146 |
clean = 'clean_' |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
147 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
148 |
# data is passed to super's __init__ as the 'data' kwarg |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
149 |
data = {} |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
150 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
151 |
# flag whether we can use getlist to retrieve multiple values |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
152 |
is_post = hasattr(post_dict, 'getlist') |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
153 |
|
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
154 |
schema = {} |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
155 |
if self.survey_content: |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
156 |
schema = eval(self.survey_content.schema) |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
157 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
158 |
for key, val in schema.items(): |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
159 |
if val['type'] == 'long_answer': |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
160 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
161 |
# store > 500 chars per long answer |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
162 |
setattr(self, clean + key, |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
163 |
lambda key=key: db.Text(self.cleaned_data.get(key)) |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
164 |
) |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
165 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
166 |
if val['has_comment']: |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
167 |
comment = COMMENT_PREFIX + key |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
168 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
169 |
#store > 500 chars per comment field |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
170 |
setattr(self, clean + comment, |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
171 |
lambda comment=comment: db.Text(self.cleaned_data.get(comment)) |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
172 |
) |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
173 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
174 |
# put comment in self.data |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
175 |
if post_dict: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
176 |
comment_val = post_dict.get(comment) or None |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
177 |
else: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
178 |
comment_val = getattr(self.survey_record, comment, None) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
179 |
data[comment] = comment_val |
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
180 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
181 |
# put POST or record value for field in self.data |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
182 |
is_multi = val['type'] == 'pick_multi' |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
183 |
if post_dict: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
184 |
if is_multi and is_post: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
185 |
key_val = post_dict.getlist(key) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
186 |
else: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
187 |
key_val = post_dict.get(key) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
188 |
else: |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
189 |
key_val = getattr(self.survey_record, key, None) |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
190 |
if is_multi and isinstance(key_val, basestring): |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
191 |
# TODO(ajaksu): find out if we still need this safety net |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
192 |
key_val = key_val.split(',') |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
193 |
elif not is_multi and isinstance(key_val, list): |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
194 |
# old pick_multi record for a question that is now single choice |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
195 |
key_val = key_val[0] if key_val else '' |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
196 |
|
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
197 |
data[key] = key_val |
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
198 |
|
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
199 |
return data |
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
200 |
|
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
201 |
def getFields(self, post_dict=None): |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
202 |
"""Build the SurveyContent (questions) form fields. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
203 |
|
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
204 |
params: |
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
205 |
post_dict: dict with POST data that will be used for validation |
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
206 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
207 |
Populates self.survey_fields, which will be ordered in self.insertFields. |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
208 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
209 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
210 |
if not self.survey_content: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
211 |
return |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
212 |
|
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
213 |
post_dict = post_dict or {} |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
214 |
self.survey_fields = {} |
2442
dd1f94c3594c
Start on adding ProjectSurvey and GradingProjectSurvey.
Daniel Diniz <ajaksu@gmail.com>
parents:
2439
diff
changeset
|
215 |
schema = SurveyContentSchema(self.survey_content.schema) |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
216 |
attrs = {} |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
217 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
218 |
# figure out whether we want a read-only view |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
219 |
read_only = self.read_only |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
220 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
221 |
if not read_only: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
222 |
survey_content = self.survey_content |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
223 |
survey_entity = self.survey_logic.getSurveyForContent(survey_content) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
224 |
deadline = survey_entity.survey_end |
2518
66405056baf8
Only initialize a SurveyTakeForm in take instead of in takeGet and takePost.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2517
diff
changeset
|
225 |
read_only = deadline and (datetime.datetime.now() > deadline) |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
226 |
|
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
227 |
if read_only: |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
228 |
attrs['disabled'] = 'disabled' |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
229 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
230 |
# add unordered fields to self.survey_fields |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
231 |
for field in self.survey_content.dynamic_properties(): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
232 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
233 |
value = post_dict.get(field) |
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
234 |
|
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
235 |
# skip comments, as they should go below their corresponding questions |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
236 |
if field.startswith(COMMENT_PREFIX): |
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
237 |
continue |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
238 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
239 |
label = schema.getLabel(field) |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
240 |
if label is None: |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
241 |
# we log this error in getLabel |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
242 |
continue |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
243 |
|
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
244 |
# find correct field type |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
245 |
addField = self.fields_map[schema.getType(field)] |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
246 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
247 |
# check if question is required, it's never required when editing |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
248 |
required = schema.getRequired(field) |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
249 |
|
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
250 |
tip = schema.getTip(field) |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
251 |
kwargs = dict(label=label, req=required, tip=tip) |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
252 |
|
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
253 |
# copy attrs |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
254 |
extra_attrs = attrs.copy() |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
255 |
|
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
256 |
# add new field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
257 |
addField(field, value, extra_attrs, schema, **kwargs) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
258 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
259 |
# handle comments if question allows them |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
260 |
if schema.getHasComment(field): |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
261 |
comment = post_dict.get(COMMENT_PREFIX + field) |
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
262 |
self.addCommentField(field, comment, extra_attrs, tip='Add a comment.') |
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
263 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
264 |
return self.insertFields() |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
265 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
266 |
def insertFields(self): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
267 |
"""Add ordered fields to self.fields. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
268 |
""" |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
269 |
fields = SortedDict() |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
270 |
survey_order = self.survey_content.getSurveyOrder() |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
271 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
272 |
# first, insert dynamic survey fields |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
273 |
for position, property in sorted(survey_order.items()): |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
274 |
fields.insert(len(fields) + 1, property, self.survey_fields[property]) |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
275 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
276 |
# add comment if field has one and this isn't an edit view |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
277 |
property = COMMENT_PREFIX + property |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
278 |
if property in self.survey_fields: |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
279 |
fields.insert(len(fields) + 1, property, self.survey_fields[property]) |
2542
a9dec4763c6b
POST data always overwrites survey_record data when used to populate form.
Daniel Diniz <ajaksu@gmail.com>
parents:
2539
diff
changeset
|
280 |
return fields |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
281 |
|
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
282 |
def addLongField(self, field, value, attrs, schema, req=True, label='', |
2470
6c3b7dd8b770
Style fix in Survey views helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2468
diff
changeset
|
283 |
tip='', comment=''): |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
284 |
"""Add a long answer fields to this form. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
285 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
286 |
params: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
287 |
field: the current field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
288 |
value: the initial value for this field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
289 |
attrs: additional attributes for field |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
290 |
schema: schema for survey |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
291 |
req: required bool |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
292 |
label: label for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
293 |
tip: tooltip text for field |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
294 |
comment: initial comment value for field |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
295 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
296 |
|
2670
884f808d8469
fix for issue 653 by adding wrap=hard attr to textareas for surveys
James Levy <jamesalexanderlevy@gmail.com>
parents:
2659
diff
changeset
|
297 |
#fix growfield wrapping |
884f808d8469
fix for issue 653 by adding wrap=hard attr to textareas for surveys
James Levy <jamesalexanderlevy@gmail.com>
parents:
2659
diff
changeset
|
298 |
attrs['wrap'] = 'hard' |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
299 |
widget = widgets.Textarea(attrs=attrs) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
300 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
301 |
if not tip: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
302 |
tip = 'Please provide a long answer to this question.' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
303 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
304 |
question = CharField(help_text=tip, required=req, label=label, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
305 |
widget=widget, initial=value) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
306 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
307 |
self.survey_fields[field] = question |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
308 |
|
2468
0273c1a8d708
Fixed too long line in Surveys helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2465
diff
changeset
|
309 |
def addShortField(self, field, value, attrs, schema, req=False, label='', |
0273c1a8d708
Fixed too long line in Surveys helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2465
diff
changeset
|
310 |
tip='', comment=''): |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
311 |
"""Add a short answer fields to this form. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
312 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
313 |
params: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
314 |
field: the current field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
315 |
value: the initial value for this field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
316 |
attrs: additional attributes for field |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
317 |
schema: schema for survey |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
318 |
req: required bool |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
319 |
label: label for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
320 |
tip: tooltip text for field |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
321 |
comment: initial comment value for field |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
322 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
323 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
324 |
attrs['class'] = "text_question" |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
325 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
326 |
widget = widgets.TextInput(attrs=attrs) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
327 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
328 |
if not tip: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
329 |
tip = 'Please provide a short answer to this question.' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
330 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
331 |
question = CharField(help_text=tip, required=req, label=label, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
332 |
widget=widget, max_length=140, initial=value) |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
333 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
334 |
self.survey_fields[field] = question |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
335 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
336 |
def addSingleField(self, field, value, attrs, schema, req=False, label='', |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
337 |
tip='', comment=''): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
338 |
"""Add a selection field to this form. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
339 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
340 |
params: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
341 |
field: the current field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
342 |
value: the initial value for this field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
343 |
attrs: additional attributes for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
344 |
schema: schema for survey |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
345 |
req: required bool |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
346 |
label: label for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
347 |
tip: tooltip text for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
348 |
comment: initial comment value for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
349 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
350 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
351 |
widget = PickOneSelect(attrs) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
352 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
353 |
these_choices = [] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
354 |
# add all properties, but select chosen one |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
355 |
# TODO(ajaksu): this breaks ordering and blocks merging choice methods |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
356 |
options = getattr(self.survey_content, field) |
2533
941732c52b67
Fixed broken selection questions from refactoring SurveyForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2530
diff
changeset
|
357 |
if self.survey_record and hasattr(self.survey_record, field): |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
358 |
these_choices.append((value, value)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
359 |
if value in options: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
360 |
options.remove(value) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
361 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
362 |
for option in options: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
363 |
these_choices.append((option, option)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
364 |
if not tip: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
365 |
tip = 'Please select an answer this question.' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
366 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
367 |
question = PickOneField(help_text=tip, required=req, label=label, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
368 |
choices=tuple(these_choices), widget=widget) |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
369 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
370 |
self.survey_fields[field] = question |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
371 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
372 |
def addMultiField(self, field, value, attrs, schema, req=False, label='', |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
373 |
tip='', comment=''): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
374 |
"""Add a pick_multi field to this form. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
375 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
376 |
params: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
377 |
field: the current field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
378 |
value: the initial value for this field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
379 |
attrs: additional attributes for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
380 |
schema: schema for survey |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
381 |
req: required bool |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
382 |
label: label for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
383 |
tip: tooltip text for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
384 |
comment: initial comment value for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
385 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
386 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
387 |
widget = PickManyCheckbox(attrs) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
388 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
389 |
# TODO(ajaksu) need to allow checking checkboxes by default |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
390 |
if self.survey_record and isinstance(value, basestring): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
391 |
# pass value as 'initial' so MultipleChoiceField renders checked boxes |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
392 |
value = value.split(',') |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
393 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
394 |
these_choices = [(v,v) for v in getattr(self.survey_content, field)] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
395 |
if not tip: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
396 |
tip = 'Please select one or more of these choices.' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
397 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
398 |
question = PickManyField(help_text=tip, required=req, label=label, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
399 |
choices=tuple(these_choices), widget=widget, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
400 |
initial=value) |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
401 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
402 |
self.survey_fields[field] = question |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
403 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
404 |
def addQuantField(self, field, value, attrs, schema, req=False, label='', |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
405 |
tip='', comment=''): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
406 |
"""Add a pick_quant field to this form. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
407 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
408 |
params: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
409 |
field: the current field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
410 |
value: the initial value for this field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
411 |
attrs: additional attributes for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
412 |
schema: schema for survey |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
413 |
req: required bool |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
414 |
label: label for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
415 |
tip: tooltip text for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
416 |
comment: initial comment value for field |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
417 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
418 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
419 |
widget = PickQuantRadio(attrs) |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
420 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
421 |
if self.survey_record: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
422 |
value = value |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
423 |
else: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
424 |
value = None |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
425 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
426 |
these_choices = [(v,v) for v in getattr(self.survey_content, field)] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
427 |
if not tip: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
428 |
tip = 'Please select one of these choices.' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
429 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
430 |
question = PickQuantField(help_text=tip, required=req, label=label, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
431 |
choices=tuple(these_choices), widget=widget, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
432 |
initial=value) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
433 |
self.survey_fields[field] = question |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
434 |
|
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
435 |
def addCommentField(self, field, comment, attrs, tip): |
2520
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
436 |
"""Add comment field to a question. |
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
437 |
|
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
438 |
params: |
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
439 |
field: the name of the field to add the comment field to |
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
440 |
comment: the initial value of this field. |
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
441 |
attrs: the attrs for the widget |
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
442 |
tip: tooltip text for this field |
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
443 |
""" |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
444 |
|
2526
8f29bfb9eb52
Survey editing/taking Javascript and CSS fixes.
James Levy <jamesalexanderlevy@gmail.com>
parents:
2520
diff
changeset
|
445 |
attrs['class'] = 'comment' |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
446 |
attrs['rows'] = '1' |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
447 |
widget = widgets.Textarea(attrs=attrs) |
2539
dd0322a37e44
Ensure that long questions and comments are stored as db.Text.
Daniel Diniz <ajaksu@gmail.com>
parents:
2533
diff
changeset
|
448 |
comment_field = CharField(help_text=tip, required=False, |
2526
8f29bfb9eb52
Survey editing/taking Javascript and CSS fixes.
James Levy <jamesalexanderlevy@gmail.com>
parents:
2520
diff
changeset
|
449 |
label='Add a Comment (optional)', widget=widget, initial=comment) |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
450 |
self.survey_fields[COMMENT_PREFIX + field] = comment_field |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
451 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
452 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
453 |
class Meta(object): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
454 |
model = SurveyContent |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
455 |
exclude = ['schema'] |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
456 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
457 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
458 |
class SurveyEditForm(djangoforms.ModelForm): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
459 |
"""SurveyContent form for editing a survey. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
460 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
461 |
This class is used to produce survey forms for several circumstances: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
462 |
- Admin creating survey from scratch |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
463 |
- Admin updating existing survey |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
464 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
465 |
Using dynamic properties of the survey model (if passed as an arg) the |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
466 |
survey form is dynamically formed. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
467 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
468 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
469 |
def __init__(self, *args, **kwargs): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
470 |
"""Store special kwargs as attributes. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
471 |
|
2520
859ada69db69
Style fixes in Survey helper.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2518
diff
changeset
|
472 |
params: |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
473 |
survey_content: a SurveyContent entity. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
474 |
survey_logic: an instance of SurveyLogic. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
475 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
476 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
477 |
self.kwargs = kwargs |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
478 |
self.survey_content = self.kwargs.pop('survey_content', None) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
479 |
self.survey_logic = self.kwargs.pop('survey_logic', None) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
480 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
481 |
super(SurveyEditForm, self).__init__(*args, **self.kwargs) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
482 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
483 |
def getFields(self): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
484 |
"""Build the SurveyContent (questions) form fields. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
485 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
486 |
params: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
487 |
post_dict: dict with POST data that will be used for validation |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
488 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
489 |
Populates self.survey_fields, which will be ordered in self.insert_fields. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
490 |
Also populates self.data, which will be used in form validation. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
491 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
492 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
493 |
if not self.survey_content: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
494 |
return |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
495 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
496 |
self.survey_fields = {} |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
497 |
schema = SurveyContentSchema(self.survey_content.schema) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
498 |
extra_attrs = {} |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
499 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
500 |
# add unordered fields to self.survey_fields |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
501 |
for field in self.survey_content.dynamic_properties(): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
502 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
503 |
# use prompts set by survey creator |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
504 |
value = getattr(self.survey_content, field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
505 |
from_content = True |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
506 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
507 |
label = schema.getLabel(field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
508 |
if label is None: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
509 |
continue |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
510 |
|
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
511 |
tip = schema.getTip(field) |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
512 |
kwargs = schema.getEditFieldArgs(field, value, tip, label) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
513 |
|
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
514 |
kwargs['widget'] = schema.getEditWidget(field, extra_attrs, tip) |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
515 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
516 |
# add new field |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
517 |
self.survey_fields[field] = schema.getEditField(field)(**kwargs) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
518 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
519 |
# TODO(ajaksu): find a new way to keep fields in order |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
520 |
return self.insertFields() |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
521 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
522 |
def insertFields(self): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
523 |
"""Add ordered fields to self.fields. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
524 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
525 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
526 |
survey_order = self.survey_content.getSurveyOrder() |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
527 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
528 |
# insert dynamic survey fields |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
529 |
for position, property in survey_order.items(): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
530 |
self.fields.insert(position, property, self.survey_fields[property]) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
531 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
532 |
return self.fields |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
533 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
534 |
class Meta(object): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
535 |
model = SurveyContent |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
536 |
exclude = ['schema'] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
537 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
538 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
539 |
class SurveyContentSchema(object): |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
540 |
"""Abstract question metadata handling. |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
541 |
""" |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
542 |
|
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
543 |
def __init__(self, schema): |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
544 |
"""Set the dictionary that this class encapsulates. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
545 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
546 |
Args: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
547 |
schema: schema as stored in SurveyConent entity |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
548 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
549 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
550 |
self.schema = eval(schema) |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
551 |
|
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
552 |
def getType(self, field): |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
553 |
"""Fetch question type for field e.g. short_answer, pick_multi, etc. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
554 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
555 |
Args: |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
556 |
field: name of the field to get the type for |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
557 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
558 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
559 |
return self.schema[field]["type"] |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
560 |
|
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
561 |
def getTip(self, field): |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
562 |
"""Fetch question help text, used for tooltips. |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
563 |
|
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
564 |
Args: |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
565 |
field: name of the field to get the tooltip for |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
566 |
""" |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
567 |
|
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
568 |
return self.schema[field].get('tip', '') |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
569 |
|
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
570 |
|
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
571 |
def getRequired(self, field): |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
572 |
"""Check whether survey question is required. |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
573 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
574 |
Args: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
575 |
field: name of the field to check the required property for |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
576 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
577 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
578 |
return self.schema[field]["required"] |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
579 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
580 |
def getHasComment(self, field): |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
581 |
"""Check whether survey question allows adding a comment. |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
582 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
583 |
Args: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
584 |
field: name of the field to get the hasComment property for |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
585 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
586 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
587 |
return self.schema[field]["has_comment"] |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
588 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
589 |
def getRender(self, field): |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
590 |
"""Get rendering options for choice questions. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
591 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
592 |
Args: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
593 |
field: name of the field to get the rendering option for |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
594 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
595 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
596 |
return self.schema[field]["render"] |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
597 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
598 |
def getEditField(self, field): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
599 |
"""For a given question kind, get the correct edit view field. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
600 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
601 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
602 |
kind = self.getType(field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
603 |
if kind in CHOICE_TYPES: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
604 |
Field = PickOneField |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
605 |
else: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
606 |
Field = CharField |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
607 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
608 |
return Field |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
609 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
610 |
def getEditFieldArgs(self, field, value, tip, label): |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
611 |
"""Build edit view field arguments. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
612 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
613 |
params: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
614 |
field: field name |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
615 |
value: field value (text for text questions, list for choice questions) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
616 |
tipe: help text, to be used in a tooltip |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
617 |
label: the field's question (or identifier if question is missing) |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
618 |
""" |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
619 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
620 |
kind = self.getType(field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
621 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
622 |
kwargs = dict(help_text=tip, required=False, label=label) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
623 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
624 |
if kind in CHOICE_TYPES: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
625 |
kwargs['choices'] = tuple([(val, val) for val in value]) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
626 |
else: |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
627 |
kwargs['initial'] = tip |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
628 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
629 |
return kwargs |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
630 |
|
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
631 |
def getEditWidget(self, field, attrs, tip): |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
632 |
"""Get survey editing widget for questions. |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
633 |
""" |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
634 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
635 |
kind = self.getType(field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
636 |
is_required = self.getRequired(field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
637 |
has_comment = self.getHasComment(field) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
638 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
639 |
if kind in CHOICE_TYPES: |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
640 |
widget = UniversalChoiceEditor |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
641 |
render = self.getRender(field) |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
642 |
args = kind, render, is_required, has_comment, tip |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
643 |
else: |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
644 |
args = is_required, has_comment |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
645 |
if kind == 'long_answer': |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
646 |
widget = LongTextarea |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
647 |
elif kind == 'short_answer': |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
648 |
widget = ShortTextInput |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
649 |
attrs = attrs.copy() |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
650 |
attrs['class'] = kind |
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
651 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
652 |
kwargs = dict(attrs=attrs) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
653 |
|
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
654 |
return widget(*args, **kwargs) |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
655 |
|
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
656 |
def getLabel(self, field): |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
657 |
"""Fetch the free text 'question' or use field name as label. |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
658 |
""" |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
659 |
|
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
660 |
if field not in self.schema: |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
661 |
logging.error('field %s not found in schema %s' % |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
662 |
(field, str(self.schema))) |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
663 |
return |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
664 |
else: |
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
665 |
label = self.schema[field].get('question') or field |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
666 |
|
2451
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
667 |
return label |
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
668 |
|
c58a7ea6c126
Added SurveyContentSchema to improve readability for the survey helper.
Daniel Diniz <ajaksu@gmail.com>
parents:
2442
diff
changeset
|
669 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
670 |
class UniversalChoiceEditor(widgets.Widget): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
671 |
"""Edit interface for choice questions. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
672 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
673 |
Allows adding and removing options, re-ordering and editing option text. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
674 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
675 |
|
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
676 |
def __init__(self, kind, render, is_required, has_comment, tip, |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
677 |
attrs=None, choices=()): |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
678 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
679 |
params: |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
680 |
kind: question kind (one of selection, pick_multi or pick_quant) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
681 |
render: question widget (single_select, multi_checkbox or quant_radio) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
682 |
is_required: bool, controls selection in the required_for field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
683 |
has_comments: bool, controls selection in the has_comments field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
684 |
""" |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
685 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
686 |
self.attrs = attrs or {} |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
687 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
688 |
# Choices can be any iterable, but we may need to render this widget |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
689 |
# multiple times. Thus, collapse it into a list so it can be consumed |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
690 |
# more than once. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
691 |
self.choices = list(choices) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
692 |
self.kind = kind |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
693 |
self.render_as = render |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
694 |
self.is_required = is_required |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
695 |
self.has_comment = has_comment |
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
696 |
self.tooltip_content = tip or '' |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
697 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
698 |
def render(self, name, value, attrs=None, choices=()): |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
699 |
"""Render UCE widget. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
700 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
701 |
Option reordering, editing, addition and deletion are added here. |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
702 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
703 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
704 |
if value is None: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
705 |
value = '' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
706 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
707 |
final_attrs = self.build_attrs(attrs, name=name) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
708 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
709 |
# find out which options should be selected in type and render drop-downs. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
710 |
selected = 'selected="selected"' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
711 |
context = dict( |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
712 |
name=name, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
713 |
is_selection=selected * (self.kind == 'selection'), |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
714 |
is_pick_multi=selected * (self.kind == 'pick_multi'), |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
715 |
is_pick_quant=selected * (self.kind == 'pick_quant'), |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
716 |
is_select=selected * (self.render_as == 'single_select'), |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
717 |
is_checkboxes=selected * (self.render_as == 'multi_checkbox'), |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
718 |
is_radio_buttons=selected * (self.render_as == 'quant_radio'), |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
719 |
) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
720 |
|
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
721 |
# set required and has_comment selects |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
722 |
context.update(dict( |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
723 |
is_required = self.is_required, |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
724 |
has_comment = self.has_comment, |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
725 |
)) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
726 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
727 |
str_value = forms.util.smart_unicode(value) # normalize to string. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
728 |
chained_choices = enumerate(chain(self.choices, choices)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
729 |
choices = {} |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
730 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
731 |
for i, (option_value, option_label) in chained_choices: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
732 |
option_value = escape(forms.util.smart_unicode(option_value)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
733 |
choices[i] = option_value |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
734 |
context['choices'] = choices |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
735 |
|
2560
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
736 |
tooltip_content = escape(forms.util.smart_unicode(self.tooltip_content)) |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
737 |
context['tooltip_content'] = tooltip_content |
a944c0169ad8
Added ability to add custom tooltips and UI improvements.
Daniel Diniz <ajaksu@gmail.com>
parents:
2542
diff
changeset
|
738 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
739 |
template = 'soc/survey/universal_choice_editor.html' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
740 |
return loader.render_to_string(template, context) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
741 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
742 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
743 |
class PickOneField(forms.ChoiceField): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
744 |
"""Stub for customizing the single choice field. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
745 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
746 |
#TODO(james): Ensure that more than one option cannot be selected |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
747 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
748 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
749 |
super(PickOneField, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
750 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
751 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
752 |
class PickManyField(forms.MultipleChoiceField): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
753 |
"""Stub for customizing the multiple choice field. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
754 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
755 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
756 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
757 |
super(PickManyField, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
758 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
759 |
|
2530
d7a0ab3f1965
Make sure that radio button questions validate correctly and allow only one choice.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2527
diff
changeset
|
760 |
class PickQuantField(forms.ChoiceField): |
d7a0ab3f1965
Make sure that radio button questions validate correctly and allow only one choice.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2527
diff
changeset
|
761 |
"""Stub for customizing the choice field. |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
762 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
763 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
764 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
765 |
super(PickQuantField, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
766 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
767 |
|
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
768 |
class LongTextarea(widgets.Textarea): |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
769 |
"""Set whether long question is required or allows comments. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
770 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
771 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
772 |
def __init__(self, is_required, has_comment, attrs=None): |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
773 |
"""Initialize widget and store editing mode. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
774 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
775 |
params: |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
776 |
is_required: bool, controls selection in the 'required' extra field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
777 |
has_comments: bool, controls selection in the 'has_comment' extra field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
778 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
779 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
780 |
self.is_required = is_required |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
781 |
self.has_comment = has_comment |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
782 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
783 |
super(LongTextarea, self).__init__(attrs) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
784 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
785 |
def render(self, name, value, attrs=None): |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
786 |
"""Render plain textarea or widget with extra fields. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
787 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
788 |
Extra fields are 'required' and 'has_comment'. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
789 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
790 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
791 |
# plain text area |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
792 |
output = super(LongTextarea, self).render(name, value, attrs) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
793 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
794 |
# add 'required' and 'has_comment' fields |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
795 |
context = dict(name=name, is_required=self.is_required, |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
796 |
has_comment=self.has_comment) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
797 |
template = loader.get_template_from_string(REQUIRED_COMMENT_TPL) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
798 |
rendered = template.render(context=loader.Context(dict_=context)) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
799 |
output = rendered + output |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
800 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
801 |
output = '<fieldset>' + output + '</fieldset>' |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
802 |
return output |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
803 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
804 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
805 |
class ShortTextInput(widgets.TextInput): |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
806 |
"""Set whether short answer question is required or allows comments. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
807 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
808 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
809 |
def __init__(self, is_required, has_comment, attrs=None): |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
810 |
"""Initialize widget and store editing mode. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
811 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
812 |
params: |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
813 |
is_required: bool, controls selection in the 'required' extra field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
814 |
has_comments: bool, controls selection in the 'has_comment' extra field |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
815 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
816 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
817 |
self.is_required = is_required |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
818 |
self.has_comment = has_comment |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
819 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
820 |
super(ShortTextInput, self).__init__(attrs) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
821 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
822 |
def render(self, name, value, attrs=None): |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
823 |
"""Render plain text input or widget with extra fields. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
824 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
825 |
Extra fields are 'required' and 'has_comment'. |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
826 |
""" |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
827 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
828 |
# plain text area |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
829 |
output = super(ShortTextInput, self).render(name, value, attrs) |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
830 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
831 |
# add 'required' and 'has_comment' fields |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
832 |
context = dict(name=name, is_required=self.is_required, |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
833 |
has_comment=self.has_comment) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
834 |
template = loader.get_template_from_string(REQUIRED_COMMENT_TPL) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
835 |
rendered = template.render(context=loader.Context(dict_=context)) |
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
836 |
output = rendered + output |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
837 |
|
2517
97117d341f62
Split SurveyForm into SurveyTakeForm and SurveyEditForm.
Daniel Diniz <ajaksu@gmail.com>
parents:
2507
diff
changeset
|
838 |
output = '<fieldset>' + output + '</fieldset>' |
2502
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
839 |
return output |
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
840 |
|
2e096acc8720
Surveys can now have required questions and comments can be turned on/off.
Daniel Diniz <ajaksu@gmail.com>
parents:
2501
diff
changeset
|
841 |
|
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
842 |
class PickOneSelect(forms.Select): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
843 |
"""Stub for customizing the single choice select widget. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
844 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
845 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
846 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
847 |
super(PickOneSelect, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
848 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
849 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
850 |
class PickManyCheckbox(forms.CheckboxSelectMultiple): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
851 |
"""Customized multiple choice checkbox widget. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
852 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
853 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
854 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
855 |
super(PickManyCheckbox, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
856 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
857 |
def render(self, name, value, attrs=None, choices=()): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
858 |
"""Render checkboxes as list items grouped in a fieldset. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
859 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
860 |
This is the pick_multi widget for survey taking |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
861 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
862 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
863 |
if value is None: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
864 |
value = [] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
865 |
has_id = attrs and attrs.has_key('id') |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
866 |
final_attrs = self.build_attrs(attrs, name=name) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
867 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
868 |
# normalize to strings. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
869 |
str_values = set([forms.util.smart_unicode(v) for v in value]) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
870 |
is_checked = lambda value: value in str_values |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
871 |
smart_unicode = forms.util.smart_unicode |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
872 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
873 |
# set container fieldset and list |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
874 |
output = [u'<fieldset id="id_%s">\n <ul class="pick_multi">' % name] |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
875 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
876 |
# add numbered checkboxes wrapped in list items |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
877 |
chained_choices = enumerate(chain(self.choices, choices)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
878 |
for i, (option_value, option_label) in chained_choices: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
879 |
option_label = escape(smart_unicode(option_label)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
880 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
881 |
# If an ID attribute was given, add a numeric index as a suffix, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
882 |
# so that the checkboxes don't all have the same ID attribute. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
883 |
if has_id: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
884 |
final_attrs = dict(final_attrs, id='%s_%s' % (attrs['id'], i)) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
885 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
886 |
cb = widgets.CheckboxInput(final_attrs, check_test=is_checked) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
887 |
rendered_cb = cb.render(name, option_value) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
888 |
cb_label = (rendered_cb, option_label) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
889 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
890 |
output.append(u' <li><label>%s %s</label></li>' % cb_label) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
891 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
892 |
output.append(u' </ul>\n</fieldset>') |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
893 |
return u'\n'.join(output) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
894 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
895 |
def id_for_label(self, id_): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
896 |
# see the comment for RadioSelect.id_for_label() |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
897 |
if id_: |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
898 |
id_ += '_fieldset' |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
899 |
return id_ |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
900 |
id_for_label = classmethod(id_for_label) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
901 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
902 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
903 |
class PickQuantRadioRenderer(widgets.RadioFieldRenderer): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
904 |
"""Used by PickQuantRadio to enable customization of radio widgets. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
905 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
906 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
907 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
908 |
super(PickQuantRadioRenderer, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
909 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
910 |
def render(self): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
911 |
"""Outputs set of radio fields in a div. |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
912 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
913 |
|
2680
b96ba702e82c
Every radio button is now properly shown on a new line.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2670
diff
changeset
|
914 |
from django.utils.html import linebreaks |
b96ba702e82c
Every radio button is now properly shown on a new line.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2670
diff
changeset
|
915 |
|
b96ba702e82c
Every radio button is now properly shown on a new line.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2670
diff
changeset
|
916 |
return linebreaks(u'<div class="quant_radio">%s</div>' |
2432
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
917 |
% u'\n'.join([u'%s' % force_unicode(w) for w in self])) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
918 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
919 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
920 |
class PickQuantRadio(forms.RadioSelect): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
921 |
"""TODO(James,Ajaksu) Fix Docstring |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
922 |
""" |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
923 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
924 |
renderer = PickQuantRadioRenderer |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
925 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
926 |
def __init__(self, *args, **kwargs): |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
927 |
super(PickQuantRadio, self).__init__(*args, **kwargs) |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
928 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
929 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
930 |
# in the future, we'll have more widget types here |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
931 |
WIDGETS = {'multi_checkbox': PickManyCheckbox, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
932 |
'single_select': PickOneSelect, |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
933 |
'quant_radio': PickQuantRadio} |
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
934 |
|
636dfd5381c2
Added Survey Views Helper for rendering several widgets.
James Levy <jamesalexanderlevy@gmail.com>
parents:
diff
changeset
|
935 |
|
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
936 |
class HelperForm(object): |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
937 |
"""Thin wrapper for adding values to params['edit_form'].fields. |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
938 |
""" |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
939 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
940 |
def __init__(self, form=None): |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
941 |
"""Store the edit_form. |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
942 |
""" |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
943 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
944 |
self.form = form |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
945 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
946 |
def __call__(self, instance=None): |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
947 |
"""Transparently instantiate and add initial values to the edit_form. |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
948 |
""" |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
949 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
950 |
form = self.form(instance=instance) |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
951 |
form.fields['created_by'].initial = instance.author.name |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
952 |
form.fields['last_modified_by'].initial = instance.modified_by.name |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
953 |
form.fields['doc_key_name'].initial = instance.key().id_or_name() |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
954 |
return form |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
955 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
956 |
|
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
957 |
def getCSVHeader(survey_entity): |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
958 |
"""CSV header helper, needs support for comment lines in CSV. |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
959 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
960 |
Args: |
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
961 |
survey_entity: Survey entity |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
962 |
""" |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
963 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
964 |
tpl = '# %s: %s\n' |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
965 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
966 |
# add static properties |
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
967 |
fields = ['# Melange Survey export for \n# %s\n#\n' % survey_entity.title] |
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
968 |
fields += [tpl % (k,v) for k,v in survey_entity.toDict().items()] |
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
969 |
fields += [tpl % (f, str(getattr(survey_entity, f))) for f in PLAIN.split()] |
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
970 |
fields += [tpl % (f, str(getattr(survey_entity, f).link_id)) |
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
971 |
for f in FIELDS.split()] |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
972 |
fields.sort() |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
973 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
974 |
# add dynamic properties |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
975 |
fields += ['#\n#---\n#\n'] |
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
976 |
dynamic = survey_entity.survey_content.dynamic_properties() |
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
977 |
dynamic = [(prop, getattr(survey_entity.survey_content, prop)) |
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
978 |
for prop in dynamic] |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
979 |
fields += [tpl % (k,v) for k,v in sorted(dynamic)] |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
980 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
981 |
# add schema |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
982 |
fields += ['#\n#---\n#\n'] |
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
983 |
schema = survey_entity.survey_content.schema |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
984 |
indent = '},\n#' + ' ' * 9 |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
985 |
fields += [tpl % ('Schema', schema.replace('},', indent)) + '#\n'] |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
986 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
987 |
return ''.join(fields).replace('\n', '\r\n') |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
988 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
989 |
|
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
990 |
def getRecords(recs, props): |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
991 |
"""Fetch properties from SurveyRecords for CSV export. |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
992 |
""" |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
993 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
994 |
records = [] |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
995 |
props = props[1:] |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
996 |
for rec in recs: |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
997 |
values = tuple(getattr(rec, prop, None) for prop in props) |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
998 |
leading = (rec.user.link_id,) |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
999 |
records.append(leading + values) |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1000 |
return records |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1001 |
|
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1002 |
|
2658
34b414a80d42
Several style fixes and code cleaning for surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2576
diff
changeset
|
1003 |
def toCSV(survey_view): |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1004 |
"""CSV exporter. |
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1005 |
|
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1006 |
Args: |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1007 |
survey_view: instance of the SurveyView |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1008 |
""" |
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1009 |
|
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1010 |
def wrapper(survey): |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1011 |
"""Wrapper function. |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1012 |
""" |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1013 |
survey_logic = survey_view.getParams()['logic'] |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1014 |
record_logic = survey_logic.getRecordLogic() |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1015 |
|
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1016 |
# get header and properties |
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
1017 |
header = getCSVHeader(survey) |
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1018 |
leading = ['user', 'created', 'modified'] |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1019 |
properties = leading + survey.survey_content.orderedProperties() |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1020 |
|
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1021 |
# retrieve the query of the data to export |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1022 |
fields = {'survey': survey} |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1023 |
record_query = record_logic.getQueryForFields(fields) |
2478
985fd974e095
Clean up and other fixes for Survey modules.
Daniel Diniz <ajaksu@gmail.com>
parents:
2470
diff
changeset
|
1024 |
|
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1025 |
try: |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1026 |
first = record_query.run().next() |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1027 |
except StopIteration: |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1028 |
# bail out early if survey_records.run() is empty |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1029 |
return header, survey.link_id |
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
1030 |
|
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1031 |
# generate results list |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1032 |
recs = record_query.run() |
2659
8df08a3b17db
More style fixes due to code reviews for Surveys.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2658
diff
changeset
|
1033 |
recs = getRecords(recs, properties) |
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
1034 |
|
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1035 |
# write results to CSV |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1036 |
output = StringIO.StringIO() |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1037 |
writer = csv.writer(output) |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1038 |
writer.writerow(properties) |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1039 |
writer.writerows(recs) |
2501
d612b48e6e12
Added Survey From Field validation.
Daniel Diniz <ajaksu@gmail.com>
parents:
2492
diff
changeset
|
1040 |
|
2492
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1041 |
return header + output.getvalue(), survey.link_id |
6eac6cd88dad
Made the CSV exporter for Survey not rely on the BackReferenceProperty in Survey.
Lennard de Rijk <ljvderijk@gmail.com>
parents:
2489
diff
changeset
|
1042 |
return wrapper |