Merge branch 'szzh' into dev_hjq

Conflicts:
	app/views/issues/_edit.html.erb
szzh
huang 10 years ago
commit e986ee4e4e

@ -311,6 +311,31 @@ module Mobile
present :data,news,with:Mobile::Entities::News present :data,news,with:Mobile::Entities::News
present :status,0 present :status,0
end 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
end end
end end
end end

@ -38,30 +38,6 @@ module Mobile
end end
end end
obj obj
elsif field == :homework_submit_num
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:submit_count]
end
end
obj
elsif field == :homework_submit_students
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:studentlist]
end
end
obj
elsif field == :homework_status
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:homework_status]
end
end
obj
else else
c[field] if (c.is_a?(Hash) && c.key?(field)) c[field] if (c.is_a?(Hash) && c.key?(field))
end end
@ -82,11 +58,8 @@ module Mobile
course_dynamic_expose :document_count course_dynamic_expose :document_count
course_dynamic_expose :topic_count course_dynamic_expose :topic_count
course_dynamic_expose :homework_count course_dynamic_expose :homework_count
course_dynamic_expose :homework_submit_students
course_dynamic_expose :homework_submit_num
course_dynamic_expose :homework_status
#在dynamics里解析出四种动态 #在dynamics里解析出四种动态
expose :document,using:Mobile::Entities::Attachment do |f,opt| expose :documents,using:Mobile::Entities::Attachment do |f,opt|
obj = nil obj = nil
f[:dynamics].each do |d| f[:dynamics].each do |d|
if d[:type] == 3 if d[:type] == 3
@ -95,20 +68,20 @@ module Mobile
end end
obj obj
end end
expose :topic,using:Mobile::Entities::Message do |f,opt| expose :topics,using:Mobile::Entities::Message do |f,opt|
obj = nil obj = nil
f[:dynamics].each do |d| f[:dynamics].each do |d|
if d[:type] == 2 if d[:type] == 2
obj = d[:topic] obj = d[:topics]
end end
end end
obj obj
end end
expose :homework,using:Mobile::Entities::Homework do |f,opt| expose :homeworks,using:Mobile::Entities::Homework do |f,opt|
obj = nil obj = nil
f[:dynamics].each do |d| f[:dynamics].each do |d|
if d[:type] == 4 if d[:type] == 4
obj = d[:homework] obj = d[:homeworks]
end end
end end
obj obj
@ -118,7 +91,17 @@ module Mobile
obj = nil obj = nil
f[:dynamics].each do |d| f[:dynamics].each do |d|
if d[:type] == 1 if d[:type] == 1
obj = d 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
end end
obj obj

@ -3,6 +3,8 @@ module Mobile
module Entities module Entities
class Homework < Grape::Entity class Homework < Grape::Entity
include Redmine::I18n include Redmine::I18n
include ApplicationHelper
include ApiHelper
def self.homework_expose(field) def self.homework_expose(field)
expose field do |f,opt| expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field) if f.is_a?(Hash) && f.key?(field)
@ -20,6 +22,12 @@ module Mobile
f.send(:name) f.send(:name)
when :homework_notsubmit_num when :homework_notsubmit_num
f.course.members.count - f.student_works.count 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
end end
end end
end end
@ -66,11 +74,13 @@ module Mobile
f[:homework_for_anonymous_comments] if f.is_a?(Hash) && f.key?(:homework_for_anonymous_comments) f[:homework_for_anonymous_comments] if f.is_a?(Hash) && f.key?(:homework_for_anonymous_comments)
end end
homework_expose :homework_submit_num
homework_expose :homework_notsubmit_num homework_expose :homework_notsubmit_num
expose :submit_student_list ,using:Mobile::Entities::User do |f,opt| expose :submit_student_list ,using: Mobile::Entities::User do |f,opt|
f[:studentlist] get_submit_sutdent_list f
end end
homework_expose :homework_status
end end
end end

@ -6,6 +6,12 @@ module Mobile
expose field do |f,opt| expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field) if f.is_a?(Hash) && f.key?(field)
f[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) elsif f.is_a?(Hash) && !f.key?(field)
n = f[:news] n = f[:news]
comments = f[:comments] comments = f[:comments]
@ -26,13 +32,20 @@ module Mobile
news_expose :title news_expose :title
expose :author,using: Mobile::Entities::User do |f, opt| expose :author,using: Mobile::Entities::User do |f, opt|
n = f[:news] obj = nil
n.author if n.respond_to?(:author) 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 end
#作者id #作者id
news_expose :author_id news_expose :author_id
#作者名 #作者名
news_expose :author_name news_expose :author_name
#作者头像url
news_expose :author_img_url
#新闻内容 #新闻内容
news_expose :description 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? get_user_location u unless u.user_extensions.nil?
when :brief_introduction when :brief_introduction
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.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 end
end end
@ -47,6 +49,10 @@ module Mobile
user_expose :location user_expose :location
#签名 #签名
user_expose :brief_introduction user_expose :brief_introduction
#总成绩
user_expose :score
#学号
user_expose :student_num
end end
end end

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

@ -443,25 +443,18 @@ class CoursesController < ApplicationController
def create def create
cs = CoursesService.new cs = CoursesService.new
@course = cs.create_course(params,User.current)[:course] @course = cs.create_course(params,User.current)[:course]
if @course.new_record? if @course
respond_to do |format| respond_to do |format|
format.html { render :action => 'new', :layout => 'new_base' } #Added by young flash[:notice] = l(:notice_successful_create)
format.api { render_validation_errors(@course) } 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 end
else else
respond_to do |format| respond_to do |format|
format.html { flash[:notice] = l(:notice_create_failed)
# render :layout => 'base_courses' # @course = Course.new
flash[:notice] = l(:notice_successful_create) format.html { redirect_to new_course_path } #Added by young
if params[:continue] format.api { render_validation_errors(@course) }
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 end
end end
end end
@ -532,7 +525,7 @@ class CoursesController < ApplicationController
@trackers = Tracker.sorted.all @trackers = Tracker.sorted.all
@course = Course.new @course = Course.new
@course.safe_attributes = params[:course] @course.safe_attributes = params[:course]
month = Time.now.month # month = Time.now.month
render :layout => 'new_base' render :layout => 'new_base'
end end

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

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

@ -92,7 +92,6 @@ class HomeworkCommonController < ApplicationController
@homework.publish_time = params[:homework_common][:publish_time] @homework.publish_time = params[:homework_common][:publish_time]
@homework.homework_type = params[:homework_common][:homework_type] @homework.homework_type = params[:homework_common][:homework_type]
@homework.late_penalty = params[:late_penalty] @homework.late_penalty = params[:late_penalty]
@homework.user_id = User.current.id
@homework.course_id = @course.id @homework.course_id = @course.id
#匿评作业相关属性 #匿评作业相关属性
@ -135,6 +134,7 @@ class HomeworkCommonController < ApplicationController
#statue 1:启动成功2启动失败作业总数大于等于2份时才能启动匿评3:已开启匿评,请务重复开启,4:没有开启匿评的权限 #statue 1:启动成功2启动失败作业总数大于等于2份时才能启动匿评3:已开启匿评,请务重复开启,4:没有开启匿评的权限
def start_anonymous_comment def start_anonymous_comment
@statue =4 and return unless User.current.admin? || User.current.allowed_to?(:as_teacher,@course) @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 if @homework_detail_manual.comment_status == 1
student_works = @homework.student_works student_works = @homework.student_works
if student_works && student_works.size >=2 if student_works && student_works.size >=2

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

@ -73,6 +73,22 @@ class StoresController < ApplicationController
l(:label_forum) ] l(:label_forum) ]
end 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 private
def project_classification project_type=0 def project_classification project_type=0
@ -117,4 +133,27 @@ class StoresController < ApplicationController
else else
end end
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 end

