Skip to content

Commit

Permalink
Backported survey changes to 0.6 branch.
Browse files Browse the repository at this point in the history
  • Loading branch information
Arjan Scherpenisse committed Aug 18, 2011
1 parent 33e40bd commit 9a64a2a
Show file tree
Hide file tree
Showing 30 changed files with 477 additions and 241 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,9 @@ event({submit, {survey_question_save, ActionProps}, _TriggerId, _TargetId}, Cont
Name = z_string:to_slug(z_string:trim(z_context:get_q("name", Context, ""))),
Question = z_string:trim(z_context:get_q("question", Context, "")),
Text = z_string:trim(z_context:get_q("text", Context, "")),
IsRequired = z_convert:to_bool(z_context:get_q("is_required", Context, "")),
Q = get_question(Id, QuestionId, Context),
Q1 = question_render(Q#survey_question{name=Name, question=Question, text=Text}),
Q1 = question_render(Q#survey_question{name=Name, question=Question, text=Text, is_required=IsRequired}),
save_question(Id, QuestionId, Q1, Context),
Context1 = mod_survey:redraw_questions(Id, Context),
z_render:dialog_close(Context1).
Expand All @@ -70,7 +71,7 @@ save_question(Id, QuestionId, Question, Context) ->


question_props(Q) ->
Mod = list_to_atom("survey_q_"++z_convert:to_list(Q#survey_question.type)),
Mod = mod_survey:module_name(Q),
Mod:question_props(Q).

question_render(Q) ->
Expand Down
8 changes: 7 additions & 1 deletion modules/mod_survey/mod_survey.erl
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
-export([
event/2,
redraw_questions/2,
new_question/1,
delete_question/3,

render_next_page/6,
Expand Down Expand Up @@ -165,7 +166,7 @@ redraw_questions(Id, Context) ->

%% @doc Return the default state for each item type.
new_question(Type) ->
Mod = list_to_atom("survey_q_"++z_convert:to_list(Type)),
Mod = module_name(Type),
Mod:new().


Expand Down Expand Up @@ -313,6 +314,7 @@ do_submit(SurveyId, QuestionIds, Questions, Answers, Context) ->
case Missing of
[] ->
m_survey:insert_survey_submission(SurveyId, FoundAnswers, Context),
z_notifier:notify({survey_submit, SurveyId, FoundAnswers}, Context),
ok;
_ ->
{error, notfound}
Expand All @@ -336,6 +338,10 @@ collect_answers([QId|QIds], Qs, Answers, FoundAnswers, Missing) ->
{error, missing} -> collect_answers(QIds, Qs, Answers, FoundAnswers, [QId|Missing])
end.

module_name(L) when is_list(L) ->
module_name(list_to_atom(L));
module_name(Type) when is_atom(Type) ->
module_name(#survey_question{type=Type});
module_name(#survey_question{type=Type}) ->
list_to_atom("survey_q_"++atom_to_list(Type)).

Expand Down
9 changes: 5 additions & 4 deletions modules/mod_survey/models/m_survey.erl
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,14 @@ did_survey(SurveyId, Context) ->
insert_survey_submission(SurveyId, Answers, Context) ->
UserId = z_acl:user(Context),
%% Delete previous answers of this user, if any
case UserId of
PersistentId = case UserId of
undefined ->
PersistentId = z_context:persistent_id(Context),
z_db:q("delete from survey_answer where survey_id = $1 and persistent = $2", [SurveyId, PersistentId], Context);
PId = z_context:persistent_id(Context),
z_db:q("delete from survey_answer where survey_id = $1 and persistent = $2", [SurveyId, PId], Context),
PId;
_Other ->
z_db:q("delete from survey_answer where survey_id = $1 and user_id = $2", [SurveyId, UserId], Context),
PersistentId = undefined
undefined
end,
insert_questions(SurveyId, UserId, PersistentId, Answers, Context).

Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_likert.erl
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,9 @@ question_props(Q) ->
{has_name, true},

{question_label, ""},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_longanswer.erl
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,9 @@ question_props(Q) ->
{has_name, true},

{question_label, ""},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}] ++
?QUESTION_AS_PROPLIST(Q).


render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_matching.erl
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,9 @@ question_props(Q) ->

{question_label, ""},
{text_label, "Matching"},
{text_explanation, "<p>Enter the matching pairs below, one per line.</p>"},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_explanation, "<p>Enter the matching pairs below, one per line.</p>"}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_narrative.erl
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,9 @@ Use [name=first|second|third] for a drop down menu named \"name\" with the given
{has_question, false},

{question_label, ""},
{text_label, "Sentence"},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, "Sentence"}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
{Parts, _Inputs} = parse(z_convert:to_list(Q#survey_question.text)),
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_pagebreak.erl
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,9 @@ question_props(Q) ->
{has_name, true},

{question_label, "To question"},
{text_label, "Condition"},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, "Condition"}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Q#survey_question{
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_prompt.erl
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,9 @@ question_props(Q) ->
{has_name, false},

{question_label, "Prompt"},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Q#survey_question{
Expand Down
17 changes: 7 additions & 10 deletions modules/mod_survey/questions/survey_q_shortanswer.erl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

-module(survey_q_shortanswer).

-include("zotonic.hrl").

-export([
new/0,
question_props/1,
Expand All @@ -33,27 +35,22 @@ new() ->
type = shortanswer,
name = z_ids:identifier(5),
text = "",
question = <<"Please enter your name.">>
question = <<"Please enter your name.">>,
is_required = true
},
render(Q).


question_props(Q) ->
[
{explanation, ""},

{has_question, true},
{has_text, false},
{has_name, true},

{question_label, ""},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_subhead.erl
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,9 @@ question_props(Q) ->
{has_name, true},

{question_label, "Subhead"},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Q#survey_question{
Expand Down
10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_textblock.erl
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,9 @@ question_props(Q) ->
{has_name, true},

{question_label, "Text"},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Q#survey_question{
Expand Down
12 changes: 4 additions & 8 deletions modules/mod_survey/questions/survey_q_thurstone.erl
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,9 @@ question_props(Q) ->

{question_label, ""},
{text_label, "Options"},
{text_explanation, "<p>Enter the options below, one per line.</p>"},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_explanation, "<p>Enter the options below, one per line.</p>"}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down Expand Up @@ -123,4 +119,4 @@ prep_answer(_Q, []) ->
prep_answer(_Q, [{_Name, {Value, _Text}}]) ->
Value.



10 changes: 3 additions & 7 deletions modules/mod_survey/questions/survey_q_truefalse.erl
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,9 @@ question_props(Q) ->
{has_name, true},

{question_label, ""},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down
11 changes: 3 additions & 8 deletions modules/mod_survey/questions/survey_q_yesno.erl
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ new() ->
},
render(Q).


question_props(Q) ->
[
{explanation, ""},
Expand All @@ -49,13 +48,9 @@ question_props(Q) ->
{has_name, true},

{question_label, ""},
{text_label, ""},

{type, Q#survey_question.type},
{name, Q#survey_question.name},
{question, Q#survey_question.question},
{text, Q#survey_question.text}
].
{text_label, ""}
] ++
?QUESTION_AS_PROPLIST(Q).

render(Q) ->
Name = z_html:escape(Q#survey_question.name),
Expand Down
4 changes: 1 addition & 3 deletions modules/mod_survey/scomps/scomp_survey_survey_example.erl
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,5 @@
vary(_,_) -> nocache.

render(Args, _Vars, Context) ->
Type = proplists:get_value(type, Args),
Module = list_to_atom("survey_q_"++z_convert:to_list(Type)),
Q = Module:new(),
Q = mod_survey:new_question(proplists:get_value(type, Args)),
{ok, filter_replace:replace(Q#survey_question.html, ["class=\"", "class=\"nosubmit "], Context)}.
2 changes: 2 additions & 0 deletions modules/mod_survey/survey.hrl
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@

%% @doc A question for in a survey
-record(survey_question, {type, name, question, text, html, parts=[], is_required=true}).

-define(QUESTION_AS_PROPLIST(Q), lists:zip(record_info(fields, survey_question), tl(tuple_to_list(Q)))).
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@
<textarea rows="10" type="text" id="{{ #text }}" name="text">{{ text|escape }}</textarea>
{% endif %}

<div class="clearfix">
<label for="{{ #text }}">{_ Required? _}</label>
<input type="checkbox" id="{{ #required }}" name="is_required" {% if is_required %}checked="checked"{% endif %} value="true" />
{_ Whether the question needs answering or not. _}
</div>

{% button text=_"Save" %}
{% button text=_"Cancel" action={dialog_close} %}

Expand Down
2 changes: 1 addition & 1 deletion modules/mod_survey/templates/_survey_question_likert.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
<li class="first">{_ Strongly Agree _}</li>
</ul>
{% endwith %}
{% validate id=#q1 name=name type={presence} %}
{% if question.is_required %}{% validate id=#q1 name=name type={presence} %}{% endif %}

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<p>{{ question.question|escape }}</p>
<textarea id="{{ #long }}" name="{{ question.name }}">{{ answers[question.name]|escape }}</textarea>

{% validate id=#long name=question.name type={presence} %}
{% if question.is_required %}{% validate id=#long name=question.name type={presence} %}{% endif %}
2 changes: 1 addition & 1 deletion modules/mod_survey/templates/_survey_question_matching.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<option {% if ans == opt %}selected="selected" {% endif %}>{{ opt }}</option>
{% endfor %}
</select>
{% validate id=#match.index name=nm type={presence} %}
{% if question.is_required %}{% validate id=#match.index name=nm type={presence} %}{% endif %}
{% endwith %}
{% endwith %}
</li>
Expand Down
6 changes: 3 additions & 3 deletions modules/mod_survey/templates/_survey_question_narrative.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
{% endif %}
{% if type == "input" %}
<input id="{{ #inp.index }}" name="{{ name }}" length="{{ value }}" style="width: {{ value }}em" value="{{ ans|escape }}" />
{% validate id=#inp.index name=name type={presence} %}
{% if question.is_required %}{% validate id=#inp.index name=name type={presence} %}{% endif %}
{% endif %}
{% if type == "select" %}
<select id="{{ #sel.index }}" name="{{ name }}">
{% for p in value %}
<option {% if p == "" %}disabled="disabled"{% else %}{% if ans == p %}selected="selected"{% endif %}{% endif %}>{{ p|escape }}</option>
{% endfor %}
</select>
{% validate id=#sel.index name=name type={presence} %}
{% if question.is_required %}{% validate id=#sel.index name=name type={presence} %}{% endif %}
{% endif %}
{% endwith %}
{% endfor %}
</p>
</p>
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<p>{{ question.question|escape }}</p>
<input id="{{ #short }}" name="{{ question.name }}" type="text" value="{{ answers[question.name]|escape }}" />

{% validate id=#short name=question.name type={presence} %}
{% if question.is_required %}{% validate id=#short name=question.name type={presence} %}{% endif %}
Loading

0 comments on commit 9a64a2a

Please sign in to comment.