Merge remote-tracking branch 'origin/szzh' into guange_dev

sw_new_course
guange 10 years ago
commit f56e48d60a

@ -247,7 +247,7 @@ module Mobile
end
get "course_dynamic/:id" do
cs = CoursesService.new
count = cs.course_dynamic(params,current_user)
count = cs.all_course_dynamics(params,current_user)
present :data, count, with: Mobile::Entities::CourseDynamic
present :status, 0
end
@ -311,6 +311,44 @@ module Mobile
present :data,news,with:Mobile::Entities::News
present :status,0
end
desc '课程历次作业总成绩列表'
params do
requires :token,type:String
requires :course_id,type:Integer,desc:'课程id'
optional :page,type:Integer,desc:'页码'
end
get ':course_id/students_score_list' do
cs = CoursesService.new
news = cs.students_score_list params,current_user
present :data,news,with:Mobile::Entities::User
end
desc '课程某次作业提交列表 并显示成绩'
params do
requires :token,type:String
requires :course_id,type:Integer,desc:'课程id'
requires :homework_id,type:Integer,desc:'作业id'
optional :page,type:Integer,desc:'页码'
end
get ':course_id/student_works_list' do
cs = CoursesService.new
student_works = cs.student_work_list params,current_user
present :data,student_works.all,with:Mobile::Entities::StudentWork
end
desc '开启匿评'
params do
requires :token,type:String
requires :course_id,type:Integer,desc:'课程id'
requires :homework_id,type:Integer,desc:'作业id'
end
get ':course_id/start_anonymous_comment' do
cs = CoursesService.new
status = cs.start_anonymous_comment params,current_user
present :data,status
present :status,0
end
end
end
end

@ -1,17 +1,23 @@
module Mobile
module Entities
class Attachment < Grape::Entity
include Redmine::I18n
def self.attachment_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
elsif f.is_a?(::Attachment)
if f.respond_to?(field)
f.send(field)
if field == :created_on
format_time(f.send(field))
else
f.send(field)
end
else
#case field
# when ""
#end
case field
when :file_dir
"attachments/download/" << f.send(:id).to_s << '/'
end
end
end
end
@ -21,6 +27,8 @@ module Mobile
attachment_expose :description
attachment_expose :downloads
attachment_expose :quotes
attachment_expose :created_on
attachment_expose :file_dir
end
end
end

@ -6,6 +6,38 @@ module Mobile
expose field do |c,opt|
if field == :update_time
(format_time(c[field]) if (c.is_a?(Hash) && c.key?(field)))
elsif field == :news_count
obj = nil
c[:dynamics].each do |d|
if d[:type] == 1
obj = d[:count]
end
end
obj
elsif field == :document_count
obj = nil
c[:dynamics].each do |d|
if d[:type] == 3
obj = d[:count]
end
end
obj
elsif field == :topic_count
obj = nil
c[:dynamics].each do |d|
if d[:type] == 2
obj = d[:count]
end
end
obj
elsif field == :homework_count
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:count]
end
end
obj
else
c[field] if (c.is_a?(Hash) && c.key?(field))
end
@ -21,6 +53,60 @@ module Mobile
course_dynamic_expose :course_img_url
course_dynamic_expose :message
course_dynamic_expose :update_time
course_dynamic_expose :count
course_dynamic_expose :news_count
course_dynamic_expose :document_count
course_dynamic_expose :topic_count
course_dynamic_expose :homework_count
#在dynamics里解析出四种动态
expose :documents,using:Mobile::Entities::Attachment do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 3
obj = d[:documents]
end
end
obj
end
expose :topics,using:Mobile::Entities::Message do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 2
obj = d[:topics]
end
end
obj
end
expose :homeworks,using:Mobile::Entities::Homework do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 4
obj = d[:homeworks]
end
end
obj
end
expose :news,using:Mobile::Entities::News do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 1
obj = d[:news]
end
end
obj
end
expose :better_students,using:Mobile::Entities::User do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 6
obj = d[:better_students]
end
end
obj
end
end
end
end