@ -2,10 +2,11 @@ class StudentWorkController < ApplicationController
layout "base_courses" layout "base_courses"
include StudentWorkHelper include StudentWorkHelper
require 'bigdecimal' 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 :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 :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy] 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 def index
@order,@b_sort,@name = params[:order] || "final_score",params[:sort] || "desc",params[:name] || "" @order,@b_sort,@name = params[:order] || "final_score",params[:sort] || "desc",params[:name] || ""
@ -241,9 +242,8 @@ class StudentWorkController < ApplicationController
end end
end end
#列表显示 #评列表显示
def student_work_absence_penalty def student_work_absence_penalty
render_403 unless User.current.allowed_to?(:as_teacher,@course)
order = params[:order] || "desc" order = params[:order] || "desc"
if @homework.student_works.empty? if @homework.student_works.empty?
@stundet_works = [] @stundet_works = []
@ -251,7 +251,7 @@ class StudentWorkController < ApplicationController
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")" work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM( @stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM(
SELECT * , 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 evaluation_num FROM homework_detail_manuals WHERE homework_detail_manuals.homework_common_id = #{@homework.id}) 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 (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` FROM `student_works`
WHERE homework_common_id = #{@homework.id} WHERE homework_common_id = #{@homework.id}
@ -264,6 +264,39 @@ class StudentWorkController < ApplicationController
end end
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 evaluation_num FROM homework_detail_manuals WHERE homework_detail_manuals.homework_common_id = #{@homework.id}) 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 private
#获取作业 #获取作业
def find_homework def find_homework
@ -293,6 +326,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 ) render_403 unless (User.current.id == @work.user_id || User.current.admin?) && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 )
end end
def teacher_of_course
render_403 unless User.current.allowed_to?(:as_teacher,@course)
end
#根据条件过滤作业结果 #根据条件过滤作业结果
def search_homework_member homeworks,name def search_homework_member homeworks,name
name = name.downcase name = name.downcase
@ -302,6 +339,7 @@ class StudentWorkController < ApplicationController
select_homework select_homework
end end
#作品列表转换为excel
def homework_to_xls items def homework_to_xls items
xls_report = StringIO.new xls_report = StringIO.new
book = Spreadsheet::Workbook.new book = Spreadsheet::Workbook.new
@ -328,4 +366,55 @@ class StudentWorkController < ApplicationController
book.write xls_report book.write xls_report
xls_report.string xls_report.string
end 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 end

@ -1,3 +1,4 @@
# encoding: utf-8
module ApiHelper module ApiHelper
#获取用户的工作单位 #获取用户的工作单位
def get_user_work_unit user def get_user_work_unit user
@ -64,4 +65,45 @@ module ApiHelper
def get_user_language user def get_user_language user
(user.language.nil? || user.language == "") ? 'zh':user.language (user.language.nil? || user.language == "") ? 'zh':user.language
end 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 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
"距作业截止还有" << (Date.parse(Time.now.to_s) - Date.parse(homework.end_time.to_s)).to_i.to_s << ""
end
end end

@ -2278,7 +2278,9 @@ module ApplicationHelper
#获取匿评相关连接代码 #获取匿评相关连接代码
def homework_anonymous_comment homework def homework_anonymous_comment homework
if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业 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 case homework.homework_detail_manual.comment_status
when 1 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' 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'

@ -35,7 +35,7 @@ module CoursesHelper
#生成课程老师成员链接 #生成课程老师成员链接
def course_teacher_link teacher_num def course_teacher_link teacher_num
if User.current.member_of_course?(@course) if User.current.member_of_course?(@course) || User.current.admin?
link_to "#{teacher_num}", course_member_path(@course, :role => 1), :class => 'info_foot_num c_blue' link_to "#{teacher_num}", course_member_path(@course, :role => 1), :class => 'info_foot_num c_blue'
else else
content_tag 'span',teacher_num, :class => 'info_foot_num c_blue' content_tag 'span',teacher_num, :class => 'info_foot_num c_blue'
@ -44,7 +44,7 @@ module CoursesHelper
#生成课程学生列表连接 #生成课程学生列表连接
def course_student_link student_num def course_student_link student_num
if (User.current.logged? && @course.open_student == 1) || (User.current.member_of_course?(@course)) if (User.current.logged? && @course.open_student == 1) || (User.current.member_of_course?(@course)) || User.current.admin?
link_to "#{student_num}", course_member_path(@course, :role => 2), :class => 'info_foot_num c_blue' link_to "#{student_num}", course_member_path(@course, :role => 2), :class => 'info_foot_num c_blue'
else else
content_tag 'span',student_num, :class => 'info_foot_num c_blue' content_tag 'span',student_num, :class => 'info_foot_num c_blue'

@ -839,7 +839,7 @@ class Project < ActiveRecord::Base
# Yields the given block for each project with its level in the tree # Yields the given block for each project with its level in the tree
def self.project_tree(projects, &block) def self.project_tree(projects, &block)
ancestors = [] ancestors = []
projects.sort_by(&:lft).each do |project| projects.sort_by(&:id).each do |project|
while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop ancestors.pop
end end

