added points and answer type to this module
This commit is contained in:
parent
2c9c57287f
commit
4d57437144
|
@ -17,6 +17,8 @@ function setData(l, length, optionsI, className) {
|
|||
name = "questionnaire_survey[survey_questions_attributes][",
|
||||
optionID = l+"_survey_question_options_attributes_"+optionsI+"_name_translations_",
|
||||
optionName = l+"][survey_question_options_attributes]["+optionsI+"][name_translations]",
|
||||
pointsID = l+"_survey_question_options_attributes_"+optionsI+"_points",
|
||||
pointsName = l+"][survey_question_options_attributes]["+optionsI+"][points]",
|
||||
radiogroupsID = l+"_survey_question_radiogroups_attributes_"+optionsI+"_name_translations_",
|
||||
radiogroupsName = l+"][survey_question_radiogroups_attributes]["+optionsI+"][name_translations]";
|
||||
data = {
|
||||
|
@ -31,9 +33,11 @@ function setData(l, length, optionsI, className) {
|
|||
_type: [id+l+"_type", name+l+"][type]"],
|
||||
_is_required: [id+l+"_is_required", name+l+"][is_required]",false],
|
||||
_option: [id+optionID, name+optionName, "attributes_"+l+"_options_"+optionsI+"_",{"en":"","zh_tw":""}],
|
||||
_points: [id+pointsID, name+pointsName, "attributes_"+l+"_options_"+optionsI+"_"],
|
||||
_radiogroups: [id+radiogroupsID, name+radiogroupsName, "attributes_"+l+"_radiogroups_"+optionsI+"_",{"en":"","zh_tw":""}],
|
||||
_custom_option: [id+l+"_custom_option", name+l+"][custom_option]",false]
|
||||
};
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
|
@ -45,6 +49,8 @@ function setEditData(l, length, d, optionsI, className) {
|
|||
name = "questionnaire_survey[survey_questions_attributes][",
|
||||
optionID = l+"_survey_question_options_attributes_"+optionsI+"_name_translations_",
|
||||
optionName = l+"][survey_question_options_attributes]["+optionsI+"][name_translations]",
|
||||
pointsID = l+"_survey_question_options_attributes_"+optionsI+"_points",
|
||||
pointsName = l+"][survey_question_options_attributes]["+optionsI+"][points]",
|
||||
radiogroupsID = l+"_survey_question_radiogroups_attributes_"+optionsI+"_name_translations_",
|
||||
radiogroupsName = l+"][survey_question_radiogroups_attributes]["+optionsI+"][name_translations]";
|
||||
data = {
|
||||
|
@ -60,6 +66,7 @@ function setEditData(l, length, d, optionsI, className) {
|
|||
_type: [id+l+"_type", name+l+"][type]",d.type],
|
||||
_is_required: [id+l+"_is_required", name+l+"][is_required]",d.is_required],
|
||||
_option: [id+optionID, name+optionName, "attributes_"+l+"_options_"+optionsI+"_"],
|
||||
_points: [id+pointsID, name+pointsName, "attributes_"+l+"_options_"+optionsI+"_", d.points],
|
||||
_radiogroups: [id+radiogroupsID, name+radiogroupsName, "attributes_"+l+"_radiogroups_"+optionsI+"_"],
|
||||
_custom_option: [id+l+"_custom_option", name+l+"][custom_option]",d.custom_option]
|
||||
};
|
||||
|
@ -67,6 +74,7 @@ function setEditData(l, length, d, optionsI, className) {
|
|||
};
|
||||
|
||||
function setEditQuestionAttributes(l, length, d, optionsI, className) {
|
||||
console.log(d);
|
||||
if(!optionsI) {
|
||||
optionsI = 0;
|
||||
}
|
||||
|
@ -76,6 +84,8 @@ function setEditQuestionAttributes(l, length, d, optionsI, className) {
|
|||
optionName = l+"][survey_question_options_attributes]["+optionsI+"][name_translations]",
|
||||
radiogroupsID = l+"_survey_question_radiogroups_attributes_"+optionsI+"_name_translations_",
|
||||
radiogroupsName = l+"][survey_question_radiogroups_attributes]["+optionsI+"][name_translations]",
|
||||
pointsID = l+"_survey_question_options_attributes_"+optionsI+"_points",
|
||||
pointsName = l+"][survey_question_options_attributes]["+optionsI+"][points]",
|
||||
option_id = l+"][survey_question_options_attributes]["+optionsI+"][id]",
|
||||
destroy = l+"][survey_question_options_attributes]["+optionsI+"][_destroy]",
|
||||
radiogroups_id = l+"][survey_question_radiogroups_attributes]["+optionsI+"][id]";
|
||||
|
@ -86,6 +96,7 @@ function setEditQuestionAttributes(l, length, d, optionsI, className) {
|
|||
_className: className,
|
||||
_destroy: [name+destroy],
|
||||
_option: [id+optionID, name+optionName, "attributes_"+l+"_options_"+optionsI+"_", d.name_translations],
|
||||
_points: [id+pointsID, name+pointsName, "attributes_"+l+"_options_"+optionsI+"_", d.points],
|
||||
_radiogroups: [id+radiogroupsID, name+radiogroupsName, "attributes_"+l+"_radiogroups_"+optionsI+"_",d.name_translations],
|
||||
_options_id: [name+option_id,d.qid],
|
||||
_radiogroups_id: [name+radiogroups_id,d.qid]
|
||||
|
|
|
@ -47,7 +47,14 @@ class Admin::SurveysController < OrbitAdminController
|
|||
|
||||
def create
|
||||
@survey = QuestionnaireSurvey.new(survey_params)
|
||||
|
||||
total = 0
|
||||
@survey.survey_questions.each do |ques|
|
||||
ques.survey_question_options.each do |opt|
|
||||
p = (opt.points == nil ? 0 : opt.points) rescue 0
|
||||
total = total + p
|
||||
end
|
||||
end
|
||||
@survey.total_points = total
|
||||
@survey.create_user_id = current_user.id
|
||||
@survey.update_user_id = current_user.id
|
||||
|
||||
|
@ -92,10 +99,21 @@ class Admin::SurveysController < OrbitAdminController
|
|||
uid = params[:id].split('-').last
|
||||
@survey = QuestionnaireSurvey.find_by(:uid=>uid)
|
||||
@survey.update_user_id = current_user.id
|
||||
|
||||
total = 0
|
||||
@survey.survey_questions.each do |ques|
|
||||
ques.survey_question_options.each do |opt|
|
||||
p = (opt.points == nil ? 0 : opt.points) rescue 0
|
||||
total = total + p
|
||||
end
|
||||
end
|
||||
@survey.total_points = total
|
||||
respond_to do |format|
|
||||
if @survey.update_attributes(survey_params)
|
||||
format.html { redirect_to(admin_surveys_url(:page => params[:page])) }
|
||||
if params[:et] == "result"
|
||||
format.html { redirect_to(set_answers_admin_survey_path(@survey.id)) }
|
||||
else
|
||||
format.html { redirect_to(admin_surveys_url(:page => params[:page])) }
|
||||
end
|
||||
format.xml { head :ok }
|
||||
else
|
||||
format.html { render :action => "edit" }
|
||||
|
@ -219,7 +237,12 @@ class Admin::SurveysController < OrbitAdminController
|
|||
end
|
||||
|
||||
def survey_params
|
||||
params.require(:questionnaire_survey).permit!
|
||||
p = params.require(:questionnaire_survey).permit!
|
||||
if !p[:result_criteria].blank?
|
||||
x = p[:result_criteria].collect{|y| y.last}
|
||||
p[:result_criteria] = x
|
||||
end
|
||||
p
|
||||
end
|
||||
|
||||
end
|
|
@ -101,6 +101,7 @@ class SurveysController < ApplicationController
|
|||
uid = params[:id].split('-').last
|
||||
@survey = QuestionnaireSurvey.find_by(:uid=>uid)
|
||||
|
||||
total = 0
|
||||
answer = params[:answer]
|
||||
@answer_model = @survey.survey_answers.new
|
||||
@answer_model.user = current_user.id if !current_user.nil?
|
||||
|
@ -115,7 +116,10 @@ class SurveysController < ApplicationController
|
|||
@answer_model[qid] = answer[qid + '_custom_option']
|
||||
else
|
||||
if answer[qid]
|
||||
@answer_model[qid] = question.survey_question_options.find(answer[qid]).name
|
||||
opt = question.survey_question_options.find(answer[qid])
|
||||
@answer_model[qid] = opt.name
|
||||
p = (opt.points == nil ? 0 : opt.points) rescue 0
|
||||
total = total + p
|
||||
end
|
||||
end
|
||||
when SurveyQuestion::Check
|
||||
|
@ -126,19 +130,23 @@ class SurveysController < ApplicationController
|
|||
if question.custom_option && oid == 'custom_option'
|
||||
@answer_model[qid].push answer[qid + '_custom_option']
|
||||
else
|
||||
@answer_model[qid].push question.survey_question_options.find(oid).name
|
||||
opt = question.survey_question_options.find(oid)
|
||||
@answer_model[qid].push opt.name
|
||||
p = (opt.points == nil ? 0 : opt.points) rescue 0
|
||||
total = total + p
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
when SurveyQuestion::Radiogroup
|
||||
@answer_model[qid] = {}
|
||||
options = Hash[question.survey_question_options.collect{|o| [ o.id.to_s, o.name ] }]
|
||||
options = Hash[question.survey_question_options.collect{|o| [ o.id.to_s, (o.points.nil? ? 0 : o.points) ] }]
|
||||
radiogroups = Hash[question.survey_question_radiogroups.collect{|rg| [ rg.id.to_s, rg.name] }]
|
||||
if answer[qid]
|
||||
answer[qid].each do |oid, value|
|
||||
unless value.blank?
|
||||
@answer_model[qid][oid] = radiogroups[value]
|
||||
total = total + options[oid]
|
||||
else
|
||||
if question.is_required
|
||||
@answer_model.errors.add question.title, t('survey_question.required_error')
|
||||
|
@ -152,14 +160,28 @@ class SurveysController < ApplicationController
|
|||
end
|
||||
end
|
||||
if @answer_model.errors.empty?
|
||||
@answer_model.scored_points = total
|
||||
@answer_model.save!
|
||||
render :answer_success
|
||||
redirect_to OrbitHelper.url_to_show(@survey.to_param) + "?method=answer_success&ans=#{@answer_model.id.to_s}"
|
||||
else
|
||||
@survey_answer_error = @answer_model.errors.full_messages.join(',')
|
||||
render :answer_error
|
||||
end
|
||||
end
|
||||
|
||||
def answer_success
|
||||
|
||||
params = OrbitHelper.params
|
||||
survey = QuestionnaireSurvey.find_by(uid: params[:uid])
|
||||
answer = SurveyAnswer.find(params[:ans])
|
||||
page = Page.where(:page_id => params[:page_id]).first
|
||||
{
|
||||
'survey' => survey,
|
||||
'answer' => answer,
|
||||
'url' => "/#{I18n.locale.to_s}" + page.url
|
||||
}
|
||||
end
|
||||
|
||||
def result
|
||||
params = OrbitHelper.params
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ class QuestionnaireSurvey
|
|||
ResultChart = 0
|
||||
ResultExtern = 1
|
||||
ResultFile = 2
|
||||
ResultCriteria = 3
|
||||
|
||||
scope :can_display, ->{where(is_hidden: false)}
|
||||
|
||||
|
@ -22,10 +23,12 @@ class QuestionnaireSurvey
|
|||
|
||||
field :is_hidden, :type => Boolean, :default => false
|
||||
field :needs_login, :type => Boolean, :default => false
|
||||
field :total_points, type: Integer, :default => 0
|
||||
|
||||
field :result_type, :type => Integer, :default => 0
|
||||
field :extern_link
|
||||
mount_uploader :upload_file, AssetUploader
|
||||
field :result_criteria, type: Array, :default => []
|
||||
|
||||
field :jump_mode, :type => Boolean, :default => false
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ class SurveyAnswer
|
|||
include Mongoid::Timestamps
|
||||
|
||||
field :user, type: BSON::ObjectId
|
||||
field :scored_points, type: Integer, :default => 0
|
||||
|
||||
belongs_to :questionnaire_survey
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ class SurveyQuestionOption
|
|||
|
||||
field :name, :localize => true
|
||||
field :jump_to, :default => 0
|
||||
field :points, :type => Integer, :default => 0
|
||||
|
||||
embedded_in :survey_question
|
||||
end
|
|
@ -88,7 +88,6 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- redirect mode -->
|
||||
<div class="control-group">
|
||||
<label class="control-label muted" for="redirectMode"><%= t('survey.redirect_mode') %></label>
|
||||
|
|
|
@ -170,6 +170,10 @@
|
|||
<i class="icon-trash"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div style="margin-left:10px; display:inline;">
|
||||
<input type="number" name="${_points[1]}" id="${_points[0]}" class="span1" value="${_points[3]}" />
|
||||
<label for="${_points[0]}" class="radio inline" style="padding-left: 5px;">Points</label>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -30,13 +30,14 @@
|
|||
<%= f.select :result_type, {
|
||||
t('survey.chart') => QuestionnaireSurvey::ResultChart,
|
||||
t('survey.extern_link') => QuestionnaireSurvey::ResultExtern,
|
||||
t('survey.upload_file') => QuestionnaireSurvey::ResultFile
|
||||
t('survey.upload_file') => QuestionnaireSurvey::ResultFile,
|
||||
t('survey.criteria') => QuestionnaireSurvey::ResultCriteria
|
||||
}, {}, :class => "tinput-medium", :onchange=>"OnSelectionChange (this)" %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Extern Link -->
|
||||
<div class="control-group <%= (@survey.result_type == 1) ? '' : 'hide' %>" data-type="1">
|
||||
<div class="control-group selectable <%= (@survey.result_type == 1) ? '' : 'hide' %>" data-type="1">
|
||||
<label class="control-label muted" for="account"><%= t('survey.extern_link') %></label>
|
||||
<div class="controls">
|
||||
<%= f.text_field :extern_link, :style=>"width:80%;", :class=>'post-extern_link' %>
|
||||
|
@ -44,7 +45,7 @@
|
|||
</div>
|
||||
|
||||
<!-- Upload_file -->
|
||||
<div class="control-group <%= (@survey.result_type == 2) ? '' : 'hide' %>" data-type="2">
|
||||
<div class="control-group selectable <%= (@survey.result_type == 2) ? '' : 'hide' %>" data-type="2">
|
||||
<label class="control-label muted" for="account"><%= t('survey.upload_file') %></label>
|
||||
<div class="controls">
|
||||
<%= f.file_field :upload_file %>
|
||||
|
@ -58,11 +59,40 @@
|
|||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- points criteria -->
|
||||
<div class="control-group selectable <%= (@survey.result_type == 3) ? '' : 'hide' %>" data-type="3">
|
||||
<label class="control-label muted" for="account"><%= t('survey.criteria') %></label>
|
||||
<div class="controls">
|
||||
<button class="btn btn-small btn-primary" id="add-criteria">Add</button>
|
||||
</div>
|
||||
<div id="criterias" class="controls" style="width:850px;">
|
||||
<% if @survey.result_criteria.blank? %>
|
||||
<div class="criteria-span" style="margin-left:0px;display:block;">
|
||||
<label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][0][]" class="span1" max="<%= @survey.total_points %>" type="number"></label>
|
||||
<label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][0][]" class="span1" max="<%= @survey.total_points %>" type="number"></label>
|
||||
<label for="" class="radio inline">Save to add text</label>
|
||||
</div>
|
||||
<% else %>
|
||||
<% @survey.result_criteria.each_with_index do |criteria, idx| %>
|
||||
<div class="criteria-span" style="margin-left:0px;display:block;margin-bottom:50px;">
|
||||
<label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][<%= idx %>][]" class="span1" max="<%= @survey.total_points %>" type="number" value="<%= criteria[0] %>"></label>
|
||||
<label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][<%= idx %>][]" class="span1" max="<%= @survey.total_points %>" type="number" value="<%= criteria[1] %>"></label>
|
||||
<% if idx != 0 %>
|
||||
<a href="" style="margin-left:5px;" class="btn btn-danger delete-critera"><i class="icon icon-trash"></i></a>
|
||||
<% end %>
|
||||
<label for="" class="radio inline">
|
||||
<textarea class="ckeditor" name="questionnaire_survey[result_criteria][<%= idx %>][]"><%= criteria[2] %></textarea>
|
||||
</label>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %>
|
||||
<%= hidden_field_tag 'et', "result" %>
|
||||
<%= f.submit t('save'), :class=>'btn btn-primary' %>
|
||||
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
|
||||
</div>
|
||||
|
@ -74,21 +104,29 @@
|
|||
<script type="text/javascript">
|
||||
function OnSelectionChange (select) {
|
||||
var selectedOption = select.options[select.selectedIndex];
|
||||
if (selectedOption.value == '1' )
|
||||
{
|
||||
$('.control-group[data-type=1]').removeClass('hide');
|
||||
$('.control-group[data-type=2]').addClass('hide');
|
||||
}
|
||||
else if (selectedOption.value == '2' )
|
||||
{
|
||||
$('.control-group[data-type=2]').removeClass('hide');
|
||||
$('.control-group[data-type=1]').addClass('hide');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.control-group[data-type=1]').addClass('hide');
|
||||
$('.control-group[data-type=2]').addClass('hide');
|
||||
}
|
||||
$(".selectable").addClass("hide");
|
||||
$(".selectable[data-type=" + selectedOption.value + "]").removeClass("hide");
|
||||
}
|
||||
var index = <%= @survey.result_criteria.count == 0 ? 1 : @survey.result_criteria.count + 1 %>,
|
||||
html = '<div data-critera-number="criteria_{index}" class="criteria-span" style="width:800px;"><label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][{index}][]" class="span1" max="<%= @survey.total_points %>" type="number"></label><label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][{index}][]" class="span1" max="<%= @survey.total_points %>" type="number"></label><a href="" style="margin-left:5px;" class="btn btn-primary delete-critera"><i class="icon icon-trash"></i></a><span class="radio inline">Save to add text</span></div>';
|
||||
|
||||
$("#add-criteria").on("click",function(){
|
||||
var newhtml = html.replace(/{index}/g,index);
|
||||
console.log(newhtml);
|
||||
index++;
|
||||
$("#criterias").append(newhtml);
|
||||
return false;
|
||||
})
|
||||
|
||||
$(document).on("click", ".delete-critera" ,function(){
|
||||
$(this).parent().remove();
|
||||
return false;
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,2 +1,15 @@
|
|||
alert("<%= t('survey.answer_success')%>");
|
||||
<% @survey.result_type.inspect %>
|
||||
|
||||
<% if @survey.result_type == 3 %>
|
||||
var scoredPoints = <%= @answer_model.scored_points %>,
|
||||
msg = "";
|
||||
<% @survey.result_criteria.each do |criteria| %>
|
||||
<% if (criteria[0].to_i..criteria[1].to_i).cover?(@answer_model.scored_points) %>
|
||||
msg = "<%= criteria[2] %>";
|
||||
<% end %>
|
||||
<% end %>
|
||||
alert("Your total score is " + scoredPoints + "; " + msg);
|
||||
<% else %>
|
||||
alert("<%= t('survey.answer_success')%>");
|
||||
<% end %>
|
||||
window.location.href = "<%= page_for_survey %>";
|
|
@ -1,4 +1,18 @@
|
|||
<script type="text/javascript">
|
||||
alert("<%= t('survey.answer_success')%>");
|
||||
window.location.href = "<%= page_for_survey %>";
|
||||
</script>
|
||||
<%
|
||||
data = action_data
|
||||
@survey = data['survey']
|
||||
@answer_model = data['answer']
|
||||
%>
|
||||
|
||||
<% if @survey.result_type == 3 %>
|
||||
<h3>Your total score is <%= @answer_model.scored_points %> </h3>
|
||||
<% @survey.result_criteria.each do |criteria| %>
|
||||
<% if (criteria[0].to_i..criteria[1].to_i).cover?(@answer_model.scored_points) %>
|
||||
<div> <%= criteria[2].html_safe %> </div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<h3><%= t('survey.answer_success')%></h3>
|
||||
<% end %>
|
||||
|
||||
<a href="<%= data['url'] %>">Go Back</a>
|
|
@ -145,14 +145,7 @@
|
|||
<%= javascript_include_tag "lib/jquery.form"%>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('form.survey').ajaxForm({
|
||||
beforeSubmit: function(a,f,o) {
|
||||
o.dataType = 'script';
|
||||
},
|
||||
success: function(data) {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
<% if @survey.jump_mode %>
|
||||
var answers = <%== @answers.to_json %>;
|
||||
var jump_tos_map = <%== @jump_tos_map.to_json %>;
|
||||
|
|
|
@ -8,7 +8,7 @@ en:
|
|||
time_range: Date Range
|
||||
write: Write
|
||||
result: Result
|
||||
|
||||
survey_type: Survey Type
|
||||
description: Description
|
||||
postdate: Start Date
|
||||
deadline: End Date
|
||||
|
@ -26,7 +26,7 @@ en:
|
|||
result_type: Result Type (Frontend)
|
||||
extern_link: External Link
|
||||
upload_file: Uploaded File
|
||||
|
||||
criteria: Criteria
|
||||
remove_upload_file: Remove Uploaded File
|
||||
|
||||
answer_success: Successfully answered,jump back now
|
||||
|
|
|
@ -10,7 +10,7 @@ zh_tw:
|
|||
time_range: 問卷期間
|
||||
write: 填問卷
|
||||
result: 結果
|
||||
|
||||
survey_type: Survey Type
|
||||
description: 問卷說明
|
||||
postdate: 開始時間
|
||||
deadline: 結束時間
|
||||
|
@ -25,7 +25,7 @@ zh_tw:
|
|||
taken_by: Taken By
|
||||
taken_date: Taken On
|
||||
view_answers: View Answers
|
||||
|
||||
criteria: Criteria
|
||||
result_type: 前端結果表示方式
|
||||
extern_link: 外部連結
|
||||
upload_file: 結果文件
|
||||
|
|
Loading…
Reference in New Issue