@ -1,7 +1,10 @@
# 这个模块由于作业模块的改变,里边的注释以及属性不可信
module Mobile
module Entities
class Homework < Grape::Entity
include Redmine::I18n
include ApplicationHelper
include ApiHelper
def self.homework_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
@ -14,7 +17,20 @@ module Mobile
if f.respond_to?(field)
f.send(field)
else
case field
when :homework_name
f.send(:name)
when :homework_notsubmit_num
f.course.members.count - f.student_works.count
when :homework_submit_num
f.student_works.count
when :homework_status
get_homework_status f
when :homework_times
f.course.homework_commons.index(f) + 1
when :homework_status_desc
homework_status_desc f
end
end
end
end
@ -60,6 +76,15 @@ module Mobile
f[:homework_for_anonymous_comments] if f.is_a?(Hash) && f.key?(:homework_for_anonymous_comments)
end
homework_expose :homework_submit_num
homework_expose :homework_notsubmit_num
expose :submit_student_list ,using: Mobile::Entities::User do |f,opt|
get_submit_sutdent_list f
end
homework_expose :homework_status #作业的状态
homework_expose :homework_status_desc #状态的解释
end
end
end

@ -0,0 +1,46 @@
module Mobile
module Entities
class Message < Grape::Entity
include ApplicationHelper
include ApiHelper
def self.message_expose(f)
expose f do |u,opt|
if u.is_a?(Hash) && u.key?(f)
u[f]
elsif u.is_a?(::Message)
if u.respond_to?(f)
if f == :created_on
format_time( u.send(f))
else
u.send(f)
end
else
# case f
# when :xx
# #
# end
end
end
end
end
expose :user, using: Mobile::Entities::User do |c, opt|
if c.is_a?(::Message)
c.author
end
end
message_expose :board_id
message_expose :subject
message_expose :content
message_expose :replies_count
message_expose :created_on
message_expose :id
expose :message_children,using:Mobile::Entities::Message do |c,opt|
if c.is_a? (::Message)
c.children
end
end
end
end
end

@ -6,6 +6,12 @@ module Mobile
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
elsif f.is_a?(::News)
if field == :created_on
format_time(f.send(field)) if f.respond_to?(field)
else
f.send(field) if f.respond_to?(field)
end
elsif f.is_a?(Hash) && !f.key?(field)
n = f[:news]
comments = f[:comments]
@ -26,13 +32,20 @@ module Mobile
news_expose :title
expose :author,using: Mobile::Entities::User do |f, opt|
n = f[:news]
n.author if n.respond_to?(:author)
obj = nil
if f.is_a?(::News) && f.respond_to?(:author)
obj = f.send(:author)
elsif f.is_a?(Hash) && f.key?(:author)
obj = f[:author]
end
obj
end
#作者id
news_expose :author_id
#作者名
news_expose :author_name
#作者头像url
news_expose :author_img_url
#新闻内容
news_expose :description
#发布时间

@ -0,0 +1,45 @@
module Mobile
module Entities
class StudentWork < Grape::Entity
include ApplicationHelper
include ApiHelper
def self.student_work_expose(f)
expose f do |u,opt|
if u.is_a?(Hash) && u.key?(f)
u[f]
elsif u.is_a?(::StudentWork)
if u.respond_to?(f)
if f == :created_at
format_time(u.send(:created_at))
else
u.send(f)
end
else
case f
when :student_id
u.user.user_extensions.student_id
end
end
end
end
end
expose :user, using: Mobile::Entities::User do |c, opt|
if c.is_a?(::StudentWork)
c.user
end
end
student_work_expose :student_id
student_work_expose :id
student_work_expose :name
student_work_expose :description
student_work_expose :final_score
student_work_expose :teacher_score
student_work_expose :student_score
student_work_expose :teacher_asistant_score
student_work_expose :created_at
end
end
end

@ -22,6 +22,8 @@ module Mobile
get_user_location u unless u.user_extensions.nil?
when :brief_introduction
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.brief_introduction
when :student_num
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.student_id
end
end
end
@ -47,6 +49,10 @@ module Mobile
user_expose :location
#签名
user_expose :brief_introduction
#总成绩
user_expose :score
#学号
user_expose :student_num
end
end