@ -120,10 +120,10 @@ class CoursesService
if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course))) if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course)))
raise '403' raise '403'
end end
scope = @course ? @course.news.course_visible(current_user) : News.course_visible(current_user) scope = @course ? @course.news.order("news.created_on desc").course_visible(current_user) : News.order("news.created_on desc").course_visible(current_user)
news = [] news = []
scope.each do |n| scope.each do |n|
news << {:id => n.id,:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count} news << {:id => n.id,:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :author=>n.author, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
end end
news news
end end
@ -201,12 +201,14 @@ class CoursesService
@course.class_period = params[:class_period].to_i @course.class_period = params[:class_period].to_i
params[:course][:is_public] ? @course.is_public = 1 : @course.is_public = 0 params[:course][:is_public] ? @course.is_public = 1 : @course.is_public = 0
params[:course][:open_student] ? @course.open_student = 1 : @course.open_student = 0 params[:course][:open_student] ? @course.open_student = 1 : @course.open_student = 0
else
end end
@issue_custom_fields = IssueCustomField.sorted.all @issue_custom_fields = IssueCustomField.sorted.all
@trackers = Tracker.sorted.all @trackers = Tracker.sorted.all
if @course.save if @course && @course.save
#unless User.current.admin? #unless User.current.admin?
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
m = Member.new(:user => current_user, :roles => [r]) m = Member.new(:user => current_user, :roles => [r])
@ -330,7 +332,7 @@ class CoursesService
def homework_list params,current_user def homework_list params,current_user
course = Course.find(params[:id]) course = Course.find(params[:id])
if course.is_public != 0 || current_user.member_of_course?(course) if course.is_public != 0 || current_user.member_of_course?(course)
bids = course.homework_commons.page(1).per(3).order('created_at DESC') bids = course.homework_commons.page(1).per(20).order('created_at DESC')
bids = bids.like(params[:name]) if params[:name].present? bids = bids.like(params[:name]) if params[:name].present?
homeworks = [] homeworks = []
bids.each do |bid| bids.each do |bid|
@ -665,58 +667,41 @@ class CoursesService
course = mp.course course = mp.course
latest_course_dynamics = [] latest_course_dynamics = []
dynamics_count = 0 dynamics_count = 0
# 课程学霸 学生总分数排名靠前的5个人
homework_count = course.homework_commons.count
unless homework_count == 0
sql = "select users.*,sum(IFNULL(0,student_works.final_score))/#{homework_count} score from student_works left outer join users on student_works.user_id = users.id" <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{course.id}) GROUP BY student_works.user_id ORDER BY score limit 0,6"
latest_course_dynamics <<{:type=> 6,:time=>Time.now.to_s,:count=> 6,:better_students=> User.find_by_sql(sql)}
dynamics_count += 1
end
# 课程通知 # 课程通知
latest_news = course.news.order("created_on desc").first latest_news = course.news.page(1).per(2).order("created_on desc")
unless latest_news.nil? unless latest_news.first.nil?
latest_course_dynamics << {:type => 1, :time => latest_news.created_on,:count=>course.news.count, latest_course_dynamics << {:type => 1, :time => latest_news.first.created_on,:count=>course.news.count,
:news => latest_news} :news => latest_news.all}
dynamics_count += 1 dynamics_count += 1
end end
# 课程讨论区 # 课程讨论区
latest_message = course.boards.first.topics[0] # latest_message = course.boards.first.topics.page(1).per(2)
unless latest_message.nil? # unless latest_message.first.nil?
latest_course_dynamics << {:type => 2, :time => latest_message.created_on, :count =>course.boards.nil? ? 0 : course.boards.first.topics.count, # latest_course_dynamics << {:type => 2, :time => latest_message.first.created_on, :count =>course.boards.nil? ? 0 : course.boards.first.topics.count,
:topic => latest_message} # :topics => latest_message.all}
dynamics_count += 1 # dynamics_count += 1
end # end
# 课程资源 # 课程资源
latest_attachment = course.attachments.order("created_on desc").first # latest_attachment = course.attachments.order("created_on desc").page(1).per(2)
unless latest_attachment.nil? # unless latest_attachment.first.nil?
latest_course_dynamics << {:type => 3, :time => latest_attachment.created_on,:count =>course.attachments.count , :documents=>latest_attachment} # latest_course_dynamics << {:type => 3, :time => latest_attachment.first.created_on,:count =>course.attachments.count , :documents=>latest_attachment}
dynamics_count += 1 # dynamics_count += 1
end # end
#课程作业 已经交的学生列表暂定显示6人未交的学生列表作业的状态 #课程作业 已经交的学生列表暂定显示6人未交的学生列表作业的状态
homework = course.homework_commons.order('created_at desc').first homeworks = course.homework_commons.page(1).per(2).order('created_at desc')
homework_status = ""; unless homeworks.first.nil?
# 判断作业所处的状态,如果是刚发布,就获取剩余时间 latest_course_dynamics << {:type => 4, :time => homeworks.first.updated_at, :count=>course.homework_commons.count , :homeworks => homeworks}
#如果是匿评状态,显示正在匿评
#如果是匿评结束,显示匿评结束
#获取作业提交的前6个人不足6个显示所有
studentlist = []
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
# 获取提交作业的前六个学生的名字 和 头像路径
homework.student_works.order("created_at desc").page(1).per(6).each do |work|
studentlist << {:image_url=> url_to_avatar(work.user),:user_name=>work.user.realname}
end
latest_course_dynamics << {:type => 4, :time => homework.updated_at, :count=>course.homework_commons.count,:submit_count => homework.student_works.count , :homework => homework, :homework_status => homework_status, :studentlist => studentlist}
dynamics_count += 1 dynamics_count += 1
end end
latest_course_dynamics.sort! { |order, newer| newer[:time] <=> order[:time] } latest_course_dynamics.sort! { |order, newer| newer[:time] <=> order[:time] }
@ -730,9 +715,44 @@ class CoursesService
result result
end end
#计算作业的截止日期,剩余日期 # 获取课程历次作业的学生总成绩
def show_homework_deadline homework def students_score_list params,current_user
"距作业截止还有" << (Date.parse(Time.now.to_s) - Date.parse(homework.end_time.to_s)).to_i.to_s << "" homework_count = Course.find(params[:course_id]).homework_commons.count
page = (params[:page] || 1) - 1
sql = "select users.*,sum(IFNULL(0,student_works.final_score))/#{homework_count} score from student_works left outer join users on student_works.user_id = users.id" <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{params[:course_id]}) GROUP BY student_works.user_id ORDER BY score limit #{page*10},10"
User.find_by_sql(sql)
end
# 获取某次作业的所有作业列表
def student_work_list params,current_user
is_teacher = User.current.allowed_to?(:as_teacher,Course.find(params[:course_id]))
homework = HomeworkCommon.find(params[:homework_id])
student_works = []
#老师 || 非匿评作业 || 匿评结束 显示所有的作品
show_all = is_teacher || homework.homework_type != 1 || homework.homework_detail_manual.comment_status == 3
if show_all
if homework.homework_type == 1 || is_teacher || current_user.admin?
student_works = homework.student_works.page(params[:page] || 1).per(10).order("final_score desc ")
else
my_work = homework.student_works.where(:user_id => current_user.id)
if my_work.empty?
student_works = []
else
student_works = homework.student_works.page(params[:page] || 1).per(10).order("final_score desc")
end
end end
else #学生
if homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品
student_works = homework.student_works.where(:user_id => current_user.id).page(params[:page] || 1).per(10)
elsif homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品
#is_evaluation = true
my_work = homework.student_works.where(:user_id => current_user.id).page(params[:page] || 1).per(10)
student_works = my_work + current_user.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == homework.id}
end end
end
student_works
end
end

@ -0,0 +1,76 @@
<div class="contextual">
<%= link_to l(:label_course_new), {:controller => 'courses', :action => 'new'}, :class => 'icon icon-add' %>
</div>
<h3>
<%=l(:label_course_all)%>
</h3>
<%= form_tag({}, :method => :get) do %>
<fieldset>
<label for='name'>
课程:
</label>
<%= text_field_tag 'name', params[:name], :size => 30, :placeholder => '课程名称' %>
<%= submit_tag l(:button_apply), :class => "small", :name => nil %>
<a class="icon icon-reload" onclick="$('#name').val('')" style="cursor: pointer;text-decoration: none;">
<%= l(:button_clear)%>
</a>
</fieldset>
<% end %>
&nbsp;
<div class="autoscroll">
<table class="list" style="width: 100%;table-layout: fixed">
<thead>
<tr>
<th style="width: 30px;">
序号
</th>
<th style="width: 120px;">
课程
</th>
<th style="width: 50px;">
主讲老师
</th>
<th style="width: 30px;">
学时
</th>
<th style="width: 20px;">
<%=l(:field_is_public)%>
</th>
<th style="width: 70px;">
<%=l(:field_created_on)%>
</th>
</tr>
</thead>
<tbody>
<% @courses.each do |course| %>
<tr class="<%= cycle("odd", "even") %>">
<td style="text-align: center;">
<%= course.id %>
</td>
<td style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="name" title='<%=course.name%>'>
<span>
<%= link_to(course.name, course_path(course.id)) %>
</span>
</td>
<td align="center">
<%= link_to(course.try(:teacher).try(:realname).truncate(6, omission: '...'), user_path(course.teacher)) %>
</td>
<td align="center">
<%= course.class_period %>
</td>
<td class="center">
<%= checked_image course.is_public? %>
</td>
<td class="center">
<%= format_date(course.created_at) %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
<% html_title(l(:label_course_all)) -%>

