Skip to content

Commit

Permalink
Fix bug: instructor cannot create questionnaire from view.
Browse files Browse the repository at this point in the history
  • Loading branch information
Winbobob committed Aug 24, 2015
1 parent 9098cba commit 0fae547
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 119 deletions.
18 changes: 15 additions & 3 deletions app/controllers/questionnaires_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,21 @@ def toggle_access

#Zhewei: This method is used to add new questions when creating or editing questionnaire.
def add_new_questions
if params[:id] == nil
#which means this questionnaire has not been created, so create questionnaire first
questionnaire_private = params[:private] == "1" ? true : false
display_type = params[:questionnaire_type].split('Questionnaire')[0]
questionnaire = Object.const_get(params[:questionnaire_type]).create(name: params[:questionnaire][:name], instructor_id: session[:user].id, private: questionnaire_private, min_question_score: params[:questionnaire][:min_question_score], max_question_score: params[:questionnaire][:max_question_score], type: params[:questionnaire_type], display_type: display_type)

This comment has been minimized.

Copy link
@yangsong8

yangsong8 Aug 25, 2015

Contributor

Hi zhewei, this line breaks my quiz_creation code. Why do we need a questionnaire object here? Could you give me a phone call?

#Create node
tree_folder = TreeFolder.find_by_name(questionnaire.display_type)
parent = FolderNode.find_by_node_object_id(tree_folder.id)
QuestionnaireNode.create(parent_id: parent.id, node_object_id: questionnaire.id, type: 'QuestionnaireNode')
questionnaire_id = questionnaire.id.to_s
end

questionnaire_id = params[:id] if params[:id] != nil
(1..params[:question][:total_num].to_i).each do |i|
question = Object.const_get(params[:question][:type]).create(txt: 'Edit question content here', questionnaire_id: params[:id], seq: i, type: params[:question][:type], break_before: true)

question = Object.const_get(params[:question][:type]).create(txt: 'Edit question content here', questionnaire_id: questionnaire_id, seq: i, type: params[:question][:type], break_before: true)
if question.is_a? ScoredQuestion
question.weight = 1
question.max_label = 'Strong agree'
Expand All @@ -227,7 +239,7 @@ def add_new_questions
flash[:error] = $!
end
end
redirect_to edit_questionnaire_path(params[:id].to_sym)
redirect_to edit_questionnaire_path(questionnaire_id.to_sym)
end
#=========================================================================================================
#Separate methods for quiz questionnaire
Expand Down
219 changes: 109 additions & 110 deletions app/views/questionnaires/_questionnaire.html.erb
Original file line number Diff line number Diff line change
@@ -1,125 +1,124 @@
<%= error_messages_for 'questionnaire' %>
<!--Zhewei: the reason why we put an empty form_tag here: https://github.com/expertiza/expertiza/blob/53212b6967e9b2d6362d91846bc268ecf1750c6b/app/views/sign_up_sheet/_add_signup_topics_staggered.html.erb-->
<%= form_tag :action => 'add_new_questions' do %>
<% end %>
<%= form_tag :action => 'add_new_questions', :id => params[:id], :questionnaire_type => params[:model], :private => params[:private] do %>
<table>
<tr>
<td valign="top"><label for="questionnaire_name">Name:</label>
<%= text_field 'questionnaire', 'name' %>
<%= hidden_field 'questionnaire', 'id' %>
<%= hidden_field 'questionnaire', 'type' %>
</td>
</tr>
</table>
<br/>
<% if @questionnaire.type == 'QuizQuestionnaire' %>
<!--handle a questionnaire differently if it is a quiz-->
<table id="questions_table">
<% if $disp_flag != 1 %>
<tr>
<td align=left width=300>Questions:</td>
<% if @questionnaire.type != 'QuizQuestionnaire' %><td align=left>weight</td><%end%>