@ -6,6 +6,7 @@ class ActivityNotifysController < ApplicationController
# accept_rss_auth :index, :show
helper :activities
helper :attachments
def index
query = nil
if @course

@ -34,13 +34,21 @@ class AdminController < ApplicationController
def projects
@status = params[:status] || 1
scope = Project.status(@status).order('lft')
scope = Project.status(@status).order('id asc')
scope = scope.like(params[:name]) if params[:name].present?
@projects = scope.where(project_type: Project::ProjectType_project).all
render :action => "projects", :layout => false if request.xhr?
end
def courses
@name = params[:name]
@courses = Course.like(@name)
respond_to do |format|
format.html
end
end
def users
sort_init 'login', 'asc'
sort_update %w(login firstname lastname mail admin created_on last_login_on)

@ -388,7 +388,7 @@ class AttachmentsController < ApplicationController
end
rescue NoMethodError
@save_flag = false
@save_message = [] << l(:label_course_empty_select)
@save_message = [] << l(:label_project_empty_select)
respond_to do |format|
format.js
end

@ -34,6 +34,20 @@ class CommentsController < ApplicationController
ids = params[:asset_id].split(',')
update_kindeditor_assets_owner ids,@comment.id,OwnerTypeHelper::COMMENT
end
# 与我相关动态的记录add start
if( @comment.id && @news.course )
if(@news.author_id != User.current.id)
notify = ActivityNotify.new()
notify.activity_container_id = @news.course.id
notify.activity_container_type = 'Course'
notify.activity_id = @comment.id
notify.activity_type = 'Comment'
notify.notify_to = @news.author_id
notify.is_read = 0
notify.save()
end
end
# 与我相关动态的记录add end
flash[:notice] = l(:label_comment_added)
end

@ -443,26 +443,19 @@ class CoursesController < ApplicationController
def create
cs = CoursesService.new
@course = cs.create_course(params,User.current)[:course]
if @course.new_record?
if @course
respond_to do |format|
format.html { render :action => 'new', :layout => 'new_base' } #Added by young
format.api { render_validation_errors(@course) }
flash[:notice] = l(:notice_successful_create)
format.html {redirect_to settings_course_url(@course, :course_type => 1)}
format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'courses', :action => 'show', :id => @course.id) }
end
else
respond_to do |format|
format.html {
# render :layout => 'base_courses'
flash[:notice] = l(:notice_successful_create)
if params[:continue]
redirect_to new_course_url(attrs, :course => '0')
elsif params[:course_continue]
redirect_to new_course_url(:course => '1')
else
redirect_to settings_course_url(@course, :course_type => 1)
end
}
format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'courses', :action => 'show', :id => @course.id) }
end
flash[:notice] = l(:notice_create_failed)
# @course = Course.new
format.html { redirect_to new_course_path } #Added by young
format.api { render_validation_errors(@course) }
end
end
end
@ -532,7 +525,7 @@ class CoursesController < ApplicationController
@trackers = Tracker.sorted.all
@course = Course.new
@course.safe_attributes = params[:course]
month = Time.now.month
# month = Time.now.month
render :layout => 'new_base'
end

@ -37,7 +37,7 @@ class FilesController < ApplicationController
obj.each do |container|
@attachments += container.attachments
end
@all_attachments = visable_attachemnts(@attachments)
@all_attachments = User.current.admin? ? @attachments : visable_attachemnts(@attachments)
@limit = 10
@feedback_count = @all_attachments.count
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']

@ -1,6 +1,6 @@
#added by baiyu
class GitUsageController < ApplicationController
layout "project_base"
layout "new_base"
def ch_usage
end