@ -1,5 +1,5 @@
<div class="contextual"> <div class="contextual">
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %> <%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
</div> </div>
<h3> <h3>
@ -7,7 +7,7 @@
</h3> </h3>
<%= form_tag({}, :method => :get) do %> <%= form_tag({}, :method => :get) do %>
<fieldset> <fieldset>
<legend> <legend>
<%= l(:label_filter_plural) %> <%= l(:label_filter_plural) %>
</legend> </legend>
@ -21,27 +21,35 @@
<%= text_field_tag 'name', params[:name], :size => 30 %> <%= text_field_tag 'name', params[:name], :size => 30 %>
<%= submit_tag l(:button_apply), :class => "small", :name => nil %> <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
<%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %> <%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
</fieldset> </fieldset>
<% end %> <% end %>
&nbsp; &nbsp;
<div class="autoscroll"> <div class="autoscroll">
<table class="list" style="width: 100%;table-layout: fixed"> <table class="list" style="width: 100%;table-layout: fixed">
<thead><tr> <thead>
<th> <tr>
<th style="width: 30px;">
序号
</th>
<th style="width: 120px;">
<%=l(:label_project)%> <%=l(:label_project)%>
</th> </th>
<th> <th style="width: 20px;">
<%=l(:field_is_public)%> <%=l(:field_is_public)%>
</th> </th>
<th> <th style="width: 30px;">
<%=l(:field_created_on)%> <%=l(:field_created_on)%>
</th> </th>
<th></th> <th style="width: 70px;"></th>
</tr></thead> </tr>
</thead>
<tbody> <tbody>
<% project_tree(@projects) do |project, level| %> <% project_tree(@projects) do |project, level| %>
<tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>"> <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
<td style="text-align: center;">
<%= project.id %>
</td>
<td style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="name" title='<%=project.name%>'> <td style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" class="name" title='<%=project.name%>'>
<span> <span>
<%= link_to_project_settings(project, {}) %> <%= link_to_project_settings(project, {}) %>
@ -60,9 +68,9 @@
<%= link_to(l(:button_delete), project_path(project), :method => :delete, :class => 'icon icon-del') %> <%= link_to(l(:button_delete), project_path(project), :method => :delete, :class => 'icon icon-del') %>
</td> </td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>
</table> </table>
</div> </div>
<% html_title(l(:label_project_plural)) -%> <% html_title(l(:label_project_plural)) -%>

@ -9,7 +9,7 @@
<div class="ping_distop"> <div class="ping_distop">
<!-- <a style=" font-weight:bold; color:#15bccf; margin-right:30px; background:none;" target="_blank" href="#">gugu01</a> --> <!-- <a style=" font-weight:bold; color:#15bccf; margin-right:30px; background:none;" target="_blank" href="#">gugu01</a> -->
<span> <span>
<%= link_to journal.user, user_path(journal.user),:class => 'c_blue fb fl mb10', :target => "_blank"%> <%= link_to journal.user.show_name, user_path(journal.user),:class => 'c_blue fb fl mb10', :target => "_blank"%>
</span> </span>
<span class="c_grey fr"> <span class="c_grey fr">
<%= format_time(journal.created_on) %> <%= format_time(journal.created_on) %>
@ -18,6 +18,7 @@
<p> <p>
<%= journal.notes.html_safe %> <%= journal.notes.html_safe %>
</p> </p>
<div class="cl"></div>
</div> </div>
<div class="ping_disfoot"> <div class="ping_disfoot">
<% ids = 'project_respond_form_'+ journal.id.to_s%> <% ids = 'project_respond_form_'+ journal.id.to_s%>

