From e876cb09d9c2a5d7a7f20c86ae6ed0209f146467 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 31 Dec 2015 10:28:58 +0800 Subject: [PATCH 01/60] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E7=9A=84controller=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/exercise_controller.rb | 1360 ++++++++++++------------ 1 file changed, 680 insertions(+), 680 deletions(-) diff --git a/app/controllers/exercise_controller.rb b/app/controllers/exercise_controller.rb index 444446ef4..a3e4f89c3 100644 --- a/app/controllers/exercise_controller.rb +++ b/app/controllers/exercise_controller.rb @@ -1,681 +1,681 @@ -class ExerciseController < ApplicationController - layout "base_courses" - - before_filter :find_exercise_and_course, :only => [:create_exercise_question, :edit, :update, :show, :destroy, - :commit_exercise, :commit_answer,:publish_exercise,:republish_exercise, - :show_student_result,:student_exercise_list] - before_filter :find_course, :only => [:index,:new,:create] - include ExerciseHelper - - def index - publish_exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) - publish_exercises.each do |exercise| - exercise.update_column('exercise_status', 2) - course = exercise.course - course.members.each do |m| - exercise.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => 2) - end - end - - if @course.is_public == 0 && !(User.current.member_of_course?(@course)||User.current.admin?) - render_403 - return - end - remove_invalid_exercise(@course) - @is_teacher = User.current.allowed_to?(:as_teacher,@course) - if @is_teacher || User.current.admin? - exercises = @course.exercises.order("created_at asc") - else - exercises = @course.exercises.where("exercise_status <> 1").order("created_at asc") - end - @exercises = paginateHelper exercises,20 #分页 - respond_to do |format| - format.html - end - end - - def show - publish_exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) - publish_exercises.each do |exercise| - exercise.update_column('exercise_status', 2) - course = exercise.course - course.members.each do |m| - exercise.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => 2) - end - end - - unless User.current.member_of_course?(@course) || User.current.admin? - render_403 - return - end - @exercise = Exercise.find params[:id] - @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? - exercise_end = @exercise.end_time > Time.now - if @exercise.time == -1 - @can_edit_excercise = exercise_end - else - @can_edit_excercise = !has_commit_exercise?(@exercise.id,User.current.id)&& exercise_end - end - unless @is_teacher - @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", User.current.id, @exercise.id).first - if @exercise_user.nil? - eu = ExerciseUser.create(:user_id => User.current.id, :exercise_id => @exercise.id, :start_at => Time.now, :status => false) - @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", User.current.id, @exercise.id).first - end - score = calculate_student_score(@exercise, User.current) - @exercise_user.update_attributes(:score => score) - end - # @percent = get_percent(@exercise,User.current) - @exercise_questions = @exercise.exercise_questions - respond_to do |format| - format.html {render :layout => 'base_courses'} - end - #end - end - - def new - option = { - :exercise_name => "", - :course_id => @course.id, - :exercise_status => 1, - :user_id => User.current.id, - :time => "", - :end_time => "", - :publish_time => "", - :exercise_description => "", - :show_result => 1 - } - @exercise = Exercise.create option - if @exercise - redirect_to edit_exercise_url @exercise.id - end - end - - def create - if params[:exercise] - exercise = Exercise.find(params[:exercise_id]) if params[:exercise_id] - exercise ||= Exercise.new - exercise.exercise_name = params[:exercise][:exercise_name] - exercise.exercise_description = params[:exercise][:exercise_description] - exercise.end_time = Time.at(params[:exercise][:end_time].to_time.to_i + 16*60*60 -1) - exercise.publish_time = params[:exercise][:publish_time] - exercise.user_id = User.current.id - exercise.time = params[:exercise][:time] - exercise.course_id = params[:course_id] - exercise.exercise_status = 1 - if exercise.save - @exercise = exercise - respond_to do |format| - format.js - end - end - end - end - - def edit - respond_to do |format| - format.html{render :layout => 'base_courses'} - end - end - - def update - @exercise.exercise_name = params[:exercise][:exercise_name] - @exercise.exercise_description = params[:exercise][:exercise_description] - @exercise.time = params[:exercise][:time].blank? ? -1 : params[:exercise][:time] - @exercise.end_time = Time.at(params[:exercise][:end_time].to_time.to_i + 16*60*60 -1) - @exercise.publish_time = params[:exercise][:publish_time] - @exercise.show_result = params[:exercise][:show_result].blank? ? 1 : params[:exercise][:show_result] - if @exercise.save - respond_to do |format| - format.js - end - else - render_404 - end - end - - def destroy - @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? - if @exercise && @exercise.destroy - if @is_teacher - exercises = Exercise.where("course_id =?", @course.id) - else - exercises = Exercise.where("course_id =? and exercise_status =?", @course.id, 2) - end - @exercises = paginateHelper exercises,20 #分页 - respond_to do |format| - format.js - end - end - end - - # 统计结果 - def statistics_result - @exercise = Exercise.find(params[:id]) - exercise_questions = @exercise.exercise_questions - @exercise_questions = paginateHelper exercise_questions, 5 - respond_to do |format| - format.html{render :layout => 'base_courses'} - end - end - - # 添加题目 - # question_type 1:单选 2:多选 3:填空题 - def create_exercise_question - question_title = params[:question_title].nil? || params[:question_title].empty? ? l(:label_enter_single_title) : params[:question_title] - option = { - :question_title => question_title, - :question_type => params[:question_type] || 1, - :question_number => params[:question_type] == "1"? @exercise.exercise_questions.where("question_type = 1").count + 1 : - (params[:question_type] == "2" ? (@exercise.exercise_questions.where("question_type = 2").count + 1) : - @exercise.exercise_questions.where("question_type = 3").count + 1), - :question_score => params[:question_score] - } - @exercise_questions = @exercise.exercise_questions.new option - # params[:question_answer] 题目选项 - if params[:question_answer] - for i in 1..params[:question_answer].count - answer = (params[:question_answer].values[i-1].nil? || params[:question_answer].values[i-1].empty?) ? l(:label_new_answer) : params[:question_answer].values[i-1] - question_option = { - :choice_position => i, - :choice_text => answer - } - @exercise_questions.exercise_choices.new question_option - end - end - # 如果是插入的话,那么从插入的这个id以后的question_num都将要+1 - if params[:quest_id] - @is_insert = true - if @exercise_questions.question_type == 1 - ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 1).update_all(" question_number = question_number + 1") - #@exercise.exercise_questions.where("question_number > #{params[:quest_num].to_i} and question_type == 1").update_all(" question_number = question_number + 1") - elsif @exercise_questions.question_type == 2 - ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 2).update_all(" question_number = question_number + 1") - else - ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 3).update_all(" question_number = question_number + 1") - end - # @exercise_question_num = params[:quest_num].to_i - @exercise_questions.question_number = params[:quest_num].to_i + 1 - end - if @exercise_questions.save - # params[:exercise_choice] 标准答案参数 - # 问答题标准答案有三个,单独处理 - if @exercise_questions.question_type == 3 - for i in 1..params[:exercise_choice].count - standart_answer = ExerciseStandardAnswer.new - standart_answer.exercise_question_id = @exercise_questions.id - standart_answer.answer_text = params[:exercise_choice].values[i-1] - standart_answer.save - end - else - standart_answer = ExerciseStandardAnswer.new - standart_answer.exercise_question_id = @exercise_questions.id - if @exercise_questions.question_type == 1 - standart_answer.exercise_choice_id = sigle_selection_standard_answer(params[:exercise_choice]) - else - standart_answer.exercise_choice_id = multiselect_standard_answer(params[:exercise_choice]) - end - standart_answer.save - end - respond_to do |format| - format.js - end - end - - end - - # 修改题目 - # params[:exercise_question] The id of exercise_question - # params[:question_answer] eg:A、B、C选项 - def update_exercise_question - @exercise_question = ExerciseQuestion.find params[:exercise_question] - @exercise_question.question_title = params[:question_title].nil? || params[:question_title].empty? ? l(:label_enter_single_title) : params[:question_title] - @exercise_question.question_score = params[:question_score] - # 处理选项:如果选了某个选项,那么则要删除之前的选项 - if params[:question_answer] - @exercise_question.exercise_choices.each do |answer| - answer.destroy unless params[:question_answer].keys.include? answer.id.to_s - end - for i in 1..params[:question_answer].count - question = @exercise_question.exercise_choices.find_by_id params[:question_answer].keys[i-1] - answer = (params[:question_answer].values[i-1].nil? || params[:question_answer].values[i-1].empty?) ? l(:label_new_answer) : params[:question_answer].values[i-1] - if question - question.choice_position = i - question.choice_text = answer - question.save - else - question_option = { - :choice_position => i, - :choice_text => answer - } - @exercise_question.exercise_choices.new question_option - end - end - end - # 更新标准答案 - if params[:exercise_choice] - if @exercise_question.question_type == 3 - # 删除不合理的选项 - @exercise_question.exercise_standard_answers.each do |answer| - answer.destroy unless params[:exercise_choice].keys.include? answer.id.to_s - end - for i in 1..params[:exercise_choice].count - # 找到对应的标准答案 - question_standart = @exercise_question.exercise_standard_answers.find_by_id params[:exercise_choice].keys[i-1] - # 标准答案值 - answer_standart = (params[:exercise_choice].values[i-1].nil? || params[:exercise_choice].values[i-1].empty?) ? l(:label_new_answer) : params[:exercise_choice].values[i-1] - if question_standart - question_standart.answer_text = answer_standart - question_standart.save - else - standart_answer_option = { - :answer_text => answer_standart - } - @exercise_question.exercise_standard_answers.new standart_answer_option - end - end - else - answer_standart = @exercise_question.exercise_standard_answers.first - answer_standart.exercise_choice_id = @exercise_question.question_type == 1 ? sigle_selection_standard_answer(params[:exercise_choice]) : multiselect_standard_answer(params[:exercise_choice]) - answer_standart.save - end - @exercise_question.save - respond_to do |format| - format.js - end - end - end - - # 删除题目 - def delete_exercise_question - @exercise_question = ExerciseQuestion.find params[:exercise_question] - @exercise = @exercise_question.exercise - - if @exercise_question.question_type == 1 - ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 1).update_all(" question_number = question_number - 1") - #@exercise.exercise_questions.where("question_number > #{params[:quest_num].to_i} and question_type == 1").update_all(" question_number = question_number + 1") - elsif @exercise_question.question_type == 2 - ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 2).update_all(" question_number = question_number - 1") - else - ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 3).update_all(" question_number = question_number - 1") - end - # @exercise_question_num = params[:quest_num].to_i - # @exercise_questions.question_number = params[:quest_num].to_i - 1 - # - # exercise_questions = @exercise.exercise_questions.where("question_number > #{@exercise_question.question_number}") - # exercise_questions.each do |question| - # question.question_number -= 1 - # question.save - # end - if @exercise_question && @exercise_question.destroy - respond_to do |format| - format.js - end - end - end - - # 发布试卷 - def publish_exercise - @is_teacher = User.current.allowed_to?(:as_teacher,@course) - @index = params[:index] - @exercise.exercise_status = 2 - @exercise.publish_time = Time.now - if @exercise.save - @exercise.course.members.each do |m| - @exercise.course_messages << CourseMessage.create(:user_id =>m.user_id, :course_id => @exercise.course.id, :viewed => false,:status=>2) - end - #redirect_to exercise_index_url(:course_id=> @course.id) - respond_to do |format| - format.js - end - end - end - - # 重新发布试卷 - # 重新发布的时候会删除所有的答题 - def republish_exercise - @is_teacher = User.current.allowed_to?(:as_teacher,@course) - @index = params[:index] - @exercise.exercise_questions.each do |exercise_question| - exercise_question.exercise_answers.destroy_all - end - @exercise.course_messages.destroy_all - @exercise.exercise_users.destroy_all - @exercise.exercise_status = 1 - @exercise.publish_time = nil - @exercise.save - respond_to do |format| - format.js - end - end - - def student_exercise_list -=begin - if @exercise.end_time <= Time.now - @course.student.each do |student| - if ExerciseUser.where("user_id = ? && exercise_id = ?",student.student_id,@exercise.id).empty? - ExerciseUser.create(:user_id => student.student_id, :exercise_id => @exercise.id, :start_at => @exercise.end_time, :status => true,:score=>0) - end - - s_score = calculate_student_score(@exercise, student.student) - exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", student.student_id, @exercise.id).first - exercise_user.update_attributes(:score => s_score) - end - end -=end - @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? - @all_exercises = @course.exercises.where("exercise_status > 1").order("created_at desc") - @exercise_count = @exercise.exercise_users.where('score is not NULL').count - if @is_teacher || (!@exercise.exercise_users.where(:user_id => User.current.id).empty? && @exercise.end_time <= Time.now) - @exercise_users_list = @exercise.exercise_users.where('score is not NULL') - @show_all = true; - elsif !@exercise.exercise_users.where(:user_id => User.current.id).empty? && @exercise.end_time > Time.now - @exercise_users_list = @exercise.exercise_users.where("user_id = ? and score is not NULL",User.current.id) - else - @exercise_users_list = [] - end - respond_to do |format| - format.html - end - end - - # 学生提交答卷,选中答案的过程中提交 - def commit_answer - eq = ExerciseQuestion.find(params[:exercise_question_id]) - # 已提交过的且是限时的则不允许答题 - if (has_commit_exercise?(@exercise.id,User.current.id) && (!User.current.admin?) && @exercise.time != -1) || @exercise.end_time < Time.now - render :json => {:text => "failure"} - return - end - if eq.question_type == 1 - # 单选题 - ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id],User.current.id) - if ea.nil? - # 尚未答该题,添加答案 - ea = ExerciseAnswer.new - ea.user_id = User.current.id - ea.exercise_question_id = params[:exercise_question_id] - end - #修改该题对应答案 - ea.exercise_choice_id = params[:exercise_choice_id] - if ea.save - # 保存成功返回成功信息及当前以答题百分比 - uncomplete_question = get_uncomplete_question(@exercise, User.current) - if uncomplete_question.count < 1 - complete = 1; - else - complete = 0; - end - @percent = get_percent(@exercise,User.current) - render :json => {:text => "ok" ,:complete => complete,:percent => format("%.2f" ,@percent)} - else - #返回失败信息 - render :json => {:text => "failure"} - end - elsif eq.question_type == 2 - #多选题 - ea = ExerciseAnswer.find_by_exercise_choice_id_and_user_id(params[:exercise_choice_id],User.current.id) - if ea.nil? - #尚未答该题,添加答案 - ea = ExerciseAnswer.new - ea.user_id = User.current.id - ea.exercise_question_id = params[:exercise_question_id] - ea.exercise_choice_id = params[:exercise_choice_id] - if ea.save - uncomplete_question = get_uncomplete_question(@exercise, User.current) - if uncomplete_question.count < 1 - complete = 1; - else - complete = 0; - end - @percent = get_percent(@exercise,User.current) - render :json => {:text => "ok",:complete => complete,:percent => format("%.2f" ,@percent)} - else - render :json => {:text => "failure"} - end - else - #pv不为空,则当前选项之前已被选择,再次点击则是不再选择该项,故删除该答案 - if ea.delete - @percent = get_percent(@exercise, User.current) - render :json => {:text => "false" ,:percent => format("%.2f" , @percent)} - else - render :json => {:text => "failure"} - end - end - elsif eq.question_type == 3 - #单行文本,多行文本题 - ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id], User.current.id) - if ea.nil? - # ea为空之前尚未答题,添加答案 - if params[:answer_text].nil? || params[:answer_text].blank? - #用户提交空答案,视作不作答 - @percent = get_percent(@exercise,User.current) - render :json => {:text => "",:percent => format("%.2f", @percent)} - else - #添加答案 - ea = ExerciseAnswer.new - ea.user_id = User.current.id - ea.exercise_question_id = params[:exercise_question_id] - ea.answer_text = params[:answer_text] - if ea.save - uncomplete_question = get_uncomplete_question(@exercise, User.current) - if uncomplete_question.count < 1 - complete = 1; - else - complete = 0; - end - @percent = get_percent(@exercise,User.current) - render :json => {:text => ea.answer_text,:complete => complete,:percent => format("%.2f",@percent)} - else - render :json => {:text => "failure"} - end - end - else - # ea不为空说明用户之前已作答 - if params[:answer_text].nil? || params[:answer_text].blank? - # 用户提交空答案,视为删除答案 - if ea.delete - @percent = get_percent(@exercise,User.current) - render :json => {:text => "",:percent => format("%.2f", @percent)} - else - render :json => {:text => "failure"} - end - else - #用户修改答案 - ea.answer_text = params[:answer_text] - if ea.save - @percent = get_percent(@exercise,User.current) - render :json => {:text => ea.answer_text,:percent => format("%.2f", @percent)} - else - render :json => {:text => "failure"} - end - end - end - - else - render :json => {:text => "failure"} - end - end - - # 提交问卷 - def commit_exercise - # 老师不需要提交 - if User.current.allowed_to?(:as_teacher,@course) - if @exercise.publish_time.nil? - @exercise.update_attributes(:show_result => params[:show_result]) - @exercise.update_attributes(:exercise_status => 2) - @exercise.update_attributes(:publish_time => Time.now) - course = @exercise.course - course.members.each do |m| - @exercise.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => 2) - end - redirect_to exercise_url(@exercise) - return - elsif @exercise.publish_time > Time.now - @exercise.update_attributes(:show_result => params[:show_result]) - redirect_to exercise_url(@exercise) - return - end - @exercise.update_attributes(:show_result => params[:show_result]) - redirect_to exercise_url(@exercise) - # REDO: 提示提交成功 - else - # 更新提交状态 - cur_exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", User.current, @exercise.id).first - cur_exercise_user.update_attributes(:status => 1) - # 答题过程中需要统计完成量 - @uncomplete_question = get_uncomplete_question(@exercise, User.current) - # 获取改学生的考试得分 - @score = calculate_student_score(@exercise, User.current) - # @score = 100 - if @uncomplete_question.count < 1 - # 查看是否有已提交记录 - cur_exercise_user.score = @score - if cur_exercise_user.save - #redirect_to poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course') - @status = 0 #提交成功 - else - @status = 2 #未知错误 - end - else - @status = 1 #有未做得必答题 - end - @save = params[:save].to_i if params[:save] - respond_to do |format| - format.js - end - end - end - - #查看学生的答卷情况 - def show_student_result - @user = User.find params[:user_id] - @can_edit_excercise = false - @exercise_questions = @exercise.exercise_questions - score = calculate_student_score(@exercise, @user) - eu = get_exercise_user(@exercise.id, @user.id) - eu.update_attributes(:score => score) - @exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", @user.id, @exercise.id).first - respond_to do |format| - format.html {render :layout => 'base_courses'} - end - end - - # 计算学生得分 - def calculate_student_score(exercise, user) - score = 0 - score1 = 0 - score2 = 0 - score3 = 0 - exercise_qustions = exercise.exercise_questions - exercise_qustions.each do |question| - answer = get_user_answer(question, user) - standard_answer = get_user_standard_answer(question, user) - unless answer.empty? - # 问答题有多个答案 - if question.question_type == 3 && !standard_answer.empty? - if standard_answer.include?(answer.first.answer_text) - score1 = score1+ question.question_score unless question.question_score.nil? - end - elsif question.question_type == 1 && !standard_answer.nil? - if answer.first.exercise_choice.choice_position == standard_answer.exercise_choice_id - score2 = score2 + question.question_score unless question.question_score.nil? - end - elsif question.question_type == 2 && !standard_answer.nil? - arr = get_mulscore(question, user) - if arr.to_i == standard_answer.exercise_choice_id - score3 = score3 + question.question_score unless question.question_score.nil? - end - # ecs = ExerciseAnswer.where("user_id =? and exercise_question_id =?", user.id, question.id) - # arr = [] - # ecs.each do |ec| - # arr << ec.exercise_choice.choice_position - # end - # arr.sort - # arr = arr.join("") - # if arr.to_i == standard_answer.exercise_choice_id - # score3 = score + question.question_score unless question.question_score.nil? - # end - end - end - end - score = score1 + score2 + score3 - end - - private - - # ExerciseUser记录用户是否已提交问卷有对应的记录则已提交,没有则新建一个 - def get_exercise_user exercise_id,user_id - eu = ExerciseUser.find_by_exercise_id_and_user_id(exercise_id,user_id) - if eu.nil? - eu = ExerciseUser.new - end - eu - end - - # 获取当前学生回答问题的答案 - def get_user_answer(question,user) - # user_answer = ExerciseAnswer.where("user_id=? and exercise_question_id=?", user.id, question.id).first - user_answer = question.exercise_answers.where("#{ExerciseAnswer.table_name}.user_id = #{user.id}") - user_answer - end - - # 获取问题的标准答案 - def get_user_standard_answer(question,user) - if question.question_type == 3 - standard_answer =[] - question.exercise_standard_answers.each do |answer| - standard_answer << answer.answer_text - end - else - standard_answer = question.exercise_standard_answers.first - end - standard_answer - end - # 是否完成了答题 - def get_complete_question(exercise,user) - questions = exercise.exercise_questions - complete_question = [] - questions.each do |question| - answers = get_user_answer(question,user) - if !(answers.nil? || answers.count < 1) - complete_question << question - end - end - complete_question - end - - # 获取答题百分比 - def get_percent exercise,user - complete_count = get_complete_question(exercise,user).count - if exercise.exercise_questions.count == 0 - return 0 - else - return (complete_count.to_f / exercise.exercise_questions.count.to_f)*100 - end - end - - def remove_invalid_exercise(course) - exercises = course.exercises.where("exercise_name=?","") - unless exercises.empty? - exercises.each do |exercise| - if exercise.exercise_questions.empty? - exercise.destroy - end - end - end - end - - def find_exercise_and_course - @exercise = Exercise.find params[:id] - @course = Course.find @exercise.course_id - rescue Exception => e - render_404 - end - - def find_course - @course = Course.find params[:course_id] - rescue Exception => e - render_404 - end +class ExerciseController < ApplicationController + layout "base_courses" + + before_filter :find_exercise_and_course, :only => [:create_exercise_question, :edit, :update, :show, :destroy, + :commit_exercise, :commit_answer,:publish_exercise,:republish_exercise, + :show_student_result,:student_exercise_list] + before_filter :find_course, :only => [:index,:new,:create] + include ExerciseHelper + + def index + publish_exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) + publish_exercises.each do |exercise| + exercise.update_column('exercise_status', 2) + course = exercise.course + course.members.each do |m| + exercise.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => 2) + end + end + + if @course.is_public == 0 && !(User.current.member_of_course?(@course)||User.current.admin?) + render_403 + return + end + remove_invalid_exercise(@course) + @is_teacher = User.current.allowed_to?(:as_teacher,@course) + if @is_teacher || User.current.admin? + exercises = @course.exercises.order("created_at asc") + else + exercises = @course.exercises.where("exercise_status <> 1").order("created_at asc") + end + @exercises = paginateHelper exercises,20 #分页 + respond_to do |format| + format.html + end + end + + def show + publish_exercises = Exercise.where("publish_time is not null and exercise_status = 1 and publish_time <=?",Time.now) + publish_exercises.each do |exercise| + exercise.update_column('exercise_status', 2) + course = exercise.course + course.members.each do |m| + exercise.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => 2) + end + end + + unless User.current.member_of_course?(@course) || User.current.admin? + render_403 + return + end + @exercise = Exercise.find params[:id] + @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? + exercise_end = @exercise.end_time > Time.now + if @exercise.time == -1 + @can_edit_excercise = exercise_end + else + @can_edit_excercise = !has_commit_exercise?(@exercise.id,User.current.id)&& exercise_end + end + unless @is_teacher + @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", User.current.id, @exercise.id).first + if @exercise_user.nil? + eu = ExerciseUser.create(:user_id => User.current.id, :exercise_id => @exercise.id, :start_at => Time.now, :status => false) + @exercise_user = ExerciseUser.where("user_id=? and exercise_id=?", User.current.id, @exercise.id).first + end + score = calculate_student_score(@exercise, User.current) + @exercise_user.update_attributes(:score => score) + end + # @percent = get_percent(@exercise,User.current) + @exercise_questions = @exercise.exercise_questions + respond_to do |format| + format.html {render :layout => 'base_courses'} + end + #end + end + + def new + option = { + :exercise_name => "", + :course_id => @course.id, + :exercise_status => 1, + :user_id => User.current.id, + :time => "", + :end_time => "", + :publish_time => "", + :exercise_description => "", + :show_result => 1 + } + @exercise = Exercise.create option + if @exercise + redirect_to edit_exercise_url @exercise.id + end + end + + def create + if params[:exercise] + exercise = Exercise.find(params[:exercise_id]) if params[:exercise_id] + exercise ||= Exercise.new + exercise.exercise_name = params[:exercise][:exercise_name] + exercise.exercise_description = params[:exercise][:exercise_description] + exercise.end_time = Time.at(params[:exercise][:end_time].to_time.to_i + 16*60*60 -1) + exercise.publish_time = params[:exercise][:publish_time] + exercise.user_id = User.current.id + exercise.time = params[:exercise][:time] + exercise.course_id = params[:course_id] + exercise.exercise_status = 1 + if exercise.save + @exercise = exercise + respond_to do |format| + format.js + end + end + end + end + + def edit + respond_to do |format| + format.html{render :layout => 'base_courses'} + end + end + + def update + @exercise.exercise_name = params[:exercise][:exercise_name] + @exercise.exercise_description = params[:exercise][:exercise_description] + @exercise.time = params[:exercise][:time].blank? ? -1 : params[:exercise][:time] + @exercise.end_time = Time.at(params[:exercise][:end_time].to_time.to_i + 16*60*60 -1) + @exercise.publish_time = params[:exercise][:publish_time] + @exercise.show_result = params[:exercise][:show_result].blank? ? 1 : params[:exercise][:show_result] + if @exercise.save + respond_to do |format| + format.js + end + else + render_404 + end + end + + def destroy + @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? + if @exercise && @exercise.destroy + if @is_teacher + exercises = Exercise.where("course_id =?", @course.id) + else + exercises = Exercise.where("course_id =? and exercise_status =?", @course.id, 2) + end + @exercises = paginateHelper exercises,20 #分页 + respond_to do |format| + format.js + end + end + end + + # 统计结果 + def statistics_result + @exercise = Exercise.find(params[:id]) + exercise_questions = @exercise.exercise_questions + @exercise_questions = paginateHelper exercise_questions, 5 + respond_to do |format| + format.html{render :layout => 'base_courses'} + end + end + + # 添加题目 + # question_type 1:单选 2:多选 3:填空题 + def create_exercise_question + question_title = params[:question_title].nil? || params[:question_title].empty? ? l(:label_enter_single_title) : params[:question_title] + option = { + :question_title => question_title, + :question_type => params[:question_type] || 1, + :question_number => params[:question_type] == "1"? @exercise.exercise_questions.where("question_type = 1").count + 1 : + (params[:question_type] == "2" ? (@exercise.exercise_questions.where("question_type = 2").count + 1) : + @exercise.exercise_questions.where("question_type = 3").count + 1), + :question_score => params[:question_score] + } + @exercise_questions = @exercise.exercise_questions.new option + # params[:question_answer] 题目选项 + if params[:question_answer] + for i in 1..params[:question_answer].count + answer = (params[:question_answer].values[i-1].nil? || params[:question_answer].values[i-1].empty?) ? l(:label_new_answer) : params[:question_answer].values[i-1] + question_option = { + :choice_position => i, + :choice_text => answer + } + @exercise_questions.exercise_choices.new question_option + end + end + # 如果是插入的话,那么从插入的这个id以后的question_num都将要+1 + if params[:quest_id] + @is_insert = true + if @exercise_questions.question_type == 1 + ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 1).update_all(" question_number = question_number + 1") + #@exercise.exercise_questions.where("question_number > #{params[:quest_num].to_i} and question_type == 1").update_all(" question_number = question_number + 1") + elsif @exercise_questions.question_type == 2 + ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 2).update_all(" question_number = question_number + 1") + else + ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 3).update_all(" question_number = question_number + 1") + end + # @exercise_question_num = params[:quest_num].to_i + @exercise_questions.question_number = params[:quest_num].to_i + 1 + end + if @exercise_questions.save + # params[:exercise_choice] 标准答案参数 + # 问答题标准答案有三个,单独处理 + if @exercise_questions.question_type == 3 + for i in 1..params[:exercise_choice].count + standart_answer = ExerciseStandardAnswer.new + standart_answer.exercise_question_id = @exercise_questions.id + standart_answer.answer_text = params[:exercise_choice].values[i-1] + standart_answer.save + end + else + standart_answer = ExerciseStandardAnswer.new + standart_answer.exercise_question_id = @exercise_questions.id + if @exercise_questions.question_type == 1 + standart_answer.exercise_choice_id = sigle_selection_standard_answer(params[:exercise_choice]) + else + standart_answer.exercise_choice_id = multiselect_standard_answer(params[:exercise_choice]) + end + standart_answer.save + end + respond_to do |format| + format.js + end + end + + end + + # 修改题目 + # params[:exercise_question] The id of exercise_question + # params[:question_answer] eg:A、B、C选项 + def update_exercise_question + @exercise_question = ExerciseQuestion.find params[:exercise_question] + @exercise_question.question_title = params[:question_title].nil? || params[:question_title].empty? ? l(:label_enter_single_title) : params[:question_title] + @exercise_question.question_score = params[:question_score] + # 处理选项:如果选了某个选项,那么则要删除之前的选项 + if params[:question_answer] + @exercise_question.exercise_choices.each do |answer| + answer.destroy unless params[:question_answer].keys.include? answer.id.to_s + end + for i in 1..params[:question_answer].count + question = @exercise_question.exercise_choices.find_by_id params[:question_answer].keys[i-1] + answer = (params[:question_answer].values[i-1].nil? || params[:question_answer].values[i-1].empty?) ? l(:label_new_answer) : params[:question_answer].values[i-1] + if question + question.choice_position = i + question.choice_text = answer + question.save + else + question_option = { + :choice_position => i, + :choice_text => answer + } + @exercise_question.exercise_choices.new question_option + end + end + end + # 更新标准答案 + if params[:exercise_choice] + if @exercise_question.question_type == 3 + # 删除不合理的选项 + @exercise_question.exercise_standard_answers.each do |answer| + answer.destroy unless params[:exercise_choice].keys.include? answer.id.to_s + end + for i in 1..params[:exercise_choice].count + # 找到对应的标准答案 + question_standart = @exercise_question.exercise_standard_answers.find_by_id params[:exercise_choice].keys[i-1] + # 标准答案值 + answer_standart = (params[:exercise_choice].values[i-1].nil? || params[:exercise_choice].values[i-1].empty?) ? l(:label_new_answer) : params[:exercise_choice].values[i-1] + if question_standart + question_standart.answer_text = answer_standart + question_standart.save + else + standart_answer_option = { + :answer_text => answer_standart + } + @exercise_question.exercise_standard_answers.new standart_answer_option + end + end + else + answer_standart = @exercise_question.exercise_standard_answers.first + answer_standart.exercise_choice_id = @exercise_question.question_type == 1 ? sigle_selection_standard_answer(params[:exercise_choice]) : multiselect_standard_answer(params[:exercise_choice]) + answer_standart.save + end + @exercise_question.save + respond_to do |format| + format.js + end + end + end + + # 删除题目 + def delete_exercise_question + @exercise_question = ExerciseQuestion.find params[:exercise_question] + @exercise = @exercise_question.exercise + + if @exercise_question.question_type == 1 + ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 1).update_all(" question_number = question_number - 1") + #@exercise.exercise_questions.where("question_number > #{params[:quest_num].to_i} and question_type == 1").update_all(" question_number = question_number + 1") + elsif @exercise_question.question_type == 2 + ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 2).update_all(" question_number = question_number - 1") + else + ExerciseQuestion.where("question_number>? and question_type=?",params[:quest_num].to_i, 3).update_all(" question_number = question_number - 1") + end + # @exercise_question_num = params[:quest_num].to_i + # @exercise_questions.question_number = params[:quest_num].to_i - 1 + # + # exercise_questions = @exercise.exercise_questions.where("question_number > #{@exercise_question.question_number}") + # exercise_questions.each do |question| + # question.question_number -= 1 + # question.save + # end + if @exercise_question && @exercise_question.destroy + respond_to do |format| + format.js + end + end + end + + # 发布试卷 + def publish_exercise + @is_teacher = User.current.allowed_to?(:as_teacher,@course) + @index = params[:index] + @exercise.exercise_status = 2 + @exercise.publish_time = Time.now + if @exercise.save + @exercise.course.members.each do |m| + @exercise.course_messages << CourseMessage.create(:user_id =>m.user_id, :course_id => @exercise.course.id, :viewed => false,:status=>2) + end + #redirect_to exercise_index_url(:course_id=> @course.id) + respond_to do |format| + format.js + end + end + end + + # 重新发布试卷 + # 重新发布的时候会删除所有的答题 + def republish_exercise + @is_teacher = User.current.allowed_to?(:as_teacher,@course) + @index = params[:index] + @exercise.exercise_questions.each do |exercise_question| + exercise_question.exercise_answers.destroy_all + end + @exercise.course_messages.destroy_all + @exercise.exercise_users.destroy_all + @exercise.exercise_status = 1 + @exercise.publish_time = nil + @exercise.save + respond_to do |format| + format.js + end + end + + def student_exercise_list +=begin + if @exercise.end_time <= Time.now + @course.student.each do |student| + if ExerciseUser.where("user_id = ? && exercise_id = ?",student.student_id,@exercise.id).empty? + ExerciseUser.create(:user_id => student.student_id, :exercise_id => @exercise.id, :start_at => @exercise.end_time, :status => true,:score=>0) + end + + s_score = calculate_student_score(@exercise, student.student) + exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", student.student_id, @exercise.id).first + exercise_user.update_attributes(:score => s_score) + end + end +=end + @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? + @all_exercises = @course.exercises.where("exercise_status > 1").order("created_at desc") + @exercise_count = @exercise.exercise_users.where('score is not NULL').count + if @is_teacher || (!@exercise.exercise_users.where(:user_id => User.current.id).empty? && @exercise.end_time <= Time.now) + @exercise_users_list = @exercise.exercise_users.where('score is not NULL') + @show_all = true; + elsif !@exercise.exercise_users.where(:user_id => User.current.id).empty? && @exercise.end_time > Time.now + @exercise_users_list = @exercise.exercise_users.where("user_id = ? and score is not NULL",User.current.id) + else + @exercise_users_list = [] + end + respond_to do |format| + format.html + end + end + + # 学生提交答卷,选中答案的过程中提交 + def commit_answer + eq = ExerciseQuestion.find(params[:exercise_question_id]) + # 已提交过的且是限时的则不允许答题 + if (has_commit_exercise?(@exercise.id,User.current.id) && (!User.current.admin?) && @exercise.time != -1) || @exercise.end_time < Time.now + render :json => {:text => "failure"} + return + end + if eq.question_type == 1 + # 单选题 + ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id],User.current.id) + if ea.nil? + # 尚未答该题,添加答案 + ea = ExerciseAnswer.new + ea.user_id = User.current.id + ea.exercise_question_id = params[:exercise_question_id] + end + #修改该题对应答案 + ea.exercise_choice_id = params[:exercise_choice_id] + if ea.save + # 保存成功返回成功信息及当前以答题百分比 + uncomplete_question = get_uncomplete_question(@exercise, User.current) + if uncomplete_question.count < 1 + complete = 1; + else + complete = 0; + end + @percent = get_percent(@exercise,User.current) + render :json => {:text => "ok" ,:complete => complete,:percent => format("%.2f" ,@percent)} + else + #返回失败信息 + render :json => {:text => "failure"} + end + elsif eq.question_type == 2 + #多选题 + ea = ExerciseAnswer.find_by_exercise_choice_id_and_user_id(params[:exercise_choice_id],User.current.id) + if ea.nil? + #尚未答该题,添加答案 + ea = ExerciseAnswer.new + ea.user_id = User.current.id + ea.exercise_question_id = params[:exercise_question_id] + ea.exercise_choice_id = params[:exercise_choice_id] + if ea.save + uncomplete_question = get_uncomplete_question(@exercise, User.current) + if uncomplete_question.count < 1 + complete = 1; + else + complete = 0; + end + @percent = get_percent(@exercise,User.current) + render :json => {:text => "ok",:complete => complete,:percent => format("%.2f" ,@percent)} + else + render :json => {:text => "failure"} + end + else + #pv不为空,则当前选项之前已被选择,再次点击则是不再选择该项,故删除该答案 + if ea.delete + @percent = get_percent(@exercise, User.current) + render :json => {:text => "false" ,:percent => format("%.2f" , @percent)} + else + render :json => {:text => "failure"} + end + end + elsif eq.question_type == 3 + #单行文本,多行文本题 + ea = ExerciseAnswer.find_by_exercise_question_id_and_user_id(params[:exercise_question_id], User.current.id) + if ea.nil? + # ea为空之前尚未答题,添加答案 + if params[:answer_text].nil? || params[:answer_text].blank? + #用户提交空答案,视作不作答 + @percent = get_percent(@exercise,User.current) + render :json => {:text => "",:percent => format("%.2f", @percent)} + else + #添加答案 + ea = ExerciseAnswer.new + ea.user_id = User.current.id + ea.exercise_question_id = params[:exercise_question_id] + ea.answer_text = params[:answer_text] + if ea.save + uncomplete_question = get_uncomplete_question(@exercise, User.current) + if uncomplete_question.count < 1 + complete = 1; + else + complete = 0; + end + @percent = get_percent(@exercise,User.current) + render :json => {:text => ea.answer_text,:complete => complete,:percent => format("%.2f",@percent)} + else + render :json => {:text => "failure"} + end + end + else + # ea不为空说明用户之前已作答 + if params[:answer_text].nil? || params[:answer_text].blank? + # 用户提交空答案,视为删除答案 + if ea.delete + @percent = get_percent(@exercise,User.current) + render :json => {:text => "",:percent => format("%.2f", @percent)} + else + render :json => {:text => "failure"} + end + else + #用户修改答案 + ea.answer_text = params[:answer_text] + if ea.save + @percent = get_percent(@exercise,User.current) + render :json => {:text => ea.answer_text,:percent => format("%.2f", @percent)} + else + render :json => {:text => "failure"} + end + end + end + + else + render :json => {:text => "failure"} + end + end + + # 提交问卷 + def commit_exercise + # 老师不需要提交 + if User.current.allowed_to?(:as_teacher,@course) + if @exercise.publish_time.nil? + @exercise.update_attributes(:show_result => params[:show_result]) + @exercise.update_attributes(:exercise_status => 2) + @exercise.update_attributes(:publish_time => Time.now) + course = @exercise.course + course.members.each do |m| + @exercise.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => 2) + end + redirect_to exercise_url(@exercise) + return + elsif @exercise.publish_time > Time.now + @exercise.update_attributes(:show_result => params[:show_result]) + redirect_to exercise_url(@exercise) + return + end + @exercise.update_attributes(:show_result => params[:show_result]) + redirect_to exercise_url(@exercise) + # REDO: 提示提交成功 + else + # 更新提交状态 + cur_exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", User.current, @exercise.id).first + cur_exercise_user.update_attributes(:status => 1) + # 答题过程中需要统计完成量 + @uncomplete_question = get_uncomplete_question(@exercise, User.current) + # 获取改学生的考试得分 + @score = calculate_student_score(@exercise, User.current) + # @score = 100 + if @uncomplete_question.count < 1 + # 查看是否有已提交记录 + cur_exercise_user.score = @score + if cur_exercise_user.save + #redirect_to poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course') + @status = 0 #提交成功 + else + @status = 2 #未知错误 + end + else + @status = 1 #有未做得必答题 + end + @save = params[:save].to_i if params[:save] + respond_to do |format| + format.js + end + end + end + + #查看学生的答卷情况 + def show_student_result + @user = User.find params[:user_id] + @can_edit_excercise = false + @exercise_questions = @exercise.exercise_questions + score = calculate_student_score(@exercise, @user) + eu = get_exercise_user(@exercise.id, @user.id) + eu.update_attributes(:score => score) + @exercise_user = ExerciseUser.where("user_id =? and exercise_id=?", @user.id, @exercise.id).first + respond_to do |format| + format.html {render :layout => 'base_courses'} + end + end + + # 计算学生得分 + def calculate_student_score(exercise, user) + score = 0 + score1 = 0 + score2 = 0 + score3 = 0 + exercise_qustions = exercise.exercise_questions + exercise_qustions.each do |question| + answer = get_user_answer(question, user) + standard_answer = get_user_standard_answer(question, user) + unless answer.empty? + # 问答题有多个答案 + if question.question_type == 3 && !standard_answer.empty? + if standard_answer.include?(answer.first.answer_text) + score1 = score1+ question.question_score unless question.question_score.nil? + end + elsif question.question_type == 1 && !standard_answer.nil? + if answer.first.exercise_choice.choice_position == standard_answer.exercise_choice_id + score2 = score2 + question.question_score unless question.question_score.nil? + end + elsif question.question_type == 2 && !standard_answer.nil? + arr = get_mulscore(question, user) + if arr.to_i == standard_answer.exercise_choice_id + score3 = score3 + question.question_score unless question.question_score.nil? + end + # ecs = ExerciseAnswer.where("user_id =? and exercise_question_id =?", user.id, question.id) + # arr = [] + # ecs.each do |ec| + # arr << ec.exercise_choice.choice_position + # end + # arr.sort + # arr = arr.join("") + # if arr.to_i == standard_answer.exercise_choice_id + # score3 = score + question.question_score unless question.question_score.nil? + # end + end + end + end + score = score1 + score2 + score3 + end + + private + + # ExerciseUser记录用户是否已提交问卷有对应的记录则已提交,没有则新建一个 + def get_exercise_user exercise_id,user_id + eu = ExerciseUser.find_by_exercise_id_and_user_id(exercise_id,user_id) + if eu.nil? + eu = ExerciseUser.new + end + eu + end + + # 获取当前学生回答问题的答案 + def get_user_answer(question,user) + # user_answer = ExerciseAnswer.where("user_id=? and exercise_question_id=?", user.id, question.id).first + user_answer = question.exercise_answers.where("#{ExerciseAnswer.table_name}.user_id = #{user.id}") + user_answer + end + + # 获取问题的标准答案 + def get_user_standard_answer(question,user) + if question.question_type == 3 + standard_answer =[] + question.exercise_standard_answers.each do |answer| + standard_answer << answer.answer_text + end + else + standard_answer = question.exercise_standard_answers.first + end + standard_answer + end + # 是否完成了答题 + def get_complete_question(exercise,user) + questions = exercise.exercise_questions + complete_question = [] + questions.each do |question| + answers = get_user_answer(question,user) + if !(answers.nil? || answers.count < 1) + complete_question << question + end + end + complete_question + end + + # 获取答题百分比 + def get_percent exercise,user + complete_count = get_complete_question(exercise,user).count + if exercise.exercise_questions.count == 0 + return 0 + else + return (complete_count.to_f / exercise.exercise_questions.count.to_f)*100 + end + end + + def remove_invalid_exercise(course) + exercises = course.exercises.where("exercise_name=?","") + unless exercises.empty? + exercises.each do |exercise| + if exercise.exercise_questions.empty? + exercise.destroy + end + end + end + end + + def find_exercise_and_course + @exercise = Exercise.find params[:id] + @course = Course.find @exercise.course_id + rescue Exception => e + render_404 + end + + def find_course + @course = Course.find params[:course_id] + rescue Exception => e + render_404 + end end \ No newline at end of file From dae07d7e927b49d507a6cb027b01ab9968dcb4b8 Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Mon, 4 Jan 2016 11:11:42 +0800 Subject: [PATCH 02/60] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=AF=B9=E9=BD=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_org.html.erb | 2 +- app/views/organizations/_show_home_page.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/base_org.html.erb b/app/views/layouts/base_org.html.erb index 8599ad750..f6961993f 100644 --- a/app/views/layouts/base_org.html.erb +++ b/app/views/layouts/base_org.html.erb @@ -140,7 +140,7 @@ <%= render :partial => "organizations/org_left_subfield_list", :locals => {:organization => @organization} %> -
+
<%= render_flash_messages %> <%= yield %> <%= call_hook :view_layouts_base_content %> diff --git a/app/views/organizations/_show_home_page.html.erb b/app/views/organizations/_show_home_page.html.erb index c80c52b2f..7178cfe1d 100644 --- a/app/views/organizations/_show_home_page.html.erb +++ b/app/views/organizations/_show_home_page.html.erb @@ -1,4 +1,4 @@ -
+
From 8dd34f91c3b799e56f0cd6c646f4d679fda56e3f Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Mon, 4 Jan 2016 15:12:38 +0800 Subject: [PATCH 03/60] =?UTF-8?q?=E8=AF=BE=E7=A8=8B/=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=85=B3=E8=81=94=E7=BB=84=E7=BB=87=EF=BC=8C?= =?UTF-8?q?=E4=BB=85=E5=85=B3=E8=81=94=E7=94=A8=E6=88=B7=E7=9A=84=E7=BB=84?= =?UTF-8?q?=E7=BB=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 18 ++++++++++-------- app/controllers/projects_controller.rb | 21 +++++++++++---------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 57e365aff..3e31a8571 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -38,14 +38,16 @@ class CoursesController < ApplicationController end limit = 15 course_org_ids = OrgCourse.find_by_sql("select distinct organization_id from org_courses where course_id = #{params[:id]}").map(&:organization_id) - if course_org_ids.empty? - @orgs_not_in_course = Organization.where("(is_public or creator_id =?) and name like ?",User.current.id, condition).page((params[:page].to_i || 1)).per(limit) - @org_count = Organization.where("is_public = 1 or creator_id =?", User.current.id).where("name like ?", condition).count - else - course_org_ids = "(" + course_org_ids.join(',') + ")" - @orgs_not_in_course = Organization.where("id not in #{course_org_ids} and (is_public = 1 or creator_id =?) and name like ?", User.current.id, condition).page((params[:page].to_i || 1)).per(limit) - @org_count = Organization.where("id not in #{course_org_ids} and (is_public = 1 or creator_id =?)", User.current.id).where("name like ?", condition).count - end + @orgs_not_in_course = User.current.organizations.where("organizations.id not in (#{course_org_ids.join(',')}) and organizations.name like ?", condition).page(params[:page].to_i || 1).per(limit) + @org_count = User.current.organizations.where("organizations.id not in (#{course_org_ids.join(',')}) and organizations.name like ?", condition).count + # if course_org_ids.empty? + # @orgs_not_in_course = Organization.where("(is_public or creator_id =?) and name like ?",User.current.id, condition).page((params[:page].to_i || 1)).per(limit) + # @org_count = Organization.where("is_public = 1 or creator_id =?", User.current.id).where("name like ?", condition).count + # else + # course_org_ids = "(" + course_org_ids.join(',') + ")" + # @orgs_not_in_course = Organization.where("id not in #{course_org_ids} and (is_public = 1 or creator_id =?) and name like ?", User.current.id, condition).page((params[:page].to_i || 1)).per(limit) + # @org_count = Organization.where("id not in #{course_org_ids} and (is_public = 1 or creator_id =?)", User.current.id).where("name like ?", condition).count + # end # @course_count = Project.course_entities.visible.like(params[:name]).page(params[:page]).count @orgs_page = Paginator.new @org_count, limit,params[:page] @hint_flag = params[:hint_flag] diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index ccebdccfa..31c70e92a 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -76,16 +76,17 @@ class ProjectsController < ApplicationController condition = "%#{params[:name].strip}%".gsub(" ","") end limit = 15 - project_org_ids = OrgProject.find_by_sql("select distinct organization_id from org_projects where project_id = #{params[:id]}").map(&:organization_id) - if project_org_ids.empty? - @orgs_not_in_project = Organization.where("(is_public or creator_id =?) = 1 and name like ?",User.current.id, condition).page((params[:page].to_i || 1)).per(limit) - @org_count = Organization.where("is_public = 1 or creator_id =?", User.current.id).where("name like ?", condition).count - else - project_org_ids = "(" + project_org_ids.join(',') + ")" - @orgs_not_in_project = Organization.where("id not in #{project_org_ids} and (is_public = 1 or creator_id =?) and name like ?", User.current.id, condition).page((params[:page].to_i || 1)).per(limit) - @org_count = Organization.where("id not in #{project_org_ids} and (is_public = 1 or creator_id =?)", User.current.id).where("name like ?", condition).count - end - # @project_count = Project.project_entities.visible.like(params[:name]).page(params[:page]).count + project_org_ids = OrgProject.find_by_sql("select distinct organization_id from org_projects where project_id = #{params[:id]}").map(&:organization_id) << 0 + @orgs_not_in_project = User.current.organizations.where("organizations.id not in (#{project_org_ids.join(',')}) and organizations.name like ?", condition).page(params[:page].to_i || 1).per(limit) + @org_count = User.current.organizations.where("organizations.id not in (#{project_org_ids.join(',')}) and organizations.name like '#{condition}'").count + # if project_org_ids.empty? + # @orgs_not_in_project = Organization.where("(is_public or creator_id =?) = 1 and name like ?",User.current.id, condition).page((params[:page].to_i || 1)).per(limit) + # @org_count = Organization.where("is_public = 1 or creator_id =?", User.current.id).where("name like ?", condition).count + # else + # project_org_ids = "(" + project_org_ids.join(',') + ")" + # @orgs_not_in_project = Organization.where("id not in #{project_org_ids} and (is_public = 1 or creator_id =?) and name like ?", User.current.id, condition).page((params[:page].to_i || 1)).per(limit) + # @org_count = Organization.where("id not in #{project_org_ids} and (is_public = 1 or creator_id =?)", User.current.id).where("name like ?", condition).count + # end @orgs_page = Paginator.new @org_count, limit,params[:page] @no_roll_hint = params[:hint_flag] #render :json => {:orgs => @orgs_not_in_project, :count => @org_count}.to_json From abf6b5ff70f4f93ec1ed13c173448dd1b5c48bb9 Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Mon, 4 Jan 2016 15:36:02 +0800 Subject: [PATCH 04/60] =?UTF-8?q?=E8=A7=A3=E5=86=B3base=5Forg=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E8=B5=84=E6=BA=90=E6=8C=89=E9=92=AE=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E4=B8=8A=E4=BC=A0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...g_subfield_upload_attachment_list.html.erb | 34 +++++++++++++++++++ .../files/_upload_subfield_file.html.erb | 4 +-- 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 app/views/files/_org_subfield_upload_attachment_list.html.erb diff --git a/app/views/files/_org_subfield_upload_attachment_list.html.erb b/app/views/files/_org_subfield_upload_attachment_list.html.erb new file mode 100644 index 000000000..efb5f64fb --- /dev/null +++ b/app/views/files/_org_subfield_upload_attachment_list.html.erb @@ -0,0 +1,34 @@ + + + <%= file_field_tag 'attachments[dummy][file]', + :id => "_file#{container.id}", + :class => ie8? ? '':'file_selector', + :multiple => true, + :onchange => "addInputFiles_board(this, '#{container.id}','"+"submit_resource"+"');", + :style => ie8? ? '': 'display:none', + :data => { + :max_file_size => Setting.attachment_max_size.to_i.kilobytes, + :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), + :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, + :upload_path => uploads_path(:format => 'js'), + :description_placeholder => l(:label_optional_description), + :field_is_public => l(:field_is_public), + :are_you_sure => l(:text_are_you_sure), + :file_count => l(:label_file_count), + :delete_all_files => l(:text_are_you_sure_all), + :lebel_file_uploding => l(:lebel_file_uploding), + :containerid => "#{container.id}" + } %> + + + + + <%= l(:label_no_file_uploaded)%> + +(<%= l(:label_max_size) %>: +<%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) +
+
+ + +
\ No newline at end of file diff --git a/app/views/files/_upload_subfield_file.html.erb b/app/views/files/_upload_subfield_file.html.erb index 33e4ce97c..20c29f238 100644 --- a/app/views/files/_upload_subfield_file.html.erb +++ b/app/views/files/_upload_subfield_file.html.erb @@ -17,8 +17,8 @@ <% else %> <% end %> - - <%= render :partial => 'files/attachement_list'%> + + <%= render :partial => 'files/org_subfield_upload_attachment_list', :locals => {:container => org_subfield}%>
<%= l(:button_cancel)%> <%= l(:button_confirm)%> From d8c6775f42a6435cbb8d3825c0e5591a98daa9ba Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Tue, 5 Jan 2016 16:46:06 +0800 Subject: [PATCH 05/60] =?UTF-8?q?1.=E8=A7=A3=E5=86=B3=E2=80=9C=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=8A=A8=E6=80=81=E4=B8=AD=E7=9A=84=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=8A=A8=E6=80=81=EF=BC=8C=E8=AF=84=E5=88=86=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E4=B8=8D=E8=83=BD=E5=85=B3=E9=97=AD=20?= =?UTF-8?q?=E2=80=9D=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=202.=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E7=94=B3=E8=AF=B7=E5=AD=90=E5=9F=9F=E5=90=8D=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/organizations_controller.rb | 18 ++++++++- app/models/org_message.rb | 15 +++++++ .../_set_evalutation_att.html.erb | 2 +- .../homework_common/score_rule_set.js.erb | 2 +- .../start_evaluation_set.js.erb | 2 +- .../agree_apply_subdomain.js.erb | 1 + .../organizations/apply_subdomain.js.erb | 0 app/views/organizations/setting.html.erb | 29 ++++++++++---- .../_set_score_rule_detail.html.erb | 2 +- app/views/users/_user_message_org.html.erb | 39 +++++++++++++++++++ app/views/users/user_messages.html.erb | 2 + app/views/users/user_organizations.html.erb | 6 ++- config/routes.rb | 5 +++ .../20160105014033_create_org_messages.rb | 19 +++++++++ 14 files changed, 128 insertions(+), 14 deletions(-) create mode 100644 app/models/org_message.rb create mode 100644 app/views/organizations/agree_apply_subdomain.js.erb create mode 100644 app/views/organizations/apply_subdomain.js.erb create mode 100644 app/views/users/_user_message_org.html.erb create mode 100644 db/migrate/20160105014033_create_org_messages.rb diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb index dabf45da8..3c5266f79 100644 --- a/app/controllers/organizations_controller.rb +++ b/app/controllers/organizations_controller.rb @@ -28,7 +28,7 @@ class OrganizationsController < ApplicationController helper :project_score helper :issues include UsersHelper - before_filter :find_organization, :only => [:show, :members] + before_filter :find_organization, :only => [:show, :members, :apply_subdomain] layout 'base_org' def index @@ -291,4 +291,20 @@ class OrganizationsController < ApplicationController @org_subfield = OrgSubfield.find(params[:org_subfield_id]) @org_subfield.update_attribute(:hide, 0) end + + def apply_subdomain + @organization = Organization.find(params[:id]) + admins = User.where("admin=1") + admins.each do |admin| + OrgMessage.create(:user_id => admin.id, :organization_id => @organization.id, :message_type => 'ApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:domain]) + end + end + + def agree_apply_subdomain + @organization = Organization.find(params[:organization_id]) + @organization.update_attribute(:domain, params[:org_domain]) + if OrgMessage.where("message_type='AgreeApplySubdomain' and organization_id=#{@organization.id} and content=#{params[:org_domain]}").count == 0 + OrgMessage.create(:user_id => params[:user_id], :organization_id => @organization.id, :message_type => 'AgreeApplySubdomain', :message_id => @organization.id, :sender_id => User.current.id, :viewed => 0, :content => params[:org_domain]) + end + end end diff --git a/app/models/org_message.rb b/app/models/org_message.rb new file mode 100644 index 000000000..baedc77f4 --- /dev/null +++ b/app/models/org_message.rb @@ -0,0 +1,15 @@ +class OrgMessage < ActiveRecord::Base + belongs_to :user + belongs_to :organization + has_many :message_alls, :as => :message, :dependent => :destroy + validates :message_type, :presence => true + validates :message_id, :presence => true + validates :organization_id, :presence => true + after_create :add_user_message + + def add_user_message + if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil? + self.message_alls << MessageAll.new(:user_id => self.user_id) + end + end +end \ No newline at end of file diff --git a/app/views/homework_common/_set_evalutation_att.html.erb b/app/views/homework_common/_set_evalutation_att.html.erb index 59df88680..bc4e8e733 100644 --- a/app/views/homework_common/_set_evalutation_att.html.erb +++ b/app/views/homework_common/_set_evalutation_att.html.erb @@ -45,7 +45,7 @@ 确定
diff --git a/app/views/homework_common/score_rule_set.js.erb b/app/views/homework_common/score_rule_set.js.erb index 7fae1ecdc..da685b758 100644 --- a/app/views/homework_common/score_rule_set.js.erb +++ b/app/views/homework_common/score_rule_set.js.erb @@ -2,5 +2,5 @@ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/se showModal('ajax-modal', '350px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + - ""); + ""); $('#ajax-modal').parent().css("top","25%").css("left","35%").css("position","fixed"); \ No newline at end of file diff --git a/app/views/homework_common/start_evaluation_set.js.erb b/app/views/homework_common/start_evaluation_set.js.erb index 2a260dc4d..659441ce8 100644 --- a/app/views/homework_common/start_evaluation_set.js.erb +++ b/app/views/homework_common/start_evaluation_set.js.erb @@ -3,7 +3,7 @@ var datepickerOptions={dateFormat: 'yy-mm-dd', firstDay: 0, showOn: 'button', bu showModal('ajax-modal', '350px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + -""); +""); $('#ajax-modal').parent().css("top","25%").css("left","35%").css("position","fixed"); $(function() { $('#evaluation_start_time').datepicker(datepickerOptions); $('#evaluation_end_time').datepicker(datepickerOptions); diff --git a/app/views/organizations/agree_apply_subdomain.js.erb b/app/views/organizations/agree_apply_subdomain.js.erb new file mode 100644 index 000000000..df25d018c --- /dev/null +++ b/app/views/organizations/agree_apply_subdomain.js.erb @@ -0,0 +1 @@ +$("#agree_apply_subdomain").text("已同意申请"); \ No newline at end of file diff --git a/app/views/organizations/apply_subdomain.js.erb b/app/views/organizations/apply_subdomain.js.erb new file mode 100644 index 000000000..e69de29bb diff --git a/app/views/organizations/setting.html.erb b/app/views/organizations/setting.html.erb index 3058d03a8..77cfdc985 100644 --- a/app/views/organizations/setting.html.erb +++ b/app/views/organizations/setting.html.erb @@ -54,14 +54,14 @@
- - - - - - - - +
组织URL: +
https:// + + .trustie.net申请 +

+ +
+
公开 : class="ml3" />
@@ -139,4 +139,17 @@ if ($("#subfield_name").val().trim() != "") $("#add_subfield_form").submit(); } + function apply_subdomain(id, domain){ + $.ajax({ + url:"<%= apply_subdomain_organization_path %>", + type:'post', + data:{ + id:id, + domain:domain + }, + success:function(){ + $("#apply_hint").text("您的申请已提交,系统会以消息的形式通知您结果"); + } + }); + } \ No newline at end of file diff --git a/app/views/student_work/_set_score_rule_detail.html.erb b/app/views/student_work/_set_score_rule_detail.html.erb index 4739fba47..c8451e478 100644 --- a/app/views/student_work/_set_score_rule_detail.html.erb +++ b/app/views/student_work/_set_score_rule_detail.html.erb @@ -56,7 +56,7 @@ 确定
diff --git a/app/views/users/_user_message_org.html.erb b/app/views/users/_user_message_org.html.erb new file mode 100644 index 000000000..56d7d7b29 --- /dev/null +++ b/app/views/users/_user_message_org.html.erb @@ -0,0 +1,39 @@ +<% if ma.class == OrgMessage %> + <% if ma.message_type == 'ApplySubdomain'%> +
    +
  • + <%=link_to image_tag(url_to_avatar(ma.organization), :width => "30", :height => "30"), organization_path(ma.organization_id) %> +
  • +
  • + <%=link_to ma.organization.name, organization_path(ma.organization_id), :class => "newsBlue homepageNewsPublisher" %> + '>申请子域名: +
  • +
  • + <%= ma.content %> +
  • +
  • + <%=link_to ma.organization.domain.nil? ? "同意申请":"已同意申请", agree_apply_subdomain_organizations_path( :organization_id => ma.organization_id, :org_domain => ma.content, :user_id => ma.sender_id ), + :id => 'agree_apply_subdomain', + :method => 'post', + :remote => true, + :class => "green_btn_cir ml10", + :style => "color:#fff" %> +
  • +
  • <%= time_tag(ma.created_at).html_safe %>
  • +
+ <% end %> + <% if ma.message_type == 'AgreeApplySubdomain'%> + + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/users/user_messages.html.erb b/app/views/users/user_messages.html.erb index d690f7e43..391709b52 100644 --- a/app/views/users/user_messages.html.erb +++ b/app/views/users/user_messages.html.erb @@ -31,6 +31,8 @@ <%= render :partial => 'users/user_message_userfeedaback', :locals => {:ma => ma} %> + <%= render :partial => 'users/user_message_org', :locals => {:ma => ma} %> + <% end %>
    <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> diff --git a/app/views/users/user_organizations.html.erb b/app/views/users/user_organizations.html.erb index ed8238169..e9709f766 100644 --- a/app/views/users/user_organizations.html.erb +++ b/app/views/users/user_organizations.html.erb @@ -22,7 +22,11 @@
- <%= link_to org.name, organization_path(org), :class => 'f16 linkBlue' %> + <% if org.domain.nil? %> + <%= link_to org.name, organization_path(org), :class => 'f16 linkBlue' %> + <% else %> + <%= org.name %> + <% end %>
<%= org.description %>
创建者:<%= link_to User.find(org.creator_id), user_path(org.creator_id), :class => 'linkGrey2', :target => '_blank' %>
diff --git a/config/routes.rb b/config/routes.rb index 2d195f0d2..543cd1645 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -47,12 +47,14 @@ RedmineApp::Application.routes.draw do post 'join_project_menu' post 'join_projects' post 'logout' + post 'apply_subdomain' end collection do get 'check_uniq' get 'autocomplete_search' post 'hide_org_subfield' post 'show_org_subfield' + post 'agree_apply_subdomain' end resources :org_document_comments do member do @@ -64,6 +66,9 @@ RedmineApp::Application.routes.draw do end end + Organization.where("domain is not null").each do |org| + get '/', to: 'organizations#show', defaults: { id: org.id }, constraints: {subdomain: org.domain} + end get '/', to: 'organizations#show', defaults: { id: 5 }, constraints: {subdomain: 'micros'} get '/', to: 'organizations#show', defaults: { id: 23 }, constraints: {subdomain: 'nubot'} diff --git a/db/migrate/20160105014033_create_org_messages.rb b/db/migrate/20160105014033_create_org_messages.rb new file mode 100644 index 000000000..9ea18ccb0 --- /dev/null +++ b/db/migrate/20160105014033_create_org_messages.rb @@ -0,0 +1,19 @@ +class CreateOrgMessages < ActiveRecord::Migration + def up + create_table :org_messages do |t| + t.integer :user_id + t.integer :sender_id + t.integer :organization_id + t.string :message_type + t.integer :message_id + t.integer :viewed + t.string :content + + t.timestamps + end + end + + def down + drop_table :org_messages + end +end From 9ccca401f6c85664243a66235b083dde700d915d Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 5 Jan 2016 16:47:55 +0800 Subject: [PATCH 06/60] =?UTF-8?q?=E5=8C=BF=E8=AF=84=E6=97=B6=E4=B9=9F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=B3=BB=E7=BB=9F=E6=B5=8B=E8=AF=95=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_programing_work_show.html.erb | 86 +++++++++---------- .../student_work/_student_work_list.html.erb | 54 +++++++++--- 2 files changed, 83 insertions(+), 57 deletions(-) diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb index f7ecb0ccf..d98a9fe0f 100644 --- a/app/views/student_work/_programing_work_show.html.erb +++ b/app/views/student_work/_programing_work_show.html.erb @@ -31,52 +31,50 @@
- <% if @is_teacher%> -
  • - - 测试结果: - -
    - <% work.student_work_tests.each_with_index do |test, index| %> -
    -

    - 第<%= work.student_work_tests.count - index%>次测试 -

    - - <%= test.created_at.to_s(:db) %> - -
    +
  • + + 测试结果: + +
    + <% work.student_work_tests.each_with_index do |test, index| %> +
    +

    + 第<%= work.student_work_tests.count - index%>次测试 +

    + + <%= test.created_at.to_s(:db) %> + +
    +
    + <% if test.status.to_i == -2 %> +
    + <%= test.results.first %> +
    + <% else %> +
    +
      + <% test.results.each_with_index do |x, i| %> +
    • + 测试<%=i+1%> + <% if x["status"].to_i != 0 %> + 测试错误! + 您的输出: + <%=x["result"]%> + 正确输出: + <%=x["output"]%> +
      + <% else %> + 测试正确! +
      + <% end %> +
    • + <% end %> +
    - <% if test.status.to_i == -2 %> -
    - <%= test.results.first %> -
    - <% else %> -
    -
      - <% test.results.each_with_index do |x, i| %> -
    • - 测试<%=i+1%> - <% if x["status"].to_i != 0 %> - 测试错误! - 您的输出: - <%=x["result"]%> - 正确输出: - <%=x["output"]%> -
      - <% else %> - 测试正确! -
      - <% end %> -
    • - <% end %> -
    -
    - <% end %> <% end %> -
    -
  • - <% end%> + <% end %> +
    +
  • <% if @is_teacher || (@homework.homework_detail_manual.comment_status == 2 && work.user != User.current )%> diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb index 5598092e9..4f891f4c8 100644 --- a/app/views/student_work/_student_work_list.html.erb +++ b/app/views/student_work/_student_work_list.html.erb @@ -40,18 +40,46 @@ <% end%>
    - <% if @homework.homework_type != 3 && student_work.user == User.current && !@is_evaluation %> - <% if @homework.homework_type == 2%> - <%=render :partial => 'programing_work_show', :locals=> {:work => student_work, :score =>student_work_score(student_work,User.current),:student_work_scores => student_work.student_works_scores.order("updated_at desc")} %> - <% else %> - <%=render :partial => 'show' , :locals=> {:work => student_work, :score =>student_work_score(student_work,User.current),:student_work_scores => student_work.student_works_scores.order("updated_at desc")} %> - <% end %> - <% elsif @homework.homework_type == 3 %> - <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %> - <% if pro && pro.student_work_id == student_work.id && !@is_evaluation %> - <%=render :partial => 'show' , :locals=> {:work => student_work, :score =>student_work_score(student_work,User.current),:student_work_scores => student_work.student_works_scores.order("updated_at desc")} %> - <% end %> - <% end %>
    -<% end%> \ No newline at end of file +<% end%> + \ No newline at end of file From 244e1338032ce7a150110ea8bd1ba2ffe2a37928 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 6 Jan 2016 09:57:54 +0800 Subject: [PATCH 07/60] =?UTF-8?q?=E5=85=B3=E8=81=94=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/organizations/_org_course_homework.html.erb | 2 +- app/views/users/_course_homework.html.erb | 2 +- app/views/users/_user_homework_detail.html.erb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/organizations/_org_course_homework.html.erb b/app/views/organizations/_org_course_homework.html.erb index 8cf5f7183..22b0b2cb4 100644 --- a/app/views/organizations/_org_course_homework.html.erb +++ b/app/views/organizations/_org_course_homework.html.erb @@ -148,7 +148,7 @@ <% if activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %>
    <% projects = activity.student_work_projects.where("is_leader = 1") %> -
    +
    已关联项目:<%='各小组尚未将小组项目关联到本次作业。' if projects.empty? %>
    <% projects.each do |pro| %> diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb index e443a54b4..db276d88b 100644 --- a/app/views/users/_course_homework.html.erb +++ b/app/views/users/_course_homework.html.erb @@ -149,7 +149,7 @@ <% if activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1 %>
    <% projects = activity.student_work_projects.where("is_leader = 1") %> -
    +
    已关联项目:<%='各小组尚未将小组项目关联到本次作业。' if projects.empty? %>
    <% projects.each do |pro| %> diff --git a/app/views/users/_user_homework_detail.html.erb b/app/views/users/_user_homework_detail.html.erb index 529dd852c..6cb502d77 100644 --- a/app/views/users/_user_homework_detail.html.erb +++ b/app/views/users/_user_homework_detail.html.erb @@ -152,7 +152,7 @@ <% if homework_common.homework_type == 3 && homework_common.homework_detail_group.base_on_project == 1 %>
    <% projects = homework_common.student_work_projects.where("is_leader = 1") %> -
    +
    已关联项目:<%='各小组尚未将小组项目关联到本次作业。' if projects.empty? %>
    <% projects.each do |pro| %> From cf125159f24ade513cb50358ea115b0846db4780 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 6 Jan 2016 10:36:53 +0800 Subject: [PATCH 08/60] =?UTF-8?q?=E5=85=B3=E8=81=94=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8F=90=E4=BA=A4=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/organizations/_org_course_homework.html.erb | 2 +- app/views/users/_course_homework.html.erb | 2 +- app/views/users/_user_homework_detail.html.erb | 2 +- public/stylesheets/public.css | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/organizations/_org_course_homework.html.erb b/app/views/organizations/_org_course_homework.html.erb index 22b0b2cb4..e3e2938ec 100644 --- a/app/views/organizations/_org_course_homework.html.erb +++ b/app/views/organizations/_org_course_homework.html.erb @@ -172,7 +172,7 @@ <% time=project.updated_on %> <% time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %>

    <%=(User.find project.user_id).show_name %>(组长)

    -

    <%=time_from_now time %>

    +

    <%=time_from_now time %>  <%=changesets_num project %>提交

    项目名称:<%=project.name %>
    创建者:<%=(User.find project.user_id).show_name %>(组长)
    diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb index db276d88b..f74cdcf54 100644 --- a/app/views/users/_course_homework.html.erb +++ b/app/views/users/_course_homework.html.erb @@ -173,7 +173,7 @@ <% time=project.updated_on %> <% time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %>

    <%=(User.find project.user_id).show_name %>(组长)

    -

    <%=time_from_now time %>

    +

    <%=time_from_now time %>  <%=changesets_num project %>提交

    项目名称:<%=project.name %>
    创建者:<%=(User.find project.user_id).show_name %>(组长)
    diff --git a/app/views/users/_user_homework_detail.html.erb b/app/views/users/_user_homework_detail.html.erb index 6cb502d77..b39f5a647 100644 --- a/app/views/users/_user_homework_detail.html.erb +++ b/app/views/users/_user_homework_detail.html.erb @@ -175,7 +175,7 @@ <% time=project.updated_on %> <% time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %>

    <%=(User.find project.user_id).show_name %>(组长)

    -

    <%=time_from_now time %>

    +

    <%=time_from_now time %>  <%=changesets_num project %>提交

    项目名称:<%=project.name %>
    创建者:<%=(User.find project.user_id).show_name %>(组长)
    diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index ed0874751..94e274505 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -69,6 +69,7 @@ h4{ font-size:14px; color:#3b3b3b;} .ml35{margin-left: 35px;} .ml40{ margin-left:40px;} .ml45{ margin-left:45px;} +.ml48{ margin-left:48px;} .ml55{ margin-left:55px;} .ml30{ margin-left:30px;} .ml38{ margin-left:38px;} From e9d986b311b3d140d3fc0c1c2f61797e18844d93 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 6 Jan 2016 11:01:00 +0800 Subject: [PATCH 09/60] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E5=85=B3=E8=81=94?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_course_homework.html.erb | 3 ++- public/stylesheets/new_user.css | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb index f74cdcf54..f7eae22db 100644 --- a/app/views/users/_course_homework.html.erb +++ b/app/views/users/_course_homework.html.erb @@ -152,6 +152,7 @@
    已关联项目:<%='各小组尚未将小组项目关联到本次作业。' if projects.empty? %>
    +
    <% projects.each do |pro| %> <% project = Project.find pro.project_id %> -
    +
    <% if project.is_public || User.current.member_of?(project) || User.current.admin? %> <%= link_to image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius"),project_path(project.id,:host=>Setting.host_name),:id=>"project_img_"+project.id.to_s+"_"+activity.id.to_s,:alt =>"项目头像" %> <% else %> diff --git a/public/stylesheets/new_user.css b/public/stylesheets/new_user.css index 346d6b3a7..7c59f673b 100644 --- a/public/stylesheets/new_user.css +++ b/public/stylesheets/new_user.css @@ -121,6 +121,7 @@ a.linkGrey6:hover {color:#ffffff !important;} .w70{ width:70px;} .w80{ width:80px;} .w90{ width:90px;} +.w110{width:110px;} .w210{ width:210px;} .w150{ width:150px;} .w280{ width:280px;} @@ -1384,7 +1385,7 @@ a:hover.blueCir{ background:#3598db; color:#fff;} .proHelp {background:url(/images/course/hwork_icon.png) -5px -124px no-repeat; display:inline-block; width:15px; height:15px; display:inline-block;} .hworkPrName {width:110px; max-width:110px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; height:18px; line-height:18px; font-size:12px; color:#888888; text-align:center;} .mr150 {margin-right:150px;} -.captainName {max-width:40px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; display: inline-block;} +.captainName {max-width:75px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; display: inline-block;} /* @功能 定义 */ span.at {color:#269ac9;} From 7d4e3cdd5cdad37a44ae55faecfda5b45f52df93 Mon Sep 17 00:00:00 2001 From: ouyangxuhua Date: Wed, 6 Jan 2016 16:22:13 +0800 Subject: [PATCH 10/60] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE/?= =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E5=BF=AB=E6=8D=B7=E5=8A=9F=E8=83=BD=EF=BC=9B?= =?UTF-8?q?=202.=E5=A2=9E=E5=8A=A0=E7=A7=81=E4=BF=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 9 ++++- app/controllers/words_controller.rb | 6 ++- app/models/journals_for_message.rb | 5 ++- app/views/files/upload_files_menu.js.erb | 15 +++++++ app/views/layouts/_user_courses.html.erb | 15 ++++++- app/views/layouts/_user_projects.html.erb | 14 ++++++- app/views/layouts/new_base_user.html.erb | 38 +++++++++++++++++- app/views/users/user_newfeedback.html.erb | 11 ++++- config/routes.rb | 1 + ...55_add_private_to_journals_for_messages.rb | 5 +++ db/schema.rb | 19 +++++++-- public/images/hwork_icon.png | Bin 0 -> 5024 bytes public/stylesheets/new_user.css | 30 ++++++++++++++ public/stylesheets/public.css | 28 ++++++++++++- public/stylesheets/users.css | 10 ++++- 15 files changed, 192 insertions(+), 14 deletions(-) create mode 100644 app/views/files/upload_files_menu.js.erb create mode 100644 db/migrate/20160106065255_add_private_to_journals_for_messages.rb create mode 100644 public/images/hwork_icon.png diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index 121cd3a42..c5f5c0fc2 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -24,7 +24,10 @@ class FilesController < ApplicationController before_filter :auth_login1, :only => [:index] before_filter :logged_user_by_apptoken,:only => [:index] before_filter :find_project_by_project_id#, :except => [:getattachtype] - before_filter :authorize, :except => [:create,:getattachtype,:quote_resource_show,:search,:searchone4reload,:search_project,:quote_resource_show_project,:search_tag_attachment,:subfield_upload_file,:search_org_subfield_tag_attachment,:search_tag_attachment,:quote_resource_show_org_subfield,:find_org_subfield_attache,:search_files_in_subfield] + before_filter :authorize, :except => [:create,:getattachtype,:quote_resource_show,:search,:searchone4reload,:search_project,:quote_resource_show_project, + :search_tag_attachment,:subfield_upload_file,:search_org_subfield_tag_attachment, + :search_tag_attachment,:quote_resource_show_org_subfield,:find_org_subfield_attache, + :search_files_in_subfield,:upload_files_menu] helper :sort include SortHelper @@ -784,4 +787,8 @@ class FilesController < ApplicationController def subfield_upload_file @org_subfield = OrgSubfield.find(params[:org_subfield_id]) end + + def upload_files_menu + p 1 + end end diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index df9fd30f2..79981ec4d 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -236,7 +236,11 @@ class WordsController < ApplicationController if User.current.logged? @user = User.find(params[:id]) if params[:new_form][:user_message].size>0 && User.current.logged? && @user - @user.add_jour(User.current, params[:new_form][:user_message]) + if params[:private] && params[:private] == '1' + @user.journals_for_messages << JournalsForMessage.new(:user_id => User.current.id, :notes => params[:new_form][:user_message], :reply_id => 0, :status => true, :is_readed => false, :private => 1) + else + @user.add_jour(User.current, params[:new_form][:user_message]) + end end redirect_to feedback_path(@user) else diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 59da817f4..d3e76addc 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -15,8 +15,9 @@ class JournalsForMessage < ActiveRecord::Base "m_parent_id", # 留言信息的父留言id "is_readed", # 留言是否已读 "m_reply_count", # 留言的回复数量 - "m_reply_id" # 回复某留言的留言id(a留言回复了b留言,这是b留言的id) - "is_comprehensive_evaluation" # 1 教师评论、2 匿评、3 留言 + "m_reply_id" , # 回复某留言的留言id(a留言回复了b留言,这是b留言的id) + "is_comprehensive_evaluation", # 1 教师评论、2 匿评、3 留言 + "private" acts_as_tree :foreign_key => 'm_parent_id', :counter_cache => :m_reply_count, :order => "#{JournalsForMessage.table_name}.created_on ASC" after_destroy :delete_kindeditor_assets belongs_to :project, diff --git a/app/views/files/upload_files_menu.js.erb b/app/views/files/upload_files_menu.js.erb new file mode 100644 index 000000000..3e44f5644 --- /dev/null +++ b/app/views/files/upload_files_menu.js.erb @@ -0,0 +1,15 @@ +<% if @project %> + $('#ajax-modal').html('<%= escape_javascript(render :partial => 'projects/upload_project_files_on_navbar',:locals => {:container => @project}) %>'); + showModal('ajax-modal', '513px'); + $('#ajax-modal').siblings().remove(); + $('#ajax-modal').before(""); + $('#ajax-modal').parent().css("top","40%").css("left","36%"); + $('#ajax-modal').parent().addClass("popbox_polls"); +<% elsif @course %> + $('#ajax-modal').html('<%= escape_javascript(render :partial => 'files/upload_course_files',:locals => {:course => @course,:course_attachment_type => 1}) %>'); + showModal('ajax-modal', '513px'); + $('#ajax-modal').siblings().remove(); + $('#ajax-modal').before(""); + $('#ajax-modal').parent().css("top","40%").css("left","36%"); + $('#ajax-modal').parent().addClass("popbox_polls"); +<% end %> \ No newline at end of file diff --git a/app/views/layouts/_user_courses.html.erb b/app/views/layouts/_user_courses.html.erb index a71dd099f..03abf77c7 100644 --- a/app/views/layouts/_user_courses.html.erb +++ b/app/views/layouts/_user_courses.html.erb @@ -1,6 +1,19 @@ <% courses.each do |course|%> -
  • +
  • <%= link_to course.name, course_path(course.id,:host=>Setting.host_course), :class => "coursesLineGrey hidden #{course_endTime_timeout?(course) ? 'c_dark_grey' : ''}", :title => course.name+"("+course.time.to_s+course.term+")"%> +
    +
      + +
    +
  • <% end %> diff --git a/app/views/layouts/_user_projects.html.erb b/app/views/layouts/_user_projects.html.erb index da078c963..134b9952b 100644 --- a/app/views/layouts/_user_projects.html.erb +++ b/app/views/layouts/_user_projects.html.erb @@ -1,6 +1,18 @@ <% projects.each do |project|%> -
  • +
  • <%= link_to project.name, project_path(project.id,:host=>Setting.host_name), :class => "coursesLineGrey hidden", :title => project.name%> +
    +
      + +
    +
  • <% end %> <% if projects.size == 5%> diff --git a/app/views/layouts/new_base_user.html.erb b/app/views/layouts/new_base_user.html.erb index b77c5b875..2993aa685 100644 --- a/app/views/layouts/new_base_user.html.erb +++ b/app/views/layouts/new_base_user.html.erb @@ -10,7 +10,7 @@ <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'new_user', 'user_leftside','prettify','users',:media => 'all' %> <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> <%= javascript_heads %> - <%= javascript_include_tag "bootstrap","avatars","new_user",'prettify'%> + <%= javascript_include_tag "bootstrap","avatars","new_user",'attachments','prettify'%> <%= heads_for_theme %> <%= call_hook :view_layouts_base_html_head %> <%= yield :header_tags -%> @@ -27,6 +27,42 @@ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} }); + diff --git a/app/views/users/user_newfeedback.html.erb b/app/views/users/user_newfeedback.html.erb index f53983228..0b0ba9d48 100644 --- a/app/views/users/user_newfeedback.html.erb +++ b/app/views/users/user_newfeedback.html.erb @@ -26,9 +26,11 @@ <%= form_for('new_form',:url => leave_user_message_path(@user.id), :html =>{:id => "user_feedback_new"}, :method => "post") do |f|%>

    +
    - 取消 - 留言 + + 留言 + 私信 <% end%>
    @@ -52,6 +54,11 @@