@ -91,16 +91,39 @@ class HomeworkCommonController < ApplicationController
@homework.end_time = params[:homework_common][:end_time]
@homework.publish_time = params[:homework_common][:publish_time]
@homework.homework_type = params[:homework_common][:homework_type]
@homework.late_penalty = params[:late_penalty]
@homework.user_id = User.current.id
unless @homework.late_penalty == params[:late_penalty]
@homework.student_works.where("created_at > '#{@homework.end_time} 23:59:59'").each do |student_work|
student_work.late_penalty = params[:late_penalty]
student_work.save
end
@homework.late_penalty = params[:late_penalty]
end
@homework.course_id = @course.id
#匿评作业相关属性
@homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6
@homework_detail_manual.evaluation_start = params[:evaluation_start]
@homework_detail_manual.evaluation_end = params[:evaluation_end]
@homework_detail_manual.evaluation_num = params[:evaluation_num]
@homework_detail_manual.absence_penalty = params[:absence_penalty]
if @homework.homework_type == 1
@homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6
@homework_detail_manual.evaluation_start = params[:evaluation_start]
@homework_detail_manual.evaluation_end = params[:evaluation_end]
@homework_detail_manual.evaluation_num = params[:evaluation_num]
unless @homework_detail_manual.absence_penalty == params[:absence_penalty]
if @homework_detail_manual.comment_status == 3 #当前作业处于匿评结束状态,修改缺评扣分才会修改每个作品应扣分的值
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@homework.student_works.each do |student_work|
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids}").count
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual.absence_penalty : 0
student_work.save
end
end
@homework_detail_manual.absence_penalty = params[:absence_penalty]
end
else #不是匿评作业缺评扣分为0分每个作品的缺评扣分改为0分防止某些作业在结束匿评之后改为普通作业
@homework.student_works.where("absence_penalty != 0").each do |student_work|
student_work.late_penalty = 0
student_work.save
end
@homework_detail_manual.absence_penalty = 0
end
@homework.save_attachments(params[:attachments])
render_attachment_warning_if_needed(@homework)
@ -135,6 +158,7 @@ class HomeworkCommonController < ApplicationController
#statue 1:启动成功2启动失败作业总数大于等于2份时才能启动匿评3:已开启匿评,请务重复开启,4:没有开启匿评的权限
def start_anonymous_comment
@statue =4 and return unless User.current.admin? || User.current.allowed_to?(:as_teacher,@course)
@statue = 5 and return if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
if @homework_detail_manual.comment_status == 1
student_works = @homework.student_works
if student_works && student_works.size >=2
@ -161,6 +185,14 @@ class HomeworkCommonController < ApplicationController
#关闭匿评
def stop_anonymous_comment
@homework_detail_manual.update_column('comment_status', 3)
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@homework.student_works.each do |student_work|
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids}").count
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual.absence_penalty : 0
student_work.save
end
respond_to do |format|
format.js
end
@ -206,7 +238,7 @@ class HomeworkCommonController < ApplicationController
#当前用户是不是课程的成员
def member_of_course
render_403 unless User.current.member_of_course?(@course) || User.current.admin?
render_403 unless @course.is_public || User.current.member_of_course?(@course) || User.current.admin?
end
def get_assigned_homeworks(student_works, n, index)

@ -16,7 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class IssueCategoriesController < ApplicationController
layout "project_base"
layout "base_projects"
menu_item :settings
model_object IssueCategory
before_filter :find_model_object, :except => [:index, :new, :create]

@ -74,6 +74,7 @@ class JournalsController < ApplicationController
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
@content = "> #{ll(Setting.default_language, :text_user_wrote, user)}\n> "
@content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
# @content = "<blockquote style='word-break: break-all;word-wrap: break-word;'>" << @content
@id = user.id
rescue ActiveRecord::RecordNotFound
render_404

@ -141,6 +141,21 @@ class NewsController < ApplicationController
ids = params[:asset_id].split(',')
update_kindeditor_assets_owner ids,@news.id,OwnerTypeHelper::NEWS
end
# 与我相关动态的记录add start
teachers = searchTeacherAndAssistant(@course)
for teacher in teachers
if(teacher.user_id != User.current.id)
notify = ActivityNotify.new()
notify.activity_container_id = @course.id
notify.activity_container_type = 'Course'
notify.activity_id = @news.id
notify.activity_type = 'News'
notify.notify_to = teacher.user_id
notify.is_read = 0
notify.save()
end
end
# 与我相关动态的记录add end
render_attachment_warning_if_needed(@news)
flash[:notice] = l(:notice_successful_create)
redirect_to course_news_index_url(@course)

@ -1,5 +1,5 @@
class OrganizationController < ApplicationController
layout 'project_base'
layout 'base_projects'
before_filter :require_admin, :except => [:index]
def index