@ -1,5 +1,5 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>'); $('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>');
showModal('ajax-modal', '510px'); showModal('ajax-modal', '540px');
$('#ajax-modal').css('height','330px'); $('#ajax-modal').css('height','330px');
$('#ajax-modal').siblings().remove(); $('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;padding-left: 513px;'>" + $('#ajax-modal').before("<span style='float: right;cursor:pointer;padding-left: 513px;'>" +

@ -22,7 +22,7 @@
<div class="for_img_thumbnails"> <div class="for_img_thumbnails">
<% curse_attachments.each do |file| %> <% curse_attachments.each do |file| %>
<% if file.is_public? || User.current.member_of_course?(course) %> <% if file.is_public? || User.current.member_of_course?(course) || User.current.admin? %>
<div class="re_con_box" id="container_files_<%= file.id %>"> <div class="re_con_box" id="container_files_<%= file.id %>">
<div class=""> <div class="">
<%= link_to truncate(file.filename,length: 35, omission: '...'), <%= link_to truncate(file.filename,length: 35, omission: '...'),

@ -4,7 +4,10 @@
<% if memos.any? %> <% if memos.any? %>
<% memos.each do |topic| %> <% memos.each do |topic| %>
<table class="content-text-list"> <table class="content-text-list">
<tr><td colspan="2" valign="top" width="50" ><%= link_to image_tag(url_to_avatar(topic.author), :class => "avatar"), user_path(topic.author) if topic.author%></td> <tr>
<td colspan="2" valign="top" style="width: 50px;">
<%= link_to image_tag(url_to_avatar(topic.author), :class => "avatar"), user_path(topic.author) if topic.author%>
</td>
<td> <td>
<table width="630px" border="0"> <table width="630px" border="0">
<tr> <tr>
@ -33,7 +36,8 @@
<br /> <br />
</span></td> </span></td>
</tr> </tr>
</table></td> </table>
</td>
</tr> </tr>
</table> </table>
<% end %> <% end %>

@ -41,12 +41,13 @@
<%= homework.description.html_safe %> <%= homework.description.html_safe %>
</div> </div>
</div> </div>
<div class="cl"></div>
<div class="news_foot currentDd" id="bid_show_more_des_button<%= homework.id%>" onclick="bid_show_more_des(<%= homework.id%>);" style="cursor:pointer;display: none;"> <div class="news_foot currentDd fr" id="bid_show_more_des_button<%= homework.id%>" onclick="bid_show_more_des(<%= homework.id%>);" style="cursor:pointer;display: none;">
[展开] [展开]
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<div class="mt5"> <div class="mt5">
<% unless homework.attachments.empty?%> <% unless homework.attachments.empty?%>
<span class="tit_fb" style="width: auto;"> 附件:</span> <span class="tit_fb" style="width: auto;"> 附件:</span>

@ -5,6 +5,8 @@ $("#<%= @homework.id %>_start_anonymous_comment").replaceWith('<%= escape_javasc
alert('启动失败\n作业总数大于等于2份时才能启动匿评'); alert('启动失败\n作业总数大于等于2份时才能启动匿评');
<% elsif @statue == 3%> <% elsif @statue == 3%>
alert("已开启匿评,请务重复开启"); alert("已开启匿评,请务重复开启");
<% elsif @statue == 3%> <% elsif @statue == 4%>
alert("您没有权限开启匿评"); alert("您没有权限开启匿评");
<% elsif @statue == 5%>
alert("作业提交截止之后才能启动匿评");
<% end %> <% end %>

@ -5,7 +5,7 @@
<% if @edit_allowed || !@allowed_statuses.empty? %> <% if @edit_allowed || !@allowed_statuses.empty? %>
<div id="all_attributes" style="display:none;"> <div id="all_attributes" style="display:none;">
<%= render :partial => 'form', :locals => {:f => f} %> <%= render :partial => 'form', :locals => {:f => f} %>
<div class="ping_C mb10"></div> <div class="ping_C mb10 ml10"></div>
<!--<a remote="true" href="javascript:void(0)" class="blue_btn fl" style="margin-left: 80px;margin-bottom: 10px;margin-top: -10px;" onclick="$('#issue-form').submit();">--> <!--<a remote="true" href="javascript:void(0)" class="blue_btn fl" style="margin-left: 80px;margin-bottom: 10px;margin-top: -10px;" onclick="$('#issue-form').submit();">-->
<!--<%#= l(:button_submit) %>--> <!--<%#= l(:button_submit) %>-->
<!--</a>--> <!--</a>-->
@ -20,7 +20,9 @@
<%= render :partial => 'history', :locals => {:issue => @issue, :journals => @journals} %> <%= render :partial => 'history', :locals => {:issue => @issue, :journals => @journals} %>
</div> </div>
<% end %> <% end %>
<fieldset><legend><%= l(:label_project_issue_feedback) %></legend> <div id="journal_issue_note" class="wiki"></div>
<input name="issue_quote_new" type="hidden" value="<%= %>" />
<fieldset><legend>回复</legend>
<%= f.text_area :notes, :style => "width:99%;", :rows => "5", :no_label => true %> <%= f.text_area :notes, :style => "width:99%;", :rows => "5", :no_label => true %>
</fieldset> </fieldset>
<!--<%# if @issue.safe_attribute? 'private_notes' %>--> <!--<%# if @issue.safe_attribute? 'private_notes' %>-->

@ -20,7 +20,9 @@
<!--编辑、引用、回复按钮--> <!--编辑、引用、回复按钮-->
<div class="ping_disfoot"><%= render_links_easy(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %></div> <div class="ping_disfoot"><%= render_links_easy(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %></div>
<!--回复内容、引用内容--> <!--回复内容、引用内容-->
<p><%= render_notes_issue(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %></p> <p>
<%= render_notes_issue(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>
</p>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<div class="cl"></div> <div class="cl"></div>

@ -109,6 +109,9 @@
<%= render :partial => 'edit' %> <%= render :partial => 'edit' %>
</div> </div>
<p style="padding-top: 5px"></p> <p style="padding-top: 5px"></p>
<!--引用时不能修改,剥离出引用内容-->
<a remote="true" href="javascript:void(0)" class="blue_btn fr mr80" onclick="issue_desc_editor.sync();$('#issue-form').submit();"> <a remote="true" href="javascript:void(0)" class="blue_btn fr mr80" onclick="issue_desc_editor.sync();$('#issue-form').submit();">
<%= l(:button_submit) %> <%= l(:button_submit) %>
</a> </a>

@ -1,11 +1,11 @@
$('#issue_notes').val("<%= raw escape_javascript(@content) %>"); $('#journal_issue_note').html("<%= raw escape_javascript(@content.html_safe) %>");
$("input[name='issue_quote_new']").val("<%= raw escape_javascript(@content.html_safe) %>");
<% <%
# when quoting a private journal, check the private checkbox # when quoting a private journal, check the private checkbox
if @journal && @journal.private_notes? if @journal && @journal.private_notes?
%> %>
$('#issue_private_notes').attr('checked', true); $('#issue_private_notes').attr('checked', true);
<% end %> <% end %>
showAndScrollTo("update", "notes"); showAndScrollTo("update", "notes");
$('#notes').scrollTop = $('#notes').scrollHeight - $('#notes').clientHeight; $('#notes').scrollTop = $('#notes').scrollHeight - $('#notes').clientHeight;

@ -17,15 +17,14 @@
visiable = hidden_non_project && hidden_non_project.value == "0"%> visiable = hidden_non_project && hidden_non_project.value == "0"%>
<ul class="sub_menu"> <ul class="sub_menu">
<% if @show_course == 1 && !visiable %> <% if @show_course == 1 && !visiable %>
<% if User.current.user_extensions && [UserExtensions::TEACHER, UserExtensions::STUDENT].include?(User.current.user_extensions.identity) -%>
<% hasCourse=false %> <% hasCourse=false %>
<% User.current.courses.each do |course| %> <% User.current.courses.each do |course| %>
<% if !course_endTime_timeout?(course) %> <% if !course_endTime_timeout?(course) %>
<% hasCourse=true %> <% hasCourse=true %>
<% break %>
<% end %> <% end %>
<% end %> <% end %>
<%= render :partial => 'layouts/user_courses_list', :locals => {:hasCourse => hasCourse} %> <%= render :partial => 'layouts/user_courses_list', :locals => {:hasCourse => hasCourse} %>
<% end -%>
<% end %> <% end %>
<%= render :partial => 'layouts/user_project_list', :locals => {:hasCourse => hasCourse} %> <%= render :partial => 'layouts/user_project_list', :locals => {:hasCourse => hasCourse} %>
<li style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"> <li style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">

@ -20,7 +20,7 @@
<li id="current_user_li"> <li id="current_user_li">
<%= link_to "#{User.current.login}<span class='pic_triangle'></span>".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.host_user}, target:"_blank", :class => "uses_name"%> <%= link_to "#{User.current.login}<span class='pic_triangle'></span>".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.host_user}, target:"_blank", :class => "uses_name"%>
<ul id="user_sub_menu" style="right: 0px;display: none;"> <ul id="user_sub_menu" style="right: 0px;display: none;">
<% if @show_course == 1 && User.current.user_extensions && [UserExtensions::TEACHER, UserExtensions::STUDENT].include?(User.current.user_extensions.identity) %> <% if @show_course == 1 %>
<% user_course = get_user_course User.current%> <% user_course = get_user_course User.current%>
<% unless user_course.empty? %> <% unless user_course.empty? %>
<li id="my_courses_li"> <li id="my_courses_li">

@ -49,7 +49,7 @@
:style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%> :style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_notice_reply) %></span> <span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_notice_reply) %></span>
<%= link_to truncate(course_news_comment.comments.html_safe,length: 30,omission: '...'), news_url(course_news_comment.commented,:token => @token.value), <%= link_to truncate(l(:label_course_notice_point),length: 30,omission: '...'), news_url(course_news_comment.commented,:token => @token.value),
:class => 'wmail_info', :class => 'wmail_info',
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" :style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
%> %>
@ -342,7 +342,7 @@
:style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%> :style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:lable_project_mail_notice_reply) %></span> <span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:lable_project_mail_notice_reply) %></span>
<%= link_to truncate(project_news_comment.comments.html_safe,length: 30,omission: '...'), news_url(project_news_comment.commented,:token => @token.value), <%= link_to truncate(l(:lable_project_notice_point),length: 30,omission: '...'), news_url(project_news_comment.commented,:token => @token.value),
:class => 'wmail_info', :class => 'wmail_info',
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %> :style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
<span class="wmail_date" style="color:#6e6e6e; float:left;display:block; margin-left:40px;"><%= format_time(project_news_comment.created_on) %></span> <span class="wmail_date" style="color:#6e6e6e; float:left;display:block; margin-left:40px;"><%= format_time(project_news_comment.created_on) %></span>