<table>
<tr>
<td valign="top"><label for="questionnaire_name">Name:</label>
<%= text_field 'questionnaire', 'name' %>
<%= hidden_field 'questionnaire', 'id' %>
<%= hidden_field 'questionnaire', 'type' %>
</td>
</tr>
</table>
<br/>
<% if @questionnaire.type == 'QuizQuestionnaire' %>
<!--handle a questionnaire differently if it is a quiz-->
<table id="questions_table">
<% if $disp_flag != 1 %>
<tr>
<td align=left width=300>Questions:</td>
<% if @questionnaire.type != 'QuizQuestionnaire' %><td align=left>weight</td><%end%>
</tr>
<% end %>
</tr>
<% end %>
<% for @question in @questionnaire.questions %>
<% questionnum=@question.id %>
<tr>
<% if $disp_flag != 1 %>
<td > <%= text_area "question[]", 'txt', :cols=>100 %></td>
<% end %>
<% @quiz_question_choices = QuizQuestionChoice.where(question_id: @question.id) %>
<% for @question in @questionnaire.questions %>
<% questionnum=@question.id %>
<tr>
<% if $disp_flag != 1 %>
<td > <%= text_area "question[]", 'txt', :cols=>100 %></td>
<% end %>
<% @quiz_question_choices = QuizQuestionChoice.where(question_id: @question.id) %>
<% @question_type= QuestionType.find_by_question_id(@question.id)%>
</tr>
<% i=1 %>
<% @question_type= QuestionType.find_by_question_id(@question.id)%>
</tr>
<% i=1 %>
<% for @quiz_question_choice in @quiz_question_choices %>
<tr>
<td>
&nbsp;&nbsp;&nbsp;
<% if @question_type.q_type=="MultipleChoiceCheckbox" %>
<%= hidden_field_tag("quiz_question_choices[#{questionnum}][MultipleChoiceCheckbox][#{i}][iscorrect]",'0') %>
<%= check_box_tag("quiz_question_choices[#{questionnum}][MultipleChoiceCheckbox][#{i}][iscorrect]",'1', @quiz_question_choice.iscorrect) %>
&nbsp;<%= text_field "quiz_question_choices[#{questionnum}][MultipleChoiceCheckbox][#{i}]", 'txt', :size=>40 %>
<% for @quiz_question_choice in @quiz_question_choices %>
<tr>
<td>
&nbsp;&nbsp;&nbsp;
<% if @question_type.q_type=="MultipleChoiceCheckbox" %>
<%= hidden_field_tag("quiz_question_choices[#{questionnum}][MultipleChoiceCheckbox][#{i}][iscorrect]",'0') %>
<%= check_box_tag("quiz_question_choices[#{questionnum}][MultipleChoiceCheckbox][#{i}][iscorrect]",'1', @quiz_question_choice.iscorrect) %>
&nbsp;<%= text_field "quiz_question_choices[#{questionnum}][MultipleChoiceCheckbox][#{i}]", 'txt', :size=>40 %>
<% end %>
<% end %>
<%if @question_type.q_type=="MultipleChoiceRadio" %>
<%= radio_button_tag("quiz_question_choices[#{questionnum}][MultipleChoiceRadio][correctindex]", "#{i}", @quiz_question_choice.iscorrect)%>
&nbsp;<%= text_field "quiz_question_choices[#{questionnum}][MultipleChoiceRadio][#{i}]", 'txt', :size=>40 %>
<% end %>
<%if @question_type.q_type=="MultipleChoiceRadio" %>
<%= radio_button_tag("quiz_question_choices[#{questionnum}][MultipleChoiceRadio][correctindex]", "#{i}", @quiz_question_choice.iscorrect)%>
&nbsp;<%= text_field "quiz_question_choices[#{questionnum}][MultipleChoiceRadio][#{i}]", 'txt', :size=>40 %>
<% end %>
<%if @question_type.q_type=="TrueFalse" %>
<% if @quiz_question_choice.txt=="True"%>
<%= radio_button_tag("quiz_question_choices[#{questionnum}][TrueFalse][1][iscorrect]", 'True', @quiz_question_choice.iscorrect) %> True
<%end%>
<%if @question_type.q_type=="TrueFalse" %>
<% if @quiz_question_choice.txt=="True"%>
<%= radio_button_tag("quiz_question_choices[#{questionnum}][TrueFalse][1][iscorrect]", 'True', @quiz_question_choice.iscorrect) %> True
<%end%>
<% if @quiz_question_choice.txt=="False"%>
<%= radio_button_tag("quiz_question_choices[#{questionnum}][TrueFalse][1][iscorrect]", 'False', @quiz_question_choice.iscorrect) %> False
<%end%>
<% end %>
</td>
</tr>
<% i+=1 %> <br>
<%end %>
<% if @quiz_question_choice.txt=="False"%>
<%= radio_button_tag("quiz_question_choices[#{questionnum}][TrueFalse][1][iscorrect]", 'False', @quiz_question_choice.iscorrect) %> False
<%end%>
<% end %>
</td>
</tr>
<% i+=1 %> <br>
<%end %>
<% end %>
</table>
<% else %>
<table>
<tr>
<td>Min question score:</td>
<td><%= text_field 'questionnaire', 'min_question_score', :size=> 1 %>&nbsp;&nbsp;</td>
<td>Max question score:</td>
<td><%= text_field 'questionnaire', 'max_question_score', :size=> 1 %>&nbsp;&nbsp;</td>
<td>Is this <%= @questionnaire.display_type %> private:</td>
<td><%= select(:questionnaire, :private, [ ['no', false],['yes', true]])%>
</td>
</tr>
<% end %>
</table>
<table id="question_actions_table">
<tr>
<td>
<!--Zhewei: the reason why we put an empty form_tag here: https://github.com/expertiza/expertiza/blob/53212b6967e9b2d6362d91846bc268ecf1750c6b/app/views/sign_up_sheet/_add_signup_topics_staggered.html.erb-->
<%= form_tag :action => 'add_new_questions' do %>
<% end %>
<%= form_tag :action => 'add_new_questions', :id => params[:id] do %>
<%= submit_tag 'Add' %>
<%= text_field 'question', 'total_num', :size => 1, :value => "1" %> more
<%= select "question", "type",
{"Criterion" =>"Criterion",
"Scale"=>"Scale",
"Dropdown"=>"Dropdown",
"MultipleChoice"=>"MultipleChoice",
"Checkbox"=>"Checkbox",
"TextArea"=>"TextArea",
"TextField"=>"TextField",
"UploadFile"=>"UploadFile",
"SectionHeader"=>"SectionHeader",
"TableHeader"=>"TableHeader",
"ColumnHeader"=>"ColumnHeader",
} %> question(s)
<% end %>
</td>
</tr>
</table>
<hr/>
<table id="questions_table">
<tr>
<th class="head" align="center" width="30">Action</td>
<th class="head" align="center" width="30">Seq</td>
<th class="head" align="center" width="300">Question</td>
<th class="head" align="center" width="100">Type</td>
<th class="head" align="center">Weight</td>
</tr>
<% else %>
<table>
<tr>
<td>Min question score:</td>
<td><%= text_field 'questionnaire', 'min_question_score', :size=> 1 %>&nbsp;&nbsp;</td>
<td>Max question score:</td>
<td><%= text_field 'questionnaire', 'max_question_score', :size=> 1 %>&nbsp;&nbsp;</td>
<td>Is this <%= @questionnaire.display_type %> private:</td>
<td><%= select(:questionnaire, :private, [ ['no', false],['yes', true]])%>
</td>
</tr>
</table>
<table id="question_actions_table">
<tr>
<td>
<%= submit_tag 'Add' %>
<%= text_field 'question', 'total_num', :size => 1, :value => "1" %> more
<%= select "question", "type",
{"Criterion" =>"Criterion",
"Scale"=>"Scale",
"Dropdown"=>"Dropdown",
"MultipleChoice"=>"MultipleChoice",
"Checkbox"=>"Checkbox",
"TextArea"=>"TextArea",
"TextField"=>"TextField",
"UploadFile"=>"UploadFile",
"SectionHeader"=>"SectionHeader",
"TableHeader"=>"TableHeader",
"ColumnHeader"=>"ColumnHeader",
} %> question(s)
<% end %>
</td>
</tr>
</table>
<hr/>
<table id="questions_table">
<tr>
<th class="head" align="center" width="30">Action</td>
<th class="head" align="center" width="30">Seq</td>
<th class="head" align="center" width="300">Question</td>
<th class="head" align="center" width="100">Type</td>
<th class="head" align="center">Weight</td>
</tr>