@ -438,9 +438,9 @@ class ProjectsController < ApplicationController
case params[:role]
when '1'
@subPage_title = l :label_teacher_list
@members = searchTeacherAndAssistant(@project)
@members = searchTeacherAndAssistant(@project)
when '2'
@subPage_title = l :label_student_list
@subPage_title = l :label_student_list
@members = searchStudent(@project)
else
@subPage_title = ''
@ -578,7 +578,7 @@ class ProjectsController < ApplicationController
format.api { render_api_ok }
end
else
render :layout => "project_base"
render :layout => "base_projects"
end
# hide project in layout
@project = nil
@ -586,7 +586,7 @@ class ProjectsController < ApplicationController
def show_projects_score
respond_to do |format|
format.html { render :layout => "project_base"}
format.html { render :layout => "base_projects"}
format.js
end
end
@ -674,10 +674,10 @@ class ProjectsController < ApplicationController
private
def memberAccess
# 是课程,则判断当前用户是否参加了课程
# return 0 if @project.project_type == Project::ProjectType_project
# currentUser = User.current
render_403 unless User.current.member_of?(@project)
# 如果是私有项目,项目成员不对外公开,公开项目成员列表对外公开。
unless @project.is_public?
render_403 unless User.current.member_of?(@project)
end
end
def toggleCourse

@ -72,6 +72,22 @@ class StoresController < ApplicationController
l(:label_borad_project), #l(:label_contest_innovate),
l(:label_forum) ]
end
#缺失文件列表
def lost_file
attachments = []
Attachment.where("container_id is not null and container_type is not null and container_type <> 'Bid' and container_type <> 'HomeworkAttach'").each do |attachment|
unless File.exist?(attachment.diskfile)
attachments << attachment
end
end
respond_to do |format|
format.xls {
send_data(homework_to_xls(attachments), :type => "text/excel;charset=utf-8; header=present",
:filename => "#{l(:label_file_lost_list)}.xls")
}
end
end
private
@ -117,4 +133,27 @@ class StoresController < ApplicationController
else
end
end
#作品列表转换为excel
def homework_to_xls attachments
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => "homework"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
sheet1.row(0).concat(["文件ID","文件名","硬盘路径","上传时间","是否公开","所属对象","所属对象Id"])
count_row = 1
attachments.each do |attachment|
sheet1[count_row,0] = attachment.id
sheet1[count_row,1] = attachment.filename
sheet1[count_row,2] = attachment.diskfile
sheet1[count_row,3] = format_time(attachment.created_on)
sheet1[count_row,4] = (attachment.is_public == 1 || attachment.is_public) ? "" :""
sheet1[count_row,5] = attachment.container_type
sheet1[count_row,6] = attachment.container_id
count_row += 1
end
book.write xls_report
xls_report.string
end
end

