@ -3,7 +3,7 @@ class StudentWorkController < ApplicationController
include StudentWorkHelper
require 'bigdecimal'
require " base64 "
before_filter :find_homework , :only = > [ :new , :index , :create , :student_work_absence_penalty , :absence_penalty_list , :evaluation_list , :program_test , :set_score_rule , :forbidden_anonymous_comment , :delete_work , :new_student_work_project , :student_work_project , :cancel_relate_project ]
before_filter :find_homework , :only = > [ :new , :index , :create , :student_work_absence_penalty , :absence_penalty_list , :evaluation_list , :program_test , :set_score_rule , :forbidden_anonymous_comment , :delete_work , :new_student_work_project , :student_work_project , :cancel_relate_project , :search_course_students ]
before_filter :find_work , :only = > [ :edit , :update , :show , :destroy , :add_score , :praise_student_work , :retry_work , :revise_attachment ]
before_filter :member_of_course , :only = > [ :index , :new , :create , :show , :add_score , :praise_student_work ]
before_filter :author_of_work , :only = > [ :edit , :update , :destroy ]
@ -95,12 +95,27 @@ class StudentWorkController < ApplicationController
@stundet_works = search_homework_member @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . joins ( :user ) . where ( " users.id in #{ student_in_group } " ) . order ( " #{ @order } #{ @b_sort } " ) , @name
@show_all = true
elsif @homework . homework_detail_manual . comment_status == 1 #学生 && 未开启匿评 只看到自己的
if @homework . homework_type == 3
pro = @homework . student_work_projects . where ( :user_id = > User . current . id ) . first
@stundet_works = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :id = > pro . student_work_id )
else
@stundet_works = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :user_id = > User . current . id )
end
elsif @homework . homework_detail_manual . comment_status == 2 #学生 && 开启匿评 看到匿评列表
if @homework . homework_type == 3
pro = @homework . student_work_projects . where ( :user_id = > User . current . id ) . first
my_work = @homework . student_works . where ( :id = > pro . student_work_id )
else
my_work = @homework . student_works . where ( :user_id = > User . current . id )
end
@stundet_works = my_work + User . current . student_works_evaluation_distributions . map ( & :student_work ) . select { | work | work . homework_common_id == @homework . id }
elsif @homework . homework_detail_manual . comment_status == 3 #学生 && 关闭匿评 未提交作品之前列表为空,提交了作品看到所有的
if @homework . homework_type == 3
pro = @homework . student_work_projects . where ( :user_id = > User . current . id ) . first
my_work = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :id = > pro . student_work_id )
else
my_work = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :user_id = > User . current . id )
end
if my_work . empty?
@stundet_works = [ ]
else
@ -116,12 +131,27 @@ class StudentWorkController < ApplicationController
@stundet_works = search_homework_member @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . order ( " #{ @order } #{ @b_sort } " ) , @name
@show_all = true
elsif @homework . homework_detail_manual . comment_status == 1 #学生 && 未开启匿评 只看到自己的
if @homework . homework_type == 3
pro = @homework . student_work_projects . where ( :user_id = > User . current . id ) . first
@stundet_works = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :id = > pro . student_work_id )
else
@stundet_works = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :user_id = > User . current . id )
end
elsif @homework . homework_detail_manual . comment_status == 2 #学生 && 开启匿评 看到匿评列表
if @homework . homework_type == 3
pro = @homework . student_work_projects . where ( :user_id = > User . current . id ) . first
my_work = @homework . student_works . where ( :id = > pro . student_work_id )
else
my_work = @homework . student_works . where ( :user_id = > User . current . id )
end
@stundet_works = my_work + User . current . student_works_evaluation_distributions . map ( & :student_work ) . select { | work | work . homework_common_id == @homework . id }
elsif @homework . homework_detail_manual . comment_status == 3 #学生 && 关闭匿评 未提交作品之前列表为空,提交了作品看到所有的
if @homework . homework_type == 3
pro = @homework . student_work_projects . where ( :user_id = > User . current . id ) . first
my_work = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :id = > pro . student_work_id )
else
my_work = @homework . student_works . select ( " student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score " ) . where ( :user_id = > User . current . id )
end
if my_work . empty?
@stundet_works = [ ]
else
@ -190,6 +220,10 @@ class StudentWorkController < ApplicationController
student_work . user_id = User . current . id
student_work . save_attachments ( params [ :attachments ] )
render_attachment_warning_if_needed ( student_work )
if @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 1
@student_work_project = @homework . student_work_projects . where ( " user_id = #{ User . current . id } " ) . first
student_work . project_id = @student_work_project . project_id
end
#提交作品时,计算是否迟交
if Time . parse ( @homework . end_time . to_s ) . strftime ( " %Y-%m-%d " ) < Time . parse ( Time . now . to_s ) . strftime ( " %Y-%m-%d " )
student_work . late_penalty = @homework . late_penalty
@ -197,6 +231,35 @@ class StudentWorkController < ApplicationController
student_work . late_penalty = 0
end
if student_work . save
if @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 1
@student_work_project . student_work_id = student_work . id
@student_work_project . save
members = params [ :group_member_ids ] . split ( ',' )
for i in 1 .. members . count - 1
stu_project = StudentWorkProject . new
stu_project . homework_common_id = @homework . id
stu_project . student_work_id = student_work . id
stu_project . project_id = @student_work_project . project_id
stu_project . user_id = members [ i ] . to_i
stu_project . is_leader = 0
stu_project . save
end
elsif @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 0
members = params [ :group_member_ids ] . split ( ',' )
for i in 0 .. members . count - 1
stu_project = StudentWorkProject . new
stu_project . homework_common_id = @homework . id
stu_project . student_work_id = student_work . id
stu_project . project_id = - 1
stu_project . user_id = members [ i ] . to_i
if i == 0
stu_project . is_leader = 1
else
stu_project . is_leader = 0
end
stu_project . save
end
end
course_activity = CourseActivity . where ( " course_act_type='HomeworkCommon' and course_act_id = #{ @homework . id } " ) . first
if course_activity
course_activity . updated_at = Time . now
@ -276,6 +339,18 @@ class StudentWorkController < ApplicationController
def destroy
if @work . destroy
if @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 1
pros = @work . student_work_projects . where ( " is_leader = 0 " )
pros . each do | pro |
pro . destroy
end
project = @work . student_work_projects . where ( " is_leader = 1 " ) . first
project . update_attributes ( :student_work_id = > nil )
elsif @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 0
@work . student_work_projects . each do | pro2 |
pro2 . destroy
end
end
respond_to do | format |
format . html {
redirect_to student_work_index_url ( :homework = > @homework . id )
@ -288,12 +363,36 @@ class StudentWorkController < ApplicationController
@work = StudentWork . where ( " user_id =? and homework_common_id =? " , User . current . id , @homework . id ) . first
if @work
@work . destroy
if @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 1
pros = @work . student_work_projects . where ( " is_leader = 0 " )
pros . each do | pro |
pro . destroy
end
project = @work . student_work_projects . where ( " is_leader = 1 " ) . first
project . update_attributes ( :student_work_id = > nil )
elsif @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 0
@work . student_work_projects . each do | pro2 |
pro2 . destroy
end
end
end
redirect_to user_homeworks_user_path ( User . current . id )
end
def retry_work
if @work . destroy
if @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 1
pros = @work . student_work_projects . where ( " is_leader = 0 " )
pros . each do | pro |
pro . destroy
end
project = @work . student_work_projects . where ( " is_leader = 1 " ) . first
project . update_attributes ( :student_work_id = > nil )
elsif @homework . homework_type == 3 && @homework . homework_detail_group . base_on_project == 0
@work . student_work_projects . each do | pro2 |
pro2 . destroy
end
end
@student_work = StudentWork . new
respond_to do | format |
format . js
@ -555,6 +654,7 @@ class StudentWorkController < ApplicationController
@project . homework_common_id = @homework . id
@project . project_id = ( Project . find params [ :projectName ] . to_i ) . id
@project . user_id = User . current . id
@project . is_leader = 1
if @project . save
@user_activity_id = params [ :user_activity_id ] . to_i
@is_in_course = params [ :is_in_course ] . to_i
@ -579,6 +679,20 @@ class StudentWorkController < ApplicationController
end
end
#查找课程的学生
def search_course_students
name = " "
unless params [ :name ] . nil?
name = params [ :name ]
end
all_student_ids = " ( " + @homework . course . student . map { | student | student . student_id } . join ( " , " ) + " ) "
all_students = User . where ( " id in #{ all_student_ids } " )
@users = searchstudent_by_name all_students , name
respond_to do | format |
format . js
end
end
def cancel_relate_project
relate_pro = StudentWorkProject . where ( " user_id = #{ User . current . id } and homework_common_id = #{ @homework . id } " ) . first
if relate_pro . destroy
@ -592,6 +706,22 @@ class StudentWorkController < ApplicationController
end
private
def searchstudent_by_name users , name
mems = [ ]
if name != " "
name = name . to_s . downcase
users . each do | m |
username = m . lastname . to_s . downcase + m . firstname . to_s . downcase
if ( m . login . to_s . downcase . include? ( name ) || m . user_extensions [ :student_id ] . to_s . downcase . include? ( name ) || username . include? ( name ) )
mems << m
end
end
else
mems = users
end
mems
end
def hsd_committed_work? ( user , homework )
sw = StudentWork . where ( " user_id =? and homework_common_id =? " , user , homework ) . first
sw . nil? ? result = false : result = true