@ -45,9 +45,11 @@
<%= news.description.html_safe %> <%= news.description.html_safe %>
</div> </div>
</div> </div>
<div class="news_foot currentDd" style="cursor:pointer;display: none;" onclick="news_show_more_des(<%= news.id %>);" id="news_foot_<%= news.id %>"> <div class="cl"></div>
<div class="news_foot currentDd fr" style="cursor:pointer;display: none;" onclick="news_show_more_des(<%= news.id %>);" id="news_foot_<%= news.id %>">
[展开] [展开]
</div> </div>
<div class="cl mb5"></div>
<span class="fl"><%= l(:label_create_time)%><%= format_time(news.created_on)%></span> <span class="fl"><%= l(:label_create_time)%><%= format_time(news.created_on)%></span>
<%= link_to_attachments_course news %> <%= link_to_attachments_course news %>
<div class="cl"></div> <div class="cl"></div>

@ -1,5 +1,5 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'projects/join_project') %>'); $('#ajax-modal').html('<%= escape_javascript(render :partial => 'projects/join_project') %>');
showModal('ajax-modal', '510px'); showModal('ajax-modal', '540px');
$('#ajax-modal').css('height','260px'); $('#ajax-modal').css('height','260px');
$('#ajax-modal').siblings().remove(); $('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;padding-left: 513px;'>" + $('#ajax-modal').before("<span style='float: right;cursor:pointer;padding-left: 513px;'>" +

@ -1,8 +1,9 @@
<div style="width: 57%;margin: 10px auto;"> <div style="width: 67%;margin: 10px auto;">
<%= form_tag( search_stores_path, method: 'post') do %> <%= form_tag( search_stores_path, method: 'post') do %>
<%= text_field_tag 'name', params[:name], placeholder: l('welcome.search.information'), name: "name", :class => 'blueinputbar', :style => 'width:450px;'%> <%= text_field_tag 'name', params[:name], placeholder: l('welcome.search.information'), name: "name", :class => 'blueinputbar', :style => 'width:450px;'%>
&nbsp;&nbsp; &nbsp;&nbsp;
<%= submit_tag l(:label_search), :class => "enterprise"%> <%= submit_tag l(:label_search), :class => "enterprise "%>
<% end %> <% end %>
<%= link_to("导出缺失列表",lost_file_stores_path(:format => 'xls'),:style => "background-color: #15bccf;padding: 4px 5px;color: white;") if User.current.admin?%>
<div class='font_lighter' style="display: inline-block; margin-top:3px;"><%= l(:label_resources_search_all)%></div> <div class='font_lighter' style="display: inline-block; margin-top:3px;"><%= l(:label_resources_search_all)%></div>
</div> </div>

@ -13,30 +13,31 @@
<li class=" hwork_time f14 fb c_dark"> <li class=" hwork_time f14 fb c_dark">
<%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "created_at"%> <% if @show_all && @order == "created_at"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
<% end%> <% end%>
</li> </li>
<li class="mr5 w40 ml15"> <li class="mr5 w40 ml15">
<%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "teacher_score"%> <% if @show_all && @order == "teacher_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
<% end%> <% end%>
</li> </li>
<li class="mr5 w40 ml20"> <li class="mr5 w40 ml20">
<%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "teaching_asistant_score"%> <% if @show_all && @order == "teaching_asistant_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
<% end%> <% end%>
</li> </li>
<li class="mr5 ml10 w40"> <li class="mr5 ml10 w40">
<%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "student_score"%> <% if @show_all && @order == "student_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
<% end%> <% end%>
</li> </li>
<li class="ml20"> <li class="ml20">
<%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "final_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "final_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "final_score"%> <% if @show_all && @order == "final_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "final_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
<% end%> <% end%>
</li> </li>

@ -1,6 +1,7 @@
$("#add_score_reply_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'add_score_reply', :locals => {:score => @score}) %>"); $("#add_score_reply_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'add_score_reply', :locals => {:score => @score}) %>");
<% if @status && @status == 1%> <% if @status && @status == 1%>
$("#replay_histroy_<%= @score.id%>").prepend("<%= escape_javascript(render :partial => 'jour_replay', :locals => {:jour => @jour}) %>"); $("#replay_histroy_<%= @score.id%>").prepend("<%= escape_javascript(render :partial => 'jour_replay', :locals => {:jour => @jour}) %>");
$("#add_score_reply_<%= @score.id%>").hide();
<% else%> <% else%>
alert("回复内容不能为空"); alert("回复内容不能为空");
<% end%> <% end%>

@ -50,17 +50,27 @@
<% if @show_all%> <% if @show_all%>
<input type="text" value="<%= @name%>" placeholder="昵称、学号、姓名搜索" class="min_search ml10 fl" onkeypress="SearchByName($(this),'<%= student_work_index_path(:homework => @homework.id)%>',event);"> <input type="text" value="<%= @name%>" placeholder="昵称、学号、姓名搜索" class="min_search ml10 fl" onkeypress="SearchByName($(this),'<%= student_work_index_path(:homework => @homework.id)%>',event);">
<a class="student_work_search fl" onclick="SearchByName_1($(this).prev(),'<%= student_work_index_path(:homework => @homework.id)%>');" href="javascript:void(0)">搜索</a> <a class="student_work_search fl" onclick="SearchByName_1($(this).prev(),'<%= student_work_index_path(:homework => @homework.id)%>');" href="javascript:void(0)">搜索</a>
<%= link_to "缺评情况",student_work_absence_penalty_student_work_index_path(:homework => @homework.id), :class => "student_work_search fl", :target => "_blank" if @is_teacher && @homework.homework_type == 1 && @homework.homework_detail_manual.comment_status != 1 %> <%= link_to("缺评情况",student_work_absence_penalty_student_work_index_path(:homework => @homework.id), :class => "student_work_search fl", :target => "_blank") if((@is_teacher || User.current.admin?) && @homework.homework_type == 1) %>
<% end%> <% end%>
<% if @is_teacher%> <% if @is_teacher%>
<div class="fr"> <div class="fr">
<% if @homework.student_works.empty?%> <% if @homework.student_works.empty?%>
<%= link_to "附件", "javascript:void(0)", class: "down_btn fr", :onclick => "alert('没有学生提交作业,无法下载附件')" %> <%= link_to "附件", "javascript:void(0)", class: "down_btn fr zip_download_alert", :onclick => "alert('没有学生提交作业,无法下载附件')" %>
<% else%> <% else%>
<%= link_to "附件", zipdown_assort_path(obj_class: @homework.class, obj_id: @homework, format: :json), <%= link_to "附件", zipdown_assort_path(obj_class: @homework.class, obj_id: @homework, format: :json),
remote: true, class: "down_btn fr", :id => "download_homework_attachments" %> remote: true, class: "down_btn fr zip_download_alert", :id => "download_homework_attachments" %>
<% end%> <% end%>
<div class="info_ni">
使用
<span class="c_red">winzip</span>
工具进行解压可能会导致
<span class="c_red">下载文件乱码</span>
,建议您使用
<span class="c_red">winrar</span>
工具进行解压
</div>
<%= link_to "匿评", evaluation_list_student_work_index_path(:homework => @homework.id, :format => 'xls'),:class=>'down_btn fr'%>
<%= link_to "缺评", absence_penalty_list_student_work_index_path(:homework => @homework.id, :format => 'xls'),:class=>'down_btn fr'%>
<%= link_to l(:label_list), student_work_index_path(:homework => @homework.id,:order => @order, :sort => @b_sort, :name => @name, :format => 'xls'),:class=>'down_btn fr'%> <%= link_to l(:label_list), student_work_index_path(:homework => @homework.id,:order => @order, :sort => @b_sort, :name => @name, :format => 'xls'),:class=>'down_btn fr'%>
<span class="mt3 fr " style="color:#136b3b;">导出全部:</span> <span class="mt3 fr " style="color:#136b3b;">导出全部:</span>
</div> </div>

@ -25,6 +25,11 @@
:homework => @homework.id :homework => @homework.id
}) do |f|%> }) do |f|%>
<div class="N_con"> <div class="N_con">
<% if @homework.homework_type == 1%>
<div class=" c_red mb10 ml90">
提示:匿评作业提交的作品,作品名称和描述中不能出现真实的姓名信息
</div>
<% end%>
<p> <p>
<label class="fl"><span class="c_red">*</span>&nbsp;&nbsp;作品名称&nbsp;&nbsp;&nbsp;&nbsp;</label> <label class="fl"><span class="c_red">*</span>&nbsp;&nbsp;作品名称&nbsp;&nbsp;&nbsp;&nbsp;</label>
<%= f.text_field "name", :required => true, :size => 60, :class => "bo fl", :maxlength => 200, :placeholder => "作品名称", :onkeyup => "regexStudentWorkName();" %> <%= f.text_field "name", :required => true, :size => 60, :class => "bo fl", :maxlength => 200, :placeholder => "作品名称", :onkeyup => "regexStudentWorkName();" %>