@ -2,38 +2,39 @@ class StudentWorkController < ApplicationController
layout "base_courses"
include StudentWorkHelper
require 'bigdecimal'
before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty]
before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work]
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy]
before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
def index
@order,@b_sort,@name = params[:order] || "final_score",params[:sort] || "desc",params[:name] || ""
@order,@b_sort,@name = params[:order] || "score",params[:sort] || "desc",params[:name] || ""
@is_teacher = User.current.allowed_to?(:as_teacher,@course)
#老师 || 非匿评作业 || 匿评结束 显示所有的作品
@show_all = @is_teacher || @homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3
@show_all = @is_teacher || @homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3 || User.current.admin?
if @show_all
if @homework.homework_type == 1 || @is_teacher || User.current.admin?
if @homework.homework_type == 1 || @is_teacher || User.current.admin? #超级管理员 || 老师 || 匿评结束 显示所有的作品
if @order == "name"
@stundet_works = search_homework_member @homework.student_works.joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
@stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
else
@stundet_works = search_homework_member @homework.student_works.order("#{@order} #{@b_sort}"),@name
@stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
end
else
my_work = @homework.student_works.where(:user_id => User.current.id)
else #剩余情况: 学生 && 非匿评作业 如果未提交作品,只能看到自己的,提交了作品,能看到所有作品
my_work = @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
if my_work.empty?
@stundet_works = []
else
if @order == "name"
@stundet_works = search_homework_member @homework.student_works.joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
@stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
else
@stundet_works = search_homework_member @homework.student_works.order("#{@order} #{@b_sort}"),@name
@stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
end
end
end
else #学生
if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品
@stundet_works = @homework.student_works.where(:user_id => User.current.id)
@stundet_works = @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品
@is_evaluation = true
my_work = @homework.student_works.where(:user_id => User.current.id)
@ -41,6 +42,7 @@ class StudentWorkController < ApplicationController
end
end
@homework_commons = @course.homework_commons.order("created_at desc")
@homework_commons = @course.homework_commons.order("created_at desc")
@score = @b_sort == "desc" ? "asc" : "desc"
respond_to do |format|
format.html
@ -72,6 +74,11 @@ class StudentWorkController < ApplicationController
stundet_work.homework_common_id = @homework.id
stundet_work.user_id = User.current.id
stundet_work.save_attachments(params[:attachments])
if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d")
stundet_work.late_penalty = @homework.late_penalty
else
stundet_work.late_penalty = 0
end
render_attachment_warning_if_needed(stundet_work)
if stundet_work.save
respond_to do |format|
@ -241,25 +248,61 @@ class StudentWorkController < ApplicationController
end
end
#列表显示
#评列表显示
def student_work_absence_penalty
render_403 unless User.current.allowed_to?(:as_teacher,@course)
order = params[:order] || "desc"
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM(
if @homework.student_works.empty?
@stundet_works = []
else
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM(
SELECT * ,
(SELECT COUNT(*) FROM `student_works_evaluation_distributions` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS all_count,
(SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
FROM `student_works`
WHERE homework_common_id = #{@homework.id}
) AS table_1
ORDER BY absence #{order}")
) AS table_1
ORDER BY absence #{order}")
end
@order = order == "desc" ? "asc" : "desc"
respond_to do |format|
format.html
end
end
#导出缺评列表
def absence_penalty_list
if @homework.student_works.empty?
@stundet_works = []
else
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@stundet_works = StudentWork.find_by_sql("SELECT * FROM (SELECT *,(all_count - has_count) AS absence FROM(
SELECT * ,
(SELECT COUNT(*) FROM `student_works_evaluation_distributions` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS all_count,
(SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
FROM `student_works`
WHERE homework_common_id = #{@homework.id}
) AS table_1) AS table_2
where absence > 0 order by absence")
end
respond_to do |format|
format.xls {
send_data(absence_penalty_list_xls(@stundet_works), :type => "text/excel;charset=utf-8; header=present",
:filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_absence_list)}.xls")
}
end
end
#导出匿评列表
def evaluation_list
respond_to do |format|
format.xls {
send_data(evaluation_list_xls(@homework.student_works), :type => "text/excel;charset=utf-8; header=present",
:filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_evaluation_list)}.xls")
}
end
end
private
#获取作业
def find_homework
@ -280,7 +323,7 @@ class StudentWorkController < ApplicationController
#是不是当前课程的成员
#当前课程成员才可以看到作品列表
def member_of_course
render_403 unless User.current.member_of_course? @course || User.current.admin?
render_403 unless User.current.member_of_course?(@course) || User.current.admin?
end
#判断是不是当前作品的提交者
@ -289,6 +332,10 @@ class StudentWorkController < ApplicationController
render_403 unless (User.current.id == @work.user_id || User.current.admin?) && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 )
end
def teacher_of_course
render_403 unless User.current.allowed_to?(:as_teacher,@course)
end
#根据条件过滤作业结果
def search_homework_member homeworks,name
name = name.downcase
@ -298,6 +345,7 @@ class StudentWorkController < ApplicationController
select_homework
end
#作品列表转换为excel
def homework_to_xls items
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
@ -324,4 +372,55 @@ class StudentWorkController < ApplicationController
book.write xls_report
xls_report.string
end
#缺评列表转换为excel
def absence_penalty_list_xls items
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => "homework"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
sheet1.row(0).concat([l(:excel_student_id),l(:excel_nickname),l(:excel_user_name),l(:lable_all_penalty),l(:lable_has_penalty),l(:lable_absence_penalty)])
count_row = 1
items.each do |homework|
sheet1[count_row,0] = homework.user.user_extensions.student_id
sheet1[count_row,1] = homework.user.login
sheet1[count_row,2] = homework.user.lastname.to_s + homework.user.firstname.to_s
sheet1[count_row,3] = homework.all_count
sheet1[count_row,4] = homework.has_count
sheet1[count_row,5] = homework.absence
count_row += 1
end
book.write xls_report
xls_report.string
end
#匿评列表转换为excel
def evaluation_list_xls items
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => "homework"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
sheet1.row(0).concat([l(:label_work_name),l(:label_work_id),l(:label_work_autor),l(:label_evaluation_id),l(:label_evaluation_name),
l(:label_evaluation_score),l(:label_evaluation_common),l(:label_evaluation_time)])
count_row = 1
items.each do |homework|
homework.student_works_scores.where(:reviewer_role => 3).each do |score|
sheet1[count_row,0] = homework.name
sheet1[count_row,1] = homework.user.user_extensions.student_id
sheet1[count_row,2] = homework.user.show_name
sheet1[count_row,3] = score.user.user_extensions.student_id
sheet1[count_row,4] = score.user.show_name
sheet1[count_row,5] = score.score
sheet1[count_row,6] = score.comment
sheet1[count_row,7] = format_time(score.created_at)
count_row += 1
end
end
book.write xls_report
xls_report.string
end
end

