diff --git a/app/controllers/poll_controller.rb b/app/controllers/poll_controller.rb index e94b0f132..356a669b7 100644 --- a/app/controllers/poll_controller.rb +++ b/app/controllers/poll_controller.rb @@ -1,9 +1,9 @@ class PollController < ApplicationController - before_filter :find_poll_and_course, :only => [:edit,:update,:destroy,:show,:statistics_result,:create_poll_question] + before_filter :find_poll_and_course, :only => [:edit,:update,:destroy,:show,:statistics_result,:create_poll_question,:commit_poll] before_filter :find_container, :only => [:new,:create, :index] before_filter :is_member_of_course, :only => [:index,:show] before_filter :is_course_teacher, :only => [:new,:create,:edit,:update,:destroy] - + include PollHelper def index if @course @is_teacher = User.current.allowed_to?(:as_teacher,@course) @@ -138,6 +138,85 @@ class PollController < ApplicationController end end + #提交答案 + def commit_answer + pq = PollQuestion.find(params[:poll_question_id]) + if pq.question_type == 1 + #单选题 + pv = PollVote.find_by_poll_question_id_and_user_id(params[:poll_question_id],User.current.id) + if pv.nil? + pv = PollVote.new + pv.user_id = User.current.id + pv.poll_question_id = params[:poll_question_id] + end + pv.poll_answer_id = params[:poll_answer_id] + if pv.save + render :text => "ok" + else + render :text => "failure" + end + elsif pq.question_type == 2 + pv = PollVote.find_by_poll_answer_id_and_user_id(params[:poll_answer_id],User.current.id) + if pv.nil? + pv = PollVote.new + pv.user_id = User.current.id + pv.poll_question_id = params[:poll_question_id] + pv.poll_answer_id = params[:poll_answer_id] + if pv.save + render :text => "true" + else + render :text => "failure" + end + else + if pv.delete + render :text => "false" + else + render :text => "failure" + end + end + elsif pq.question_type == 3 || pq.question_type == 4 + pv = PollVote.find_by_poll_question_id_and_user_id(params[:poll_question_id],User.current.id) + if pv.nil? + pv = PollVote.new + pv.user_id = User.current.id + pv.poll_question_id = params[:poll_question_id] + end + pv.vote_text = params[:vote_text] + if pv.save + render :text => pv.vote_text + else + render :text => "failure" + end + else + + end + + + #respond_to do |format| + # format.js + # format.json + #end + + end + + #提交问卷 + def commit_poll + @uncomplete_question = get_uncomplete_question(@poll) + if @uncomplete_question.count < 1 + pu = get_poll_user(@poll.id,User.current.id) + pu.user_id = User.current.id + pu.poll_id = @poll.id + if pu.save + #redirect_to poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course') + end + else + + end + respond_to do |format| + format.js + end + end + private def find_poll_and_course @poll = Poll.find params[:id] @@ -166,4 +245,25 @@ class PollController < ApplicationController def is_course_teacher render_403 unless(@course && User.current.allowed_to?(:as_teacher,@course)) end + + #获取未完成的题目 + def get_uncomplete_question poll + necessary_questions = poll.poll_questions.where("#{PollQuestion.table_name}.is_necessary = 1") + uncomplete_question = [] + necessary_questions.each do |question| + if question.poll_votes.nil? || question.poll_votes.count < 1 + uncomplete_question << question + end + end + uncomplete_question + end + + #PollUser记录用户是否已提交问卷有对应的记录则已提交,没有则新建一个 + def get_poll_user poll_id,user_id + pu = PollUser.find_by_poll_id_and_user_id(poll_id,user_id) + if pu.nil? + pu = PollUser.new + end + pu + end end \ No newline at end of file diff --git a/app/helpers/poll_helper.rb b/app/helpers/poll_helper.rb new file mode 100644 index 000000000..1c9ecd40f --- /dev/null +++ b/app/helpers/poll_helper.rb @@ -0,0 +1,40 @@ +# encoding: utf-8 +# +# Redmine - project management software +# Copyright (C) 2006-2013 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +module PollHelper + #判断选项是否被选中 + def answer_be_selected?(answer,user) + pv = answer.poll_votes.where("#{PollVote.table_name}.user_id = #{user.id} ") + if !pv.nil? && pv.count > 0 + true + else + false + end + end + + #获取文本题答案 + def get_anwser_vote_text(question_id,user_id) + pv = PollVote.find_by_poll_question_id_and_user_id(question_id,user_id) + if pv.nil? + '' + else + pv.vote_text + end + end +end \ No newline at end of file diff --git a/app/views/poll/_commit_alert.html.erb b/app/views/poll/_commit_alert.html.erb new file mode 100644 index 000000000..007ae5ba7 --- /dev/null +++ b/app/views/poll/_commit_alert.html.erb @@ -0,0 +1,3 @@ +
- - | -