<% i = 1 %>
<%questions = @questionnaire.questions.sort { |a,b| a.seq <=> b.seq }%>
<% for @question in questions %>
<%=@question.edit(i)%>
<% i += 1 %>
<% end %>
<%end %>
<% i = 1 %>
<%questions = @questionnaire.questions.sort { |a,b| a.seq <=> b.seq }%>
<% for @question in questions %>
<%=@question.edit(i)%>
<% i += 1 %>
<% end %>
<%end %>
</table>

<BR/>
Expand Down
1 change: 1 addition & 0 deletions app/views/questionnaires/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<%= submit_tag "Save #{@questionnaire.display_type.downcase} questionnaire", :name=>"save" %>
<input style="margin-left:36em" type="submit" name="view_advice" value="Edit/View advice"/>

<hr/>
<h4>Import/Export (from/to CSV format)</h4>
<input type="file" name="csv" />
<font size="-1"&nbsp;&nbsp; Format: {question}, {'Numeric' | 'True/False'}, {1-5} ></font>
Expand Down
9 changes: 3 additions & 6 deletions app/views/questionnaires/new.html.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
<%= form_tag :action => 'create' do %>
<%= render :partial => 'questionnaire' %>
<%= submit_tag "Create #{@questionnaire.display_type.downcase}", :name=>"save" %>
<% end %>
<br />
<a href="javascript:window.history.back()">Back</a>
<%= render :partial => 'questionnaire' %>
<br />
<a href="javascript:window.history.back()">Back</a>

0 comments on commit 0fae547

Please sign in to comment.