@ -1,3 +1,4 @@
# encoding: utf-8
module ApiHelper
#获取用户的工作单位
def get_user_work_unit user
@ -64,4 +65,73 @@ module ApiHelper
def get_user_language user
(user.language.nil? || user.language == "") ? 'zh':user.language
end
# 获取课程作业的状态
def get_homework_status homework
homework_status = ""
if !homework.nil?
if homework.homework_type == 1 && homework.homework_detail_manual
case homework.homework_detail_manual.comment_status
when 1
homework_status = show_homework_deadline homework
when 2
homework_status = "正在匿评中"
when 3
homework_status = "匿评已结束"
end
elsif homework.homework_type == 0
homework_status = "未启用匿评"
elsif homework.homework_type == 2
homework_status = "编程作业"
else
end
end
homework_status
end
#获取作业的是否可以匿评的描述
def homework_status_desc homework
if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业
if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
link = "截止日期之前不可启动匿评"
elsif homework.student_works.count >= 2 #作业份数大于2
case homework.homework_detail_manual.comment_status
when 1
link = '启动匿评'
when 2
link = '关闭匿评'
when 3
link = " 匿评结束"
end
else
link = "提交作业数大于2才可启动匿评"
end
else
link = "未开启匿评作业不可启动匿评"
end
link
end
#获取
def get_submit_sutdent_list homework
studentlist = []
if homework.is_a?(Hash) && homework.key?(:studentlist)
studentlist = homework[:studentlist]
else
homework.student_works.order("created_at desc").page(1).per(6).each do |work|
studentlist << work.user
end
end
studentlist
end
#计算作业的截止日期,剩余日期
def show_homework_deadline homework
day = 0
if (day = (Date.parse(homework.end_time.to_s) - Date.parse(Time.now.to_s)).to_i) > 0
"距作业截止还有" << (Date.parse(Time.now.to_s) - Date.parse(homework.end_time.to_s)).to_i.to_s << ""
else
"已截止,但可补交"
end
end
end

@ -2278,7 +2278,9 @@ module ApplicationHelper
#获取匿评相关连接代码
def homework_anonymous_comment homework
if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业
if homework.student_works.count >= 2 #作业份数大于2
if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
link = "<span class='fr mr10 pr_join_span ' title='作业截止日期之前不可以启动匿评'>启动匿评</span>".html_safe
elsif homework.student_works.count >= 2 #作业份数大于2
case homework.homework_detail_manual.comment_status
when 1
link = link_to '启动匿评', alert_anonymous_comment_homework_common_path(homework), id: "#{homework.id}_start_anonymous_comment", remote: true, disable_with: '加载中...',:class => 'fr mr10 work_edit'

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save