@ -14,13 +14,13 @@
<a href="javascript:void(0)">姓名</a> <a href="javascript:void(0)">姓名</a>
</li> </li>
<li class="ml320"> <li class="ml320">
<a href="javascript:void(0)">应评</a> <a href="javascript:void(0)"><%= l(:lable_all_penalty)%></a>
</li> </li>
<li class="ml30"> <li class="ml30">
<a href="javascript:void(0)">实评</a> <a href="javascript:void(0)"><%= l(:lable_has_penalty)%></a>
</li> </li>
<li class="ml30"> <li class="ml30">
<%= link_to "缺评",student_work_absence_penalty_student_work_index_path(:homework => @homework.id,:order => @order)%> <%= link_to l(:lable_absence_penalty),student_work_absence_penalty_student_work_index_path(:homework => @homework.id,:order => @order)%>
<a href="javascript:void(0);" class="<%= @order == 'desc' ? 'st_up' : 'st_down'%>" ></a> <a href="javascript:void(0);" class="<%= @order == 'desc' ? 'st_up' : 'st_down'%>" ></a>
</li> </li>
</ul> </ul>

@ -27,7 +27,7 @@
(<%= course.members.count %>人) (<%= course.members.count %>人)
<% files_count = visable_attachemnts_incourse(course).count %> <% files_count = visable_attachemnts_incourse(course).count %>
<% if files_count > 0%> <% if files_count > 0%>
(<%= link_to "#{files_count.to_s}份", course_files_path(course) %>公开资料) (<%= link_to "#{files_count.to_s}份", course_files_path(course) %>资料)
<% end %> <% end %>
</div> </div>
</li> </li>

@ -6,17 +6,17 @@
<div class="recall" id='word_li_<%=reply.id.to_s%>' onmouseover="$('#<%= ids_r %>').show()" onmouseout="$('#<%= ids_r %>').hide()"> <div class="recall" id='word_li_<%=reply.id.to_s%>' onmouseover="$('#<%= ids_r %>').show()" onmouseout="$('#<%= ids_r %>').hide()">
<div class="recall_head"> <div class="recall_head">
<% if show_name %> <% if show_name %>
<%= image_tag url_to_avatar(reply.user),:width => '30',:height => '30' %> <%= image_tag url_to_avatar(reply.user.show_name),:width => '30',:height => '30' %>
<% else %> <% else %>
<%= image_tag url_to_avatar(nil),:width => '30',:height => '30' %> <%= image_tag url_to_avatar(nil),:width => '30',:height => '30' %>
<% end %> <% end %>
</div> </div>
<div class="recall_con"> <div class="recall_con">
<% id = 'project_respond_form_'+ reply.id.to_s %> <% id = 'project_respond_form_'+ reply.id.to_s %>
<%= link_to reply.user.name, user_path(reply.user) %> <%= link_to reply.user.show_name, user_path(reply.user) %>
<%= l(:label_reply_to)%> <%= l(:label_reply_to)%>
<% if show_name %> <% if show_name %>
<%= link_to parent_jour.user.name, user_path(parent_jour.user) %> <%= link_to parent_jour.user.show_name, user_path(parent_jour.user) %>
<% else %> <% else %>
<%= l(:label_anonymous) %> <%= l(:label_anonymous) %>
<% end %> <% end %>
@ -24,6 +24,7 @@
<p> <p>
<%= reply.notes.html_safe %> <%= reply.notes.html_safe %>
</p> </p>
<div class="cl"></div>
<span class="c_grey fl"> <span class="c_grey fl">
<%= format_time reply.created_on %> <%= format_time reply.created_on %>
</span> </span>

@ -263,7 +263,7 @@ zh:
label_tags_numbers: "Tag统计" label_tags_numbers: "Tag统计"
label_issue_plural: 问题跟踪 label_issue_plural: 问题跟踪
label_project_plural: 项目列表 # label_project_plural: 项目列表
label_user_plural: 用户列表 label_user_plural: 用户列表
label_tags_call: 需求 label_tags_call: 需求
field_filename: 文件 field_filename: 文件

@ -12,6 +12,7 @@ zh:
notice_account_wrong_password: 密码错误 notice_account_wrong_password: 密码错误
name_can_be_empty: 可以不填写真实姓名[保密所需] name_can_be_empty: 可以不填写真实姓名[保密所需]
notice_successful_create: 创建成功 notice_successful_create: 创建成功
notice_create_failed: 创建失败,请先完善个人信息
notice_failed_create: 创建失败 notice_failed_create: 创建失败
notice_successful_update: 更新成功 notice_successful_update: 更新成功
notice_successful_edit: 修改成功 notice_successful_edit: 修改成功
@ -784,6 +785,8 @@ zh:
label_project_newshare: "分享了" label_project_newshare: "分享了"
label_project_notice: "发布了通知:" label_project_notice: "发布了通知:"
label_project_notice_reply: "回复了通知:" label_project_notice_reply: "回复了通知:"
label_course_notice_point: "通知有了新的回复!"
lable_project_notice_point: "新闻有了新的回复!"
label_project_mail_notice: "发布了新闻:" label_project_mail_notice: "发布了新闻:"
lable_project_mail_notice_reply: "回复了新闻:" lable_project_mail_notice_reply: "回复了新闻:"
label_project_issue: "发布了问题:" label_project_issue: "发布了问题:"
@ -1818,6 +1821,8 @@ zh:
excel_member_with_out_class: "未加入班级的学生" excel_member_with_out_class: "未加入班级的学生"
excel_member_list: 成员列表 excel_member_list: 成员列表
excel_homework_list: 作品列表 excel_homework_list: 作品列表
excel_absence_list: 缺评列表
excel_evaluation_list: 匿评列表
excel_been_rated: 已评 excel_been_rated: 已评
excel_not_rated: 未评 excel_not_rated: 未评
label_export_excel: 导出列表 label_export_excel: 导出列表
@ -2004,3 +2009,21 @@ zh:
error_upload_avatar_to_large: "超过大小限制 (%{max_size})" error_upload_avatar_to_large: "超过大小限制 (%{max_size})"
not_valid_image_file: 不是有效的图片文件 not_valid_image_file: 不是有效的图片文件
lable_all_penalty: 应评
lable_has_penalty: 实评
lable_absence_penalty: 缺评
label_work_name: 作品名称
label_work_autor: 作品提交者
label_work_id: 提交者学号
label_evaluation_id: 匿评者学号
label_evaluation_name: 匿评者
label_evaluation_score: 匿评分数
label_evaluation_common: 匿评评语
label_evaluation_time: 匿评时间
label_file_lost_list: 缺失文件列表

@ -98,6 +98,8 @@ RedmineApp::Application.routes.draw do
post 'add_score_reply' post 'add_score_reply'
get 'destroy_score_reply' get 'destroy_score_reply'
get 'student_work_absence_penalty' get 'student_work_absence_penalty'
get 'absence_penalty_list'
get 'evaluation_list'
end end
end end
@ -190,6 +192,7 @@ RedmineApp::Application.routes.draw do
resources :stores do resources :stores do
collection do collection do
match 'search', :via => [:get, :post] match 'search', :via => [:get, :post]
get 'lost_file'
end end
end end
@ -633,6 +636,7 @@ RedmineApp::Application.routes.draw do
match 'admin', :to => 'admin#index', :via => :get match 'admin', :to => 'admin#index', :via => :get
match 'admin/projects', :via => :get match 'admin/projects', :via => :get
get 'admin/courses'
match 'admin/users', :via => :get match 'admin/users', :via => :get
match 'admin/first_page_made', as: :first_page_made match 'admin/first_page_made', as: :first_page_made
match 'admin/course_page_made', as: :course_page_made match 'admin/course_page_made', as: :course_page_made

@ -0,0 +1,13 @@
class DeleteSameScore < ActiveRecord::Migration
def up
student_work_scores = StudentWorksScore.find_by_sql("SELECT * FROM student_works_scores AS a
WHERE (a.student_work_id,a.user_id) IN (SELECT student_work_id,user_id FROM student_works_scores GROUP BY student_work_id,user_id HAVING COUNT(*) > 1)
AND id NOT IN (SELECT MIN(id) FROM student_works_scores GROUP BY student_work_id,user_id HAVING COUNT(*)>1)")
student_work_scores.each do |score|
score.destroy
end
end
def down
end
end

@ -0,0 +1,9 @@
class AddLatePenaltyToStudnetWork < ActiveRecord::Migration
def up
add_column :student_works, :late_penalty, :integer, default: 0
end
def down
remove_column :student_works, :late_penalty
end
end

@ -0,0 +1,9 @@
class AddAbsencePenaltyToStudnetWork < ActiveRecord::Migration
def up
add_column :student_works, :absence_penalty, :integer, default: 0
end
def down
remove_column :student_works, :absence_penalty
end
end

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20150619060110) do ActiveRecord::Schema.define(:version => 20150630031857) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false
@ -721,16 +721,6 @@ ActiveRecord::Schema.define(:version => 20150619060110) do
add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id"
create_table "journal_details_copy", :force => true do |t|
t.integer "journal_id", :default => 0, :null => false
t.string "property", :limit => 30, :default => "", :null => false
t.string "prop_key", :limit => 30, :default => "", :null => false
t.text "old_value"
t.text "value"
end
add_index "journal_details_copy", ["journal_id"], :name => "journal_details_journal_id"
create_table "journal_replies", :id => false, :force => true do |t| create_table "journal_replies", :id => false, :force => true do |t|
t.integer "journal_id" t.integer "journal_id"
t.integer "user_id" t.integer "user_id"

@ -367,6 +367,7 @@ end
Redmine::MenuManager.map :admin_menu do |menu| Redmine::MenuManager.map :admin_menu do |menu|
menu.push :organization, {:controller => 'admin', :action => 'organization'}, :caption => :label_organization_list menu.push :organization, {:controller => 'admin', :action => 'organization'}, :caption => :label_organization_list
menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
menu.push :courses, {:controller => 'admin', :action => 'courses'}, :caption => :label_course_all
menu.push :users, {:controller => 'admin', :action => 'users'}, :caption => :label_user_plural menu.push :users, {:controller => 'admin', :action => 'users'}, :caption => :label_user_plural
menu.push :first_page_made, {:controller => 'admin',:action => 'first_page_made'},:caption => :label_first_page_made menu.push :first_page_made, {:controller => 'admin',:action => 'first_page_made'},:caption => :label_first_page_made
menu.push :mobile_version, {:controller => 'admin',:action => 'mobile_version'},:caption => :label_mobile_version menu.push :mobile_version, {:controller => 'admin',:action => 'mobile_version'},:caption => :label_mobile_version

@ -797,6 +797,18 @@ $(function(){
}); });
$("#about_project label").eq(1).remove(); $("#about_project label").eq(1).remove();
//附件下载提示
$(".zip_download_alert").bind("mouseover",function(e){
//alert($(this).html());
$(this).next("div").show();
//$(this).next("div").css("top",e.pageY);
//$(this).next("div").css("left",e.pageX);
});
$(".zip_download_alert").bind("mouseout",function(e){
//alert($(this).html());
$(this).next("div").hide();
});
}); });
//匿评弹框取消按钮 //匿评弹框取消按钮

@ -655,7 +655,7 @@ a.down_btn{ border:1px solid #CCC; color:#999; padding:0px 5px; font-size:12px;
a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;} a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;}
.fr{ float:right;} .fr{ float:right;}
.li_min_search{ float:right; margin-right:-10px;} .li_min_search{ float:right; margin-right:-10px;}
.info_ni{ width:100px; padding:5px;position: absolute;display:none;-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; box-shadow:0px 0px 5px #194a81; color:#666; background:#fff; text-align:left;} .info_ni{ width:100px; padding:5px;position: absolute;display:none;-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; box-shadow:0px 0px 5px #194a81; color:#666; background:#fff; text-align:left;margin-left: 110px;margin-top: 10px;}
/*返回顶部*/ /*返回顶部*/
.to_top{width: 19px;height: 74px;position: fixed;top: 50px;right: 1px;color: white;background: #15bccf; line-height: 1.2; padding-top: 10px;padding-left: 5px;font-size: 14px;cursor: pointer;} .to_top{width: 19px;height: 74px;position: fixed;top: 50px;right: 1px;color: white;background: #15bccf; line-height: 1.2; padding-top: 10px;padding-left: 5px;font-size: 14px;cursor: pointer;}
.hwork_num_ab{ width:120px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;min-height: 1px;} .hwork_num_ab{ width:120px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
@ -682,7 +682,9 @@ input#score{ width:40px;}
a.about_me{text-align:center;font-size:16px; color:#64bdd9; margin:10px 0 0 10px;} a.about_me{text-align:center;font-size:16px; color:#64bdd9; margin:10px 0 0 10px;}
a:hover.about_me{ color:#0781b4;} a:hover.about_me{ color:#0781b4;}
.mb5 li{width:200px;word-wrap: break-word;
word-break: normal;
}

@ -1635,6 +1635,7 @@ img.avatar {
display: block; display: block;
width: 38px; width: 38px;
height: 38px; height: 38px;
max-width: none;
} }

Loading…
Cancel
Save