diff --git a/app/assets/javascripts/system_messages.js.coffee b/app/assets/javascripts/system_messages.js.coffee
new file mode 100644
index 000000000..761567942
--- /dev/null
+++ b/app/assets/javascripts/system_messages.js.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
diff --git a/app/assets/stylesheets/system_messages.css.scss b/app/assets/stylesheets/system_messages.css.scss
new file mode 100644
index 000000000..a9947d45a
--- /dev/null
+++ b/app/assets/stylesheets/system_messages.css.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the SystemMessages controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 1624008f2..5666934b6 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -79,6 +79,11 @@ class AdminController < ApplicationController
end
end
+ # 系统消息
+ def messages
+ @admin_messages = SystemMessage.new
+ end
+
def plugins
@plugins = Redmine::Plugin.all
end
diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb
index 4088d4156..6b421bf2a 100644
--- a/app/controllers/comments_controller.rb
+++ b/app/controllers/comments_controller.rb
@@ -49,6 +49,9 @@ class CommentsController < ApplicationController
# end
# # ������ض�̬�ļ�¼add end
flash[:notice] = l(:label_comment_added)
+ user_activity = UserActivity.where("act_type='News' and act_id =#{@news.id}").first
+ user_activity.updated_at = @comment.created_on
+ user_activity.save
end
if params[:user_activity_id]
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index db972941e..a7f1589a6 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -468,13 +468,17 @@ class CoursesController < ApplicationController
end
def new
- @course_type = params[:course_type] ||= params[:course]
- @issue_custom_fields = IssueCustomField.sorted.all
- @trackers = Tracker.sorted.all
- @course = Course.new
- @course.safe_attributes = params[:course]
- # month = Time.now.month
- render :layout => 'new_base'
+ if User.current.login?
+ @course_type = params[:course_type] ||= params[:course]
+ @issue_custom_fields = IssueCustomField.sorted.all
+ @trackers = Tracker.sorted.all
+ @course = Course.new
+ @course.safe_attributes = params[:course]
+ # month = Time.now.month
+ render :layout => 'new_base'
+ else
+ redirect_to signin_url
+ end
end
def desc_sort_course_by_avtivity(activity_count, courses)
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index 71782ee28..fa2ce04cf 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -156,7 +156,6 @@ class HomeworkCommonController < ApplicationController
if @homework.homework_type == 2
@homework.homework_detail_programing ||= HomeworkDetailPrograming.new
@homework_detail_programing = @homework.homework_detail_programing
- @homework_detail_programing.ta_proportion = params[:ta_proportion] || 0.6
@homework_detail_programing.language = params[:language_type].to_i
@homework.homework_tests.delete_all
@@ -190,11 +189,11 @@ 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 = 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
+ if student_works && student_works.size >= 2
student_works.each_with_index do |work, index|
user = work.user
n = @homework_detail_manual.evaluation_num
@@ -218,7 +217,7 @@ 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
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 6a0b351ba..bf854abe8 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -114,8 +114,10 @@ class IssuesController < ApplicationController
def show
# 当前用户查看指派给他的缺陷消息,则设置消息为已读
query = @issue.forge_messages
- if User.current.id == @issue.assigned_to_id
- query.update_all(:viewed => true)
+ query.each do |m|
+ if m.user_id == User.current.id
+ m.update_attribute(:viewed, true)
+ end
end
# 缺陷状态更新
query_journals = @issue.journals
@@ -392,6 +394,9 @@ class IssuesController < ApplicationController
jour.notes = params[:notes]
jour.journalized = @issue
jour.save
+ user_activity = UserActivity.where("act_type='Issue' and act_id =#{@issue.id}").first
+ user_activity.updated_at = jour.created_on
+ user_activity.save
@user_activity_id = params[:user_activity_id]
respond_to do |format|
format.js
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index 9b0fd56a0..aae33e52a 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -161,6 +161,9 @@ class MessagesController < ApplicationController
@reply.content = @quote + @reply.content
@reply.subject = "RE: #{@topic.subject}" unless params[:reply][:subject]
@topic.children << @reply
+ user_activity = UserActivity.where("act_type='Message' and act_id =#{@topic.id}").first
+ user_activity.updated_at = @reply.created_on
+ user_activity.save
#@topic.update_attribute(:updated_on, Time.now)
if !@reply.new_record?
if params[:asset_id]
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 77933666f..a58906c67 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -216,6 +216,7 @@ class ProjectsController < ApplicationController
end
}
format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
+ format.js
end
else
respond_to do |format|
@@ -322,6 +323,12 @@ class ProjectsController < ApplicationController
end
def settings
+ # 修改查看消息状态
+ applied_messages = ForgeMessage.where("user_id =? and project_id =? and forge_message_type =? and viewed =?", User.current.id, @project, "AppliedProject", 0)
+ applied_messages.each do |applied_message|
+ applied_message.update_attributes(:viewed => true)
+ end
+ # end
@issue_custom_fields = IssueCustomField.sorted.all
@issue_category ||= IssueCategory.new
@member ||= @project.members.new
@@ -342,7 +349,7 @@ class ProjectsController < ApplicationController
if params[:repository] == "pswd_is_null"
html << l(:label_password_not_null)
end
- flash[:error] = html if !html.to_s.blank?
+ flash.now[:error] = html if !html.to_s.blank?
end
scm = params[:repository_scm] || (Redmine::Scm::Base.all & Setting.enabled_scm).first
@repository = Repository.factory(scm)
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 018a293e3..251fd80c4 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -3,12 +3,11 @@ class StudentWorkController < ApplicationController
include StudentWorkHelper
require 'bigdecimal'
require "base64"
- before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test]
+ before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:set_score_rule]
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]
- protect_from_forgery :except => :set_program_score
+ before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :set_score_rule]
###
def program_test
@@ -47,13 +46,23 @@ class StudentWorkController < ApplicationController
end
def index
- # 消息状态更新
+ # 作业消息状态更新
@homework.course_messages.each do |homework_message|
- if User.current.id == homework_message.user_id
- homework_message.update_attributes(:viewed => true)
+ if User.current.id == homework_message.user_id && homework_message.viewed == 0
+ homework_message.update_attributes(:viewed => true) if homework_message.viewed == 0
end
end
-
+ # 作品打分消息状态更新
+ studentworks_scores = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, "StudentWorksScore", 0)
+ studentworks_scores.each do |studentworks_score|
+ studentworks_score.update_attributes(:viewed => true) if studentworks_score.viewed == 0
+ end
+ # 作品评论消息状态更新
+ journals_for_teacher = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, "JournalsForMessage", 0)
+ journals_for_teacher.each do |journal_for_teacher|
+ journal_for_teacher.update_attributes(:viewed => true)
+ end
+ # 作品留言
# 消息end
#设置作业对应的forge_messages表的viewed字段
query_student_work = @homework.course_messages
@@ -62,80 +71,33 @@ class StudentWorkController < ApplicationController
query.update_attributes(:viewed => true)
end
end
+ ##################################################################################################################
@order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name] || "",params[:group]
- @is_teacher = User.current.allowed_to?(:as_teacher,@course)
- course_group = CourseGroup.find_by_id(@group) if @group
- if course_group
- group_students = course_group.users
- if group_students.empty?
- student_in_group = '(0)'
+ @homework_commons = @course.homework_commons.order("created_at desc")
+ @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
+ @is_evaluation = @homework.homework_detail_manual.comment_status == 2 && !@is_teacher #是不是匿评
+ @show_all = false
+ if @is_teacher #老师 || 超级管理员 显示所有列表
+ @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
+ @show_all = true
+ elsif @homework.homework_detail_manual.comment_status == 1 #学生 && 未开启匿评 只看到自己的
+ @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ elsif @homework.homework_detail_manual.comment_status == 2 #学生 && 开启匿评 看到匿评列表
+ my_work = @homework.student_works.where(:user_id => User.current.id)
+ @stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id}
+ elsif @homework.homework_detail_manual.comment_status == 3 #学生 && 关闭匿评 未提交作品之前列表为空,提交了作品看到所有的
+ my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ if my_work.empty?
+ @stundet_works = []
else
- student_in_group = '(' + group_students.map{|user| user.id}.join(',') + ')'
- end
- #老师 || 非匿评作业 || 匿评结束 显示所有的作品
- @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 @order == "name"
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
- else
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name
- end
- else #剩余情况: 学生 && 非匿评作业 如果未提交作品,只能看到自己的,提交了作品,能看到所有作品
- my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
- if my_work.empty?
- @stundet_works = []
- else
- if @order == "name"
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
- else
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name
- end
- end
- end
- else #学生
- if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品
- @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
- elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品
- @is_evaluation = true
- my_work = @homework.student_works.where(:user_id => User.current.id)
- @stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id}
- end
+ @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
+ @show_all = true
end
else
- #老师 || 非匿评作业 || 匿评结束 显示所有的作品
- @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 @order == "name"
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
- else
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
- end
- else #剩余情况: 学生 && 非匿评作业 如果未提交作品,只能看到自己的,提交了作品,能看到所有作品
- my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
- if my_work.empty?
- @stundet_works = []
- else
- if @order == "name"
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
- else
- @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
- end
- end
- end
- else #学生
- if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品
- @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
- elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品
- @is_evaluation = true
- my_work = @homework.student_works.where(:user_id => User.current.id)
- @stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id}
- end
- end
+ @stundet_works = []
end
- @homework_commons = @course.homework_commons.order("created_at desc")
@score = @b_sort == "desc" ? "asc" : "desc"
+
respond_to do |format|
format.html
format.xls {
@@ -170,15 +132,15 @@ class StudentWorkController < ApplicationController
student_work.homework_common_id = @homework.id
student_work.user_id = User.current.id
student_work.save_attachments(params[:attachments])
+ render_attachment_warning_if_needed(student_work)
+ #提交作品时,计算是否迟交
if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d")
student_work.late_penalty = @homework.late_penalty
- else
+ else
student_work.late_penalty = 0
end
- render_attachment_warning_if_needed(student_work)
if student_work.save
-
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_create)
@@ -231,16 +193,15 @@ class StudentWorkController < ApplicationController
def show
@score = student_work_score @work,User.current
- @is_teacher = User.current.allowed_to?(:as_teacher,@course)
+ @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
+ @student_work_scores = @work.student_works_scores.order("updated_at desc")
respond_to do |format|
format.js
end
end
def destroy
- if @homework.homework_type == 2 #编程作业,作品提交后不可以删除
- render_403
- elsif @work.destroy
+ if @work.destroy
respond_to do |format|
format.html {
redirect_to student_work_index_url(:homework => @homework.id)
@@ -251,10 +212,11 @@ class StudentWorkController < ApplicationController
#添加评分,已评分则为修改评分
def add_score
+ @is_last = params[:is_last] == "true"
render_403 and return if User.current == @work.user #不可以匿评自己的作品
- @is_teacher = User.current.allowed_to?(:as_teacher,@course)
+ @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
#老师、教辅可以随时评分,学生只能在匿评作业的匿评阶段进行评分
- render_403 and return unless @is_teacher || (@homework.homework_type == 1 && @homework.homework_detail_manual.comment_status == 2)
+ render_403 and return unless @is_teacher || @homework.homework_detail_manual.comment_status == 2
@score = student_work_score @work,User.current
if @score
@score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""
@@ -288,35 +250,11 @@ class StudentWorkController < ApplicationController
case @score.reviewer_role
when 1 #教师评分:最后一个教师评分为最终评分
@work.teacher_score = @score.score
- @work.final_score = @score.score
when 2 #教辅评分 教辅评分显示平均分
@work.teaching_asistant_score = @work.student_works_scores.where(:reviewer_role => 2).average(:score).try(:round, 2).to_f
- if @work.teacher_score.nil?
- if @work.student_score.nil?
- @work.final_score = @work.teaching_asistant_score
- else
- ta_proportion = @homework.homework_detail_manual.ta_proportion if @homework.homework_detail_manual
- ta_proportion = @homework.homework_detail_programing.ta_proportion if @homework.homework_detail_programing
- final_ta_score = BigDecimal.new("#{@work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
- final_s_score = BigDecimal.new("#{@work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
- final_score = final_ta_score + final_s_score
- @work.final_score = format("%.2f",final_score.to_f)
- end
- end
when 3 #学生评分 学生评分显示平均分
@work.student_score = @work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f
- if @work.teacher_score.nil?
- if @work.teaching_asistant_score.nil?
- @work.final_score = @work.student_score
- else
- final_ta_score = BigDecimal.new("#{@work.teaching_asistant_score}") * BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}")
- final_s_score = BigDecimal.new("#{@work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}"))
- final_score = final_ta_score + final_s_score
- @work.final_score = format("%.2f",final_score.to_f)
- end
- end
end
-
if @work.save
respond_to do |format|
format.js
@@ -328,6 +266,7 @@ class StudentWorkController < ApplicationController
#添加评分的回复
def add_score_reply
@score = StudentWorksScore.find params[:score_id]
+ @is_last = params[:is_last] == "true"
@jour = @score.journals_for_messages.new(:user_id => User.current.id,:notes =>params[:message], :reply_id => 0)
if @jour.save
@status = 1
@@ -420,44 +359,53 @@ class StudentWorkController < ApplicationController
end
end
- #设置编程作业得分
- def set_program_score
- stundet_work = StudentWork.find_by_id params[:student_work_id]
- @course = stundet_work.homework_common.course
- student_score_count = 0
- if stundet_work && params[:results] && params[:results].class.to_s == "Array"
- homework_common = stundet_work.homework_common
- params[:results].each do |result|
- homework_tests = homework_common.homework_tests.where("input = '#{result[:input]}' AND output = '#{result[:output]}'")
- homework_tests.each do |homework_test|
- student_work_test = StudentWorkTest.new
- student_work_test.student_work = stundet_work
- student_work_test.homework_test = homework_test
- student_work_test.result = result[:status]
- if student_work_test.result == 0
- student_score_count += 1
- end
- student_work_test.error_msg = params[:compile_error_msg]
- student_work_test.save!
- end
+ #设置评分规则
+ def set_score_rule
+ homework_detail_manual = @homework.homework_detail_manual
+ homework_detail_programing = @homework.homework_detail_programing
+
+ unless @homework.late_penalty.to_s == params[:late_penalty].to_s
+ @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 = @homework.late_penalty
+ student_work.save
end
- unless homework_common.homework_tests.empty?
- stundet_work.student_score = student_score_count * 100.0 / homework_common.homework_tests.count
- if stundet_work.teacher_score.nil?
- if stundet_work.teaching_asistant_score.nil?
- stundet_work.final_score = stundet_work.student_score
- else
- final_ta_score = BigDecimal.new("#{stundet_work.teaching_asistant_score}") * BigDecimal.new("#{homework_common.homework_detail_programing.ta_proportion}")
- final_s_score = BigDecimal.new("#{stundet_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework_common.homework_detail_programing.ta_proportion}"))
- final_score = final_ta_score + final_s_score
- stundet_work.final_score = format("%.1f",final_score.to_f)
- end
+ @homework.save
+ end
+
+ unless homework_detail_manual.absence_penalty.to_s == params[:absence_penalty].to_s
+ 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
- stundet_work.save!
+ homework_detail_manual.save if homework_detail_manual
+ end
+
+ teacher_priority = params[:teacher_priority] ? 1 : 0
+ if homework_detail_manual.ta_proportion.to_s != params[:ta_proportion].to_s || @homework.teacher_priority.to_s != teacher_priority.to_s || (homework_detail_programing && homework_detail_programing.ta_proportion.to_s != params[:sy_proportion].to_s)
+ homework_detail_manual.ta_proportion = params[:ta_proportion]
+ homework_detail_programing.ta_proportion = params[:sy_proportion] if homework_detail_programing
+ @homework.teacher_priority = teacher_priority
+
+ @homework.save
+ homework_detail_manual.save if homework_detail_manual
+ homework_detail_programing.save if homework_detail_programing
+
+ @homework.student_works.each do |student_work|
+ set_final_score @homework,student_work
+ student_work.save
end
end
+ respond_to do |format|
+ format.html{redirect_to student_work_index_url(:homework => @homework.id)}
+ end
end
private
@@ -490,15 +438,19 @@ class StudentWorkController < ApplicationController
end
def teacher_of_course
- render_403 unless User.current.allowed_to?(:as_teacher,@course)
+ render_403 unless User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
end
#根据条件过滤作业结果
def search_homework_member homeworks,name
- name = name.downcase
- select_homework = homeworks.select{ |homework|
- homework.user[:login].to_s.downcase.include?(name) || homework.user.user_extensions[:student_id].to_s.downcase.include?(name) || (homework.user[:lastname].to_s.downcase + homework.user[:firstname].to_s.downcase).include?(name)
- }
+ if name == ""
+ select_homework = homeworks
+ else
+ name = name.downcase
+ select_homework = homeworks.select{ |homework|
+ homework.user[:login].to_s.downcase.include?(name) || homework.user.user_extensions[:student_id].to_s.downcase.include?(name) || (homework.user[:lastname].to_s.downcase + homework.user[:firstname].to_s.downcase).include?(name)
+ }
+ end
select_homework
end
@@ -509,25 +461,7 @@ class StudentWorkController < ApplicationController
sheet1 = book.create_worksheet :name => "homework"
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
- if @homework.homework_type == 0 #普通作业
- sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),
- l(:excel_t_score),l(:excel_ta_score),l(:excel_f_score),l(:excel_commit_time)])
- count_row = 1
- items.each do |homework|
- sheet1[count_row,0]=homework.user.id
- sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s
- sheet1[count_row,2] = homework.user.login
- sheet1[count_row,3] = homework.user.user_extensions.student_id
- sheet1[count_row,4] = homework.user.mail
- sheet1[count_row,5] = homework.name
- sheet1[count_row,6] = homework.teacher_score.nil? ? l(:label_without_score) : format("%.2f",homework.teacher_score)
- sheet1[count_row,7] = homework.teaching_asistant_score.nil? ? l(:label_without_score) : format("%.2f",homework.teaching_asistant_score)
- # sheet1[count_row,8] = homework.student_score.nil? ? l(:label_without_score) : format("%.2f",homework.student_score)
- sheet1[count_row,8] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : format("%.2f",homework.score) : l(:label_without_score)
- sheet1[count_row,9] = format_time(homework.created_at)
- count_row += 1
- end
- elsif @homework.homework_type == 1 #匿评作业
+ if @homework.homework_type == 1 #匿评作业
sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),
l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_f_score),l(:excel_commit_time)])
count_row = 1
@@ -547,7 +481,7 @@ class StudentWorkController < ApplicationController
end
elsif @homework.homework_type == 2 #编程作业
sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),
- l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_f_score),l(:excel_commit_time)])
+ l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_n_score),l(:excel_f_score),l(:excel_commit_time)])
count_row = 1
items.each do |homework|
sheet1[count_row,0]=homework.user.id
@@ -558,9 +492,10 @@ class StudentWorkController < ApplicationController
sheet1[count_row,5] = homework.name
sheet1[count_row,6] = homework.teacher_score.nil? ? l(:label_without_score) : format("%.2f",homework.teacher_score)
sheet1[count_row,7] = homework.teaching_asistant_score.nil? ? l(:label_without_score) : format("%.2f",homework.teaching_asistant_score)
- sheet1[count_row,8] = homework.student_score.nil? ? l(:label_without_score) : format("%.2f",homework.student_score)
- sheet1[count_row,9] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : format("%.2f",homework.score) : l(:label_without_score)
- sheet1[count_row,10] = format_time(homework.created_at)
+ sheet1[count_row,8] = homework.system_score.nil? ? l(:label_without_score) : format("%.2f",homework.system_score)
+ sheet1[count_row,9] = homework.student_score.nil? ? l(:label_without_score) : format("%.2f",homework.student_score)
+ sheet1[count_row,10] = homework.respond_to?("score") ? homework.score.nil? ? l(:label_without_score) : format("%.2f",homework.score) : l(:label_without_score)
+ sheet1[count_row,11] = format_time(homework.created_at)
count_row += 1
end
end
@@ -660,4 +595,103 @@ class StudentWorkController < ApplicationController
end
JSON.parse(res.body)
end
+
+ #成绩计算
+ def set_final_score homework,student_work
+ if homework && homework.homework_detail_manual
+ if homework.homework_type == 1 #匿评作业
+ if homework.teacher_priority == 1 #教师优先
+ if student_work.teacher_score
+ student_work.final_score = student_work.teacher_score
+ else
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.student_score
+ elsif student_work.student_score.nil?
+ student_work.final_score = student_work.teaching_asistant_score
+ else
+ ta_proportion = homework.homework_detail_manual.ta_proportion
+ final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
+ final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_ta_score + final_s_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ else #不考虑教师评分
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.student_score
+ elsif student_work.student_score.nil?
+ student_work.final_score = student_work.teaching_asistant_score
+ else
+ ta_proportion = homework.homework_detail_manual.ta_proportion
+ final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
+ final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_ta_score + final_s_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空
+ if homework.teacher_priority == 1 #教师优先
+ if student_work.teacher_score
+ student_work.final_score = student_work.teacher_score
+ else
+ if student_work.teaching_asistant_score.nil? #教辅未评分
+ if student_work.student_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_proportion / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ elsif student_work.student_score.nil? #学生未评分
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_proportion) / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_ts_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ else
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}"))
+ final_score = final_sy_score + final_ts_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ else #不考虑教师评分
+ if student_work.teaching_asistant_score.nil? #教辅未评分
+ if student_work.student_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_proportion / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ elsif student_work.student_score.nil? #学生未评分
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_proportion) / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_ts_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ else
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}"))
+ final_score = final_sy_score + final_ts_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ end
+ end
+ end
end
\ No newline at end of file
diff --git a/app/controllers/system_messages_controller.rb b/app/controllers/system_messages_controller.rb
new file mode 100644
index 000000000..42291a407
--- /dev/null
+++ b/app/controllers/system_messages_controller.rb
@@ -0,0 +1,94 @@
+class SystemMessagesController < ApplicationController
+ # before_filter :message_author, :only => [:show]
+ #
+ # def message_author
+ # if(!User.current.logged? && !token.nil?)
+ #
+ # User.current =try_to_autologin1
+ # end
+ # if @system_messages
+ # render_403 :message => :notice_not_authorized_message
+ # else
+ # deny_access
+ # end
+ # end
+
+ def index
+ @system_messages = SystemMessage.all
+ end
+
+ # def show
+ # @system_messages = SystemMessage.find(params[:id])
+ # end
+
+ # GET /products/new
+ # def new
+ # @product = Product.new
+ # end
+
+ # GET /products/1/edit
+ # def edit
+ # end
+
+ # POST /products
+ # POST /products.json
+ def create
+ unless User.current.admin?
+ render_403
+ return
+ end
+ @system_messages = SystemMessage.new
+ @system_messages.content = params[:system_message][:content]
+ @system_messages.user_id = User.current.id
+ respond_to do |format|
+ if @system_messages.save
+ format.html {redirect_to user_message_path(User.current, :type => "system_messages")}
+ flash[:notice] = l(:notice_successful_message)
+ else
+ if params[:system_message][:content].empty?
+ flash[:error] = l(:label_content_blank_fail)
+ else
+ flash[:error] = l(:label_admin_message_fail)
+ end
+ format.html {redirect_to admin_messages_path}
+ end
+ end
+ end
+
+ # PATCH/PUT /products/1
+ # PATCH/PUT /products/1.json
+ # def update
+ # respond_to do |format|
+ # if @product.update(product_params)
+ # format.html { redirect_to @product, notice: 'Product was successfully updated.' }
+ # format.json { render :show, status: :ok, location: @product }
+ # else
+ # format.html { render :edit }
+ # format.json { render json: @product.errors, status: :unprocessable_entity }
+ # end
+ # end
+ # end
+
+ # DELETE /products/1
+ # DELETE /products/1.json
+ # def destroy
+ # @system_messages.destroy
+ # respond_to do |format|
+ # format.html { redirect_to products_url, notice: 'Product was successfully destroyed.' }
+ # format.json { head :no_content }
+ # end
+ # end
+
+ # private
+ # # Use callbacks to share common setup or constraints between actions.
+ # def set_product
+ # @product = Product.find(params[:id])
+ # end
+ #
+ # # Never trust parameters from the scary internet, only allow the white list through.
+ # def message_params
+ # params.require(:admin_system_messages).permit(:content)
+ # end
+
+
+end
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 253faa2b1..e0cb8af8e 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -230,6 +230,53 @@ class TagsController < ApplicationController
end
end
+ #更新某个tag名称
+ def update_tag_name
+ @tag_name = params[:tagName]
+ @rename_tag_name = params[:renameName]
+ @taggable_id = params[:taggableId]
+ @taggable_type = numbers_to_object_type(params[:taggableType])
+
+
+ @rename_tag = (ActsAsTaggableOn::Tag.find_by_name(@rename_tag_name)) #查找重命名后的tag
+ @tag_id = (ActsAsTaggableOn::Tag.find_by_name(@tag_name)).id #重命名前的tag_id
+ @taggings = ActsAsTaggableOn::Tagging.find_by_tag_id_and_taggable_id_and_taggable_type(@tag_id,@taggable_id,@taggable_type)
+ @obj = get_object(@taggable_id,params[:taggableType])
+ if(@rename_tag.nil?) #这次命名的是新的tag
+
+ # 是否还有其他记录 引用了 tag_id
+ @tagging = ActsAsTaggableOn::Tagging.where("tag_id = #{@tag_id}")
+ # 如果taggings表中记录为 1 ,那么改变@tag_id对应的tag的名字
+ if @tagging.count == 1
+ @tag = ActsAsTaggableOn::Tag.find_by_id(@tag_id)
+ @tag.update_attributes({:name=>@rename_tag_name})
+ else #如果tagging表中的记录大于1,那么就要新增tag记录
+
+ unless @obj.nil?
+ @obj.tag_list.add(@rename_tag_name.split(","))
+ @obj.save
+ end
+ #删除原来的对应的taggings的记录
+ unless @taggings.nil?
+ @taggings.delete
+ end
+ end
+ else #这是已有的tag
+ # 更改taggings记录里的tag_id
+ unless @taggings.nil?
+ @taggings.update_attributes({:tag_id=>@rename_tag.id})
+ end
+ end
+ @obj_flag = params[:taggableType]
+ if @obj && @obj_flag == '6' && @obj.container.kind_of?(Course)
+ @course = @obj.container
+ @tag_list = @tag_list = get_course_tag_list @course
+ end
+ respond_to do |format|
+ format.js
+ end
+ end
+
def tag_save
@select_tag_name = params[:tag_for_save][:tag_name]
@tags = params[:tag_for_save][:name]
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index f1608515f..cb6555768 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -27,19 +27,13 @@ class UsersController < ApplicationController
menu_item :user_course, :only => :user_courses
menu_item :user_homework, :only => :user_homeworks
menu_item :user_project, :only => [:user_projects, :watch_projects]
- # menu_item :requirement_focus, :only => :watch_bids
menu_item :requirement_focus, :only => :watch_contests
menu_item :user_newfeedback, :only => :user_newfeedback
menu_item :user_messages, :only => :user_messages
- #Ended by young
-
- # edit
-
#
before_filter :can_show_course, :only => [:user_courses,:user_homeworks]
- #edit has been deleted by huang, 2013-9-23
before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses,
:user_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments,
:watch_contests, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index,
@@ -105,6 +99,19 @@ class UsersController < ApplicationController
redirect_to signin_url
return
end
+ # 记录当前点击按钮的时间
+ # 考虑到用户未退出刷新消息页面
+ if OnclickTime.where("user_id =?", User.current).first.nil?
+ message_new_time = OnclickTime.new
+ message_new_time.user_id = User.current.id
+ message_new_time.onclick_time = Time.now
+ message_new_time.save
+ else
+ message_new_time = OnclickTime.where("user_id =?", User.current).first
+ message_last_time = message_new_time.onclick_time
+ message_new_time.update_attributes(:onclick_time => Time.now)
+ end
+ @user_system_messages = SystemMessage.where("created_at >?", message_last_time).order("created_at desc")
# 当前用户查看消息,则设置消息为已读
if params[:viewed] == "all"
course_querys = @user.course_messages
@@ -122,10 +129,23 @@ class UsersController < ApplicationController
case params[:type]
when nil
@message_alls = []
- messages = MessageAll.where("user_id =?",@user).order("created_at desc")
+ messages = MessageAll.where("user_id =?" ,@user).order("created_at desc")
messages.each do |message_all|
@message_alls << message_all.message
end
+ when 'unviewed'
+ @message_alls = []
+ messages = MessageAll.where("user_id =?", @user).order("created_at desc")
+ messages.each do |message_all|
+ # 在点击或者刷新消息列表后未读的消息存放在数组
+ if message_all.message.viewed == 0
+ @message_alls << message_all.message
+ end
+ end
+ when 'system_messages'
+ @message_alls = SystemMessage.order("created_at desc").all
+ when 'apply'
+ @message_alls = ForgeMessage.where("forge_message_type =? and user_id =?" , "AppliedProject", @user).order("created_at desc")
when 'homework'
@message_alls = CourseMessage.where("course_message_type =? and user_id =?", "HomeworkCommon", @user).order("created_at desc")
when 'course_message'
@@ -329,11 +349,13 @@ class UsersController < ApplicationController
#导入作业,确定按钮
def user_select_homework
homework = HomeworkCommon.find_by_id params[:checkMenu]
+ homework_detail_programing = homework.homework_detail_programing
@homework = HomeworkCommon.new
if homework
@homework.name = homework.name
@homework.description = homework.description
@homework.end_time = homework.end_time
+ @homework.homework_type = homework.homework_type
@homework.course_id = homework.course_id
homework.attachments.each do |attachment|
att = attachment.copy
@@ -343,6 +365,19 @@ class UsersController < ApplicationController
att.save
@homework.attachments << att
end
+
+ if homework_detail_programing
+ @homework.homework_detail_programing = HomeworkDetailPrograming.new
+ @homework_detail_programing = @homework.homework_detail_programing
+ @homework_detail_programing.ta_proportion = homework_detail_programing.ta_proportion
+ @homework_detail_programing.language = homework_detail_programing.language
+ homework.homework_tests.each_with_index do |homework_test|
+ @homework.homework_tests << HomeworkTest.new(
+ input: homework_test.input,
+ output: homework_test.output
+ )
+ end
+ end
end
respond_to do |format|
format.js
@@ -384,6 +419,14 @@ class UsersController < ApplicationController
homework = HomeworkCommon.find(params[:homework])
student_work = StudentWork.where(homework_common_id: homework.id, user_id: User.current.id).first
if student_work
+
+ #提交作品时,计算是否迟交
+ if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d")
+ student_work.late_penalty = 1
+ else
+ student_work.late_penalty = 0
+ end
+
student_work.save
flash[:notice] = l(:notice_successful_create)
redirect_to student_work_index_url(:homework => params[:homework])
@@ -401,7 +444,8 @@ class UsersController < ApplicationController
homework.end_time = params[:homework_common][:end_time] || Time.now
homework.publish_time = Time.now
homework.homework_type = params[:homework_type].to_i || 1
- homework.late_penalty = 2
+ homework.late_penalty = 10
+ homework.teacher_priority = 1
homework.user_id = User.current.id
homework.course_id = params[:course_id]
@@ -409,19 +453,19 @@ class UsersController < ApplicationController
render_attachment_warning_if_needed(homework)
homework_detail_manual = HomeworkDetailManual.new
- homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6
+ homework_detail_manual.ta_proportion = homework.homework_type == 1 ? 0.6 : 0.3
homework_detail_manual.comment_status = 1
homework_detail_manual.evaluation_start = Time.now
homework_detail_manual.evaluation_end = Time.now
homework_detail_manual.evaluation_num = params[:evaluation_num] || 3
- homework_detail_manual.absence_penalty = 2
+ homework_detail_manual.absence_penalty = 5
homework.homework_detail_manual = homework_detail_manual
#编程作业相关属性
if homework.homework_type == 2
homework_detail_programing = HomeworkDetailPrograming.new
homework.homework_detail_programing = homework_detail_programing
- homework_detail_programing.ta_proportion = params[:ta_proportion] || 0.6
+ homework_detail_programing.ta_proportion = 0.5
homework_detail_programing.language = params[:language_type].to_i
inputs = params[:program][:input]
@@ -810,24 +854,24 @@ class UsersController < ApplicationController
if params[:type].present?
case params[:type]
when "course_homework"
- @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'HomeworkCommon'").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'HomeworkCommon'").order('updated_at desc').limit(10).offset(@page * 10)
when "course_news"
- @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'News'").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'News'").order('updated_at desc').limit(10).offset(@page * 10)
when "course_message"
- @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'Message'").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'Message'").order('updated_at desc').limit(10).offset(@page * 10)
when "course_poll"
- @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'Poll'").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'Poll'").order('updated_at desc').limit(10).offset(@page * 10)
when "project_issue"
- @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Issue'").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Issue'").order('updated_at desc').limit(10).offset(@page * 10)
when "project_message"
- @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Message'").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Message'").order('updated_at desc').limit(10).offset(@page * 10)
when "current_user"
- @user_activities = UserActivity.where("user_id = #{User.current.id} and ((container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}))").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("user_id = #{@user.id} and ((container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}))").order('updated_at desc').limit(10).offset(@page * 10)
else
- @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('updated_at desc').limit(10).offset(@page * 10)
end
else
- @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('created_at desc').limit(10).offset(@page * 10)
+ @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('updated_at desc').limit(10).offset(@page * 10)
end
# @user_activities = paginateHelper @user_activities,500
@type = params[:type]
diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb
index f74fbb04d..da6d48b8d 100644
--- a/app/controllers/wiki_controller.rb
+++ b/app/controllers/wiki_controller.rb
@@ -264,7 +264,7 @@ class WikiController < ApplicationController
end
@page.destroy
respond_to do |format|
- format.html { redirect_to project_wiki_index_url(@project) }
+ format.html {redirect_to edit_project_wiki_page_url @project, @page.title}
format.api { render_api_ok }
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index a1663c76b..1982542a9 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -2297,27 +2297,19 @@ module ApplicationHelper
#获取匿评相关连接代码
def homework_anonymous_comment homework
- # if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业
- #
- # elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业作业
- # link = "编程作业 ".html_safe
- # else
- # link = "启动匿评 ".html_safe
- # end
-
if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
- link = "启动匿评 ".html_safe
+ link = link_to "启动匿评","javascript:void(0)", :class => "postOptionLink", :title => "作业截止日期之前不可以启动匿评"
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'
- when 2
- link = link_to '关闭匿评', alert_anonymous_comment_homework_common_path(homework), id: "#{homework.id}_stop_anonymous_comment", remote: true,:class => 'fr mr10 work_edit'
- when 3
- link = "匿评结束 ".html_safe
+ when 1
+ link = link_to '启动匿评', alert_anonymous_comment_homework_common_path(homework), id: "#{homework.id}_start_anonymous_comment", remote: true, disable_with: '加载中...',:class => 'postOptionLink'
+ when 2
+ link = link_to '关闭匿评', alert_anonymous_comment_homework_common_path(homework), id: "#{homework.id}_stop_anonymous_comment", remote: true,:class => 'postOptionLink'
+ when 3
+ link = link_to "匿评结束","javascript:void(0)", :class => "postOptionLink", :title => "匿评结束"
end
else
- link = "启动匿评 ".html_safe
+ link = link_to "启动匿评","javascript:void(0)", :class => "postOptionLink", :title => "学生提交作业数大于2时才可以启动匿评"
end
link
end
@@ -2325,14 +2317,18 @@ module ApplicationHelper
def student_new_homework homework
work = cur_user_works_for_homework homework
if work.nil?
- link_to l(:label_commit_homework), new_student_work_path(:homework => homework.id),:class => 'fr mr10 work_edit'
+ link_to "提交作品", new_student_work_path(:homework => homework.id),:class => 'fr mr10 work_edit'
else
if homework.homework_type == 1 && homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1 #匿评作业,且作业状态不是在开启匿评之前
- "#{l(:label_edit_homework)} ".html_safe
- elsif homework.homework_type == 2 #编程作业不能修改作品
- "作品已交 ".html_safe
+ link_to "作品已交", "javascript:void(0);", :class => 'fr mr10 pr_join_span c_white', :title => "开启匿评后不可修改作品"
+ elsif homework.homework_type == 2 #编程作业修改作品
+ if homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1
+ link_to "作品已交", "javascript:void(0);", :class => 'fr mr10 pr_join_span c_white', :title => "开启匿评后不可修改作品"
+ else
+ link_to "修改作品", new_student_work_path(:homework => homework.id),:class => 'fr mr10 work_edit'
+ end
else
- link_to l(:label_edit_homework), edit_student_work_path(work.id),:class => 'fr mr10 work_edit c_blue'
+ link_to "修改作品", edit_student_work_path(work.id),:class => 'fr mr10 work_edit'
end
end
end
@@ -2345,9 +2341,9 @@ module ApplicationHelper
homework = default_opt[:homework]
work = cur_user_works_for_homework homework
if work.nil? && !is_teacher
- link_to "提交("+homework.student_works.count.to_s+")", new_student_work_path(:homework => homework.id), :class=> default_opt[:class]
+ link_to "提交("+homework.student_works.count.to_s+")", new_student_work_path(:homework => homework.id,:host=> Setting.host_course), :class=> default_opt[:class]
else
- link_to "提交("+homework.student_works.count.to_s+")", student_work_index_path(:homework => homework.id), :class=> default_opt[:class]
+ link_to "提交("+homework.student_works.count.to_s+")", student_work_index_path(:homework => homework.id,:host=> Setting.host_course), :class=> default_opt[:class]
end
end
@@ -2363,7 +2359,7 @@ module ApplicationHelper
if homework.homework_type == 1 && homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1 #匿评作业,且作业状态不是在开启匿评之前
link_to "作品已交", "", :class => 'c_blue', :title => "开启匿评后不可修改作品"
elsif homework.homework_type == 2 #编程作业不能修改作品
- link_to "作品已交", student_work_index_path(:homework => homework.id),:class => 'c_blue',:title => "编程作业不可修改作品"
+ link_to "修改作品", new_student_work_path(:homework => homework.id),:class => 'c_blue'
else
link_to "修改作品", edit_student_work_path(work.id),:class => 'c_blue'
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 12925b0b1..c25035fdb 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -18,6 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
include AvatarHelper
+include StudentWorkHelper
module ProjectsHelper
def link_to_version(version, options = {})
return '' unless version && version.is_a?(Version)
diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb
index bff997ba4..834b8dd61 100644
--- a/app/helpers/student_work_helper.rb
+++ b/app/helpers/student_work_helper.rb
@@ -2,17 +2,16 @@
include UserScoreHelper
module StudentWorkHelper
+ #获取当前用户的项目列表
def user_projects_option
- cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1"
- memberships = User.current.memberships.all(:conditions => cond)
- projects = memberships.map(&:project)
+ projects = User.current.projects.visible
not_have_project = []
- not_have_project << Setting.please_chose
+ not_have_project << "没有可选项目,请直接为本作品创建一个项目"
not_have_project << 0
type = []
type << not_have_project
projects.each do |project|
- if project != nil
+ if project
option = []
option << project.name
option << project.id
@@ -100,4 +99,31 @@ module StudentWorkHelper
end
result
end
+
+ #教辅评分比例下拉框
+ def ta_proportion_option
+ type = []
+ i = 0
+ while i <= 100
+ option = []
+ option << i.to_s + "%"
+ option << i.to_f / 100
+ type << option
+ i += 10
+ end
+ type
+ end
+
+ def ta_proportion_option_to num
+ type = []
+ i = 0
+ while i <= num
+ option = []
+ option << i.to_s + "%"
+ option << i.to_f / 100
+ type << option
+ i += 10
+ end
+ type
+ end
end
\ No newline at end of file
diff --git a/app/helpers/system_messages_helper.rb b/app/helpers/system_messages_helper.rb
new file mode 100644
index 000000000..fef238676
--- /dev/null
+++ b/app/helpers/system_messages_helper.rb
@@ -0,0 +1,2 @@
+module SystemMessagesHelper
+end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 269630ec3..15eebc15e 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -52,6 +52,40 @@ module UsersHelper
end
end
+ def title_for_message type
+ case type
+ when nil
+ '消息'
+ when 'unviewed'
+ '未读消息'
+ when 'apply'
+ '用户申请'
+ when 'system_messages'
+ '系统消息'
+ when 'homework'
+ '作业消息'
+ when 'course_message'
+ '课程讨论'
+ when 'course_news'
+ '课程通知'
+ when 'issue'
+ '项目任务'
+ when 'forum'
+ '贴吧帖子'
+ when 'user_feedback'
+ '用户留言'
+ end
+ end
+
+ # 统计未读消息数
+ def unviewed_message(user)
+ course_count = CourseMessage.where("user_id =? and viewed =?", user, 0).count
+ forge_count = ForgeMessage.where("user_id =? and viewed =?", user, 0).count
+ user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0).count
+ user_memo_count = MemoMessage.where("user_id =? and viewed =?", user, 0).count
+ messages_count = course_count + forge_count + user_feedback_count + user_memo_count
+ end
+
def user_mail_notification_options(user)
user.valid_notification_options.collect {|o| [l(o.last), o.first]}
end
diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb
index accbc90e2..fb8bf90af 100644
--- a/app/models/applied_project.rb
+++ b/app/models/applied_project.rb
@@ -1,8 +1,21 @@
class AppliedProject < ActiveRecord::Base
attr_accessible :project_id, :user_id
- belongs_to :user
- belongs_to :project
+ belongs_to :user
+ belongs_to :project
+ has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy
+
+ after_create :send_appliled_message
+
+ def send_appliled_message
+ # if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil?
+ self.project.members.each do |m|
+ if m.roles.first.to_s.include?("Manager")
+ self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.project_id, :viewed => false)
+ end
+ end
+ # end
+ end
#删除用户申请
def self.deleteappiled(userid, projectid)
@@ -11,5 +24,4 @@ class AppliedProject < ActiveRecord::Base
applied.destroy
end
end
-
end
diff --git a/app/models/course_activity.rb b/app/models/course_activity.rb
index 103796a72..4e74142ad 100644
--- a/app/models/course_activity.rb
+++ b/app/models/course_activity.rb
@@ -14,13 +14,19 @@ class CourseActivity < ActiveRecord::Base
if user_activity
user_activity.save
else
- user_activity = UserActivity.new
- user_activity.act_id = self.course_act_id
- user_activity.act_type = self.course_act_type
- user_activity.container_type = "Course"
- user_activity.container_id = self.course_id
- user_activity.user_id = self.user_id
- user_activity.save
+ if self.course_act_type == 'Message' && !self.course_act.parent_id.nil?
+ user_activity = UserActivity.where("act_type = 'Message' and act_id = #{self.course_act.parent.id}").first
+ user_activity.created_at = self.created_at
+ user_activity.save
+ else
+ user_activity = UserActivity.new
+ user_activity.act_id = self.course_act_id
+ user_activity.act_type = self.course_act_type
+ user_activity.container_type = "Course"
+ user_activity.container_id = self.course_id
+ user_activity.user_id = self.user_id
+ user_activity.save
+ end
end
end
diff --git a/app/models/forge_activity.rb b/app/models/forge_activity.rb
index 9bc10bebf..c4f13c6d0 100644
--- a/app/models/forge_activity.rb
+++ b/app/models/forge_activity.rb
@@ -29,12 +29,19 @@ class ForgeActivity < ActiveRecord::Base
if user_activity
user_activity.save
else
- user_activity = UserActivity.new
- user_activity.act_id = self.forge_act_id
- user_activity.act_type = self.forge_act_type
- user_activity.container_type = "Project"
- user_activity.container_id = self.project_id
- user_activity.save
+ if self.forge_act_type == 'Message' && !self.forge_act.parent_id.nil?
+ user_activity = UserActivity.where("act_type = 'Message' and act_id = #{self.forge_act.parent.id}").first
+ user_activity.created_at = self.created_at
+ user_activity.save
+ else
+ user_activity = UserActivity.new
+ user_activity.act_id = self.forge_act_id
+ user_activity.act_type = self.forge_act_type
+ user_activity.container_type = "Project"
+ user_activity.container_id = self.project_id
+ user_activity.user_id = self.user_id
+ user_activity.save
+ end
end
end
diff --git a/app/models/issue.rb b/app/models/issue.rb
index fa8cee988..2a6da44c5 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -147,6 +147,13 @@ class Issue < ActiveRecord::Base
unless self.author_id == self.assigned_to_id
self.forge_messages << ForgeMessage.new(:user_id => self.assigned_to_id, :project_id => self.project_id, :viewed => false)
end
+ if self.tracker_id == 5
+ self.project.members.each do |m|
+ if m.roles.first.to_s.include?("Manager") && m.user_id != self.author_id && m.user_id != self.assigned_to_id
+ self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.project_id, :viewed => false)
+ end
+ end
+ end
end
# 更新缺陷
@@ -1009,7 +1016,7 @@ class Issue < ActiveRecord::Base
if leaf.start_date
# Only move subtask if it starts at the same date as the parent
# or if it starts before the given date
- if start_date == leaf.start_date || date > leaf.start_date
+ if start_date == leaf.start_date || date > leaf.start_date
leaf.reschedule_on!(date)
end
else
@@ -1392,6 +1399,7 @@ class Issue < ActiveRecord::Base
def attachment_added(obj)
if @current_journal && @current_journal.user_id == obj.author_id && JournalDetail.find_all_by_value(obj.filename).count == 0
@current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => obj.id, :value => obj.filename)
+
end
end
@@ -1400,6 +1408,9 @@ class Issue < ActiveRecord::Base
if @current_journal && !obj.new_record?
@current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => obj.id, :old_value => obj.filename)
@current_journal.save
+ user_activity = UserActivity.where("act_type='Issue' and act_id =#{@current_journal.journalized_id}").first
+ user_activity.updated_at = Time.now
+ user_activity.save
end
end
@@ -1506,6 +1517,9 @@ class Issue < ActiveRecord::Base
}
end
@current_journal.save
+ user_activity = UserActivity.where("act_type='Issue' and act_id =#{@current_journal.journalized_id}").first
+ user_activity.updated_at = Time.now
+ user_activity.save
# reset current journal
init_journal @current_journal.user, @current_journal.notes
end
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index a25aff6bb..4fe2478d2 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -34,8 +34,10 @@ class Mailer < ActionMailer::Base
end
def method_missing(name, *args, &block)
if Setting.delayjob_enabled? && Object.const_defined?('Delayed')
+ # with delayed_job
@target.delay.send(name, *args, &block)
else
+ # without delayed_job
@target.send(name, *args, &block).deliver
end
end
diff --git a/app/models/onclick_time.rb b/app/models/onclick_time.rb
new file mode 100644
index 000000000..c62a9274c
--- /dev/null
+++ b/app/models/onclick_time.rb
@@ -0,0 +1,5 @@
+class OnclickTime < ActiveRecord::Base
+ attr_accessible :onclick_time, :user_id
+
+ belongs_to :user
+end
diff --git a/app/models/student_work.rb b/app/models/student_work.rb
index 0a5c1b65c..a6d641c0c 100644
--- a/app/models/student_work.rb
+++ b/app/models/student_work.rb
@@ -31,6 +31,7 @@ class StudentWork < ActiveRecord::Base
else
self.system_score = last_test.test_score
end
+ set_final_score self.homework_common,self
end
end
@@ -38,4 +39,102 @@ class StudentWork < ActiveRecord::Base
self.description = last_test.src if last_test
end
+ #成绩计算
+ def set_final_score homework,student_work
+ if homework && homework.homework_detail_manual
+ if homework.homework_type == 1 #匿评作业
+ if homework.teacher_priority == 1 #教师优先
+ if student_work.teacher_score
+ student_work.final_score = student_work.teacher_score
+ else
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.student_score
+ elsif student_work.student_score.nil?
+ student_work.final_score = student_work.teaching_asistant_score
+ else
+ ta_proportion = homework.homework_detail_manual.ta_proportion
+ final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
+ final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_ta_score + final_s_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ else #不考虑教师评分
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.student_score
+ elsif student_work.student_score.nil?
+ student_work.final_score = student_work.teaching_asistant_score
+ else
+ ta_proportion = homework.homework_detail_manual.ta_proportion
+ final_ta_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}")
+ final_s_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_ta_score + final_s_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业-----设定:系统评分必定不为空
+ if homework.teacher_priority == 1 #教师优先
+ if student_work.teacher_score
+ student_work.final_score = student_work.teacher_score
+ else
+ if student_work.teaching_asistant_score.nil? #教辅未评分
+ if student_work.student_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_proportion / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ elsif student_work.student_score.nil? #学生未评分
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_proportion) / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_ts_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ else
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}"))
+ final_score = final_sy_score + final_ts_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ else #不考虑教师评分
+ if student_work.teaching_asistant_score.nil? #教辅未评分
+ if student_work.student_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + homework.homework_detail_manual.ta_proportion / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ elsif student_work.student_score.nil? #学生未评分
+ if student_work.teaching_asistant_score.nil?
+ student_work.final_score = student_work.system_score
+ else
+ ta_proportion = homework.homework_detail_programing.ta_proportion + (1.0 - homework.homework_detail_manual.ta_proportion - homework.homework_detail_programing.ta_proportion) / 2
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}"))
+ final_score = final_sy_score + final_ts_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ else
+ final_sy_score = BigDecimal.new("#{student_work.system_score || 0}") * BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}")
+ final_ts_score = BigDecimal.new("#{student_work.teaching_asistant_score}") * BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}")
+ final_st_score = BigDecimal.new("#{student_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework.homework_detail_programing.ta_proportion}") - BigDecimal.new("#{homework.homework_detail_manual.ta_proportion}"))
+ final_score = final_sy_score + final_ts_score + final_st_score
+ student_work.final_score = format("%.2f",final_score.to_f)
+ end
+ end
+ end
+ end
+ end
end
diff --git a/app/models/system_message.rb b/app/models/system_message.rb
new file mode 100644
index 000000000..92a989cb3
--- /dev/null
+++ b/app/models/system_message.rb
@@ -0,0 +1,7 @@
+class SystemMessage < ActiveRecord::Base
+ attr_accessible :content, :id, :user_id
+ belongs_to :user
+
+ validates :content, presence: true
+ validates_length_of :content, maximum: 255
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index b08b29981..63811cd58 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -132,6 +132,8 @@ class User < Principal
has_many :course_messages
has_many :memo_messages
has_many :user_feedback_messages
+ has_one :onclick_time
+ has_many :system_messages
# 虚拟转换
has_many :new_jours, :as => :jour, :class_name => 'JournalsForMessage', :conditions => "status=1"
@@ -209,7 +211,7 @@ class User < Principal
before_save :update_hashed_password
before_destroy :remove_references_before_destroy
# added by fq
- after_create :act_as_activity
+ after_create :act_as_activity, :add_onclick_time
# end
scope :in_group, lambda {|group|
@@ -257,11 +259,18 @@ class User < Principal
# 新消息统计
def count_new_message
- course_count = CourseMessage.where("user_id =? and viewed =?", User.current.id, 0).count
- forge_count = ForgeMessage.where("user_id =? and viewed =?", User.current.id, 0).count
- user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =?", User.current.id, 0).count
- user_memo_count = MemoMessage.where("user_id =? and viewed =?", User.current.id, 0).count
- messages_count = course_count + forge_count + user_feedback_count + user_memo_count
+ if OnclickTime.where("user_id =?", User.current).first.nil?
+ message_new_time = OnclickTime.new
+ message_new_time.user_id = User.current.id
+ message_new_time.onclick_time = User.current.last_login_on.nil? ? Time.now : User.current.last_login_on
+ message_new_time.save
+ end
+ course_count = CourseMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count
+ forge_count = ForgeMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count
+ user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count
+ user_memo_count = MemoMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count
+ system_messages_count = SystemMessage.where("created_at >?", User.current.onclick_time.onclick_time).count
+ messages_count = course_count + forge_count + user_feedback_count + user_memo_count + system_messages_count
end
# 查询指派给我的缺陷记录
@@ -994,6 +1003,13 @@ class User < Principal
self.acts << Activity.new(:user_id => self.id)
end
+ # 注册用户的时候消息默认点击时间为用户创建时间
+ def add_onclick_time
+ if OnclickTime.where("user_id =?" , self.id).first.nil?
+ OnclickTime.create(:user_id => self.id, :onclick_time => self.created_on)
+ end
+ end
+
# Removes references that are not handled by associations
# Things that are not deleted are reassociated with the anonymous user
def remove_references_before_destroy
diff --git a/app/views/account/about_us.html.erb b/app/views/account/about_us.html.erb
index 2d21783ce..f990cd64c 100644
--- a/app/views/account/about_us.html.erb
+++ b/app/views/account/about_us.html.erb
@@ -1,50 +1,50 @@
-<%= stylesheet_link_tag 'new_user'%>
-
-
关于我们
-
-
- Trustie是一个面向高校创新实践的在线协作社区,是在中国高校推行大规模开放在线研究(Massive Open Online Research, MOORE)的支撑平台,也简称Trustie平台。老师、学生和科研人员可以在此开展各种在线协同学习、协同作业、协同开发等活动。
-
-
- MOORE是国防科学技术大学杨学军院士提出的一个面向高校科研教学活动的新型创新实践概念,为全面支持高校人才培养和科学研究提供了一种新思路。MOORE是对大规模在线开放课程(Massive Open Online Course, MOOC)的拓展,是课堂教学与创新实践深度结合的全新模式,可以看作MOOC2.0。
-
-
- 2005年开始,Trustie研制团队围绕网络时代的软件开发效率和质量这一核心问题展开研究,经过十年的磨砺与攻关,逐步揭示出以大众化协同开发、开放式资源共享、持续性可信评估为核心的互联网大规模协同机理,提出了全新的软件开发群体化方法。2008年起,研制团队开始探索如何将这种协同机理引入软件人才培养。MOORE概念的提出为研制团队的人才培养实践提供了新的发展方向和应用模式,使Trustie技术和工具能够更直接、更有效地与高校人才培养对接,形成了今天已被大量师生接受的在线人才培养平台。
-
-
- 研制团队认为MOORE的创新人才培养模式(如图1左图)是将互联网大规模协同机理与高校创新实践活动相结合的全新人才培养方法和模式,研制团队并基于本平台的架构形成了对MOORE核心机理的三方面认识(如图1右图)。
-
-
-
-
图1 基于MOORE的创新人才培养模式与核心机理
-
-
- 目前,Trustie平台已经初步展现出大规模开放在线研究的生态系统蓝图,其核心是在线教学实践平台和在线协同研究平台,如图2。Trustie在线教学实践平台是支持教师和学生围绕课堂学习开展实践的平台(如图2),Trustie在线协同研究平台是支持开发小组围绕实践任务或研究工作开展分布式协作的平台(如图2)。两个核心平台为一名"新手"大学生成长为具有一定创新能力的"创客"提供了从学习到研究的一个渐进式成长环境(如图2)。
-
-
- 特别是,根据师生的实际需要,Trustie平台提供了私有模式和公开模式,支持针对未公开成果实施有效知识产权保护为前提的交流分享(如图2)。随着越来越多的高校、课程和研究小组的加入,MOORE创新实践模式的生态效益将不断显现出来。
-
-
-
-
图2 基于MOORE的支撑平台和生态系统
-
-
- 研制团队特别感谢高校老师和学生的积极反馈、无私创意。平台的很多实用便捷的功能都是老师们积极参与和设计的结果,汇聚了大量师生的宝贵贡献,是研制团队和用户群体共同成长的结果。
-
-
- Trustie平台的基本思路是将开源模式与中国高校人才培养活动相结合,但其本质上是一种O2O(Online To Offline)的创新人才培养模式,只有在以下两个方面同步推进,才能在持续解决实际需求的过程中快速发展:
- (1)构建实践平台,激活创新能力:成为支持不同规模的团队进行协同研究和协同开发的实践平台,支持各类可公开的课程实验任务、教研室科研任务的在线协同,能够有效提升和评估学生的创新能力、协作能力和实践能力。
- (2)引入开源理念,形成创客文化:将互联网开源软件运动中的自由、对等、共享、创新的理念引入高校,使"自主创意并亲自动手实现创意"的创客精神深入人才培养活动,在学生群体中形成大胆创意、大胆实践的创新文化。
-
-
- 研制团队认为,Trustie平台是一种"互联网+"思维在高校教育领域的大型探索性实践。作为一种互联网应用,Trustie平台自身的开发也采取了互联网模式:Trustie研制团队采用了"网构化软件开发模式",坚持"每周一更"的快速上线、快速体验模式,以最大程度上贴近用户实际需求提升。欢迎高校师生一同投身创新实践,共同见证MOORE创新生态的早日形成。
-
-
-
-
-
-
-
-
-
-
+<%= stylesheet_link_tag 'new_user'%>
+
+
关于我们
+
+
+ Trustie是一个面向高校创新实践的在线协作社区,是在中国高校推行大规模开放在线研究(Massive Open Online Research, MOORE)的支撑平台,也简称Trustie平台。老师、学生和科研人员可以在此开展各种在线协同学习、协同作业、协同开发等活动。
+
+
+ MOORE是国防科学技术大学杨学军院士提出的一个面向高校科研教学活动的新型创新实践概念,为全面支持高校人才培养和科学研究提供了一种新思路。MOORE是对大规模在线开放课程(Massive Open Online Course, MOOC)的拓展,是课堂教学与创新实践深度结合的全新模式,可以看作MOOC2.0。
+
+
+ 2005年开始,Trustie研制团队围绕网络时代的软件开发效率和质量这一核心问题展开研究,经过十年的磨砺与攻关,逐步揭示出以大众化协同开发、开放式资源共享、持续性可信评估为核心的互联网大规模协同机理,提出了全新的软件开发群体化方法。2008年起,研制团队开始探索如何将这种协同机理引入软件人才培养。MOORE概念的提出为研制团队的人才培养实践提供了新的发展方向和应用模式,使Trustie技术和工具能够更直接、更有效地与高校人才培养对接,形成了今天已被大量师生接受的在线人才培养平台。
+
+
+ 研制团队认为MOORE的创新人才培养模式(如图1左图)是将互联网大规模协同机理与高校创新实践活动相结合的全新人才培养方法和模式,研制团队并基于本平台的架构形成了对MOORE核心机理的三方面认识(如图1右图)。
+
+
+
+
图1 基于MOORE的创新人才培养模式与核心机理
+
+
+ 目前,Trustie平台已经初步展现出大规模开放在线研究的生态系统蓝图,其核心是在线教学实践平台和在线协同研究平台,如图2。Trustie在线教学实践平台是支持教师和学生围绕课堂学习开展实践的平台(如图2),Trustie在线协同研究平台是支持开发小组围绕实践任务或研究工作开展分布式协作的平台(如图2)。两个核心平台为一名"新手"大学生成长为具有一定创新能力的"创客"提供了从学习到研究的一个渐进式成长环境(如图2)。
+
+
+ 特别是,根据师生的实际需要,Trustie平台提供了私有模式和公开模式,支持针对未公开成果实施有效知识产权保护为前提的交流分享(如图2)。随着越来越多的高校、课程和研究小组的加入,MOORE创新实践模式的生态效益将不断显现出来。
+
+
+
+
图2 基于MOORE的支撑平台和生态系统
+
+
+ 研制团队特别感谢高校老师和学生的积极反馈、无私创意。平台的很多实用便捷的功能都是老师们积极参与和设计的结果,汇聚了大量师生的宝贵贡献,是研制团队和用户群体共同成长的结果。
+
+
+ Trustie平台的基本思路是将开源模式与中国高校人才培养活动相结合,但其本质上是一种O2O(Online To Offline)的创新人才培养模式,只有在以下两个方面同步推进,才能在持续解决实际需求的过程中快速发展:
+ (1)构建实践平台,激活创新能力:成为支持不同规模的团队进行协同研究和协同开发的实践平台,支持各类可公开的课程实验任务、教研室科研任务的在线协同,能够有效提升和评估学生的创新能力、协作能力和实践能力。
+ (2)引入开源理念,形成创客文化:将互联网开源软件运动中的自由、对等、共享、创新的理念引入高校,使"自主创意并亲自动手实现创意"的创客精神深入人才培养活动,在学生群体中形成大胆创意、大胆实践的创新文化。
+
+
+ 研制团队认为,Trustie平台是一种"互联网+"思维在高校教育领域的大型探索性实践。作为一种互联网应用,Trustie平台自身的开发也采取了互联网模式:Trustie研制团队采用了"网构化软件开发模式",坚持"每周一更"的快速上线、快速体验模式,以最大程度上贴近用户实际需求提升。欢迎高校师生一同投身创新实践,共同见证MOORE创新生态的早日形成。
+
+
+
+
+
+
+
+
+
+
diff --git a/app/views/account/login.html.erb b/app/views/account/login.html.erb
index 56f2c5454..ed43f455a 100644
--- a/app/views/account/login.html.erb
+++ b/app/views/account/login.html.erb
@@ -1,286 +1,286 @@
-<%= stylesheet_link_tag 'new_user'%>
-<%= stylesheet_link_tag 'leftside'%>
-
-
-
-
-
-
-
欢迎加入Trustie高校创新实践社区!老师、学生和科研人员可以在此开展各种在线协同学习、协同作业、协同开发等活动。Trustie是在中国推行大规模开放在线研究模式(MOORE)的支撑平台。
-
-
-
-
-
-
<%= flash.empty? || flash[:error].nil? ? "" : flash[:error].html_safe %>
-
-
-
- <%= form_tag(signin_path,:id=>'main_login_form',:method=>'post') do %>
- <%= back_url_hidden_field_tag %>
-
- <%= text_field_tag 'username', params[:username], :tabindex => '1' ,
- :class=>'loginSignBox',:placeholder=>'请输入邮箱地址或昵称', :onkeypress => "user_name_keypress(event);"%>
-
-
- <% if Setting.openid? %>
-
- <%= text_field_tag "openid_url", nil, :tabindex => '3',:placeholder=>'请输入OpenId URL' %>
-
- <% end %>
-
-
- <%= password_field_tag 'password', nil, :tabindex => '2',:class=>'loginSignBox' ,:placeholder=>'请输密码', :onkeypress => "user_name_keypress(event);"%>
-
-
- <% end %>
-
-
-
-
-
-
-
-
- 注册<%= link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %>
-
-
-
-
- <%= form_for :user, :url => register_path,:method=>'post',:html=>{:id=>'main_reg_form'} do |f| %>
- <%= error_messages_for 'user' %>
-
-
- <%= f.text_field :mail,:size => 25, :class=>'loginSignBox' ,:placeholder=>"请输入邮箱地址"%>
-
请输入有效邮箱地址
-
-
-
- <%= f.password_field :password, :size => 25,:placeholder=>"请输入密码",:class=>'loginSignBox' %>
-
至少需要 6 个字符
-
-
-
- <%= f.password_field :password_confirmation, :size => 25,:placeholder=>"请再次输入密码",:class=>'loginSignBox' %>
-
密码不一致
-
-
-
- <%= f.text_field :login, :size => 25,:placeholder=>"请输入用户昵称",:class=>'loginSignBox'%>
-
用户昵称为2-18个中英文,数字或下划线
-
-
-
- <% end %>
-
-
-
-
-
-
+<%= stylesheet_link_tag 'new_user'%>
+<%= stylesheet_link_tag 'leftside'%>
+
+
+
+
+
+
+
欢迎加入Trustie高校创新实践社区!老师、学生和科研人员可以在此开展各种在线协同学习、协同作业、协同开发等活动。 Trustie是在中国推行大规模开放在线研究模式(MOORE)的支撑平台。
+
+
+
+
+
+
<%= flash.empty? || flash[:error].nil? ? "" : flash[:error].html_safe %>
+
+
+
+ <%= form_tag(signin_path,:id=>'main_login_form',:method=>'post') do %>
+ <%= back_url_hidden_field_tag %>
+
+ <%= text_field_tag 'username', params[:username], :tabindex => '1' ,
+ :class=>'loginSignBox',:placeholder=>'请输入邮箱地址或昵称', :onkeypress => "user_name_keypress(event);"%>
+
+
+ <% if Setting.openid? %>
+
+ <%= text_field_tag "openid_url", nil, :tabindex => '3',:placeholder=>'请输入OpenId URL' %>
+
+ <% end %>
+
+
+ <%= password_field_tag 'password', nil, :tabindex => '2',:class=>'loginSignBox' ,:placeholder=>'请输密码', :onkeypress => "user_name_keypress(event);"%>
+
+
+ <% end %>
+
+
+
+
+
+
+
+
+ 注册<%= link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %>
+
+
+
+
+ <%= form_for :user, :url => register_path,:method=>'post',:html=>{:id=>'main_reg_form'} do |f| %>
+ <%= error_messages_for 'user' %>
+
+
+ <%= f.text_field :mail,:size => 25, :class=>'loginSignBox' ,:placeholder=>"请输入邮箱地址"%>
+
请输入有效邮箱地址
+
+
+
+ <%= f.password_field :password, :size => 25,:placeholder=>"请输入密码",:class=>'loginSignBox' %>
+
至少需要 6 个字符
+
+
+
+ <%= f.password_field :password_confirmation, :size => 25,:placeholder=>"请再次输入密码",:class=>'loginSignBox' %>
+
密码不一致
+
+
+
+ <%= f.text_field :login, :size => 25,:placeholder=>"请输入用户昵称",:class=>'loginSignBox'%>
+
用户昵称为2-18个中英文,数字或下划线
+
+
+
+ <% end %>
+
+
+
+
+
+
diff --git a/app/views/admin/messages.html.erb b/app/views/admin/messages.html.erb
new file mode 100644
index 000000000..1d9f0cc10
--- /dev/null
+++ b/app/views/admin/messages.html.erb
@@ -0,0 +1,47 @@
+<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
+
+ <%=l(:label_system_message)%>
+
+
+ <%= form_for(@admin_messages, :html => {:id =>'system_message-form'}) do |f| %>
+
+ <%= f.kindeditor :content,:width=>'87%',:editor_id=>'system_message_editor' %>
+
+
+
+
+ <%= link_to l(:label_submit), "javascript:void(0)", :class => "btn_message_free", :onclick => "system_message_editor.sync();submit_message();" %>
+
+ <% end %>
+
+
+
diff --git a/app/views/comments/create.js.erb b/app/views/comments/create.js.erb
index dd3c3dfb2..51cb4458e 100644
--- a/app/views/comments/create.js.erb
+++ b/app/views/comments/create.js.erb
@@ -1,3 +1,3 @@
-$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_news', :locals => {:activity => @news,:user_activity_id =>@user_activity_id}) %>");
+$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_news', :locals => {:activity => @news,:user_activity_id =>@user_activity_id,:first_user_activity =>@first_user_activity,:page => @page}) %>");
-init_KindEditor_data('<%= @user_activity_id%>');
+init_activity_KindEditor_data('<%= @user_activity_id%>',"","85%");
diff --git a/app/views/courses/_join_private_course.html.erb b/app/views/courses/_join_private_course.html.erb
index 934a4eb33..4cc8b9fbf 100644
--- a/app/views/courses/_join_private_course.html.erb
+++ b/app/views/courses/_join_private_course.html.erb
@@ -57,6 +57,8 @@
:id => 'new-watcher-form') do %>
+
+
课 程 ID:
diff --git a/app/views/courses/new.html.erb b/app/views/courses/new.html.erb
index 8c7a41ddc..d2c17917e 100644
--- a/app/views/courses/new.html.erb
+++ b/app/views/courses/new.html.erb
@@ -5,6 +5,8 @@
<%= labelled_form_for @course do |f| %>
+
+
* <%= l(:label_tags_course_name)%> :
课程名称不能为空
diff --git a/app/views/courses/settings.html.erb b/app/views/courses/settings.html.erb
index 4ca8d3d43..a462db79d 100644
--- a/app/views/courses/settings.html.erb
+++ b/app/views/courses/settings.html.erb
@@ -20,6 +20,8 @@
+
+
* <%= l(:label_tags_course_name)%> :
课程名称不能为空
diff --git a/app/views/files/index.html.erb b/app/views/files/index.html.erb
index aefa1a5a9..fa15c1fc7 100644
--- a/app/views/files/index.html.erb
+++ b/app/views/files/index.html.erb
@@ -223,6 +223,54 @@
});
}
+ var tagNameHtml; //当前双击的链接的父节点的html
+ var tagName; //标签的值
+ var parentCssBorder; //当前双击的链接的父节点
+ var ele; //当前双击的链接
+ var tagId; //标签的id
+ var taggableType; //被标签的类型
+ function rename_tag(domEle,name,id,type){
+ if(domEle.children().get(0) != undefined ){ //已经是编辑框的情况下不要动
+ return;
+ }
+ tagNameHtml = domEle.parent().html()
+ tagName = name;
+ parentCssBorder = domEle.parent().css("border");
+ ele = domEle;
+ tagId = id;
+ taggableType = type;
+ domEle.html(' ');
+ domEle.parent().css("border","1px solid #ffffff");
+ $("#renameTagName").focus();
+ }
+ //监听所有的单击事件
+ $(document.body).click(function(e){
+ node = document.elementFromPoint(e.clientX, e.clientY);
+ if(node.tagName == "INPUT"){ //如果是输入框的聚焦,那么就不要进行下去了
+ return;
+ }
+ if($("#renameTagName")[0] != undefined ){//存在renameTagName,则处于编辑状态
+ if($("#renameTagName").val().trim() == tagName){ //如果值一样,则恢复原来的状态
+ ele.parent().css("border","");
+ ele.parent().html(tagNameHtml);
+
+ }else{ //否则就要更新tag名称了
+ if(confirm("是否将标签改为 "+ $("#renameTagName").val().trim())){
+ $.post(
+ '<%= update_tag_name_path %>',
+ {"taggableId":tagId,"taggableType":taggableType,"tagName":tagName,"renameName":$("#renameTagName").val().trim()}
+// function(data){
+// ele.parent().css("border","");
+// ele.parent().html(tagNameHtml);
+// }
+ )
+ }else{
+ ele.parent().css("border","");
+ ele.parent().html(tagNameHtml);
+ }
+ }
+ }
+ });
diff --git a/app/views/homework_common/_new_homework_detail_manual_form.html.erb b/app/views/homework_common/_new_homework_detail_manual_form.html.erb
index 7fb728ad0..af5a8bf50 100644
--- a/app/views/homework_common/_new_homework_detail_manual_form.html.erb
+++ b/app/views/homework_common/_new_homework_detail_manual_form.html.erb
@@ -1,74 +1,74 @@
-
-
-
-
+
+
+
+
diff --git a/app/views/homework_common/alert_anonymous_comment.js.erb b/app/views/homework_common/alert_anonymous_comment.js.erb
index 2b3248dc2..1c354aa45 100644
--- a/app/views/homework_common/alert_anonymous_comment.js.erb
+++ b/app/views/homework_common/alert_anonymous_comment.js.erb
@@ -3,5 +3,4 @@ showModal('ajax-modal', '500px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("" +
" ");
-$('#ajax-modal').parent().css("top","").css("left","");
-$('#ajax-modal').parent().addClass("anonymos");
\ No newline at end of file
+$('#ajax-modal').parent().css("top","30%").css("left","30%").css("position","fixed");
\ No newline at end of file
diff --git a/app/views/homework_common/index.html.erb b/app/views/homework_common/index.html.erb
index 694069b44..d7723452b 100644
--- a/app/views/homework_common/index.html.erb
+++ b/app/views/homework_common/index.html.erb
@@ -27,7 +27,7 @@
<% if @is_teacher%>
<%= homework_anonymous_comment(homework)%>
<%= link_to(l(:label_bid_respond_delete), homework_common_path(homework),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "fr mr10 work_edit") %>
- <%#= link_to(l(:button_edit),edit_homework_common_path(homework), :class => "fr mr10 work_edit") %>
+ <%= link_to(l(:button_edit),edit_homework_common_path(homework), :class => "fr mr10 work_edit") %>
<% elsif @is_student%>
<%= student_anonymous_comment homework %>
<%= student_new_homework homework %>
diff --git a/app/views/homework_common/start_anonymous_comment.js.erb b/app/views/homework_common/start_anonymous_comment.js.erb
index 5f27a5b82..b0424bf7a 100644
--- a/app/views/homework_common/start_anonymous_comment.js.erb
+++ b/app/views/homework_common/start_anonymous_comment.js.erb
@@ -1,6 +1,6 @@
<% if @statue == 1%>
alert('启动成功');
-$("#<%= @homework.id %>_start_anonymous_comment").replaceWith('<%= escape_javascript(link_to "关闭匿评", alert_anonymous_comment_homework_common_path(@homework), remote: true, id:"#{@homework.id}_stop_anonymous_comment",:class => "fr mr10 work_edit")%>');
+$("#<%= @homework.id %>_start_anonymous_comment").replaceWith('<%= escape_javascript(link_to "关闭匿评", alert_anonymous_comment_homework_common_path(@homework), remote: true, id:"#{@homework.id}_stop_anonymous_comment",:class => "postOptionLink")%>');
<% elsif @statue == 2 %>
alert('启动失败\n作业总数大于等于2份时才能启动匿评');
<% elsif @statue == 3%>
diff --git a/app/views/homework_common/stop_anonymous_comment.js.erb b/app/views/homework_common/stop_anonymous_comment.js.erb
index 9a6131c64..3cbac1bf6 100644
--- a/app/views/homework_common/stop_anonymous_comment.js.erb
+++ b/app/views/homework_common/stop_anonymous_comment.js.erb
@@ -1,2 +1,2 @@
-$("#<%= @homework.id %>_stop_anonymous_comment").replaceWith('匿评结束 ');
+$("#<%= @homework.id %>_stop_anonymous_comment").replaceWith('匿评结束 ');
alert('关闭成功');
\ No newline at end of file
diff --git a/app/views/issues/add_journal.js.erb b/app/views/issues/add_journal.js.erb
index efa5750c2..edc722dbc 100644
--- a/app/views/issues/add_journal.js.erb
+++ b/app/views/issues/add_journal.js.erb
@@ -1,3 +1,3 @@
-$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/project_issue', :locals => {:activity => @issue,:user_activity_id =>@user_activity_id}) %>");
+$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/project_issue', :locals => {:activity => @issue,:user_activity_id =>@user_activity_id,:first_user_activity =>@first_user_activity,:page => @page}) %>");
-init_KindEditor_data(<%= @user_activity_id%>);
\ No newline at end of file
+init_activity_KindEditor_data(<%= @user_activity_id%>,"","85%");
\ No newline at end of file
diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb
index 7841ead91..800f2ff9d 100644
--- a/app/views/layouts/base_courses.html.erb
+++ b/app/views/layouts/base_courses.html.erb
@@ -33,36 +33,6 @@
-
-
@@ -77,7 +47,7 @@
<% if is_teacher%>
<%= link_to "
#{l(:button_configure)}".html_safe, {:controller => 'courses', :action => 'settings', :id => @course}, :class => "pr_join_a" %>
<%= set_course_time @course%>
- <%= link_to "
#{l(:button_copy)}".html_safe, copy_course_course_path(@course.id), :class => "pr_join_a" %>
+ <%#= link_to "
#{l(:button_copy)}".html_safe, copy_course_course_path(@course.id), :class => "pr_join_a" %>
<% else%>
<% end%>
@@ -87,12 +57,12 @@
diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb
index ca1b324a4..2bcb7f9ef 100644
--- a/app/views/layouts/base_projects.html.erb
+++ b/app/views/layouts/base_projects.html.erb
@@ -49,16 +49,6 @@
<%= link_to l(:field_homepage), home_path %> >
<%=l(:label_project_hosting_platform) %> ><%= link_to @project.name, project_path(@project.id) %>
-
-
-
-
-
-
-
-
-
-
diff --git a/app/views/layouts/base_users_new.html.erb b/app/views/layouts/base_users_new.html.erb
index 91357d09a..807fb2caa 100644
--- a/app/views/layouts/base_users_new.html.erb
+++ b/app/views/layouts/base_users_new.html.erb
@@ -331,8 +331,8 @@
48px*48px
-
取 消
-
确 定
+
取 消
+
确 定
diff --git a/app/views/layouts/new_base_user.html.erb b/app/views/layouts/new_base_user.html.erb
index 8676c6fb1..b86838c0b 100644
--- a/app/views/layouts/new_base_user.html.erb
+++ b/app/views/layouts/new_base_user.html.erb
@@ -103,15 +103,15 @@
<% if is_current_user%>
<% if User.current.user_extensions && User.current.user_extensions.identity == 0 && User.current.allowed_to?(:add_course, nil, :global => true)%>
- <%=link_to "", new_course_path, :class => "homepageMenuSetting fr", :title => "新建课程"%>
+ <%=link_to "", new_course_path(:host=> Setting.host_course), :class => "homepageMenuSetting fr", :title => "新建课程"%>
<% else%>
<%=link_to "", join_private_courses_courses_path, :class => "homepageMenuSetting fr",:remote => true, :title => "加入课程"%>
<% end%>
<% end%>
-
-
@@ -195,8 +195,8 @@
48px*48px
- 取 消
- 确 定
+ 取 消
+ 确 定
diff --git a/app/views/messages/reply.js.erb b/app/views/messages/reply.js.erb
index 9d3d68855..3d4878cf7 100644
--- a/app/views/messages/reply.js.erb
+++ b/app/views/messages/reply.js.erb
@@ -1,6 +1,6 @@
<%if @project%>
- $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/project_message', :locals => {:activity => @topic,:user_activity_id =>@user_activity_id}) %>");
+ $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/project_message', :locals => {:activity => @topic,:user_activity_id =>@user_activity_id,:first_user_activity =>@first_user_activity,:page => @page}) %>");
<%elsif @course%>
- $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_message', :locals => {:activity => @topic,:user_activity_id =>@user_activity_id}) %>");
+ $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_message', :locals => {:activity => @topic,:user_activity_id =>@user_activity_id,:first_user_activity =>@first_user_activity,:page => @page}) %>");
<%end%>
-init_KindEditor_data(<%= @user_activity_id%>);
\ No newline at end of file
+init_activity_KindEditor_data(<%= @user_activity_id%>,"","85%");
\ No newline at end of file
diff --git a/app/views/my/save_user_avatar.js.erb b/app/views/my/save_user_avatar.js.erb
index 03608a768..1e24a4a7c 100644
--- a/app/views/my/save_user_avatar.js.erb
+++ b/app/views/my/save_user_avatar.js.erb
@@ -1,3 +1,3 @@
-$("#nh_user_tx").replaceWith('<%= image_tag(url_to_avatar(@user), :id=>'nh_user_tx',:style=>"width:90px;height:90px;overflow:hidden",:alt=>"头像") %>');
+$("#nh_user_tx").replaceWith('<%= image_tag(url_to_avatar(@user), :id=>'nh_user_tx',:style=>"width:78px;height:78px;overflow:hidden",:alt=>"头像") %>');
$("#nh_user_logo").replaceWith('<%= image_tag(url_to_avatar(@user), :id=>'nh_user_logo',:width =>"40",:height => "40",:alt=>"头像") %>');
hideModal();
\ No newline at end of file
diff --git a/app/views/news/_course_show.html.erb b/app/views/news/_course_show.html.erb
index f39eb8266..9ae951779 100644
--- a/app/views/news/_course_show.html.erb
+++ b/app/views/news/_course_show.html.erb
@@ -32,7 +32,8 @@
<%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %>
<%= kindeditor_tag :comment, '',:height=>'100',:editor_id =>'comment_editor', :placeholder=>"最多250个字"%>
-
+
+
<%= l(:label_cancel_with_space) %>
@@ -48,7 +49,7 @@
<% comments.each do |comment| %>
<% next if comment.new_record? %>
-
<%= link_to image_tag(url_to_avatar(comment.author),:width => 42,:height => 42), user_path(comment.author)%>
+
<%= link_to image_tag(url_to_avatar(comment.author),:width => 42,:height => 42), user_path(comment.author), :class => "problem_pic fl"%>
<%= link_to_user_header(comment.author,false,:class => 'c_blue fb fl mb10 ') if comment.respond_to?(:author) %>
@@ -76,4 +77,4 @@
<% end %>
-<% html_title @news.title -%>
+<% html_title @news.title -%>
\ No newline at end of file
diff --git a/app/views/news/_project_form.html.erb b/app/views/news/_project_form.html.erb
index dfe1fb937..269420bfe 100644
--- a/app/views/news/_project_form.html.erb
+++ b/app/views/news/_project_form.html.erb
@@ -1,7 +1,7 @@
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
* <%= l(:field_title) %> :
-
+
diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb
index 1e3f4b620..4df254fd0 100644
--- a/app/views/projects/_form.html.erb
+++ b/app/views/projects/_form.html.erb
@@ -12,14 +12,6 @@
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:0px;" %>
-
- <%#= f.text_field :enterprise_name, :size => 60, :style => "width:490px;" %>
-
- <%= l(:field_enterprise_name)%>
-
-
- <%= select_tag :organization_id,options_for_select(project_organizations_id_option,@project.organization_id),{} %>
-
<%= f.text_field :identifier, :required => true, :size => 60, :style => "width:488px;", :disabled => @project.identifier_frozen?, :maxlength => Project::IDENTIFIER_MAX_LENGTH,
value:"#{User.current.id.to_s + '_' +Time.now.to_s.gsub(' ','_').gsub(':','').gsub('+','')}" %>
diff --git a/app/views/projects/create.js.erb b/app/views/projects/create.js.erb
new file mode 100644
index 000000000..9bb447789
--- /dev/null
+++ b/app/views/projects/create.js.erb
@@ -0,0 +1,3 @@
+$("#project_id").replaceWith("<%= escape_javascript(select_tag :project_id, options_for_select(user_projects_option), {:class => "InputBox W680 fl"})%>");
+hideModal("#popbox02");
+alert("创建成功");
\ No newline at end of file
diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb
index e70e20cef..3fc9a89d6 100644
--- a/app/views/projects/settings.html.erb
+++ b/app/views/projects/settings.html.erb
@@ -2,13 +2,15 @@
$(function(){
<%if @select_tab%>
<%if @select_tab == "modules"%>
- project_setting(2);
+ project_setting(2);
+ <% elsif @select_tab == "members"%>
+ project_setting(3);
<% elsif @select_tab == "versions"%>
- project_setting(4);
- $("#pro_st_edit_ban").toggle();
+ project_setting(4);
+ $("#pro_st_edit_ban").toggle();
<% elsif @select_tab == "repositories" %>
- project_setting(6);
- $("#pro_st_edit_ku").toggle();
+ project_setting(6);
+ $("#pro_st_edit_ku").toggle();
<%else%>
<% end%>
<% end%>
diff --git a/app/views/projects/settings/_new_edit.html.erb b/app/views/projects/settings/_new_edit.html.erb
index a8998ece5..8de9b8229 100644
--- a/app/views/projects/settings/_new_edit.html.erb
+++ b/app/views/projects/settings/_new_edit.html.erb
@@ -19,11 +19,6 @@
-
- 组织 :
- <%= select_tag :organization_id,options_for_select(project_organizations_id_option,@project.organization_id),{} %>
-
-
公开 :
>
diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb
index be793a409..410bd8c32 100644
--- a/app/views/projects/settings/_new_repositories.html.erb
+++ b/app/views/projects/settings/_new_repositories.html.erb
@@ -59,7 +59,7 @@
-<%= labelled_form_for :repository, @repository, :url =>project_repositories_path(@project),:html => {:id => 'repository-form',:method=>"post"} do |f| %>
+<%= labelled_form_for :repository, @repository, :url =>project_repositories_path(@project),:html => {:id => 'repository-form',:method=>"post",:autocomplete=>'off'} do |f| %>
@@ -79,6 +79,8 @@
<% end %>
+
+
* <%=l(:label_repository_name)%>:
<%= f.text_field :identifier, :disabled =>@repository.nil? || @repository.identifier_frozen? ? true:false,:label=>"", :no_label => true %>
<% unless @repository.identifier_frozen? %>
@@ -87,7 +89,7 @@
* <%=l(:label_password)%>
- <%= f.password_field :upassword, :label=> "", :no_label => true %>
+ <%= f.password_field :upassword, :label=> "", :no_label => true%>
<%= l(:label_upassword_info)%>
diff --git a/app/views/student_work/_add_score_reply.html.erb b/app/views/student_work/_add_score_reply.html.erb
index 2866b2da6..417d3d2c1 100644
--- a/app/views/student_work/_add_score_reply.html.erb
+++ b/app/views/student_work/_add_score_reply.html.erb
@@ -1,4 +1,5 @@
<%= form_for('', :remote => true, :method => :post,:url => add_score_reply_student_work_index_path(:score_id => score.id)) do |f|%>
<%= f.text_area 'message', :class => 'ping_text', :placeholder => l(:text_caracters_maximum,:count=>250),:maxlength => 250 %>
+
回复
<% end%>
\ No newline at end of file
diff --git a/app/views/student_work/_evaluation_student_work_title.html.erb b/app/views/student_work/_evaluation_student_work_title.html.erb
deleted file mode 100644
index f19438f78..000000000
--- a/app/views/student_work/_evaluation_student_work_title.html.erb
+++ /dev/null
@@ -1,47 +0,0 @@
-
- 学号
-
-
- <%= link_to "姓名",@show_all ? student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "name"%>
- <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- 作品名称
-
-
- <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "created_at"%>
- <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "teacher_score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "teaching_asistant_score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
-
- <% end%>
-
-
- <% if @homework.homework_type == 1%>
- <%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% elsif @homework.homework_type == 2%>
- <%= link_to "系统",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% end %>
- <% if @show_all && @order == "student_score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
\ No newline at end of file
diff --git a/app/views/student_work/_evaluation_title.html.erb b/app/views/student_work/_evaluation_title.html.erb
new file mode 100644
index 000000000..bb1919472
--- /dev/null
+++ b/app/views/student_work/_evaluation_title.html.erb
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/app/views/student_work/_evaluation_un_title.html.erb b/app/views/student_work/_evaluation_un_title.html.erb
new file mode 100644
index 000000000..8ca855e9b
--- /dev/null
+++ b/app/views/student_work/_evaluation_un_title.html.erb
@@ -0,0 +1,37 @@
+
+
+ 作品信息
+
+
+ <%= link_to "教师评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "c_dark f14 fb fl ml10"%>
+ <% if @show_all && @order == "teacher_score"%>
+ <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) ,:class => "#{@score == 'desc' ? 'st_up' : 'st_down'} mt19"%>
+ <% end%>
+
+
+ <%= link_to "教辅评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "c_dark f14 fb fl ml10"%>
+ <% if @show_all && @order == "teaching_asistant_score"%>
+ <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) ,:class => "#{@score == 'desc' ? 'st_up' : 'st_down'} mt19"%>
+ <% end%>
+
+ <% if @homework.homework_type == 2%>
+
+ <%= link_to "系统评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "system_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "c_dark f14 fb fl ml10"%>
+ <% if @show_all && @order == "system_score"%>
+ <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "system_score", :sort => @score, :name => @name, :group => @group) ,:class => "#{@score == 'desc' ? 'st_up' : 'st_down'} mt19"%>
+ <% end%>
+
+ <% end%>
+
+ <%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "c_dark f14 fb fl ml10"%>
+ <% if @show_all && @order == "student_score"%>
+ <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) ,:class => "#{@score == 'desc' ? 'st_up' : 'st_down'} mt19"%>
+ <% end%>
+
+
+ <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "c_dark f14 fb fl ml10"%>
+ <% if @show_all && @order == "score"%>
+ <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) ,:class => "#{@score == 'desc' ? 'st_up' : 'st_down'} mt19"%>
+ <% end%>
+
+
\ No newline at end of file
diff --git a/app/views/student_work/_evaluation_un_work.html.erb b/app/views/student_work/_evaluation_un_work.html.erb
new file mode 100644
index 000000000..caaaa2775
--- /dev/null
+++ b/app/views/student_work/_evaluation_un_work.html.erb
@@ -0,0 +1,76 @@
+
+
+
+
+
+ <% student_work_name = student_work.name.nil? || student_work.name.empty? ? student_work.user.show_name + '的作品' : student_work.name%>
+ <%= link_to student_work_name, student_work_path(student_work),:remote => true,:title => student_work_name, :class => "linkGrey f14"%>
+
+
+
+
+
+ 姓名:<%= student_work.user.show_name%>
+
+
+ 学号:
+ <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
+
+
+ 时间:
+ <% if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(student_work.created_at.to_s).strftime("%Y-%m-%d") %>
+ 迟交
+ <% else%>
+ <%= format_time student_work.created_at%>
+ <% end %>
+
+
+
+
+
+
+ <%= student_work.teacher_score.nil? ? "--" : format("%.1f",student_work.teacher_score)%>
+
+
+ <%= student_work.teaching_asistant_score.nil? ? "--" : format("%.1f",student_work.teaching_asistant_score)%>
+
+
+ <% if @homework.homework_type == 2%>
+
+
+ <%= student_work.system_score.nil? ? "--" : format("%.1f",student_work.system_score)%>
+
+ <% end%>
+
+ <%= student_work.student_score.nil? ? "--" : format("%.1f",student_work.student_score)%>
+ <% unless student_work.student_score.nil?%>
+
+ (<%= student_work.student_works_scores.where(:reviewer_role => 3).count%>)
+
+
+ 现共有
+ <%= student_work.student_works_scores.where(:reviewer_role => 3).count%>
+ 名学生进行了匿评,平均分为
+ <%= format("%.1f",student_work.student_score)%> 分。
+
+ <% end%>
+
+
+
+ <% score = student_work.respond_to?("score") ? student_work.score : student_work.final_score - student_work.absence_penalty - student_work.late_penalty%>
+
+ <%= score.nil? ? "--" : format("%.1f",score)%>
+ <% unless score.nil?%>
+
+ 作品最终评分为
+ <%= student_work.final_score%> 分。
+ 迟交扣分
+ <%= student_work.late_penalty%> 分,
+ 缺评扣分
+ <%= student_work.absence_penalty%> 分,
+ 最终成绩为
+ <%= format("%.1f",score)%> 分。
+
+ <% end%>
+
+
\ No newline at end of file
diff --git a/app/views/student_work/_evaluation_work.html.erb b/app/views/student_work/_evaluation_work.html.erb
index be07269c3..f8b9addbd 100644
--- a/app/views/student_work/_evaluation_work.html.erb
+++ b/app/views/student_work/_evaluation_work.html.erb
@@ -1,29 +1,51 @@
-" id="student_work_<%= student_work.id%>">
+
<% is_my_work = student_work.user == User.current%>
-
- <% if is_my_work%>
-
- <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
-
- <% else%>
- --
- <% end%>
-
-
- <% if is_my_work%>
- <%= link_to student_work.user.show_name,user_path(student_work.user),:title => student_work.user.show_name, :class => "c_blue02" %>
- <% else%>
- <%= link_to "匿名","javascript:void(0)", :class => "c_blue02"%>
- <% end%>
-
-
- <% student_work_name = student_work.name.nil? || student_work.name.empty? ? '匿名的作品' : student_work.name%>
- <%= link_to student_work_name, student_work_path(student_work),:remote => true, :title => student_work.name, :class => "c_blue02"%>
+
+
+
+ <% if is_my_work%>
+ <% student_work_name = student_work.name.nil? || student_work.name.empty? ? student_work.user.show_name + '的作品' : student_work.name%>
+ <%= link_to student_work_name, student_work_path(student_work),:remote => true,:title => student_work_name, :class => "linkGrey f14"%>
+ <% else%>
+ <%= link_to "匿名的作品", student_work_path(student_work),:remote => true,:title => student_work_name, :class => "linkGrey f14"%>
+ <% end%>
+
+
+
+
+
+ 姓名:
+ <% if is_my_work%>
+ <%= student_work.user.show_name%>
+ <% else%>
+ 匿名
+ <% end%>
+
+
+ 学号:
+ <% if is_my_work%>
+
+ <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
+
+ <% else%>
+ --
+ <% end%>
+
+
+ 时间:
+ <% if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(student_work.created_at.to_s).strftime("%Y-%m-%d") %>
+ 迟交
+ <% else%>
+ <%= format_time student_work.created_at%>
+ <% end %>
+
+
+
+
<% my_score = student_work_score(student_work,User.current) %>
-
- <%= my_score.nil? ? "--" : format("%.2f",my_score.score)%>
+
+ <%= my_score.nil? ? "--" : format("%.1f",my_score.score)%>
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/views/student_work/_evaluation_work_title.html.erb b/app/views/student_work/_evaluation_work_title.html.erb
deleted file mode 100644
index 0be6228bb..000000000
--- a/app/views/student_work/_evaluation_work_title.html.erb
+++ /dev/null
@@ -1,12 +0,0 @@
-
- 学号
-
-
- 学生姓名
-
-
- 作品名称
-
-
- <%= link_to "我的评分","javascript:void(0)",:class => "c_dark f14 fb fl"%>
-
\ No newline at end of file
diff --git a/app/views/student_work/_jour_replay.html.erb b/app/views/student_work/_jour_replay.html.erb
index 77fb476bf..4b594d7f4 100644
--- a/app/views/student_work/_jour_replay.html.erb
+++ b/app/views/student_work/_jour_replay.html.erb
@@ -6,9 +6,9 @@
<% if jour.user==User.current || User.current.admin? %>
<%= link_to(l(:label_bid_respond_delete), destroy_score_reply_student_work_index_path(:jour_id => jour.id),
- :remote => true, :confirm => l(:text_are_you_sure), :title => l(:button_delete), :class => "fr c_purple") %>
+ :remote => true, :confirm => l(:text_are_you_sure), :title => l(:button_delete), :class => "fr linkBlue mr5") %>
<% end %>
-
+
<%=format_time jour.created_on %>
diff --git a/app/views/student_work/_new_project.html.erb b/app/views/student_work/_new_project.html.erb
new file mode 100644
index 000000000..3d9214c7d
--- /dev/null
+++ b/app/views/student_work/_new_project.html.erb
@@ -0,0 +1,31 @@
+
diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb
index b259e20a5..b5ff8f064 100644
--- a/app/views/student_work/_programing_work_show.html.erb
+++ b/app/views/student_work/_programing_work_show.html.erb
@@ -1,78 +1,102 @@
-
+
-
- 上交时间:
-
+ 上交时间:
<%=format_time @work.created_at %>
- <% if @work.user != User.current%>
-
+
+ <% if @work.user == User.current && @homework.homework_detail_manual.comment_status == 1 %>
+
+
+ <%= link_to("", student_work_path(@work),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "pic_del") %>
+
+
+ <%= link_to "",new_student_work_path(:homework => @homework.id),:class => "pic_edit"%>
+
+ <% end%>
+ <% if @homework.homework_detail_manual.comment_status == 3 && @work.user != User.current%>
+
<%= render :partial => 'student_work_praise' %>
<% end%>
+
-
- 编程代码:
-
-
- <%= text_format @work.description%>
+
编程代码:
+
+ <%= text_format(@work.description) if @work.description%>
<% if @is_teacher%>
-
测试结果:
-
-
-
- 输入
- 输出
- 测试结果
-
- <%@homework.homework_tests.each do |test|%>
- ">
-
- <%= test.input%>
-
-
- <%= test.output%>
-
- <% student_work_test = StudentWorkTest.where(:homework_test_id => test.id,:student_work_id => @work.id).first%>
- <%= student_work_test.nil? ? "正在编译" : student_work_test.status_to_s%>
-
-
- <% end%>
- <% student_work_test = @work.student_work_test.first%>
- <% if student_work_test && student_work_test.error_msg && !student_work_test.error_msg.empty?%>
-
-
- <%= student_work_test.error_msg%>
-
-
- <% end%>
-
-
-
-
+
+
+ 测试结果:
+
+
+ <% @work.student_work_tests.each_with_index do |test, index| %>
+
+
+ 第<%= @work.student_work_tests.count - index%>次测试
+
+
+ <%= test.created_at.to_s(:db) %>
+
+
+
+ <% if test.status.to_i == -2 %>
+
+ <%= test.results.first %>
+
+ <% else %>
+
+
+ <% test.results.each_with_index do |x, i| %>
+
+ 测试<%=i+1%>
+ <% if x["status"].to_i != 0 %>
+ 测试错误!
+ 您的输出:
+ <%=x["result"]%>
+ 正确输出:
+ <%=x["output"]%>
+
+ <% else %>
+ 测试正确!
+
+ <% end %>
+
+ <% end %>
+
+
+ <% end %>
+ <% end %>
+
-
-
- <%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
-
<% end%>
+
+
+ <% if @is_teacher || (@homework.homework_detail_manual.comment_status == 2 && @work.user != User.current )%>
+
+
+ <%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
+
+ <% end%>
+
+
-
- <%@work.student_works_scores.order("updated_at desc").each do |score|%>
+
+ <%@student_work_scores.each do |score|%>
- <%= render :partial => 'student_work_score',:locals => {:score => score}%>
+ <%= render :partial => 'student_work_score',:locals => {:score => score,:is_last => score == @student_work_scores.last}%>
<% end%>
-
-
收起
+
+
+
收起
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/views/student_work/_set_score_rule.html.erb b/app/views/student_work/_set_score_rule.html.erb
new file mode 100644
index 000000000..7deed7fb8
--- /dev/null
+++ b/app/views/student_work/_set_score_rule.html.erb
@@ -0,0 +1,63 @@
+<%= form_for('new_form',:url => {:controller => 'student_work',:action => 'set_score_rule',:homework => homework.id},:method => "post") do |f|%>
+
+<% end%>
diff --git a/app/views/student_work/_show.html.erb b/app/views/student_work/_show.html.erb
index f6580659e..2aa14be71 100644
--- a/app/views/student_work/_show.html.erb
+++ b/app/views/student_work/_show.html.erb
@@ -1,72 +1,74 @@
-
-
-
- 上交时间:
- <%=format_time @work.created_at %>
-
+
+
+
+ 上交时间:
+ <%=format_time @work.created_at %>
+
- <% if !@is_teacher && @work.user == User.current && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1) %>
-
-
- <%= link_to("", student_work_path(@work),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "pic_del") %>
-
-
- <%= link_to "",edit_student_work_path(@work),:class => "pic_edit"%>
-
- <% end%>
- <% if (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3) && @work.user != User.current%>
-
-
- <%= render :partial => 'student_work_praise' %>
-
- <% end%>
-
-
-
-
-
-
- <% if @work.project%>
-
- 关联项目:
- <%= link_to( @work.project.name, project_path(@work.project.id), :class => "c_blue02" )%>
-
- <% end%>
-
- 内容:
-
- <%= text_format(@work.description) if @work.description%>
-
+ <% if @work.user == User.current && @homework.homework_detail_manual.comment_status == 1 %>
+
+
+ <%= link_to("", student_work_path(@work),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "pic_del") %>
+
+
+ <%= link_to "",edit_student_work_path(@work),:class => "pic_edit"%>
+
+ <% end%>
+ <% if @homework.homework_detail_manual.comment_status == 3 && @work.user != User.current%>
+
+
+ <%= render :partial => 'student_work_praise' %>
+
+ <% end%>
-
-
- 附件:
- <% if @work.attachments.empty?%>
- 尚未提交附件
- <% else%>
-
- <%= render :partial => 'work_attachments', :locals => {:attachments => @work.attachments} %>
-
+
+
+
+ <% if @work.project%>
+
+ 关联项目:
+ <%= link_to( @work.project.name, project_path(@work.project.id), :class => "linkBlue" )%>
+
<% end%>
-
-
- <% if @is_teacher || (@homework.homework_type == 1 && @homework.homework_detail_manual.comment_status == 2 && @work.user != User.current )%>
-
-
- <%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
+
+ 内容:
+
+ <%= text_format(@work.description) if @work.description%>
- <% end%>
-
+
+
+
+ 附件:
+ <% if @work.attachments.empty?%>
+ 尚未提交附件
+ <% else%>
+
+ <%= render :partial => 'work_attachments', :locals => {:attachments => @work.attachments} %>
+
+ <% end%>
+
+
+
+ <% if @is_teacher || (@homework.homework_detail_manual.comment_status == 2 && @work.user != User.current )%>
+
+
+ <%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
+
+ <% end%>
+
+
+
-
- <%@work.student_works_scores.order("updated_at desc").each do |score|%>
-
- <%= render :partial => 'student_work_score',:locals => {:score => score}%>
-
- <% end%>
-
-
收起
-
-
\ No newline at end of file
+
+ <%@student_work_scores.each do |score|%>
+
+ <%= render :partial => 'student_work_score',:locals => {:score => score,:is_last => score == @student_work_scores.last}%>
+
+ <% end%>
+
+
+ 收起
+
+
\ No newline at end of file
diff --git a/app/views/student_work/_student_work_score.html.erb b/app/views/student_work/_student_work_score.html.erb
index 8d10853f8..c800ae8d0 100644
--- a/app/views/student_work/_student_work_score.html.erb
+++ b/app/views/student_work/_student_work_score.html.erb
@@ -1,24 +1,31 @@
-
+
<% show_real_name = @is_teacher || score.user == User.current || score.user.allowed_to?(:as_teacher,@course) %>
<%= link_to image_tag(url_to_avatar(show_real_name ? score.user : ""), :width => "34", :height => "34"), show_real_name ? user_path(score.user) : "javascript:void(0)",:class => "ping_pic fl" %>
-
- <%= link_to show_real_name ? score.user.show_name : "匿名", show_real_name ? user_path(score.user) : "javascript:void(0)", :title => show_real_name ? score.user.show_name : "匿评用户", :class => "c_blue fl" %>
-
(<%= student_work_score_role score%>)
+
+ <%= link_to show_real_name ? score.user.show_name : "匿名", show_real_name ? user_path(score.user) : "javascript:void(0)", :title => show_real_name ? score.user.show_name : "匿评用户", :class => "linkBlue fl" %>
+
+ (<%= student_work_score_role score%>)
+
评分:
-
<%= score.score%>分
-
回复
-
- <%=format_time score.updated_at %>
-
+
+ <%= score.score%>分
+
+
回复
+
+ <%=format_time score.updated_at %>
+
+
<%= score.comment%>
+
<%= render :partial => 'work_attachments', :locals => {:attachments => score.attachments} %>
+
- <%= render :partial => 'add_score_reply',:locals => {:score => score}%>
+ <%= render :partial => 'add_score_reply',:locals => {:score => score,:is_last => is_last}%>
@@ -27,6 +34,6 @@
<%= render :partial => 'jour_replay',:locals => {:jour => jour}%>
<% end%>
+
-
-
\ No newline at end of file
+
diff --git a/app/views/student_work/_student_work_title.html.erb b/app/views/student_work/_student_work_title.html.erb
deleted file mode 100644
index 24e6a1b37..000000000
--- a/app/views/student_work/_student_work_title.html.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-
- 学号
-
-
- <%= link_to "姓名",@show_all ? student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "name"%>
- <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- 作品名称
-
-
- <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "created_at"%>
- <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "teacher_score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
-
- <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "teaching_asistant_score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
-
- <% end%>
-
-
- <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
- <% if @show_all && @order == "score"%>
- <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%>
- <% end%>
-
\ No newline at end of file
diff --git a/app/views/student_work/_work_attachments.html.erb b/app/views/student_work/_work_attachments.html.erb
index f303897bc..a75f68f70 100644
--- a/app/views/student_work/_work_attachments.html.erb
+++ b/app/views/student_work/_work_attachments.html.erb
@@ -1,8 +1,8 @@
<% attachments.each_with_index do |attachment,i| %>
- <%= link_to_short_attachment attachment, :class => 'link_file', :download => true -%>
- <%= link_to(' '.html_safe, attachment_path(attachment, :format => 'js'), :method => 'delete', :remote => true, :title => '删除', :class => 'remove-upload', :confirm => l(:text_are_you_sure)) if attachment.id && User.current == attachment.author %>
-
(<%= number_to_human_size attachment.filesize %>)
+ <%= link_to_short_attachment attachment, :class => 'link_file_a fl', :download => true -%>
+ <%= link_to(' '.html_safe, attachment_path(attachment, :format => 'js'), :method => 'delete', :remote => true, :title => '删除', :class => 'remove-upload fl', :confirm => l(:text_are_you_sure)) if attachment.id && User.current == attachment.author %>
+
(<%= number_to_human_size attachment.filesize %>)
<% end -%>
diff --git a/app/views/student_work/add_score.js.erb b/app/views/student_work/add_score.js.erb
index 1de92b51a..6cb5bd6d8 100644
--- a/app/views/student_work/add_score.js.erb
+++ b/app/views/student_work/add_score.js.erb
@@ -2,39 +2,16 @@ $("#add_student_score_<%= @work.id%>").html("<%= escape_javascript(render :parti
$('#score_<%= @work.id%>').peSlider({range: 'min'});
<% if @is_new%>
- $("#score_list_<%= @work.id%>").prepend("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>
");
+ $("#score_list_<%= @work.id%>").find("div:last").find("ul").addClass("ping_line");
+ $("#score_list_<%= @work.id%>").prepend("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score,:is_last => true}) %>
");
<% else %>
- $("#work_score_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>");
+ $("#work_score_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score,:is_last => @is_last}) %>");
<% end%>
$("#score_list_<%= @work.id%>").removeAttr("style");
<% if @is_teacher %>
- <% if @homework.homework_type == 1%>
- $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_student_work',:locals => {:student_work => @work}) %>");
- <% elsif @homework.homework_type == 2%>
- $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_student_work',:locals => {:student_work => @work}) %>");
- <% else%>
- $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'student_work',:locals => {:student_work => @work}) %>");
- <% end%>
+ $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_un_work',:locals => {:student_work => @work}) %>");
<% else %>
$("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_work',:locals => {:student_work => @work}) %>");
<% end%>
-
-
-$(function(){
- //匿评评分提示
- $(".student_score_info").bind("mouseover",function(e){
- $(this).find("div").show();
- });
- $(".student_score_info").bind("mouseout",function(e){
- $(this).find("div").hide();
- });
- //最终成绩提示
- $(".student_final_scor_info").bind("mouseover",function(e){
- $(this).find("div").show();
- });
- $(".student_final_scor_info").bind("mouseout",function(e){
- $(this).find("div").hide();
- });
-});
diff --git a/app/views/student_work/add_score_reply.js.erb b/app/views/student_work/add_score_reply.js.erb
index 28704630f..f21870cd5 100644
--- a/app/views/student_work/add_score_reply.js.erb
+++ b/app/views/student_work/add_score_reply.js.erb
@@ -1,4 +1,4 @@
-$("#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,:is_last => @is_last}) %>");
<% if @status && @status == 1%>
$("#replay_histroy_<%= @score.id%>").prepend("<%= escape_javascript(render :partial => 'jour_replay', :locals => {:jour => @jour}) %>");
$("#add_score_reply_<%= @score.id%>").hide();
diff --git a/app/views/student_work/index.html.erb b/app/views/student_work/index.html.erb
index e8fa33902..db704a7de 100644
--- a/app/views/student_work/index.html.erb
+++ b/app/views/student_work/index.html.erb
@@ -1,5 +1,12 @@
-
-
-
+ //设置评分规则
+ function set_score_rule(){
+ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/set_score_rule',:locals => {:homework => @homework}) %>');
+ showModal('ajax-modal', '350px');
+ $('#ajax-modal').siblings().remove();
+ $('#ajax-modal').before("" +
+ " ");
+ $('#ajax-modal').parent().css("top","25%").css("left","35%").css("position","fixed");
+ }
-
- 返 回 顶 部
-
-
-
-
-
+
-
-
-
-
- <%= link_to "所有作品(#{@stundet_works.count} )".html_safe,student_work_index_path(:homework => @homework.id), :class => "fl"%>
-
- <% if @show_all%>
-
- <%= select_tag(:late_penalty,options_for_select(course_group_list(@course),@group), {:class => "fl h22 w100 ml10"}) if(@is_teacher && course_group_list(@course).count > 0) %>
-
搜索
- <%= 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%>
+
+
+
\ No newline at end of file
diff --git a/app/views/student_work/new.html.erb b/app/views/student_work/new.html.erb
index 85c23f300..f9b242443 100644
--- a/app/views/student_work/new.html.erb
+++ b/app/views/student_work/new.html.erb
@@ -9,12 +9,18 @@
"
");
$('#ajax-modal').parent().css("top","30%").css("left","40%");
$('#ajax-modal').parent().addClass("anonymos_work");
-// alert("当前作业已开启匿评,您提交作品后将不会收到任何匿评作品,您的作品也不会被其他用户匿评,如需获得最终成绩,请您联系主讲老师对您的作品单独进行评分");
});
<% end%>
- //匿评弹框取消按钮
- function clickCanel(){hideModal("#popbox02");}
+ //快速创建项目的弹框
+ function new_project(){
+ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/new_project') %>');
+ showModal('ajax-modal', '800px');
+ $('#ajax-modal').siblings().remove();
+ $('#ajax-modal').before("
" +
+ " ");
+ $('#ajax-modal').parent().css("top","30%").css("left","20%").css("position","fixed");
+ }
+
+
+
+
+ <%= select_tag :project_id, options_for_select(user_projects_option, @student_work.project_id), {:class => "InputBox W680 fl"} %>
+ <%#=link_to "", new_project_path, :class => "ml5 mt5 SetUpIcon fl", :title => "快速创建"%>
+
+
+
+
确定
或
@@ -83,4 +101,4 @@
<% end%>
-
+
\ No newline at end of file
diff --git a/app/views/student_work/show.js.erb b/app/views/student_work/show.js.erb
index 1c8874c2f..e6b99c146 100644
--- a/app/views/student_work/show.js.erb
+++ b/app/views/student_work/show.js.erb
@@ -1,11 +1,11 @@
-if($("#about_hwork_<%= @work.id%>").children().length > 0)
- {$("#about_hwork_<%= @work.id%>").html("");}
-else
- {
- <% if @homework.homework_type == 2%>
- $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'programing_work_show') %>");
- <% else%>
- $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'show') %>");
- <% end%>
- $('#score_<%= @work.id%>').peSlider({range: 'min'});
- }
\ No newline at end of file
+if($("#about_hwork_<%= @work.id%>").children().length > 0){
+ $("#about_hwork_<%= @work.id%>").html("");
+}
+else{
+ <% if @homework.homework_type == 2%>
+ $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'programing_work_show') %>");
+ <% else%>
+ $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'show') %>");
+ <% end%>
+ $('#score_<%= @work.id%>').peSlider({range: 'min'});
+}
\ No newline at end of file
diff --git a/app/views/system_messages/index.html.erb b/app/views/system_messages/index.html.erb
new file mode 100644
index 000000000..4ed40757b
--- /dev/null
+++ b/app/views/system_messages/index.html.erb
@@ -0,0 +1,3 @@
+<% @system_messages.each do |sm| %>
+
+<% end %>
diff --git a/app/views/tags/_tag_list.html.erb b/app/views/tags/_tag_list.html.erb
index b512f1ef3..49c9b2351 100644
--- a/app/views/tags/_tag_list.html.erb
+++ b/app/views/tags/_tag_list.html.erb
@@ -2,7 +2,8 @@
<% if @tags.size > 0 %>
<% @tags.each do |tag| %>
-
<%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
+ <%#= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
+ <%= tag %>
<% case object_flag %>
<% when '10' %>
diff --git a/app/views/tags/update_tag_name.js.erb b/app/views/tags/update_tag_name.js.erb
new file mode 100644
index 000000000..b72b0c33f
--- /dev/null
+++ b/app/views/tags/update_tag_name.js.erb
@@ -0,0 +1,40 @@
+//本js使用的新的tag显示方法
+<% if @obj_flag == '3'%>
+$('#tags_show_issue').html('<%= escape_javascript(render :partial => 'tags/tag_name',
+ :locals => {:obj => @obj,:non_list_all => false,:object_flag => @obj_flag}) %>');
+//$('#put-tag-form-issue').hide();
+$('#name-issue').val("");
+<% elsif @obj_flag == '1'%>
+$('#tags_show').html('<%= escape_javascript(render :partial => 'tags/tag_user_new_name',
+ :locals => {:obj => @obj,:non_list_all => false,:object_flag => @obj_flag}) %>');
+$('#tags_name3').val("");
+<% elsif @obj_flag == '2'%>
+$('#tags_show').html('<%= escape_javascript(render :partial => 'tags/tag_project_new_name',
+ :locals => {:obj => @obj,:non_list_all => false,:object_flag => @obj_flag}) %>');
+$('#tags_name2').val("");
+<% elsif @obj_flag == '6'%>
+<%if @course%>
+$("#tags_show-<%=@obj.class%>-<%=@obj.id%>").empty();
+$("#tags_show-<%=@obj.class%>-<%=@obj.id%>").html('<%= escape_javascript(render :partial => 'tags/tag_list',
+ :locals => {:obj => @obj,:object_flag => @obj_flag,:select_tag_name => @select_tag_name}) %>');
+$("#files_tag").html("<%= escape_javascript(render :partial => "files/tag_yun", :locals => {:tag_list => @tag_list,:course => @course,:tag_name => @select_tag_name}) %>");
+<%else%>
+$("#tags_show-<%=@obj.class%>-<%=@obj.id%>").empty();
+$("#tags_show-<%=@obj.class%>-<%=@obj.id%>").html('<%= escape_javascript(render :partial => 'tags/course_attachment_tag_name',
+ :locals => {:obj => @obj,:non_list_all => false,:object_flag => @obj_flag}) %>');
+<%end%>
+
+$("#tags_name_<%=@obj.id%>").val("");
+$("#add_tag_<%=@obj.id%>").hide();
+<% elsif @obj_flag == '9'%>
+$('#tags_show').html('<%= escape_javascript(render :partial => 'tags/new_tag_name',
+ :locals => {:obj => @obj,:non_list_all => false,:object_flag => @obj_flag}) %>');
+$('#tags_name').val("");
+<% elsif @obj_flag == '10'%>
+//$("#put-tag-form-<%#=@obj.class%>-<%#=@obj.id%>").hide();
+<% else%>
+$('#tags_show').html('<%= escape_javascript(render :partial => 'tags/tag_name',
+ :locals => {:obj => @obj,:non_list_all => false,:object_flag => @obj_flag}) %>');
+$('#tags_name').val("");
+//$('#put-tag-form').hide();
+<% end %>
\ No newline at end of file
diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb
index b1ca2838a..58b29696c 100644
--- a/app/views/users/_course_homework.html.erb
+++ b/app/views/users/_course_homework.html.erb
@@ -6,14 +6,14 @@
<% if activity.try(:user).try(:realname) == ' ' %>
- <%= link_to activity.try(:user), user_path(activity.user_id), :class => "newsBlue mr15" %>
+ <%= link_to activity.try(:user), user_path(activity.user_id,:host=>Setting.host_user), :class => "newsBlue mr15" %>
<% else %>
- <%= link_to activity.try(:user).try(:realname), user_path(activity.user_id), :class => "newsBlue mr15" %>
+ <%= link_to activity.try(:user).try(:realname), user_path(activity.user_id,:host=>Setting.host_user), :class => "newsBlue mr15" %>
<% end %> TO
- <%= link_to activity.course.name.to_s+" | 课程作业", homework_common_index_path(:course => activity.course.id), :class => "newsBlue ml15"%>
+ <%= link_to activity.course.name.to_s+" | 课程作业", homework_common_index_path(:course => activity.course.id, :host=> Setting.host_course), :class => "newsBlue ml15"%>
- <%= link_to activity.name.to_s, student_work_index_path(:homework => activity.id), :class => "postGrey"%>
+ <%= link_to activity.name.to_s, student_work_index_path(:homework => activity.id,:host=> Setting.host_course), :class => "postGrey"%>
diff --git a/app/views/users/_course_message.html.erb b/app/views/users/_course_message.html.erb
index eee272fe6..a58c10f8c 100644
--- a/app/views/users/_course_message.html.erb
+++ b/app/views/users/_course_message.html.erb
@@ -1,30 +1,29 @@
- <%= link_to image_tag(url_to_avatar(activity.author), :width => "50", :height => "50"), user_path(activity.author_id), :alt => "用户头像" %>
+ <%= link_to image_tag(url_to_avatar(activity.author), :width => "50", :height => "50"), user_path(activity.author_id,:host=>Setting.host_user), :alt => "用户头像" %>
<% if activity.try(:author).try(:realname) == ' ' %>
- <%= link_to activity.try(:author), user_path(activity.author_id), :class => "newsBlue mr15" %>
+ <%= link_to activity.try(:author), user_path(activity.author_id,:host=>Setting.host_user), :class => "newsBlue mr15" %>
<% else %>
- <%= link_to activity.try(:author).try(:realname), user_path(activity.author_id), :class => "newsBlue mr15" %>
+ <%= link_to activity.try(:author).try(:realname), user_path(activity.author_id,:host=>Setting.host_user), :class => "newsBlue mr15" %>
<% end %>
TO
- <%= link_to activity.course.name.to_s+" | 课程讨论区", course_boards_path(activity.course), :class => "newsBlue ml15 mr5"%>
+ <%= link_to activity.course.name.to_s+" | 课程讨论区", course_boards_path(activity.course,:host=> Setting.host_course), :class => "newsBlue ml15 mr5"%>
<% if activity.parent_id.nil? %>
- <%= link_to activity.subject.to_s.html_safe, course_boards_path(activity.course,:parent_id =>activity.id, :topic_id => activity.id), :class=> "postGrey" %>
+ <%= link_to activity.subject.to_s.html_safe, course_boards_path(activity.course,:parent_id =>activity.id, :topic_id => activity.id,:host=> Setting.host_course), :class=> "postGrey" %>
<% else %>
- <%= link_to activity.parent.subject.to_s.html_safe, course_boards_path(activity.course,:parent_id =>activity.parent_id, :topic_id => activity.id), :class=> "postGrey"%>
+ <%= link_to activity.parent.subject.to_s.html_safe, course_boards_path(activity.course,:parent_id =>activity.parent_id, :topic_id => activity.id,:host=> Setting.host_course), :class=> "postGrey"%>
<% end %>
发帖时间:<%= format_time(activity.created_on) %>
-
<% if activity.parent_id.nil? %>
<%= activity.content.to_s.html_safe%>
@@ -49,7 +48,7 @@
<% count=0 %>
-
回复(
+
回复(
<% if activity.parent %>
<% count=activity.parent.children.count%>
<% else %>
@@ -67,21 +66,6 @@
<% end %>
-
-
- <%= form_for('new_form',:url => {:controller=>'messages',:action => 'reply', :id => activity.id, :board_id => activity.board_id, :is_board => 'true'},:method => "post", :remote => true) do |f|%>
-
-
-
-
-
-
取消
-
发送
- <% end%>
-
-
-
-
<% activity= activity.parent ? activity.parent : activity%>
<% replies_all_i = 0 %>
<% if count > 0 %>
@@ -91,14 +75,14 @@
<% replies_all_i=replies_all_i+1 %>
- <%= link_to image_tag(url_to_avatar(reply.author), :width => "45", :height => "45"), user_path(reply.author_id), :alt => "用户头像" %>
+ <%= link_to image_tag(url_to_avatar(reply.author), :width => "33", :height => "33", :class =>"mt8"), user_path(reply.author_id,:host=>Setting.host_user), :alt => "用户头像" %>
<% if reply.try(:author).try(:realname) == ' ' %>
- <%= link_to reply.try(:author), user_path(reply.author_id), :class => "newsBlue mr10 f14" %>
+ <%= link_to reply.try(:author), user_path(reply.author_id,:host=>Setting.host_user), :class => "newsBlue mr10 f14" %>
<% else %>
- <%= link_to reply.try(:author).try(:realname), user_path(reply.author_id), :class => "newsBlue mr10 f14" %>
+ <%= link_to reply.try(:author).try(:realname), user_path(reply.author_id,:host=>Setting.host_user), :class => "newsBlue mr10 f14" %>
<% end %>
<%= format_time(reply.created_on) %>
@@ -112,5 +96,25 @@
<% end %>
+
+
+
<%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), user_path(activity.author_id), :alt => "用户头像" %>
+
+
+ <%= form_for('new_form',:url => {:controller=>'messages',:action => 'reply', :id => activity.id, :board_id => activity.board_id, :is_board => 'true'},:method => "post", :remote => true) do |f|%>
+
+
+
+
发送
+
+
+
+ <% end%>
+
+
+
+
+
+
diff --git a/app/views/users/_course_news.html.erb b/app/views/users/_course_news.html.erb
index d2213c743..90680cf82 100644
--- a/app/views/users/_course_news.html.erb
+++ b/app/views/users/_course_news.html.erb
@@ -27,7 +27,7 @@
<% count=activity.comments.count %>
-
+
回复(<%= count %>)
<%#= format_date(activity.updated_on) %>
@@ -40,20 +40,6 @@
<% end %>
-
-
- <%= form_for('new_form',:url => {:controller => 'comments', :action => 'create', :id => activity},:method => "post", :remote => true) do |f|%>
-
-
-
-
-
取消
-
发送
- <% end%>
-
-
-
-
<% replies_all_i = 0 %>
<% if count > 0 %>
@@ -62,7 +48,7 @@
<% replies_all_i = replies_all_i + 1 %>
- <%= link_to image_tag(url_to_avatar(comment.author), :width => "45", :height => "45"), user_path(comment.author_id), :alt => "用户头像" %>
+ <%= link_to image_tag(url_to_avatar(comment.author), :width => "33", :height => "33", :class =>"mt8"), user_path(comment.author_id), :alt => "用户头像" %>
@@ -81,5 +67,22 @@
<% end %>
+
+
+
<%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), user_path(activity.author_id), :alt => "用户头像" %>
+
+
+ <%= form_for('new_form',:url => {:controller => 'comments', :action => 'create', :id => activity},:method => "post", :remote => true) do |f|%>
+
+
+
+
发送
+
+
+ <% end%>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/users/_course_news_reply.html.erb b/app/views/users/_course_news_reply.html.erb
deleted file mode 100644
index c3f8571be..000000000
--- a/app/views/users/_course_news_reply.html.erb
+++ /dev/null
@@ -1,177 +0,0 @@
-
-<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
-
-<% if @news.commentable? %>
-
-<% end %>
-
-
-
- <%= form_for('new_form', :method => :post,
- :url => {:controller => 'words', :action => 'leave_course_message'},:html => {:id=>'leave_message_form'}) do |f|%>
- <%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %>
-
-
- <% end %>
-
-
-
-
-
-
-
-
-
-
diff --git a/app/views/users/_project_issue.html.erb b/app/views/users/_project_issue.html.erb
index 04f541d77..07f7c452b 100644
--- a/app/views/users/_project_issue.html.erb
+++ b/app/views/users/_project_issue.html.erb
@@ -67,7 +67,7 @@
<% count = activity.journals.count %>
-
回复(<%= count %>)
+
回复(<%= count %>)
<%#= format_date(activity.updated_on) %>
<% if count > 2 %>
@@ -78,20 +78,6 @@
<% end %>
-
-
- <%= form_for('new_form',:url => add_journal_issue_path(activity.id),:method => "post", :remote => true) do |f|%>
-
-
-
-
-
取消
-
发送
- <% end%>
-
-
-
-
<% replies_all_i = 0 %>
<% if count > 0 %>
@@ -100,7 +86,7 @@
<% replies_all_i=replies_all_i + 1 %>
- <%= link_to image_tag(url_to_avatar(reply.user), :width => "45", :height => "45"), user_path(reply.user_id), :alt => "用户头像" %>
+ <%= link_to image_tag(url_to_avatar(reply.user), :width => "33", :height => "33", :class =>"mt8"), user_path(reply.user_id), :alt => "用户头像" %>
@@ -111,17 +97,14 @@
<% end %>
<%= format_time(reply.created_on) %>
- <% if reply.details.any? %>
- <% details_to_strings(reply.details).each do |string| %>
-
- <%= string %>
-
- <% end %>
- <% else %>
-
- <%= reply.notes.html_safe %>
-
- <% end %>
+
+ <% if reply.details.any? %>
+ <% details_to_strings(reply.details).each do |string| %>
+
<%= string %>
+ <% end %>
+ <% end %>
+
<%= reply.notes.html_safe %>
+
@@ -129,6 +112,24 @@
<% end %>
+
+
+
<%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), user_path(activity.author_id), :alt => "用户头像" %>
+
+
+ <%= form_for('new_form',:url => add_journal_issue_path(activity.id),:method => "post", :remote => true) do |f|%>
+
+
+
+
发送
+
+
+ <% end%>
+
+
+
+
+
- <% act= user_activity.act unless user_activity.act_type == "ProjectCreateInfo" %>
- <% case user_activity.container_type.to_s %>
- <% when 'Course' %>
- <% if act %>
- <% case user_activity.act_type.to_s %>
- <% when 'HomeworkCommon' %>
- <%= render :partial => 'course_homework', :locals => {:activity => act,:user_activity_id =>user_activity.id} %>
- <% when 'News' %>
- <%= render :partial => 'course_news', :locals => {:activity => act,:user_activity_id =>user_activity.id} %>
- <% when 'Message'%>
- <%= render :partial => 'course_message', :locals => {:activity => act,:user_activity_id =>user_activity.id} %>
- <% when 'Poll' %>
- <%= render :partial => 'course_poll', :locals => {:activity => act, :user_activity_id => user_activity.id} %>
- <% end %>
- <% end %>
- <% when 'Project' %>
- <% if act %>
- <% case user_activity.act_type.to_s %>
- <% when 'Issue' %>
- <%= render :partial => 'project_issue', :locals => {:activity => act,:user_activity_id =>user_activity.id} %>
- <% when 'Message' %>
- <%= render :partial => 'project_message', :locals => {:activity => act,:user_activity_id =>user_activity.id} %>
- <% end %>
- <% end %>
- <% end %>
- <% end %>
-<% end %>
-
-<% if user_activities.count == 10%>
-
展开更多<%=link_to "", user_activities_path(@user.id,:type => type,:page => page),:id => "more_activities_link",:remote => "true",:class => "none" %>
- <%#= link_to "点击展开更多",user_activities_path(@user.id,:type => type,:page => page),:id => "show_more_activities",:remote => "true",:class => "loadMore mt10 f_grey"%>
-<% end%>
-
-
+ <% act= user_activity.act unless user_activity.act_type == "ProjectCreateInfo" %>
+ <% case user_activity.container_type.to_s %>
+ <% when 'Course' %>
+ <% if act %>
+ <% case user_activity.act_type.to_s %>
+ <% when 'HomeworkCommon' %>
+ <%= render :partial => 'course_homework', :locals => {:activity => act,:user_activity_id =>user_activity.id,:first_user_activity =>first_user_activity,:page => page} %>
+ <% when 'News' %>
+ <%= render :partial => 'course_news', :locals => {:activity => act,:user_activity_id =>user_activity.id,:first_user_activity =>first_user_activity,:page => page} %>
+ <% when 'Message'%>
+ <%= render :partial => 'course_message', :locals => {:activity => act,:user_activity_id =>user_activity.id,:first_user_activity =>first_user_activity,:page => page} %>
+ <% when 'Poll' %>
+ <%= render :partial => 'course_poll', :locals => {:activity => act, :user_activity_id => user_activity.id,:first_user_activity =>first_user_activity,:page => page} %>
+ <% end %>
+ <% end %>
+ <% when 'Project' %>
+ <% if act %>
+ <% case user_activity.act_type.to_s %>
+ <% when 'Issue' %>
+ <%= render :partial => 'project_issue', :locals => {:activity => act,:user_activity_id =>user_activity.id,:first_user_activity =>first_user_activity,:page => page} %>
+ <% when 'Message' %>
+ <%= render :partial => 'project_message', :locals => {:activity => act,:user_activity_id =>user_activity.id,:first_user_activity =>first_user_activity,:page => page} %>
+ <% end %>
+ <% end %>
+ <% end %>
+ <% end %>
+<% end %>
+
+<% if user_activities.count == 10%>
+
展开更多<%=link_to "", user_activities_path(@user.id,:type => type,:page => page),:id => "more_activities_link",:remote => "true",:class => "none" %>
+ <%#= link_to "点击展开更多",user_activities_path(@user.id,:type => type,:page => page),:id => "show_more_activities",:remote => "true",:class => "loadMore mt10 f_grey"%>
+<% end%>
+
+
\ No newline at end of file
diff --git a/app/views/users/_user_homework_attachment.html.erb b/app/views/users/_user_homework_attachment.html.erb
index 0944ffab6..9b7c6c06a 100644
--- a/app/views/users/_user_homework_attachment.html.erb
+++ b/app/views/users/_user_homework_attachment.html.erb
@@ -47,11 +47,11 @@
-
上传附件
- <%= link_to "资源库",{:controller => 'users',:action=>'user_import_resource',:id=>User.current.id,:homework_id=>container.id},:class => "FilesBtn fl mr15 mt3",:remote => true%>
+
上传附件
+ <%= link_to "资源库",{:controller => 'users',:action=>'user_import_resource',:id=>User.current.id,:homework_id=>container.id},:class => "FilesBtn fl mt3 mr20",:remote => true%>
<% if defined?(has_program) && has_program %>
-
编程
-
+
编程
+
<% end %>
diff --git a/app/views/users/_user_homework_form.html.erb b/app/views/users/_user_homework_form.html.erb
index d221e50c8..6e07e7122 100644
--- a/app/views/users/_user_homework_form.html.erb
+++ b/app/views/users/_user_homework_form.html.erb
@@ -10,7 +10,7 @@
@@ -89,41 +89,5 @@
diff --git a/app/views/users/_user_homework_list.html.erb b/app/views/users/_user_homework_list.html.erb
index 642373d58..c6e827291 100644
--- a/app/views/users/_user_homework_list.html.erb
+++ b/app/views/users/_user_homework_list.html.erb
@@ -11,18 +11,35 @@
TO
<%= link_to homework_common.course.name, course_path(homework_common.course_id), :class => "newsBlue ml15"%>
-
+
<%= link_to homework_common.name,student_work_index_path(:homework => homework_common.id),:class => "postGrey"%>
-
+
+ <% if homework_common.homework_detail_manual.comment_status == 1%>
+
未开启匿评
+ <% elsif homework_common.homework_detail_manual.comment_status == 2%>
+
匿评中
+ <% elsif homework_common.homework_detail_manual.comment_status == 3%>
+
匿评已结束
+ <% end%>
<%= user_for_homework_common homework_common,is_teacher %>
<% if homework_common.homework_type == 2 && is_teacher%>
-
- <%= link_to "模拟答题", new_user_commit_homework_users_path(homework_id: homework_common.id, is_test: true), class: 'c_blue test-program-btn', title: '教师可以通过模拟答题设置作业的标准答案' %>
-
+
+ <%= link_to "模拟答题", new_user_commit_homework_users_path(homework_id: homework_common.id, is_test: true), class: 'c_blue test-program-btn', title: '教师可以通过模拟答题设置作业的标准答案' %>
+
+ <% end %>
+ <% if homework_common.homework_type == 2%>
+
+ 语言:
+ <% if homework_common.homework_detail_programing.language.to_i == 1%>
+ C
+ <% elsif homework_common.homework_detail_programing.language.to_i == 2%>
+ C++
+ <% end%>
+
<% end %>
<%= l(:label_end_time)%>:<%= homework_common.end_time%>
@@ -47,6 +64,9 @@
<%= link_to(l(:label_bid_respond_delete), homework_common_path(homework_common),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "postOptionLink") %>
+
+ <%= homework_anonymous_comment homework_common %>
+
diff --git a/app/views/users/_user_programing_attr.html.erb b/app/views/users/_user_programing_attr.html.erb
new file mode 100644
index 000000000..0bfbd379f
--- /dev/null
+++ b/app/views/users/_user_programing_attr.html.erb
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ <%= options_for_select({"C语言"=>1, "C++"=>2}, (edit_mode && homework.is_program_homework?) ? homework.language : 1) %>
+
+
+ <% if edit_mode && homework.is_program_homework? %>
+ <% homework.homework_tests.each_with_index do |test, index| %>
+
+
+
+
+ <% if index != 0 %>
+
+ <% end %>
+
+
+ <% end %>
+ <% else %>
+
+ <% end %>
+
+
+
温馨提示:您可以在发布作业后,在作业“模拟答题”中进行标准代码的检测和提交。
+
确 定
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/users/new_user_commit_homework.html.erb b/app/views/users/new_user_commit_homework.html.erb
index 8b02b4594..19a971ece 100644
--- a/app/views/users/new_user_commit_homework.html.erb
+++ b/app/views/users/new_user_commit_homework.html.erb
@@ -49,11 +49,17 @@
@@ -70,11 +76,15 @@
请使用 <%= @homework.language_name %> 语言编写
-
+
<%= f.text_area :name, id: 'program-title', class:"InputBox W700", placeholder:"请概括你的代码的功能" %>
<%= f.text_area :description, id: 'program-src', class:"InputBox W700 H150", placeholder:"请贴入你的代码", rows: 10 %>
+
测试代码
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index aab715b16..de166b4e7 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -29,7 +29,7 @@
更多
- <%= link_to "我的动态", {:controller => "users", :action => "show", :type => "current_user"}, :class =>"homepagePostTypeAll postTypeGrey"%>
+ <%= link_to "我的动态", {:controller => "users", :action => "show", :type => "current_user"}, :class =>"homepagePostTypeMine postTypeGrey"%>
<%= link_to "全部动态", {:controller => "users", :action => "show", :type => nil}, :class =>"homepagePostTypeAll postTypeGrey"%>
diff --git a/app/views/users/show_chen.erb b/app/views/users/show_chen.erb
deleted file mode 100644
index 3bd0014c6..000000000
--- a/app/views/users/show_chen.erb
+++ /dev/null
@@ -1,279 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
(作业描述)系统中有多个ckeditor,且每个ckeditor的id未知,怎么样做到当光标聚焦某个ckeditor的文本框中,该编辑器的默认值应自动消失的处理;网络拓扑图开发;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
(作业描述)系统中有多个ckeditor,且每个ckeditor的id未知,怎么样做到当光标聚焦某个ckeditor的文本框中,该编辑器的默认值应自动消失的处理;网络拓扑图开发;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 时间:2015-07-31
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
(缺陷描述)系统中有多个ckeditor,且每个ckeditor的id未知,怎么样做到当光标聚焦某个ckeditor的文本框中,该编辑器的默认值应自动消失的处理;网络拓扑图开发;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
-
-
-
-
-
\ No newline at end of file
diff --git a/app/views/users/user_messages.html.erb b/app/views/users/user_messages.html.erb
index c3c1a447b..a184a6d7e 100644
--- a/app/views/users/user_messages.html.erb
+++ b/app/views/users/user_messages.html.erb
@@ -1,9 +1,11 @@
-<% if params[:type].nil? %>
-
-<% end %>
<% if @message_alls.count >0 %>
+ <% if params[:type].nil? || params[:type] == "unviewed" %>
+
+ <% end %>
+ <%# 系统消息 %>
+ <% if params[:type] != 'system_messages' %>
+ <% @user_system_messages.each do |usm| %>
+
+
+
+
+ <%= image_tag("/images/logo.png", width: "30px", height: "30px", class: "mt3") %>
+
+
+
+
+ Trustie平台 发布新消息:
+
+
+ <%= link_to usm.content.html_safe, user_message_path(User.current, :type => "system_messages"),
+ :class => "newsRed",
+ :onmouseover => "message_titile_show($(this),event);",
+ :onmouseout => "message_titile_hide($(this));"
+ %>
+
+
+ <%= usm.content.html_safe %>
+
+ <%= time_tag(usm.created_at).html_safe %>
+
+ <% end %>
+ <% end %>
<%# 课程消息 %>
<% unless @message_alls.nil? %>
<% @message_alls.each do |ma| %>
@@ -65,7 +99,7 @@
<%= time_tag(ma.created_at).html_safe %>
<% end %>
- <% if ma.course_message_type == "HomeworkCommon" %>
+ <% if ma.course_message_type == "HomeworkCommon" && ma.status != 1 %>
<%=link_to image_tag(url_to_avatar(ma.course_message.user), :width => "30", :height => "30"), user_path(ma.course_message.user) %>
<%=link_to ma.course_message.user, user_path(ma.course_message.user), :class => "newsBlue homepageNewsPublisher" %>">发布了作业:
@@ -74,6 +108,23 @@
<%= time_tag(ma.created_at).html_safe %>
<% end %>
+ <% if ma.course_message_type == "HomeworkCommon" && ma.status == 1 %>
+
+ <%=link_to image_tag(url_to_avatar(ma.course_message.user), :width => "30", :height => "30"), user_path(ma.course_message.user) %>
+ <%=link_to ma.course_message.user, user_path(ma.course_message.user), :class => "newsBlue homepageNewsPublisher" %>">发布的作业:
+ <% if ma.viewed == 0 %>
+
+ <%= link_to ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class =>"#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}", :title => "#{ma.course_message.name}" %>
+
+ 截止时间快到了!
+ <% else %>
+
+ <%= link_to ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class =>"#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}", :title => "#{ma.course_message.name}" %>
+
+ <% end %>
+ <%= time_tag(ma.created_at).html_safe %>
+
+ <% end %>
<% if ma.course_message_type == "Poll" %>
<%=link_to image_tag(url_to_avatar(ma.course_message.user), :width => "30", :height => "30"), user_path(ma.course_message.user) %>
@@ -131,6 +182,21 @@
<% end %>
<% if ma.class == ForgeMessage %>
+ <% if ma.forge_message_type == "AppliedProject" %>
+
+ <% end %>
<% if ma.forge_message_type == "Issue" %>
<% end %>
<% end %>
+ <%# 系统消息 %>
+ <% if ma.class == SystemMessage %>
+
+
+
+
+ <%=image_tag("/images/logo.png",width:"30px", height: "30px",class: "mt3")%>
+
+
+
+ Trustie平台 发布新消息:
+
+ <%= link_to ma.content.html_safe, user_message_path(User.current, :type => "system_messages"),
+ :class => "#{params[:type]=="unviewed" ? "newsBlack" : "newsRed"}",
+ :onmouseover =>"message_titile_show($(this),event);",
+ :onmouseout => "message_titile_hide($(this));"
+ %>
+
+
+ <%= ma.content.html_safe%>
+
+ <%= time_tag(ma.created_at).html_safe %>
+
+ <% end %>
<% end %>
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
diff --git a/app/views/users/user_select_homework.js.erb b/app/views/users/user_select_homework.js.erb
index acffd2506..308f74938 100644
--- a/app/views/users/user_select_homework.js.erb
+++ b/app/views/users/user_select_homework.js.erb
@@ -5,4 +5,7 @@ $("#homework_end_time").val("<%= @homework.end_time%>");
$("#course_id").val("<%= @homework.course_id%>");
$("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => { :container => @homework,:has_program => true })%>");
homework_description_editor.html("<%= escape_javascript(@homework.description.html_safe)%>");
+$("#BluePopupBox").html("<%=escape_javascript( render :partial => 'users/user_programing_attr', :locals => {:edit_mode => true, :homework => @homework})%>");
+//$("input[name='homework_type']").val("<%#= @homework.homework_type%>");
$("#homework_editor").show();
+$("#BluePopupBox a.BlueCirBtn").click();
diff --git a/config/locales/admins/en.yml b/config/locales/admins/en.yml
index 479d2f0f0..ed23107cb 100644
--- a/config/locales/admins/en.yml
+++ b/config/locales/admins/en.yml
@@ -11,3 +11,5 @@ en:
label_registration_activation_by_email: account activation by email
label_registration_manual_activation: manual account activation
label_registration_automatic_activation: automatic account activation
+
+ label_system_message: system messages
diff --git a/config/locales/admins/zh.yml b/config/locales/admins/zh.yml
index 936b3109f..5d857efae 100644
--- a/config/locales/admins/zh.yml
+++ b/config/locales/admins/zh.yml
@@ -14,3 +14,7 @@ zh:
label_registration_manual_activation: 手动激活帐号
label_registration_automatic_activation: 自动激活帐号
+ label_system_message: 系统消息
+ label_admin_message_fail: 消息内容过长!
+ label_content_blank_fail: 消息内容不能为空!
+
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index 4a6ddce4e..d2fa502b9 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -36,6 +36,7 @@ zh:
notice_create_failed: 创建失败,请先完善个人信息
notice_failed_create: 创建失败
notice_successful_update: 更新成功
+ notice_successful_message: 消息创建成功!
notice_successful_edit: 修改成功
notice_failed_edit: 修改失败
notice_successful_delete: 删除成功
@@ -49,6 +50,7 @@ zh:
notice_not_contest_setting_authorized: 对不起,您无权配置此竞赛。
notice_not_contest_delete_authorized: 对不起,您无权删除此竞赛。
notice_not_authorized_archived_project: 要访问的项目已经归档。
+ notice_not_authorized_message: 您访问的消息不存在!
notice_email_sent: "邮件已发送至 %{value}"
notice_email_error: "发送邮件时发生错误 (%{value})"
notice_feeds_access_key_reseted: 您的RSS存取键已被重置。
diff --git a/config/routes.rb b/config/routes.rb
index 8454a1c47..756f744ae 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -119,8 +119,9 @@ RedmineApp::Application.routes.draw do
get 'student_work_absence_penalty'
get 'absence_penalty_list'
get 'evaluation_list'
- post 'set_program_score'
+ # post 'set_program_score'
post 'program_test'
+ post 'set_score_rule'
end
end
@@ -260,6 +261,15 @@ RedmineApp::Application.routes.draw do
match '/users/search', :via => [:get, :post]
#end
+ # 消息相关路由
+ resources :system_messages do
+ collection do
+ post 'create', :as => 'system_messages'
+ get 'index', :as => 'index'
+ end
+ end
+ # match 'system_messages/index', to: 'system_messages#index', :via => :get, :as => 'system_messages'
+
match 'account/heartbeat', to: 'account#heartbeat', :via => :get
match 'login', :to => 'account#login', :as => 'signin', :via => [:get, :post]
match 'logout', :to => 'account#logout', :as => 'signout', :via => [:get, :post]
@@ -702,6 +712,7 @@ RedmineApp::Application.routes.draw do
match 'admin/projects', :via => :get
get 'admin/courses'
match 'admin/users', :via => :get
+ match 'admin/messages', :via => :get
match 'admin/first_page_made', as: :first_page_made
match 'admin/course_page_made', as: :course_page_made
match 'admin/contest_page_made', as: :contest_page_made
@@ -874,6 +885,7 @@ RedmineApp::Application.routes.draw do
match 'tags/remove_tag', :as=>"remove_tag"
match 'tags/remove_tag_new', :as=>"remove_tag_new"
match 'tags/tag_save', :as => "save_tag"
+ match 'tags/update_tag_name',:as => "update_tag_name"
match 'words/add_brief_introdution'
diff --git a/db/migrate/20150906065702_create_onclick_times.rb b/db/migrate/20150906065702_create_onclick_times.rb
new file mode 100644
index 000000000..3922b775e
--- /dev/null
+++ b/db/migrate/20150906065702_create_onclick_times.rb
@@ -0,0 +1,10 @@
+class CreateOnclickTimes < ActiveRecord::Migration
+ def change
+ create_table :onclick_times do |t|
+ t.integer :user_id
+ t.datetime :onclick_time
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20150909062619_create_system_messages.rb b/db/migrate/20150909062619_create_system_messages.rb
new file mode 100644
index 000000000..a51715ead
--- /dev/null
+++ b/db/migrate/20150909062619_create_system_messages.rb
@@ -0,0 +1,11 @@
+class CreateSystemMessages < ActiveRecord::Migration
+ def change
+ create_table :system_messages do |t|
+ t.integer :id
+ t.integer :user_id
+ t.string :content
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20150911064528_alter_user_activities.rb b/db/migrate/20150911064528_alter_user_activities.rb
new file mode 100644
index 000000000..b6ede5bdb
--- /dev/null
+++ b/db/migrate/20150911064528_alter_user_activities.rb
@@ -0,0 +1,21 @@
+class AlterUserActivities < ActiveRecord::Migration
+ def up
+ UserActivity.all.each do |activity|
+ if activity.act_type == 'Message'
+ if activity.act
+ unless activity.act.parent_id.nil?
+ parent_act = UserActivity.where("act_id = #{activity.act.parent.id} and act_type='Message'").first
+ parent_act.created_at = activity.act.parent.children.maximum("created_on")
+ parent_act.save
+ activity.destroy
+ end
+ else
+ activity.destroy
+ end
+ end
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/migrate/20150917022239_add_teacher_priority_to_homework.rb b/db/migrate/20150917022239_add_teacher_priority_to_homework.rb
new file mode 100644
index 000000000..20ab421bc
--- /dev/null
+++ b/db/migrate/20150917022239_add_teacher_priority_to_homework.rb
@@ -0,0 +1,5 @@
+class AddTeacherPriorityToHomework < ActiveRecord::Migration
+ def change
+ add_column :homework_commons,:teacher_priority,:integer,:default => 1
+ end
+end
diff --git a/db/migrate/20150917071652_update_user_activities_update_at.rb b/db/migrate/20150917071652_update_user_activities_update_at.rb
new file mode 100644
index 000000000..7fbd425f4
--- /dev/null
+++ b/db/migrate/20150917071652_update_user_activities_update_at.rb
@@ -0,0 +1,16 @@
+class UpdateUserActivitiesUpdateAt < ActiveRecord::Migration
+ def up
+ count = UserActivity.all.count / 30 + 2
+ transaction do
+ for i in 1 ... count do i
+ UserActivity.page(i).per(30).each do |activity|
+ activity.updated_at = activity.created_at
+ activity.save
+ end
+ end
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/migrate/20150918004521_system_score_default.rb b/db/migrate/20150918004521_system_score_default.rb
new file mode 100644
index 000000000..6195caad9
--- /dev/null
+++ b/db/migrate/20150918004521_system_score_default.rb
@@ -0,0 +1,15 @@
+class SystemScoreDefault < ActiveRecord::Migration
+ def up
+ change_column :student_works,:system_score,:float,:default => 0
+
+
+ # StudentWork.where("system_score is null").each do |student_work|
+ # student_work.system_score = 0
+ # student_work.save
+ # end
+ end
+
+ def down
+ change_column :student_works,:system_score,:float
+ end
+end
diff --git a/db/migrate/20150918005722_about_normal_homework.rb b/db/migrate/20150918005722_about_normal_homework.rb
new file mode 100644
index 000000000..8e0ddf00a
--- /dev/null
+++ b/db/migrate/20150918005722_about_normal_homework.rb
@@ -0,0 +1,20 @@
+class AboutNormalHomework < ActiveRecord::Migration
+ def up
+ HomeworkCommon.where(:homework_type => 0).each do |homework|
+ unless homework.homework_detail_manual
+ homework_detail_manual = HomeworkDetailManual.new
+ homework_detail_manual.ta_proportion = 0.6
+ homework_detail_manual.comment_status = 1
+ homework_detail_manual.evaluation_start = homework.created_at
+ homework_detail_manual.evaluation_end = homework.created_at
+ homework_detail_manual.evaluation_num = 3
+ homework_detail_manual.absence_penalty = 5
+ homework_detail_manual.homework_common_id = homework.id
+ homework_detail_manual.save
+ end
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 008e13129..a3c8277bb 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1,1691 +1,1696 @@
-# encoding: UTF-8
-# This file is auto-generated from the current state of the database. Instead
-# of editing this file, please use the migrations feature of Active Record to
-# incrementally modify your database, and then regenerate this schema definition.
-#
-# Note that this schema.rb definition is the authoritative source for your
-# database schema. If you need to create the application database on another
-# system, you should be using db:schema:load, not running all the migrations
-# from scratch. The latter is a flawed and unsustainable approach (the more migrations
-# you'll amass, the slower it'll run and the greater likelihood for issues).
-#
-# It's strongly recommended to check this file into your version control system.
-
-ActiveRecord::Schema.define(:version => 20150911031029) do
-
- create_table "activities", :force => true do |t|
- t.integer "act_id", :null => false
- t.string "act_type", :null => false
- t.integer "user_id", :null => false
- t.integer "activity_container_id"
- t.string "activity_container_type", :default => ""
- t.datetime "created_at"
- end
-
- add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type"
- add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type"
- add_index "activities", ["user_id"], :name => "index_activities_on_user_id"
-
- create_table "activity_notifies", :force => true do |t|
- t.integer "activity_container_id"
- t.string "activity_container_type"
- t.integer "activity_id"
- t.string "activity_type"
- t.integer "notify_to"
- t.datetime "created_on"
- t.integer "is_read"
- end
-
- add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id"
- add_index "activity_notifies", ["created_on"], :name => "index_an_created_on"
- add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to"
-
- create_table "api_keys", :force => true do |t|
- t.string "access_token"
- t.datetime "expires_at"
- t.integer "user_id"
- t.boolean "active", :default => true
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token"
- add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id"
-
- create_table "applied_projects", :force => true do |t|
- t.integer "project_id", :null => false
- t.integer "user_id", :null => false
- end
-
- create_table "apply_project_masters", :force => true do |t|
- t.integer "user_id"
- t.string "apply_type"
- t.integer "apply_id"
- t.integer "status"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "attachments", :force => true do |t|
- t.integer "container_id"
- t.string "container_type", :limit => 30
- t.string "filename", :default => "", :null => false
- t.string "disk_filename", :default => "", :null => false
- t.integer "filesize", :default => 0, :null => false
- t.string "content_type", :default => ""
- t.string "digest", :limit => 40, :default => "", :null => false
- t.integer "downloads", :default => 0, :null => false
- t.integer "author_id", :default => 0, :null => false
- t.datetime "created_on"
- t.string "description"
- t.string "disk_directory"
- t.integer "attachtype", :default => 1
- t.integer "is_public", :default => 1
- t.integer "copy_from"
- t.integer "quotes"
- end
-
- add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id"
- add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type"
- add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on"
-
- create_table "attachmentstypes", :force => true do |t|
- t.integer "typeId", :null => false
- t.string "typeName", :limit => 50
- end
-
- create_table "auth_sources", :force => true do |t|
- t.string "type", :limit => 30, :default => "", :null => false
- t.string "name", :limit => 60, :default => "", :null => false
- t.string "host", :limit => 60
- t.integer "port"
- t.string "account"
- t.string "account_password", :default => ""
- t.string "base_dn"
- t.string "attr_login", :limit => 30
- t.string "attr_firstname", :limit => 30
- t.string "attr_lastname", :limit => 30
- t.string "attr_mail", :limit => 30
- t.boolean "onthefly_register", :default => false, :null => false
- t.boolean "tls", :default => false, :null => false
- t.string "filter"
- t.integer "timeout"
- end
-
- add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type"
-
- create_table "biding_projects", :force => true do |t|
- t.integer "project_id"
- t.integer "bid_id"
- t.integer "user_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- end
-
- create_table "bids", :force => true do |t|
- t.string "name"
- t.string "budget", :null => false
- t.integer "author_id"
- t.date "deadline"
- t.text "description"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- t.integer "commit"
- t.integer "reward_type"
- t.integer "homework_type"
- t.integer "parent_id"
- t.string "password"
- t.integer "is_evaluation"
- t.integer "proportion", :default => 60
- t.integer "comment_status", :default => 0
- t.integer "evaluation_num", :default => 3
- t.integer "open_anonymous_evaluation", :default => 1
- end
-
- create_table "boards", :force => true do |t|
- t.integer "project_id", :null => false
- t.string "name", :default => "", :null => false
- t.string "description"
- t.integer "position", :default => 1
- t.integer "topics_count", :default => 0, :null => false
- t.integer "messages_count", :default => 0, :null => false
- t.integer "last_message_id"
- t.integer "parent_id"
- t.integer "course_id"
- end
-
- add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
- add_index "boards", ["project_id"], :name => "boards_project_id"
-
- create_table "bug_to_osps", :force => true do |t|
- t.integer "osp_id"
- t.integer "relative_memo_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "changes", :force => true do |t|
- t.integer "changeset_id", :null => false
- t.string "action", :limit => 1, :default => "", :null => false
- t.text "path", :null => false
- t.text "from_path"
- t.string "from_revision"
- t.string "revision"
- t.string "branch"
- end
-
- add_index "changes", ["changeset_id"], :name => "changesets_changeset_id"
-
- create_table "changeset_parents", :id => false, :force => true do |t|
- t.integer "changeset_id", :null => false
- t.integer "parent_id", :null => false
- end
-
- add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids"
- add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids"
-
- create_table "changesets", :force => true do |t|
- t.integer "repository_id", :null => false
- t.string "revision", :null => false
- t.string "committer"
- t.datetime "committed_on", :null => false
- t.text "comments"
- t.date "commit_date"
- t.string "scmid"
- t.integer "user_id"
- end
-
- add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on"
- add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true
- add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid"
- add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id"
- add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id"
-
- create_table "changesets_issues", :id => false, :force => true do |t|
- t.integer "changeset_id", :null => false
- t.integer "issue_id", :null => false
- end
-
- add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true
-
- create_table "code_review_assignments", :force => true do |t|
- t.integer "issue_id"
- t.integer "change_id"
- t.integer "attachment_id"
- t.string "file_path"
- t.string "rev"
- t.string "rev_to"
- t.string "action_type"
- t.integer "changeset_id"
- end
-
- create_table "code_review_project_settings", :force => true do |t|
- t.integer "project_id"
- t.integer "tracker_id"
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "updated_by"
- t.boolean "hide_code_review_tab", :default => false
- t.integer "auto_relation", :default => 1
- t.integer "assignment_tracker_id"
- t.text "auto_assign"
- t.integer "lock_version", :default => 0, :null => false
- t.boolean "tracker_in_review_dialog", :default => false
- end
-
- create_table "code_review_user_settings", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.integer "mail_notification", :default => 0, :null => false
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- create_table "code_reviews", :force => true do |t|
- t.integer "project_id"
- t.integer "change_id"
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "line"
- t.integer "updated_by_id"
- t.integer "lock_version", :default => 0, :null => false
- t.integer "status_changed_from"
- t.integer "status_changed_to"
- t.integer "issue_id"
- t.string "action_type"
- t.string "file_path"
- t.string "rev"
- t.string "rev_to"
- t.integer "attachment_id"
- t.integer "file_count", :default => 0, :null => false
- t.boolean "diff_all"
- end
-
- create_table "comments", :force => true do |t|
- t.string "commented_type", :limit => 30, :default => "", :null => false
- t.integer "commented_id", :default => 0, :null => false
- t.integer "author_id", :default => 0, :null => false
- t.text "comments"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- end
-
- add_index "comments", ["author_id"], :name => "index_comments_on_author_id"
- add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type"
-
- create_table "contest_notifications", :force => true do |t|
- t.text "title"
- t.text "content"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "contesting_projects", :force => true do |t|
- t.integer "project_id"
- t.string "contest_id"
- t.integer "user_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- end
-
- create_table "contesting_softapplications", :force => true do |t|
- t.integer "softapplication_id"
- t.integer "contest_id"
- t.integer "user_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- end
-
- create_table "contestnotifications", :force => true do |t|
- t.integer "contest_id"
- t.string "title"
- t.string "summary"
- t.text "description"
- t.integer "author_id"
- t.integer "notificationcomments_count"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "contests", :force => true do |t|
- t.string "name"
- t.string "budget", :default => ""
- t.integer "author_id"
- t.date "deadline"
- t.string "description"
- t.integer "commit"
- t.string "password"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- end
-
- create_table "course_activities", :force => true do |t|
- t.integer "user_id"
- t.integer "course_id"
- t.integer "course_act_id"
- t.string "course_act_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "course_attachments", :force => true do |t|
- t.string "filename"
- t.string "disk_filename"
- t.integer "filesize"
- t.string "content_type"
- t.string "digest"
- t.integer "downloads"
- t.string "author_id"
- t.string "integer"
- t.string "description"
- t.string "disk_directory"
- t.integer "attachtype"
- t.integer "is_public"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "container_id", :default => 0
- end
-
- create_table "course_groups", :force => true do |t|
- t.string "name"
- t.integer "course_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "course_infos", :force => true do |t|
- t.integer "course_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "course_messages", :force => true do |t|
- t.integer "user_id"
- t.integer "course_id"
- t.integer "course_message_id"
- t.string "course_message_type"
- t.integer "viewed"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "content"
- t.integer "status"
- end
-
- create_table "course_statuses", :force => true do |t|
- t.integer "changesets_count"
- t.integer "watchers_count"
- t.integer "course_id"
- t.float "grade", :default => 0.0
- t.integer "course_ac_para", :default => 0
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "courses", :force => true do |t|
- t.integer "tea_id"
- t.string "name"
- t.integer "state"
- t.string "code"
- t.integer "time"
- t.string "extra"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "location"
- t.string "term"
- t.string "string"
- t.string "password"
- t.string "setup_time"
- t.string "endup_time"
- t.string "class_period"
- t.integer "school_id"
- t.text "description"
- t.integer "status", :default => 1
- t.integer "attachmenttype", :default => 2
- t.integer "lft"
- t.integer "rgt"
- t.integer "is_public", :limit => 1, :default => 1
- t.integer "inherit_members", :limit => 1, :default => 1
- t.integer "open_student", :default => 0
- end
-
- create_table "custom_fields", :force => true do |t|
- t.string "type", :limit => 30, :default => "", :null => false
- t.string "name", :limit => 30, :default => "", :null => false
- t.string "field_format", :limit => 30, :default => "", :null => false
- t.text "possible_values"
- t.string "regexp", :default => ""
- t.integer "min_length", :default => 0, :null => false
- t.integer "max_length", :default => 0, :null => false
- t.boolean "is_required", :default => false, :null => false
- t.boolean "is_for_all", :default => false, :null => false
- t.boolean "is_filter", :default => false, :null => false
- t.integer "position", :default => 1
- t.boolean "searchable", :default => false
- t.text "default_value"
- t.boolean "editable", :default => true
- t.boolean "visible", :default => true, :null => false
- t.boolean "multiple", :default => false
- end
-
- add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type"
-
- create_table "custom_fields_projects", :id => false, :force => true do |t|
- t.integer "custom_field_id", :default => 0, :null => false
- t.integer "project_id", :default => 0, :null => false
- end
-
- add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true
-
- create_table "custom_fields_trackers", :id => false, :force => true do |t|
- t.integer "custom_field_id", :default => 0, :null => false
- t.integer "tracker_id", :default => 0, :null => false
- end
-
- add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true
-
- create_table "custom_values", :force => true do |t|
- t.string "customized_type", :limit => 30, :default => "", :null => false
- t.integer "customized_id", :default => 0, :null => false
- t.integer "custom_field_id", :default => 0, :null => false
- t.text "value"
- end
-
- add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id"
- add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized"
-
- create_table "delayed_jobs", :force => true do |t|
- t.integer "priority", :default => 0, :null => false
- t.integer "attempts", :default => 0, :null => false
- t.text "handler", :null => false
- t.text "last_error"
- t.datetime "run_at"
- t.datetime "locked_at"
- t.datetime "failed_at"
- t.string "locked_by"
- t.string "queue"
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
-
- create_table "discuss_demos", :force => true do |t|
- t.string "title"
- t.text "body"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "documents", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.integer "category_id", :default => 0, :null => false
- t.string "title", :limit => 60, :default => "", :null => false
- t.text "description"
- t.datetime "created_on"
- t.integer "user_id", :default => 0
- t.integer "is_public", :default => 1
- end
-
- add_index "documents", ["category_id"], :name => "index_documents_on_category_id"
- add_index "documents", ["created_on"], :name => "index_documents_on_created_on"
- add_index "documents", ["project_id"], :name => "documents_project_id"
-
- create_table "dts", :primary_key => "Num", :force => true do |t|
- t.string "Defect", :limit => 50
- t.string "Category", :limit => 50
- t.string "File"
- t.string "Method"
- t.string "Module", :limit => 20
- t.string "Variable", :limit => 50
- t.integer "StartLine"
- t.integer "IPLine"
- t.string "IPLineCode", :limit => 200
- t.string "Judge", :limit => 15
- t.integer "Review", :limit => 1
- t.string "Description"
- t.text "PreConditions", :limit => 2147483647
- t.text "TraceInfo", :limit => 2147483647
- t.text "Code", :limit => 2147483647
- t.integer "project_id"
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "id", :null => false
- end
-
- create_table "enabled_modules", :force => true do |t|
- t.integer "project_id"
- t.string "name", :null => false
- t.integer "course_id"
- end
-
- add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id"
-
- create_table "enumerations", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.integer "position", :default => 1
- t.boolean "is_default", :default => false, :null => false
- t.string "type"
- t.boolean "active", :default => true, :null => false
- t.integer "project_id"
- t.integer "parent_id"
- t.string "position_name", :limit => 30
- end
-
- add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
- add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
-
- create_table "first_pages", :force => true do |t|
- t.string "web_title"
- t.string "title"
- t.text "description"
- t.string "page_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "sort_type"
- t.integer "image_width", :default => 107
- t.integer "image_height", :default => 63
- t.integer "show_course", :default => 1
- t.integer "show_contest", :default => 1
- end
-
- create_table "forge_activities", :force => true do |t|
- t.integer "user_id"
- t.integer "project_id"
- t.integer "forge_act_id"
- t.string "forge_act_type"
- t.integer "org_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id"
-
- create_table "forge_messages", :force => true do |t|
- t.integer "user_id"
- t.integer "project_id"
- t.integer "forge_message_id"
- t.string "forge_message_type"
- t.integer "viewed"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "forums", :force => true do |t|
- t.string "name", :null => false
- t.text "description"
- t.integer "topic_count", :default => 0
- t.integer "memo_count", :default => 0
- t.integer "last_memo_id", :default => 0
- t.integer "creator_id", :null => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "sticky"
- t.integer "locked"
- end
-
- create_table "groups_users", :id => false, :force => true do |t|
- t.integer "group_id", :null => false
- t.integer "user_id", :null => false
- end
-
- add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true
-
- create_table "homework_attaches", :force => true do |t|
- t.integer "bid_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- t.string "name"
- t.text "description"
- t.integer "state"
- t.integer "project_id", :default => 0
- t.float "score", :default => 0.0
- t.integer "is_teacher_score", :default => 0
- end
-
- add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id"
-
- create_table "homework_commons", :force => true do |t|
- t.string "name"
- t.integer "user_id"
- t.text "description"
- t.date "publish_time"
- t.date "end_time"
- t.integer "homework_type", :default => 1
- t.string "late_penalty"
- t.integer "course_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "homework_detail_manuals", :force => true do |t|
- t.float "ta_proportion"
- t.integer "comment_status"
- t.date "evaluation_start"
- t.date "evaluation_end"
- t.integer "evaluation_num"
- t.integer "absence_penalty", :default => 1
- t.integer "homework_common_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "homework_detail_programings", :force => true do |t|
- t.string "language"
- t.text "standard_code", :limit => 2147483647
- t.integer "homework_common_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.float "ta_proportion", :default => 0.1
- t.integer "question_id"
- end
-
- create_table "homework_evaluations", :force => true do |t|
- t.string "user_id"
- t.string "homework_attach_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "homework_for_courses", :force => true do |t|
- t.integer "course_id"
- t.integer "bid_id"
- end
-
- add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id"
- add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id"
-
- create_table "homework_tests", :force => true do |t|
- t.text "input"
- t.text "output"
- t.integer "homework_common_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "result"
- t.text "error_msg"
- end
-
- create_table "homework_users", :force => true do |t|
- t.string "homework_attach_id"
- t.string "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "invite_lists", :force => true do |t|
- t.integer "project_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "issue_categories", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.string "name", :limit => 30, :default => "", :null => false
- t.integer "assigned_to_id"
- end
-
- add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id"
- add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id"
-
- create_table "issue_relations", :force => true do |t|
- t.integer "issue_from_id", :null => false
- t.integer "issue_to_id", :null => false
- t.string "relation_type", :default => "", :null => false
- t.integer "delay"
- end
-
- add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true
- add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id"
- add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id"
-
- create_table "issue_statuses", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.boolean "is_closed", :default => false, :null => false
- t.boolean "is_default", :default => false, :null => false
- t.integer "position", :default => 1
- t.integer "default_done_ratio"
- end
-
- add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed"
- add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default"
- add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position"
-
- create_table "issues", :force => true do |t|
- t.integer "tracker_id", :null => false
- t.integer "project_id", :null => false
- t.string "subject", :default => "", :null => false
- t.text "description"
- t.date "due_date"
- t.integer "category_id"
- t.integer "status_id", :null => false
- t.integer "assigned_to_id"
- t.integer "priority_id", :null => false
- t.integer "fixed_version_id"
- t.integer "author_id", :null => false
- t.integer "lock_version", :default => 0, :null => false
- t.datetime "created_on"
- t.datetime "updated_on"
- t.date "start_date"
- t.integer "done_ratio", :default => 0, :null => false
- t.float "estimated_hours"
- t.integer "parent_id"
- t.integer "root_id"
- t.integer "lft"
- t.integer "rgt"
- t.boolean "is_private", :default => false, :null => false
- t.datetime "closed_on"
- t.integer "project_issues_index"
- end
-
- add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id"
- add_index "issues", ["author_id"], :name => "index_issues_on_author_id"
- add_index "issues", ["category_id"], :name => "index_issues_on_category_id"
- add_index "issues", ["created_on"], :name => "index_issues_on_created_on"
- add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id"
- add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id"
- add_index "issues", ["project_id"], :name => "issues_project_id"
- add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt"
- add_index "issues", ["status_id"], :name => "index_issues_on_status_id"
- add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id"
-
- create_table "join_in_competitions", :force => true do |t|
- t.integer "user_id"
- t.integer "competition_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "join_in_contests", :force => true do |t|
- t.integer "user_id"
- t.integer "bid_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "journal_details", :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", ["journal_id"], :name => "journal_details_journal_id"
-
- create_table "journal_replies", :id => false, :force => true do |t|
- t.integer "journal_id"
- t.integer "user_id"
- t.integer "reply_id"
- end
-
- add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id"
- add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id"
- add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id"
-
- create_table "journals", :force => true do |t|
- t.integer "journalized_id", :default => 0, :null => false
- t.string "journalized_type", :limit => 30, :default => "", :null => false
- t.integer "user_id", :default => 0, :null => false
- t.text "notes"
- t.datetime "created_on", :null => false
- t.boolean "private_notes", :default => false, :null => false
- end
-
- add_index "journals", ["created_on"], :name => "index_journals_on_created_on"
- add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id"
- add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id"
- add_index "journals", ["user_id"], :name => "index_journals_on_user_id"
-
- create_table "journals_for_messages", :force => true do |t|
- t.integer "jour_id"
- t.string "jour_type"
- t.integer "user_id"
- t.text "notes"
- t.integer "status"
- t.integer "reply_id"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- t.string "m_parent_id"
- t.boolean "is_readed"
- t.integer "m_reply_count"
- t.integer "m_reply_id"
- t.integer "is_comprehensive_evaluation"
- end
-
- create_table "kindeditor_assets", :force => true do |t|
- t.string "asset"
- t.integer "file_size"
- t.string "file_type"
- t.integer "owner_id"
- t.string "asset_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "owner_type", :default => 0
- end
-
- create_table "member_roles", :force => true do |t|
- t.integer "member_id", :null => false
- t.integer "role_id", :null => false
- t.integer "inherited_from"
- end
-
- add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id"
- add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id"
-
- create_table "members", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.integer "project_id", :default => 0
- t.datetime "created_on"
- t.boolean "mail_notification", :default => false, :null => false
- t.integer "course_id", :default => -1
- t.integer "course_group_id", :default => 0
- end
-
- add_index "members", ["project_id"], :name => "index_members_on_project_id"
- add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true
- add_index "members", ["user_id"], :name => "index_members_on_user_id"
-
- create_table "memo_messages", :force => true do |t|
- t.integer "user_id"
- t.integer "forum_id"
- t.integer "memo_id"
- t.string "memo_type"
- t.integer "viewed"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "memos", :force => true do |t|
- t.integer "forum_id", :null => false
- t.integer "parent_id"
- t.string "subject", :null => false
- t.text "content", :null => false
- t.integer "author_id", :null => false
- t.integer "replies_count", :default => 0
- t.integer "last_reply_id"
- t.boolean "lock", :default => false
- t.boolean "sticky", :default => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "viewed_count", :default => 0
- end
-
- create_table "message_alls", :force => true do |t|
- t.integer "user_id"
- t.integer "message_id"
- t.string "message_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "messages", :force => true do |t|
- t.integer "board_id", :null => false
- t.integer "parent_id"
- t.string "subject", :default => "", :null => false
- t.text "content"
- t.integer "author_id"
- t.integer "replies_count", :default => 0, :null => false
- t.integer "last_reply_id"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- t.boolean "locked", :default => false
- t.integer "sticky", :default => 0
- end
-
- add_index "messages", ["author_id"], :name => "index_messages_on_author_id"
- add_index "messages", ["board_id"], :name => "messages_board_id"
- add_index "messages", ["created_on"], :name => "index_messages_on_created_on"
- add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
- add_index "messages", ["parent_id"], :name => "messages_parent_id"
-
- create_table "news", :force => true do |t|
- t.integer "project_id"
- t.string "title", :limit => 60, :default => "", :null => false
- t.string "summary", :default => ""
- t.text "description"
- t.integer "author_id", :default => 0, :null => false
- t.datetime "created_on"
- t.integer "comments_count", :default => 0, :null => false
- t.integer "course_id"
- end
-
- add_index "news", ["author_id"], :name => "index_news_on_author_id"
- add_index "news", ["created_on"], :name => "index_news_on_created_on"
- add_index "news", ["project_id"], :name => "news_project_id"
-
- create_table "no_uses", :force => true do |t|
- t.integer "user_id", :null => false
- t.string "no_use_type"
- t.integer "no_use_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "notificationcomments", :force => true do |t|
- t.string "notificationcommented_type"
- t.integer "notificationcommented_id"
- t.integer "author_id"
- t.text "notificationcomments"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "open_id_authentication_associations", :force => true do |t|
- t.integer "issued"
- t.integer "lifetime"
- t.string "handle"
- t.string "assoc_type"
- t.binary "server_url"
- t.binary "secret"
- end
-
- create_table "open_id_authentication_nonces", :force => true do |t|
- t.integer "timestamp", :null => false
- t.string "server_url"
- t.string "salt", :null => false
- end
-
- create_table "open_source_projects", :force => true do |t|
- t.string "name"
- t.text "description"
- t.integer "commit_count", :default => 0
- t.integer "code_line", :default => 0
- t.integer "users_count", :default => 0
- t.date "last_commit_time"
- t.string "url"
- t.date "date_collected"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "option_numbers", :force => true do |t|
- t.integer "user_id"
- t.integer "memo"
- t.integer "messages_for_issues"
- t.integer "issues_status"
- t.integer "replay_for_message"
- t.integer "replay_for_memo"
- t.integer "follow"
- t.integer "tread"
- t.integer "praise_by_one"
- t.integer "praise_by_two"
- t.integer "praise_by_three"
- t.integer "tread_by_one"
- t.integer "tread_by_two"
- t.integer "tread_by_three"
- t.integer "changeset"
- t.integer "document"
- t.integer "attachment"
- t.integer "issue_done_ratio"
- t.integer "post_issue"
- t.integer "score_type"
- t.integer "total_score"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "project_id"
- end
-
- create_table "organizations", :force => true do |t|
- t.string "name"
- t.string "logo_link"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "phone_app_versions", :force => true do |t|
- t.string "version"
- t.text "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "poll_answers", :force => true do |t|
- t.integer "poll_question_id"
- t.text "answer_text"
- t.integer "answer_position"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "poll_questions", :force => true do |t|
- t.string "question_title"
- t.integer "question_type"
- t.integer "is_necessary"
- t.integer "poll_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "question_number"
- end
-
- create_table "poll_users", :force => true do |t|
- t.integer "user_id"
- t.integer "poll_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "poll_votes", :force => true do |t|
- t.integer "user_id"
- t.integer "poll_question_id"
- t.integer "poll_answer_id"
- t.text "vote_text"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "polls", :force => true do |t|
- t.string "polls_name"
- t.string "polls_type"
- t.integer "polls_group_id"
- t.integer "polls_status"
- t.integer "user_id"
- t.datetime "published_at"
- t.datetime "closed_at"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.text "polls_description"
- t.integer "show_result", :default => 1
- end
-
- create_table "praise_tread_caches", :force => true do |t|
- t.integer "object_id", :null => false
- t.string "object_type"
- t.integer "praise_num"
- t.integer "tread_num"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "praise_treads", :force => true do |t|
- t.integer "user_id", :null => false
- t.integer "praise_tread_object_id"
- t.string "praise_tread_object_type"
- t.integer "praise_or_tread"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "project_infos", :force => true do |t|
- t.integer "project_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "project_scores", :force => true do |t|
- t.string "project_id"
- t.integer "score"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "issue_num", :default => 0
- t.integer "issue_journal_num", :default => 0
- t.integer "news_num", :default => 0
- t.integer "documents_num", :default => 0
- t.integer "changeset_num", :default => 0
- t.integer "board_message_num", :default => 0
- end
-
- create_table "project_statuses", :force => true do |t|
- t.integer "changesets_count"
- t.integer "watchers_count"
- t.integer "project_id"
- t.integer "project_type"
- t.float "grade", :default => 0.0
- t.integer "course_ac_para", :default => 0
- end
-
- add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade"
-
- create_table "projecting_softapplictions", :force => true do |t|
- t.integer "user_id"
- t.integer "softapplication_id"
- t.integer "project_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "projects", :force => true do |t|
- t.string "name", :default => "", :null => false
- t.text "description"
- t.string "homepage", :default => ""
- t.boolean "is_public", :default => true, :null => false
- t.integer "parent_id"
- t.datetime "created_on"
- t.datetime "updated_on"
- t.string "identifier"
- t.integer "status", :default => 1, :null => false
- t.integer "lft"
- t.integer "rgt"
- t.boolean "inherit_members", :default => false, :null => false
- t.integer "project_type"
- t.boolean "hidden_repo", :default => false, :null => false
- t.integer "attachmenttype", :default => 1
- t.integer "user_id"
- t.integer "dts_test", :default => 0
- t.string "enterprise_name"
- t.integer "organization_id"
- t.integer "project_new_type"
- end
-
- add_index "projects", ["lft"], :name => "index_projects_on_lft"
- add_index "projects", ["rgt"], :name => "index_projects_on_rgt"
-
- create_table "projects_trackers", :id => false, :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.integer "tracker_id", :default => 0, :null => false
- end
-
- add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true
- add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id"
-
- create_table "queries", :force => true do |t|
- t.integer "project_id"
- t.string "name", :default => "", :null => false
- t.text "filters"
- t.integer "user_id", :default => 0, :null => false
- t.boolean "is_public", :default => false, :null => false
- t.text "column_names"
- t.text "sort_criteria"
- t.string "group_by"
- t.string "type"
- end
-
- add_index "queries", ["project_id"], :name => "index_queries_on_project_id"
- add_index "queries", ["user_id"], :name => "index_queries_on_user_id"
-
- create_table "relative_memo_to_open_source_projects", :force => true do |t|
- t.integer "osp_id"
- t.integer "relative_memo_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "relative_memos", :force => true do |t|
- t.integer "osp_id"
- t.integer "parent_id"
- t.string "subject", :null => false
- t.text "content", :limit => 16777215, :null => false
- t.integer "author_id"
- t.integer "replies_count", :default => 0
- t.integer "last_reply_id"
- t.boolean "lock", :default => false
- t.boolean "sticky", :default => false
- t.boolean "is_quote", :default => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "viewed_count_crawl", :default => 0
- t.integer "viewed_count_local", :default => 0
- t.string "url"
- t.string "username"
- t.string "userhomeurl"
- t.date "date_collected"
- t.string "topic_resource"
- end
-
- create_table "repositories", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.string "url", :default => "", :null => false
- t.string "login", :limit => 60, :default => ""
- t.string "password", :default => ""
- t.string "root_url", :default => ""
- t.string "type"
- t.string "path_encoding", :limit => 64
- t.string "log_encoding", :limit => 64
- t.text "extra_info"
- t.string "identifier"
- t.boolean "is_default", :default => false
- t.boolean "hidden", :default => false
- end
-
- add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id"
-
- create_table "rich_rich_files", :force => true do |t|
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "rich_file_file_name"
- t.string "rich_file_content_type"
- t.integer "rich_file_file_size"
- t.datetime "rich_file_updated_at"
- t.string "owner_type"
- t.integer "owner_id"
- t.text "uri_cache"
- t.string "simplified_type", :default => "file"
- end
-
- create_table "roles", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.integer "position", :default => 1
- t.boolean "assignable", :default => true
- t.integer "builtin", :default => 0, :null => false
- t.text "permissions"
- t.string "issues_visibility", :limit => 30, :default => "default", :null => false
- end
-
- create_table "schools", :force => true do |t|
- t.string "name"
- t.string "province"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "logo_link"
- end
-
- create_table "seems_rateable_cached_ratings", :force => true do |t|
- t.integer "cacheable_id", :limit => 8
- t.string "cacheable_type"
- t.float "avg", :null => false
- t.integer "cnt", :null => false
- t.string "dimension"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "seems_rateable_rates", :force => true do |t|
- t.integer "rater_id", :limit => 8
- t.integer "rateable_id"
- t.string "rateable_type"
- t.float "stars", :null => false
- t.string "dimension"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "is_teacher_score", :default => 0
- end
-
- create_table "settings", :force => true do |t|
- t.string "name", :default => "", :null => false
- t.text "value"
- t.datetime "updated_on"
- end
-
- add_index "settings", ["name"], :name => "index_settings_on_name"
-
- create_table "shares", :force => true do |t|
- t.date "created_on"
- t.string "url"
- t.string "title"
- t.integer "share_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "project_id"
- t.integer "user_id"
- t.string "description"
- end
-
- create_table "softapplications", :force => true do |t|
- t.string "name"
- t.text "description"
- t.integer "app_type_id"
- t.string "app_type_name"
- t.string "android_min_version_available"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "contest_id"
- t.integer "softapplication_id"
- t.integer "is_public"
- t.string "application_developers"
- t.string "deposit_project_url"
- t.string "deposit_project"
- t.integer "project_id"
- end
-
- create_table "student_work_tests", :force => true do |t|
- t.integer "student_work_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "status", :default => 9
- t.text "results"
- t.text "src"
- end
-
- create_table "student_works", :force => true do |t|
- t.string "name"
- t.text "description", :limit => 2147483647
- t.integer "homework_common_id"
- t.integer "user_id"
- t.float "final_score"
- t.float "teacher_score"
- t.float "student_score"
- t.float "teaching_asistant_score"
- t.integer "project_id", :default => 0
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "late_penalty", :default => 0
- t.integer "absence_penalty", :default => 0
- t.integer "system_score"
- t.boolean "is_test", :default => false
- end
-
- create_table "student_works_evaluation_distributions", :force => true do |t|
- t.integer "student_work_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "student_works_scores", :force => true do |t|
- t.integer "student_work_id"
- t.integer "user_id"
- t.integer "score"
- t.text "comment"
- t.integer "reviewer_role"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "students_for_courses", :force => true do |t|
- t.integer "student_id"
- t.integer "course_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id"
- add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id"
-
- create_table "taggings", :force => true do |t|
- t.integer "tag_id"
- t.integer "taggable_id"
- t.string "taggable_type"
- t.integer "tagger_id"
- t.string "tagger_type"
- t.string "context", :limit => 128
- t.datetime "created_at"
- end
-
- add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
- add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
- add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type"
-
- create_table "tags", :force => true do |t|
- t.string "name"
- end
-
- create_table "teachers", :force => true do |t|
- t.string "tea_name"
- t.string "location"
- t.integer "couurse_time"
- t.integer "course_code"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "extra"
- end
-
- create_table "time_entries", :force => true do |t|
- t.integer "project_id", :null => false
- t.integer "user_id", :null => false
- t.integer "issue_id"
- t.float "hours", :null => false
- t.string "comments"
- t.integer "activity_id", :null => false
- t.date "spent_on", :null => false
- t.integer "tyear", :null => false
- t.integer "tmonth", :null => false
- t.integer "tweek", :null => false
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- end
-
- add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id"
- add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on"
- add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id"
- add_index "time_entries", ["project_id"], :name => "time_entries_project_id"
- add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id"
-
- create_table "tokens", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.string "action", :limit => 30, :default => "", :null => false
- t.string "value", :limit => 40, :default => "", :null => false
- t.datetime "created_on", :null => false
- end
-
- add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id"
- add_index "tokens", ["value"], :name => "tokens_value", :unique => true
-
- create_table "trackers", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.boolean "is_in_chlog", :default => false, :null => false
- t.integer "position", :default => 1
- t.boolean "is_in_roadmap", :default => true, :null => false
- t.integer "fields_bits", :default => 0
- end
-
- create_table "user_activities", :force => true do |t|
- t.string "act_type"
- t.integer "act_id"
- t.string "container_type"
- t.integer "container_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "user_id"
- end
-
- create_table "user_extensions", :force => true do |t|
- t.integer "user_id", :null => false
- t.date "birthday"
- t.string "brief_introduction"
- t.integer "gender"
- t.string "location"
- t.string "occupation"
- t.integer "work_experience"
- t.integer "zip_code"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "technical_title"
- t.integer "identity"
- t.string "student_id"
- t.string "teacher_realname"
- t.string "student_realname"
- t.string "location_city"
- t.integer "school_id"
- t.string "description", :default => ""
- end
-
- create_table "user_feedback_messages", :force => true do |t|
- t.integer "user_id"
- t.integer "journals_for_message_id"
- t.string "journals_for_message_type"
- t.integer "viewed"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "user_grades", :force => true do |t|
- t.integer "user_id", :null => false
- t.integer "project_id", :null => false
- t.float "grade", :default => 0.0
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade"
- add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id"
- add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id"
-
- create_table "user_levels", :force => true do |t|
- t.integer "user_id"
- t.integer "level"
- end
-
- create_table "user_preferences", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.text "others"
- t.boolean "hide_mail", :default => false
- t.string "time_zone"
- end
-
- add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id"
-
- create_table "user_score_details", :force => true do |t|
- t.integer "current_user_id"
- t.integer "target_user_id"
- t.string "score_type"
- t.string "score_action"
- t.integer "user_id"
- t.integer "old_score"
- t.integer "new_score"
- t.integer "current_user_level"
- t.integer "target_user_level"
- t.integer "score_changeable_obj_id"
- t.string "score_changeable_obj_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "user_scores", :force => true do |t|
- t.integer "user_id", :null => false
- t.integer "collaboration"
- t.integer "influence"
- t.integer "skill"
- t.integer "active"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "user_statuses", :force => true do |t|
- t.integer "changesets_count"
- t.integer "watchers_count"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.float "grade", :default => 0.0
- end
-
- add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count"
- add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade"
- add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count"
-
- create_table "users", :force => true do |t|
- t.string "login", :default => "", :null => false
- t.string "hashed_password", :limit => 40, :default => "", :null => false
- t.string "firstname", :limit => 30, :default => "", :null => false
- t.string "lastname", :default => "", :null => false
- t.string "mail", :limit => 60, :default => "", :null => false
- t.boolean "admin", :default => false, :null => false
- t.integer "status", :default => 1, :null => false
- t.datetime "last_login_on"
- t.string "language", :limit => 5, :default => ""
- t.integer "auth_source_id"
- t.datetime "created_on"
- t.datetime "updated_on"
- t.string "type"
- t.string "identity_url"
- t.string "mail_notification", :default => "", :null => false
- t.string "salt", :limit => 64
- end
-
- add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id"
- add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
- add_index "users", ["type"], :name => "index_users_on_type"
-
- create_table "versions", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.string "name", :default => "", :null => false
- t.string "description", :default => ""
- t.date "effective_date"
- t.datetime "created_on"
- t.datetime "updated_on"
- t.string "wiki_page_title"
- t.string "status", :default => "open"
- t.string "sharing", :default => "none", :null => false
- end
-
- add_index "versions", ["project_id"], :name => "versions_project_id"
- add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
-
- create_table "visitors", :force => true do |t|
- t.integer "user_id"
- t.integer "master_id"
- t.datetime "updated_on"
- t.datetime "created_on"
- end
-
- add_index "visitors", ["master_id"], :name => "index_visitors_master_id"
- add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on"
- add_index "visitors", ["user_id"], :name => "index_visitors_user_id"
-
- create_table "watchers", :force => true do |t|
- t.string "watchable_type", :default => "", :null => false
- t.integer "watchable_id", :default => 0, :null => false
- t.integer "user_id"
- end
-
- add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type"
- add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id"
- add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type"
-
- create_table "web_footer_companies", :force => true do |t|
- t.string "name"
- t.string "logo_size"
- t.string "url"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "web_footer_oranizers", :force => true do |t|
- t.string "name"
- t.text "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "wiki_content_versions", :force => true do |t|
- t.integer "wiki_content_id", :null => false
- t.integer "page_id", :null => false
- t.integer "author_id"
- t.binary "data", :limit => 2147483647
- t.string "compression", :limit => 6, :default => ""
- t.string "comments", :default => ""
- t.datetime "updated_on", :null => false
- t.integer "version", :null => false
- end
-
- add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on"
- add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid"
-
- create_table "wiki_contents", :force => true do |t|
- t.integer "page_id", :null => false
- t.integer "author_id"
- t.text "text", :limit => 2147483647
- t.string "comments", :default => ""
- t.datetime "updated_on", :null => false
- t.integer "version", :null => false
- end
-
- add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id"
- add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id"
-
- create_table "wiki_pages", :force => true do |t|
- t.integer "wiki_id", :null => false
- t.string "title", :null => false
- t.datetime "created_on", :null => false
- t.boolean "protected", :default => false, :null => false
- t.integer "parent_id"
- end
-
- add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id"
- add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title"
- add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id"
-
- create_table "wiki_redirects", :force => true do |t|
- t.integer "wiki_id", :null => false
- t.string "title"
- t.string "redirects_to"
- t.datetime "created_on", :null => false
- end
-
- add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title"
- add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id"
-
- create_table "wikis", :force => true do |t|
- t.integer "project_id", :null => false
- t.string "start_page", :null => false
- t.integer "status", :default => 1, :null => false
- end
-
- add_index "wikis", ["project_id"], :name => "wikis_project_id"
-
- create_table "workflows", :force => true do |t|
- t.integer "tracker_id", :default => 0, :null => false
- t.integer "old_status_id", :default => 0, :null => false
- t.integer "new_status_id", :default => 0, :null => false
- t.integer "role_id", :default => 0, :null => false
- t.boolean "assignee", :default => false, :null => false
- t.boolean "author", :default => false, :null => false
- t.string "type", :limit => 30
- t.string "field_name", :limit => 30
- t.string "rule", :limit => 30
- end
-
- add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id"
- add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id"
- add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status"
- add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id"
-
- create_table "works_categories", :force => true do |t|
- t.string "category"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "zip_packs", :force => true do |t|
- t.integer "user_id"
- t.integer "homework_id"
- t.string "file_digest"
- t.string "file_path"
- t.integer "pack_times", :default => 1
- t.integer "pack_size", :default => 0
- t.text "file_digests"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
-end
+# encoding: UTF-8
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended to check this file into your version control system.
+
+ActiveRecord::Schema.define(:version => 20150917071652) do
+
+ create_table "activities", :force => true do |t|
+ t.integer "act_id", :null => false
+ t.string "act_type", :null => false
+ t.integer "user_id", :null => false
+ t.integer "activity_container_id"
+ t.string "activity_container_type", :default => ""
+ t.datetime "created_at"
+ end
+
+ add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type"
+ add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type"
+ add_index "activities", ["user_id"], :name => "index_activities_on_user_id"
+
+ create_table "activity_notifies", :force => true do |t|
+ t.integer "activity_container_id"
+ t.string "activity_container_type"
+ t.integer "activity_id"
+ t.string "activity_type"
+ t.integer "notify_to"
+ t.datetime "created_on"
+ t.integer "is_read"
+ end
+
+ add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id"
+ add_index "activity_notifies", ["created_on"], :name => "index_an_created_on"
+ add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to"
+
+ create_table "api_keys", :force => true do |t|
+ t.string "access_token"
+ t.datetime "expires_at"
+ t.integer "user_id"
+ t.boolean "active", :default => true
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token"
+ add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id"
+
+ create_table "applied_projects", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.integer "user_id", :null => false
+ end
+
+ create_table "apply_project_masters", :force => true do |t|
+ t.integer "user_id"
+ t.string "apply_type"
+ t.integer "apply_id"
+ t.integer "status"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "attachments", :force => true do |t|
+ t.integer "container_id"
+ t.string "container_type", :limit => 30
+ t.string "filename", :default => "", :null => false
+ t.string "disk_filename", :default => "", :null => false
+ t.integer "filesize", :default => 0, :null => false
+ t.string "content_type", :default => ""
+ t.string "digest", :limit => 40, :default => "", :null => false
+ t.integer "downloads", :default => 0, :null => false
+ t.integer "author_id", :default => 0, :null => false
+ t.datetime "created_on"
+ t.string "description"
+ t.string "disk_directory"
+ t.integer "attachtype", :default => 1
+ t.integer "is_public", :default => 1
+ t.integer "copy_from"
+ t.integer "quotes"
+ end
+
+ add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id"
+ add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type"
+ add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on"
+
+ create_table "attachmentstypes", :force => true do |t|
+ t.integer "typeId", :null => false
+ t.string "typeName", :limit => 50
+ end
+
+ create_table "auth_sources", :force => true do |t|
+ t.string "type", :limit => 30, :default => "", :null => false
+ t.string "name", :limit => 60, :default => "", :null => false
+ t.string "host", :limit => 60
+ t.integer "port"
+ t.string "account"
+ t.string "account_password", :default => ""
+ t.string "base_dn"
+ t.string "attr_login", :limit => 30
+ t.string "attr_firstname", :limit => 30
+ t.string "attr_lastname", :limit => 30
+ t.string "attr_mail", :limit => 30
+ t.boolean "onthefly_register", :default => false, :null => false
+ t.boolean "tls", :default => false, :null => false
+ t.string "filter"
+ t.integer "timeout"
+ end
+
+ add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type"
+
+ create_table "biding_projects", :force => true do |t|
+ t.integer "project_id"
+ t.integer "bid_id"
+ t.integer "user_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ end
+
+ create_table "bids", :force => true do |t|
+ t.string "name"
+ t.string "budget", :null => false
+ t.integer "author_id"
+ t.date "deadline"
+ t.text "description"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.integer "commit"
+ t.integer "reward_type"
+ t.integer "homework_type"
+ t.integer "parent_id"
+ t.string "password"
+ t.integer "is_evaluation"
+ t.integer "proportion", :default => 60
+ t.integer "comment_status", :default => 0
+ t.integer "evaluation_num", :default => 3
+ t.integer "open_anonymous_evaluation", :default => 1
+ end
+
+ create_table "boards", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.string "name", :default => "", :null => false
+ t.string "description"
+ t.integer "position", :default => 1
+ t.integer "topics_count", :default => 0, :null => false
+ t.integer "messages_count", :default => 0, :null => false
+ t.integer "last_message_id"
+ t.integer "parent_id"
+ t.integer "course_id"
+ end
+
+ add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
+ add_index "boards", ["project_id"], :name => "boards_project_id"
+
+ create_table "bug_to_osps", :force => true do |t|
+ t.integer "osp_id"
+ t.integer "relative_memo_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "changes", :force => true do |t|
+ t.integer "changeset_id", :null => false
+ t.string "action", :limit => 1, :default => "", :null => false
+ t.text "path", :null => false
+ t.text "from_path"
+ t.string "from_revision"
+ t.string "revision"
+ t.string "branch"
+ end
+
+ add_index "changes", ["changeset_id"], :name => "changesets_changeset_id"
+
+ create_table "changeset_parents", :id => false, :force => true do |t|
+ t.integer "changeset_id", :null => false
+ t.integer "parent_id", :null => false
+ end
+
+ add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids"
+ add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids"
+
+ create_table "changesets", :force => true do |t|
+ t.integer "repository_id", :null => false
+ t.string "revision", :null => false
+ t.string "committer"
+ t.datetime "committed_on", :null => false
+ t.text "comments"
+ t.date "commit_date"
+ t.string "scmid"
+ t.integer "user_id"
+ end
+
+ add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on"
+ add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true
+ add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid"
+ add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id"
+ add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id"
+
+ create_table "changesets_issues", :id => false, :force => true do |t|
+ t.integer "changeset_id", :null => false
+ t.integer "issue_id", :null => false
+ end
+
+ add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true
+
+ create_table "code_review_assignments", :force => true do |t|
+ t.integer "issue_id"
+ t.integer "change_id"
+ t.integer "attachment_id"
+ t.string "file_path"
+ t.string "rev"
+ t.string "rev_to"
+ t.string "action_type"
+ t.integer "changeset_id"
+ end
+
+ create_table "code_review_project_settings", :force => true do |t|
+ t.integer "project_id"
+ t.integer "tracker_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "updated_by"
+ t.boolean "hide_code_review_tab", :default => false
+ t.integer "auto_relation", :default => 1
+ t.integer "assignment_tracker_id"
+ t.text "auto_assign"
+ t.integer "lock_version", :default => 0, :null => false
+ t.boolean "tracker_in_review_dialog", :default => false
+ end
+
+ create_table "code_review_user_settings", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.integer "mail_notification", :default => 0, :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "code_reviews", :force => true do |t|
+ t.integer "project_id"
+ t.integer "change_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "line"
+ t.integer "updated_by_id"
+ t.integer "lock_version", :default => 0, :null => false
+ t.integer "status_changed_from"
+ t.integer "status_changed_to"
+ t.integer "issue_id"
+ t.string "action_type"
+ t.string "file_path"
+ t.string "rev"
+ t.string "rev_to"
+ t.integer "attachment_id"
+ t.integer "file_count", :default => 0, :null => false
+ t.boolean "diff_all"
+ end
+
+ create_table "comments", :force => true do |t|
+ t.string "commented_type", :limit => 30, :default => "", :null => false
+ t.integer "commented_id", :default => 0, :null => false
+ t.integer "author_id", :default => 0, :null => false
+ t.text "comments"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ end
+
+ add_index "comments", ["author_id"], :name => "index_comments_on_author_id"
+ add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type"
+
+ create_table "contest_notifications", :force => true do |t|
+ t.text "title"
+ t.text "content"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "contesting_projects", :force => true do |t|
+ t.integer "project_id"
+ t.string "contest_id"
+ t.integer "user_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ end
+
+ create_table "contesting_softapplications", :force => true do |t|
+ t.integer "softapplication_id"
+ t.integer "contest_id"
+ t.integer "user_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ end
+
+ create_table "contestnotifications", :force => true do |t|
+ t.integer "contest_id"
+ t.string "title"
+ t.string "summary"
+ t.text "description"
+ t.integer "author_id"
+ t.integer "notificationcomments_count"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "contests", :force => true do |t|
+ t.string "name"
+ t.string "budget", :default => ""
+ t.integer "author_id"
+ t.date "deadline"
+ t.string "description"
+ t.integer "commit"
+ t.string "password"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ end
+
+ create_table "course_activities", :force => true do |t|
+ t.integer "user_id"
+ t.integer "course_id"
+ t.integer "course_act_id"
+ t.string "course_act_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "course_attachments", :force => true do |t|
+ t.string "filename"
+ t.string "disk_filename"
+ t.integer "filesize"
+ t.string "content_type"
+ t.string "digest"
+ t.integer "downloads"
+ t.string "author_id"
+ t.string "integer"
+ t.string "description"
+ t.string "disk_directory"
+ t.integer "attachtype"
+ t.integer "is_public"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "container_id", :default => 0
+ end
+
+ create_table "course_groups", :force => true do |t|
+ t.string "name"
+ t.integer "course_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "course_infos", :force => true do |t|
+ t.integer "course_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "course_messages", :force => true do |t|
+ t.integer "user_id"
+ t.integer "course_id"
+ t.integer "course_message_id"
+ t.string "course_message_type"
+ t.integer "viewed"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "content"
+ t.integer "status"
+ end
+
+ create_table "course_statuses", :force => true do |t|
+ t.integer "changesets_count"
+ t.integer "watchers_count"
+ t.integer "course_id"
+ t.float "grade", :default => 0.0
+ t.integer "course_ac_para", :default => 0
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "courses", :force => true do |t|
+ t.integer "tea_id"
+ t.string "name"
+ t.integer "state"
+ t.string "code"
+ t.integer "time"
+ t.string "extra"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "location"
+ t.string "term"
+ t.string "string"
+ t.string "password"
+ t.string "setup_time"
+ t.string "endup_time"
+ t.string "class_period"
+ t.integer "school_id"
+ t.text "description"
+ t.integer "status", :default => 1
+ t.integer "attachmenttype", :default => 2
+ t.integer "lft"
+ t.integer "rgt"
+ t.integer "is_public", :limit => 1, :default => 1
+ t.integer "inherit_members", :limit => 1, :default => 1
+ t.integer "open_student", :default => 0
+ end
+
+ create_table "custom_fields", :force => true do |t|
+ t.string "type", :limit => 30, :default => "", :null => false
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.string "field_format", :limit => 30, :default => "", :null => false
+ t.text "possible_values"
+ t.string "regexp", :default => ""
+ t.integer "min_length", :default => 0, :null => false
+ t.integer "max_length", :default => 0, :null => false
+ t.boolean "is_required", :default => false, :null => false
+ t.boolean "is_for_all", :default => false, :null => false
+ t.boolean "is_filter", :default => false, :null => false
+ t.integer "position", :default => 1
+ t.boolean "searchable", :default => false
+ t.text "default_value"
+ t.boolean "editable", :default => true
+ t.boolean "visible", :default => true, :null => false
+ t.boolean "multiple", :default => false
+ end
+
+ add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type"
+
+ create_table "custom_fields_projects", :id => false, :force => true do |t|
+ t.integer "custom_field_id", :default => 0, :null => false
+ t.integer "project_id", :default => 0, :null => false
+ end
+
+ add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true
+
+ create_table "custom_fields_trackers", :id => false, :force => true do |t|
+ t.integer "custom_field_id", :default => 0, :null => false
+ t.integer "tracker_id", :default => 0, :null => false
+ end
+
+ add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true
+
+ create_table "custom_values", :force => true do |t|
+ t.string "customized_type", :limit => 30, :default => "", :null => false
+ t.integer "customized_id", :default => 0, :null => false
+ t.integer "custom_field_id", :default => 0, :null => false
+ t.text "value"
+ end
+
+ add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id"
+ add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized"
+
+ create_table "delayed_jobs", :force => true do |t|
+ t.integer "priority", :default => 0, :null => false
+ t.integer "attempts", :default => 0, :null => false
+ t.text "handler", :null => false
+ t.text "last_error"
+ t.datetime "run_at"
+ t.datetime "locked_at"
+ t.datetime "failed_at"
+ t.string "locked_by"
+ t.string "queue"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
+
+ create_table "documents", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.integer "category_id", :default => 0, :null => false
+ t.string "title", :limit => 60, :default => "", :null => false
+ t.text "description"
+ t.datetime "created_on"
+ t.integer "user_id", :default => 0
+ t.integer "is_public", :default => 1
+ end
+
+ add_index "documents", ["category_id"], :name => "index_documents_on_category_id"
+ add_index "documents", ["created_on"], :name => "index_documents_on_created_on"
+ add_index "documents", ["project_id"], :name => "documents_project_id"
+
+ create_table "dts", :force => true do |t|
+ t.string "IPLineCode"
+ t.string "Description"
+ t.string "Num"
+ t.string "Variable"
+ t.string "TraceInfo"
+ t.string "Method"
+ t.string "File"
+ t.string "IPLine"
+ t.string "Review"
+ t.string "Category"
+ t.string "Defect"
+ t.string "PreConditions"
+ t.string "StartLine"
+ t.integer "project_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "enabled_modules", :force => true do |t|
+ t.integer "project_id"
+ t.string "name", :null => false
+ t.integer "course_id"
+ end
+
+ add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id"
+
+ create_table "enumerations", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.integer "position", :default => 1
+ t.boolean "is_default", :default => false, :null => false
+ t.string "type"
+ t.boolean "active", :default => true, :null => false
+ t.integer "project_id"
+ t.integer "parent_id"
+ t.string "position_name", :limit => 30
+ end
+
+ add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
+ add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
+
+ create_table "first_pages", :force => true do |t|
+ t.string "web_title"
+ t.string "title"
+ t.text "description"
+ t.string "page_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "sort_type"
+ t.integer "image_width", :default => 107
+ t.integer "image_height", :default => 63
+ t.integer "show_course", :default => 1
+ t.integer "show_contest", :default => 1
+ end
+
+ create_table "forge_activities", :force => true do |t|
+ t.integer "user_id"
+ t.integer "project_id"
+ t.integer "forge_act_id"
+ t.string "forge_act_type"
+ t.integer "org_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id"
+
+ create_table "forge_messages", :force => true do |t|
+ t.integer "user_id"
+ t.integer "project_id"
+ t.integer "forge_message_id"
+ t.string "forge_message_type"
+ t.integer "viewed"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "forums", :force => true do |t|
+ t.string "name", :null => false
+ t.text "description"
+ t.integer "topic_count", :default => 0
+ t.integer "memo_count", :default => 0
+ t.integer "last_memo_id", :default => 0
+ t.integer "creator_id", :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "sticky"
+ t.integer "locked"
+ end
+
+ create_table "groups_users", :id => false, :force => true do |t|
+ t.integer "group_id", :null => false
+ t.integer "user_id", :null => false
+ end
+
+ add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true
+
+ create_table "homework_attaches", :force => true do |t|
+ t.integer "bid_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ t.string "name"
+ t.text "description"
+ t.integer "state"
+ t.integer "project_id", :default => 0
+ t.float "score", :default => 0.0
+ t.integer "is_teacher_score", :default => 0
+ end
+
+ add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id"
+
+ create_table "homework_commons", :force => true do |t|
+ t.string "name"
+ t.integer "user_id"
+ t.text "description"
+ t.date "publish_time"
+ t.date "end_time"
+ t.integer "homework_type", :default => 1
+ t.string "late_penalty"
+ t.integer "course_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "homework_detail_manuals", :force => true do |t|
+ t.float "ta_proportion"
+ t.integer "comment_status"
+ t.date "evaluation_start"
+ t.date "evaluation_end"
+ t.integer "evaluation_num"
+ t.integer "absence_penalty", :default => 1
+ t.integer "homework_common_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "homework_detail_programings", :force => true do |t|
+ t.string "language"
+ t.text "standard_code", :limit => 2147483647
+ t.integer "homework_common_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.float "ta_proportion", :default => 0.1
+ t.integer "question_id"
+ end
+
+ create_table "homework_evaluations", :force => true do |t|
+ t.string "user_id"
+ t.string "homework_attach_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "homework_for_courses", :force => true do |t|
+ t.integer "course_id"
+ t.integer "bid_id"
+ end
+
+ add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id"
+ add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id"
+
+ create_table "homework_tests", :force => true do |t|
+ t.text "input"
+ t.text "output"
+ t.integer "homework_common_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "result"
+ t.text "error_msg"
+ end
+
+ create_table "homework_users", :force => true do |t|
+ t.string "homework_attach_id"
+ t.string "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "invite_lists", :force => true do |t|
+ t.integer "project_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "issue_categories", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.integer "assigned_to_id"
+ end
+
+ add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id"
+ add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id"
+
+ create_table "issue_relations", :force => true do |t|
+ t.integer "issue_from_id", :null => false
+ t.integer "issue_to_id", :null => false
+ t.string "relation_type", :default => "", :null => false
+ t.integer "delay"
+ end
+
+ add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true
+ add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id"
+ add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id"
+
+ create_table "issue_statuses", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.boolean "is_closed", :default => false, :null => false
+ t.boolean "is_default", :default => false, :null => false
+ t.integer "position", :default => 1
+ t.integer "default_done_ratio"
+ end
+
+ add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed"
+ add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default"
+ add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position"
+
+ create_table "issues", :force => true do |t|
+ t.integer "tracker_id", :null => false
+ t.integer "project_id", :null => false
+ t.string "subject", :default => "", :null => false
+ t.text "description"
+ t.date "due_date"
+ t.integer "category_id"
+ t.integer "status_id", :null => false
+ t.integer "assigned_to_id"
+ t.integer "priority_id", :null => false
+ t.integer "fixed_version_id"
+ t.integer "author_id", :null => false
+ t.integer "lock_version", :default => 0, :null => false
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.date "start_date"
+ t.integer "done_ratio", :default => 0, :null => false
+ t.float "estimated_hours"
+ t.integer "parent_id"
+ t.integer "root_id"
+ t.integer "lft"
+ t.integer "rgt"
+ t.boolean "is_private", :default => false, :null => false
+ t.datetime "closed_on"
+ t.integer "project_issues_index"
+ end
+
+ add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id"
+ add_index "issues", ["author_id"], :name => "index_issues_on_author_id"
+ add_index "issues", ["category_id"], :name => "index_issues_on_category_id"
+ add_index "issues", ["created_on"], :name => "index_issues_on_created_on"
+ add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id"
+ add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id"
+ add_index "issues", ["project_id"], :name => "issues_project_id"
+ add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt"
+ add_index "issues", ["status_id"], :name => "index_issues_on_status_id"
+ add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id"
+
+ create_table "join_in_competitions", :force => true do |t|
+ t.integer "user_id"
+ t.integer "competition_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "join_in_contests", :force => true do |t|
+ t.integer "user_id"
+ t.integer "bid_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "journal_details", :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", ["journal_id"], :name => "journal_details_journal_id"
+
+ create_table "journal_replies", :id => false, :force => true do |t|
+ t.integer "journal_id"
+ t.integer "user_id"
+ t.integer "reply_id"
+ end
+
+ add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id"
+ add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id"
+ add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id"
+
+ create_table "journals", :force => true do |t|
+ t.integer "journalized_id", :default => 0, :null => false
+ t.string "journalized_type", :limit => 30, :default => "", :null => false
+ t.integer "user_id", :default => 0, :null => false
+ t.text "notes"
+ t.datetime "created_on", :null => false
+ t.boolean "private_notes", :default => false, :null => false
+ end
+
+ add_index "journals", ["created_on"], :name => "index_journals_on_created_on"
+ add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id"
+ add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id"
+ add_index "journals", ["user_id"], :name => "index_journals_on_user_id"
+
+ create_table "journals_for_messages", :force => true do |t|
+ t.integer "jour_id"
+ t.string "jour_type"
+ t.integer "user_id"
+ t.text "notes"
+ t.integer "status"
+ t.integer "reply_id"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.string "m_parent_id"
+ t.boolean "is_readed"
+ t.integer "m_reply_count"
+ t.integer "m_reply_id"
+ t.integer "is_comprehensive_evaluation"
+ end
+
+ create_table "kindeditor_assets", :force => true do |t|
+ t.string "asset"
+ t.integer "file_size"
+ t.string "file_type"
+ t.integer "owner_id"
+ t.string "asset_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "owner_type", :default => 0
+ end
+
+ create_table "member_roles", :force => true do |t|
+ t.integer "member_id", :null => false
+ t.integer "role_id", :null => false
+ t.integer "inherited_from"
+ end
+
+ add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id"
+ add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id"
+
+ create_table "members", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.integer "project_id", :default => 0
+ t.datetime "created_on"
+ t.boolean "mail_notification", :default => false, :null => false
+ t.integer "course_id", :default => -1
+ t.integer "course_group_id", :default => 0
+ end
+
+ add_index "members", ["project_id"], :name => "index_members_on_project_id"
+ add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true
+ add_index "members", ["user_id"], :name => "index_members_on_user_id"
+
+ create_table "memo_messages", :force => true do |t|
+ t.integer "user_id"
+ t.integer "forum_id"
+ t.integer "memo_id"
+ t.string "memo_type"
+ t.integer "viewed"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "memos", :force => true do |t|
+ t.integer "forum_id", :null => false
+ t.integer "parent_id"
+ t.string "subject", :null => false
+ t.text "content", :null => false
+ t.integer "author_id", :null => false
+ t.integer "replies_count", :default => 0
+ t.integer "last_reply_id"
+ t.boolean "lock", :default => false
+ t.boolean "sticky", :default => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "viewed_count", :default => 0
+ end
+
+ create_table "message_alls", :force => true do |t|
+ t.integer "user_id"
+ t.integer "message_id"
+ t.string "message_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "messages", :force => true do |t|
+ t.integer "board_id", :null => false
+ t.integer "parent_id"
+ t.string "subject", :default => "", :null => false
+ t.text "content"
+ t.integer "author_id"
+ t.integer "replies_count", :default => 0, :null => false
+ t.integer "last_reply_id"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.boolean "locked", :default => false
+ t.integer "sticky", :default => 0
+ end
+
+ add_index "messages", ["author_id"], :name => "index_messages_on_author_id"
+ add_index "messages", ["board_id"], :name => "messages_board_id"
+ add_index "messages", ["created_on"], :name => "index_messages_on_created_on"
+ add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
+ add_index "messages", ["parent_id"], :name => "messages_parent_id"
+
+ create_table "news", :force => true do |t|
+ t.integer "project_id"
+ t.string "title", :limit => 60, :default => "", :null => false
+ t.string "summary", :default => ""
+ t.text "description"
+ t.integer "author_id", :default => 0, :null => false
+ t.datetime "created_on"
+ t.integer "comments_count", :default => 0, :null => false
+ t.integer "course_id"
+ t.datetime "updated_on"
+ end
+
+ add_index "news", ["author_id"], :name => "index_news_on_author_id"
+ add_index "news", ["created_on"], :name => "index_news_on_created_on"
+ add_index "news", ["project_id"], :name => "news_project_id"
+
+ create_table "no_uses", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.string "no_use_type"
+ t.integer "no_use_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "notificationcomments", :force => true do |t|
+ t.string "notificationcommented_type"
+ t.integer "notificationcommented_id"
+ t.integer "author_id"
+ t.text "notificationcomments"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "onclick_times", :force => true do |t|
+ t.integer "user_id"
+ t.datetime "onclick_time"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "open_id_authentication_associations", :force => true do |t|
+ t.integer "issued"
+ t.integer "lifetime"
+ t.string "handle"
+ t.string "assoc_type"
+ t.binary "server_url"
+ t.binary "secret"
+ end
+
+ create_table "open_id_authentication_nonces", :force => true do |t|
+ t.integer "timestamp", :null => false
+ t.string "server_url"
+ t.string "salt", :null => false
+ end
+
+ create_table "open_source_projects", :force => true do |t|
+ t.string "name"
+ t.text "description"
+ t.integer "commit_count", :default => 0
+ t.integer "code_line", :default => 0
+ t.integer "users_count", :default => 0
+ t.date "last_commit_time"
+ t.string "url"
+ t.date "date_collected"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "option_numbers", :force => true do |t|
+ t.integer "user_id"
+ t.integer "memo"
+ t.integer "messages_for_issues"
+ t.integer "issues_status"
+ t.integer "replay_for_message"
+ t.integer "replay_for_memo"
+ t.integer "follow"
+ t.integer "tread"
+ t.integer "praise_by_one"
+ t.integer "praise_by_two"
+ t.integer "praise_by_three"
+ t.integer "tread_by_one"
+ t.integer "tread_by_two"
+ t.integer "tread_by_three"
+ t.integer "changeset"
+ t.integer "document"
+ t.integer "attachment"
+ t.integer "issue_done_ratio"
+ t.integer "post_issue"
+ t.integer "score_type"
+ t.integer "total_score"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "project_id"
+ end
+
+ create_table "organizations", :force => true do |t|
+ t.string "name"
+ t.string "logo_link"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "phone_app_versions", :force => true do |t|
+ t.string "version"
+ t.text "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "poll_answers", :force => true do |t|
+ t.integer "poll_question_id"
+ t.text "answer_text"
+ t.integer "answer_position"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "poll_questions", :force => true do |t|
+ t.string "question_title"
+ t.integer "question_type"
+ t.integer "is_necessary"
+ t.integer "poll_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "question_number"
+ end
+
+ create_table "poll_users", :force => true do |t|
+ t.integer "user_id"
+ t.integer "poll_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "poll_votes", :force => true do |t|
+ t.integer "user_id"
+ t.integer "poll_question_id"
+ t.integer "poll_answer_id"
+ t.text "vote_text"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "polls", :force => true do |t|
+ t.string "polls_name"
+ t.string "polls_type"
+ t.integer "polls_group_id"
+ t.integer "polls_status"
+ t.integer "user_id"
+ t.datetime "published_at"
+ t.datetime "closed_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.text "polls_description"
+ t.integer "show_result", :default => 1
+ end
+
+ create_table "praise_tread_caches", :force => true do |t|
+ t.integer "object_id", :null => false
+ t.string "object_type"
+ t.integer "praise_num"
+ t.integer "tread_num"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "praise_treads", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.integer "praise_tread_object_id"
+ t.string "praise_tread_object_type"
+ t.integer "praise_or_tread"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "project_infos", :force => true do |t|
+ t.integer "project_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "project_scores", :force => true do |t|
+ t.string "project_id"
+ t.integer "score"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "issue_num", :default => 0
+ t.integer "issue_journal_num", :default => 0
+ t.integer "news_num", :default => 0
+ t.integer "documents_num", :default => 0
+ t.integer "changeset_num", :default => 0
+ t.integer "board_message_num", :default => 0
+ end
+
+ create_table "project_statuses", :force => true do |t|
+ t.integer "changesets_count"
+ t.integer "watchers_count"
+ t.integer "project_id"
+ t.integer "project_type"
+ t.float "grade", :default => 0.0
+ t.integer "course_ac_para", :default => 0
+ end
+
+ add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade"
+
+ create_table "projecting_softapplictions", :force => true do |t|
+ t.integer "user_id"
+ t.integer "softapplication_id"
+ t.integer "project_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "projects", :force => true do |t|
+ t.string "name", :default => "", :null => false
+ t.text "description"
+ t.string "homepage", :default => ""
+ t.boolean "is_public", :default => true, :null => false
+ t.integer "parent_id"
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.string "identifier"
+ t.integer "status", :default => 1, :null => false
+ t.integer "lft"
+ t.integer "rgt"
+ t.boolean "inherit_members", :default => false, :null => false
+ t.integer "project_type"
+ t.boolean "hidden_repo", :default => false, :null => false
+ t.integer "attachmenttype", :default => 1
+ t.integer "user_id"
+ t.integer "dts_test", :default => 0
+ t.string "enterprise_name"
+ t.integer "organization_id"
+ t.integer "project_new_type"
+ end
+
+ add_index "projects", ["lft"], :name => "index_projects_on_lft"
+ add_index "projects", ["rgt"], :name => "index_projects_on_rgt"
+
+ create_table "projects_trackers", :id => false, :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.integer "tracker_id", :default => 0, :null => false
+ end
+
+ add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true
+ add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id"
+
+ create_table "queries", :force => true do |t|
+ t.integer "project_id"
+ t.string "name", :default => "", :null => false
+ t.text "filters"
+ t.integer "user_id", :default => 0, :null => false
+ t.boolean "is_public", :default => false, :null => false
+ t.text "column_names"
+ t.text "sort_criteria"
+ t.string "group_by"
+ t.string "type"
+ end
+
+ add_index "queries", ["project_id"], :name => "index_queries_on_project_id"
+ add_index "queries", ["user_id"], :name => "index_queries_on_user_id"
+
+ create_table "relative_memo_to_open_source_projects", :force => true do |t|
+ t.integer "osp_id"
+ t.integer "relative_memo_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "relative_memos", :force => true do |t|
+ t.integer "osp_id"
+ t.integer "parent_id"
+ t.string "subject", :null => false
+ t.text "content", :limit => 16777215, :null => false
+ t.integer "author_id"
+ t.integer "replies_count", :default => 0
+ t.integer "last_reply_id"
+ t.boolean "lock", :default => false
+ t.boolean "sticky", :default => false
+ t.boolean "is_quote", :default => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "viewed_count_crawl", :default => 0
+ t.integer "viewed_count_local", :default => 0
+ t.string "url"
+ t.string "username"
+ t.string "userhomeurl"
+ t.date "date_collected"
+ t.string "topic_resource"
+ end
+
+ create_table "repositories", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.string "url", :default => "", :null => false
+ t.string "login", :limit => 60, :default => ""
+ t.string "password", :default => ""
+ t.string "root_url", :default => ""
+ t.string "type"
+ t.string "path_encoding", :limit => 64
+ t.string "log_encoding", :limit => 64
+ t.text "extra_info"
+ t.string "identifier"
+ t.boolean "is_default", :default => false
+ t.boolean "hidden", :default => false
+ end
+
+ add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id"
+
+ create_table "rich_rich_files", :force => true do |t|
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "rich_file_file_name"
+ t.string "rich_file_content_type"
+ t.integer "rich_file_file_size"
+ t.datetime "rich_file_updated_at"
+ t.string "owner_type"
+ t.integer "owner_id"
+ t.text "uri_cache"
+ t.string "simplified_type", :default => "file"
+ end
+
+ create_table "roles", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.integer "position", :default => 1
+ t.boolean "assignable", :default => true
+ t.integer "builtin", :default => 0, :null => false
+ t.text "permissions"
+ t.string "issues_visibility", :limit => 30, :default => "default", :null => false
+ end
+
+ create_table "schools", :force => true do |t|
+ t.string "name"
+ t.string "province"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "logo_link"
+ end
+
+ create_table "seems_rateable_cached_ratings", :force => true do |t|
+ t.integer "cacheable_id", :limit => 8
+ t.string "cacheable_type"
+ t.float "avg", :null => false
+ t.integer "cnt", :null => false
+ t.string "dimension"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "seems_rateable_rates", :force => true do |t|
+ t.integer "rater_id", :limit => 8
+ t.integer "rateable_id"
+ t.string "rateable_type"
+ t.float "stars", :null => false
+ t.string "dimension"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "is_teacher_score", :default => 0
+ end
+
+ create_table "settings", :force => true do |t|
+ t.string "name", :default => "", :null => false
+ t.text "value"
+ t.datetime "updated_on"
+ end
+
+ add_index "settings", ["name"], :name => "index_settings_on_name"
+
+ create_table "shares", :force => true do |t|
+ t.date "created_on"
+ t.string "url"
+ t.string "title"
+ t.integer "share_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "project_id"
+ t.integer "user_id"
+ t.string "description"
+ end
+
+ create_table "softapplications", :force => true do |t|
+ t.string "name"
+ t.text "description"
+ t.integer "app_type_id"
+ t.string "app_type_name"
+ t.string "android_min_version_available"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "contest_id"
+ t.integer "softapplication_id"
+ t.integer "is_public"
+ t.string "application_developers"
+ t.string "deposit_project_url"
+ t.string "deposit_project"
+ t.integer "project_id"
+ end
+
+ create_table "student_work_tests", :force => true do |t|
+ t.integer "student_work_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "status", :default => 9
+ t.text "results"
+ t.text "src"
+ end
+
+ create_table "student_works", :force => true do |t|
+ t.string "name"
+ t.text "description", :limit => 2147483647
+ t.integer "homework_common_id"
+ t.integer "user_id"
+ t.float "final_score"
+ t.float "teacher_score"
+ t.float "student_score"
+ t.float "teaching_asistant_score"
+ t.integer "project_id", :default => 0
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "late_penalty", :default => 0
+ t.integer "absence_penalty", :default => 0
+ t.integer "system_score"
+ t.boolean "is_test", :default => false
+ end
+
+ create_table "student_works_evaluation_distributions", :force => true do |t|
+ t.integer "student_work_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "student_works_scores", :force => true do |t|
+ t.integer "student_work_id"
+ t.integer "user_id"
+ t.integer "score"
+ t.text "comment"
+ t.integer "reviewer_role"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "students_for_courses", :force => true do |t|
+ t.integer "student_id"
+ t.integer "course_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id"
+ add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id"
+
+ create_table "system_messages", :force => true do |t|
+ t.integer "user_id"
+ t.string "content"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "taggings", :force => true do |t|
+ t.integer "tag_id"
+ t.integer "taggable_id"
+ t.string "taggable_type"
+ t.integer "tagger_id"
+ t.string "tagger_type"
+ t.string "context", :limit => 128
+ t.datetime "created_at"
+ end
+
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
+ add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
+ add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type"
+
+ create_table "tags", :force => true do |t|
+ t.string "name"
+ end
+
+ create_table "teachers", :force => true do |t|
+ t.string "tea_name"
+ t.string "location"
+ t.integer "couurse_time"
+ t.integer "course_code"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "extra"
+ end
+
+ create_table "time_entries", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.integer "user_id", :null => false
+ t.integer "issue_id"
+ t.float "hours", :null => false
+ t.string "comments"
+ t.integer "activity_id", :null => false
+ t.date "spent_on", :null => false
+ t.integer "tyear", :null => false
+ t.integer "tmonth", :null => false
+ t.integer "tweek", :null => false
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ end
+
+ add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id"
+ add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on"
+ add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id"
+ add_index "time_entries", ["project_id"], :name => "time_entries_project_id"
+ add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id"
+
+ create_table "tokens", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.string "action", :limit => 30, :default => "", :null => false
+ t.string "value", :limit => 40, :default => "", :null => false
+ t.datetime "created_on", :null => false
+ end
+
+ add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id"
+ add_index "tokens", ["value"], :name => "tokens_value", :unique => true
+
+ create_table "trackers", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.boolean "is_in_chlog", :default => false, :null => false
+ t.integer "position", :default => 1
+ t.boolean "is_in_roadmap", :default => true, :null => false
+ t.integer "fields_bits", :default => 0
+ end
+
+ create_table "user_activities", :force => true do |t|
+ t.string "act_type"
+ t.integer "act_id"
+ t.string "container_type"
+ t.integer "container_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "user_id"
+ end
+
+ create_table "user_extensions", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.date "birthday"
+ t.string "brief_introduction"
+ t.integer "gender"
+ t.string "location"
+ t.string "occupation"
+ t.integer "work_experience"
+ t.integer "zip_code"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "technical_title"
+ t.integer "identity"
+ t.string "student_id"
+ t.string "teacher_realname"
+ t.string "student_realname"
+ t.string "location_city"
+ t.integer "school_id"
+ t.string "description", :default => ""
+ end
+
+ create_table "user_feedback_messages", :force => true do |t|
+ t.integer "user_id"
+ t.integer "journals_for_message_id"
+ t.string "journals_for_message_type"
+ t.integer "viewed"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "user_grades", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.integer "project_id", :null => false
+ t.float "grade", :default => 0.0
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade"
+ add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id"
+ add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id"
+
+ create_table "user_levels", :force => true do |t|
+ t.integer "user_id"
+ t.integer "level"
+ end
+
+ create_table "user_preferences", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.text "others"
+ t.boolean "hide_mail", :default => false
+ t.string "time_zone"
+ end
+
+ add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id"
+
+ create_table "user_score_details", :force => true do |t|
+ t.integer "current_user_id"
+ t.integer "target_user_id"
+ t.string "score_type"
+ t.string "score_action"
+ t.integer "user_id"
+ t.integer "old_score"
+ t.integer "new_score"
+ t.integer "current_user_level"
+ t.integer "target_user_level"
+ t.integer "score_changeable_obj_id"
+ t.string "score_changeable_obj_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "user_scores", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.integer "collaboration"
+ t.integer "influence"
+ t.integer "skill"
+ t.integer "active"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "user_statuses", :force => true do |t|
+ t.integer "changesets_count"
+ t.integer "watchers_count"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.float "grade", :default => 0.0
+ end
+
+ add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count"
+ add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade"
+ add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count"
+
+ create_table "users", :force => true do |t|
+ t.string "login", :default => "", :null => false
+ t.string "hashed_password", :limit => 40, :default => "", :null => false
+ t.string "firstname", :limit => 30, :default => "", :null => false
+ t.string "lastname", :default => "", :null => false
+ t.string "mail", :limit => 60, :default => "", :null => false
+ t.boolean "admin", :default => false, :null => false
+ t.integer "status", :default => 1, :null => false
+ t.datetime "last_login_on"
+ t.string "language", :limit => 5, :default => ""
+ t.integer "auth_source_id"
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.string "type"
+ t.string "identity_url"
+ t.string "mail_notification", :default => "", :null => false
+ t.string "salt", :limit => 64
+ end
+
+ add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id"
+ add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
+ add_index "users", ["type"], :name => "index_users_on_type"
+
+ create_table "versions", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.string "name", :default => "", :null => false
+ t.string "description", :default => ""
+ t.date "effective_date"
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.string "wiki_page_title"
+ t.string "status", :default => "open"
+ t.string "sharing", :default => "none", :null => false
+ end
+
+ add_index "versions", ["project_id"], :name => "versions_project_id"
+ add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
+
+ create_table "visitors", :force => true do |t|
+ t.integer "user_id"
+ t.integer "master_id"
+ t.datetime "updated_on"
+ t.datetime "created_on"
+ end
+
+ add_index "visitors", ["master_id"], :name => "index_visitors_master_id"
+ add_index "visitors", ["updated_on"], :name => "index_visitors_updated_on"
+ add_index "visitors", ["user_id"], :name => "index_visitors_user_id"
+
+ create_table "watchers", :force => true do |t|
+ t.string "watchable_type", :default => "", :null => false
+ t.integer "watchable_id", :default => 0, :null => false
+ t.integer "user_id"
+ end
+
+ add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type"
+ add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id"
+ add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type"
+
+ create_table "web_footer_companies", :force => true do |t|
+ t.string "name"
+ t.string "logo_size"
+ t.string "url"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "web_footer_oranizers", :force => true do |t|
+ t.string "name"
+ t.text "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "wiki_content_versions", :force => true do |t|
+ t.integer "wiki_content_id", :null => false
+ t.integer "page_id", :null => false
+ t.integer "author_id"
+ t.binary "data", :limit => 2147483647
+ t.string "compression", :limit => 6, :default => ""
+ t.string "comments", :default => ""
+ t.datetime "updated_on", :null => false
+ t.integer "version", :null => false
+ end
+
+ add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on"
+ add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid"
+
+ create_table "wiki_contents", :force => true do |t|
+ t.integer "page_id", :null => false
+ t.integer "author_id"
+ t.text "text", :limit => 2147483647
+ t.string "comments", :default => ""
+ t.datetime "updated_on", :null => false
+ t.integer "version", :null => false
+ end
+
+ add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id"
+ add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id"
+
+ create_table "wiki_pages", :force => true do |t|
+ t.integer "wiki_id", :null => false
+ t.string "title", :null => false
+ t.datetime "created_on", :null => false
+ t.boolean "protected", :default => false, :null => false
+ t.integer "parent_id"
+ end
+
+ add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id"
+ add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title"
+ add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id"
+
+ create_table "wiki_redirects", :force => true do |t|
+ t.integer "wiki_id", :null => false
+ t.string "title"
+ t.string "redirects_to"
+ t.datetime "created_on", :null => false
+ end
+
+ add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title"
+ add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id"
+
+ create_table "wikis", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.string "start_page", :null => false
+ t.integer "status", :default => 1, :null => false
+ end
+
+ add_index "wikis", ["project_id"], :name => "wikis_project_id"
+
+ create_table "workflows", :force => true do |t|
+ t.integer "tracker_id", :default => 0, :null => false
+ t.integer "old_status_id", :default => 0, :null => false
+ t.integer "new_status_id", :default => 0, :null => false
+ t.integer "role_id", :default => 0, :null => false
+ t.boolean "assignee", :default => false, :null => false
+ t.boolean "author", :default => false, :null => false
+ t.string "type", :limit => 30
+ t.string "field_name", :limit => 30
+ t.string "rule", :limit => 30
+ end
+
+ add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id"
+ add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id"
+ add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status"
+ add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id"
+
+ create_table "works_categories", :force => true do |t|
+ t.string "category"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "zip_packs", :force => true do |t|
+ t.integer "user_id"
+ t.integer "homework_id"
+ t.string "file_digest"
+ t.string "file_path"
+ t.integer "pack_times", :default => 1
+ t.integer "pack_size", :default => 0
+ t.text "file_digests"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+end
diff --git a/lib/redmine.rb b/lib/redmine.rb
index 99b7ea22f..8ebdacfa6 100644
--- a/lib/redmine.rb
+++ b/lib/redmine.rb
@@ -369,6 +369,7 @@ Redmine::MenuManager.map :admin_menu do |menu|
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 :messages, {:controller => 'admin', :action => 'messages'}, :caption => :label_system_message
menu.push :schools, {:controller => 'admin', :action => 'schools'}, :caption => :label_school_plural
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
diff --git a/lib/tasks/homework_endtime.rake b/lib/tasks/homework_endtime.rake
new file mode 100644
index 000000000..9fef281a3
--- /dev/null
+++ b/lib/tasks/homework_endtime.rake
@@ -0,0 +1,18 @@
+#coding=utf-8
+
+namespace :homework_endtime do
+ desc "send a message for Job deadline"
+ task :message => :environment do
+ current_day = Date.today.day
+ homework_commons = HomeworkCommon.where("end_time >=?",Date.today)
+ homework_commons.each do |homework_common|
+ if CourseMessage.where("course_message_type =? and course_message_id =? and status =?", "HomeworkCommon", homework_common.id, 1).first.nil?
+ if homework_common.end_time.day - Date.today.day < 2 && homework_common.end_time.year == Date.today.year
+ homework_common.course.student.each do |s|
+ homework_common.course_messages << CourseMessage.new(:user_id => s.student_id, :course_id => homework_common.course_id, :viewed => false, :status => true)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/public/images/avatars/AnonymousUser/0 b/public/images/avatars/AnonymousUser/0
deleted file mode 100644
index a4cc45467..000000000
Binary files a/public/images/avatars/AnonymousUser/0 and /dev/null differ
diff --git a/public/images/avatars/Course/0 b/public/images/avatars/Course/0
deleted file mode 100644
index 8eb3d27d5..000000000
Binary files a/public/images/avatars/Course/0 and /dev/null differ
diff --git a/public/images/avatars/Course/6314 b/public/images/avatars/Course/6314
deleted file mode 100644
index b58caabfa..000000000
Binary files a/public/images/avatars/Course/6314 and /dev/null differ
diff --git a/public/images/avatars/Course/6315 b/public/images/avatars/Course/6315
deleted file mode 100644
index cce3b9ccf..000000000
Binary files a/public/images/avatars/Course/6315 and /dev/null differ
diff --git a/public/images/avatars/Course/6316 b/public/images/avatars/Course/6316
deleted file mode 100644
index fa4fd4110..000000000
Binary files a/public/images/avatars/Course/6316 and /dev/null differ
diff --git a/public/images/avatars/Course/6322 b/public/images/avatars/Course/6322
deleted file mode 100644
index 1f0332907..000000000
Binary files a/public/images/avatars/Course/6322 and /dev/null differ
diff --git a/public/images/avatars/Course/6330 b/public/images/avatars/Course/6330
deleted file mode 100644
index 030ab8a68..000000000
Binary files a/public/images/avatars/Course/6330 and /dev/null differ
diff --git a/public/images/avatars/Course/6356 b/public/images/avatars/Course/6356
deleted file mode 100644
index 757c2a628..000000000
Binary files a/public/images/avatars/Course/6356 and /dev/null differ
diff --git a/public/images/avatars/Course/6358 b/public/images/avatars/Course/6358
deleted file mode 100644
index 030ab8a68..000000000
Binary files a/public/images/avatars/Course/6358 and /dev/null differ
diff --git a/public/images/avatars/Course/6408 b/public/images/avatars/Course/6408
deleted file mode 100644
index bf740e537..000000000
Binary files a/public/images/avatars/Course/6408 and /dev/null differ
diff --git a/public/images/avatars/Course/6446 b/public/images/avatars/Course/6446
deleted file mode 100644
index 90e0e8474..000000000
Binary files a/public/images/avatars/Course/6446 and /dev/null differ
diff --git a/public/images/avatars/Course/course.jpg b/public/images/avatars/Course/course.jpg
deleted file mode 100644
index 8eb3d27d5..000000000
Binary files a/public/images/avatars/Course/course.jpg and /dev/null differ
diff --git a/public/images/avatars/Organization/0 b/public/images/avatars/Organization/0
deleted file mode 100644
index 2ae1d7494..000000000
Binary files a/public/images/avatars/Organization/0 and /dev/null differ
diff --git a/public/images/avatars/Project/0 b/public/images/avatars/Project/0
deleted file mode 100644
index 19a3ac4c6..000000000
Binary files a/public/images/avatars/Project/0 and /dev/null differ
diff --git a/public/images/avatars/Project/6314 b/public/images/avatars/Project/6314
deleted file mode 100644
index b58caabfa..000000000
Binary files a/public/images/avatars/Project/6314 and /dev/null differ
diff --git a/public/images/avatars/Project/6315 b/public/images/avatars/Project/6315
deleted file mode 100644
index cce3b9ccf..000000000
Binary files a/public/images/avatars/Project/6315 and /dev/null differ
diff --git a/public/images/avatars/Project/6316 b/public/images/avatars/Project/6316
deleted file mode 100644
index fa4fd4110..000000000
Binary files a/public/images/avatars/Project/6316 and /dev/null differ
diff --git a/public/images/avatars/Project/6322 b/public/images/avatars/Project/6322
deleted file mode 100644
index 1f0332907..000000000
Binary files a/public/images/avatars/Project/6322 and /dev/null differ
diff --git a/public/images/avatars/Project/6330 b/public/images/avatars/Project/6330
deleted file mode 100644
index 030ab8a68..000000000
Binary files a/public/images/avatars/Project/6330 and /dev/null differ
diff --git a/public/images/avatars/Project/6356 b/public/images/avatars/Project/6356
deleted file mode 100644
index 757c2a628..000000000
Binary files a/public/images/avatars/Project/6356 and /dev/null differ
diff --git a/public/images/avatars/Project/6358 b/public/images/avatars/Project/6358
deleted file mode 100644
index 030ab8a68..000000000
Binary files a/public/images/avatars/Project/6358 and /dev/null differ
diff --git a/public/images/avatars/Project/6408 b/public/images/avatars/Project/6408
deleted file mode 100644
index bf740e537..000000000
Binary files a/public/images/avatars/Project/6408 and /dev/null differ
diff --git a/public/images/avatars/Project/6446 b/public/images/avatars/Project/6446
deleted file mode 100644
index 90e0e8474..000000000
Binary files a/public/images/avatars/Project/6446 and /dev/null differ
diff --git a/public/images/avatars/Project/course.jpg b/public/images/avatars/Project/course.jpg
deleted file mode 100644
index 81b0e925c..000000000
Binary files a/public/images/avatars/Project/course.jpg and /dev/null differ
diff --git a/public/images/avatars/User/0 b/public/images/avatars/User/0
deleted file mode 100644
index bd2597dd2..000000000
Binary files a/public/images/avatars/User/0 and /dev/null differ
diff --git a/public/images/avatars/User/1 b/public/images/avatars/User/1
deleted file mode 100644
index 090de2290..000000000
Binary files a/public/images/avatars/User/1 and /dev/null differ
diff --git a/public/images/avatars/User/4245 b/public/images/avatars/User/4245
deleted file mode 100644
index 8057fac14..000000000
Binary files a/public/images/avatars/User/4245 and /dev/null differ
diff --git a/public/images/avatars/User/4246 b/public/images/avatars/User/4246
deleted file mode 100644
index 757c2a628..000000000
Binary files a/public/images/avatars/User/4246 and /dev/null differ
diff --git a/public/images/avatars/User/4247 b/public/images/avatars/User/4247
deleted file mode 100644
index 3df1c4e68..000000000
Binary files a/public/images/avatars/User/4247 and /dev/null differ
diff --git a/public/images/avatars/User/4249 b/public/images/avatars/User/4249
deleted file mode 100644
index 93600eb8f..000000000
Binary files a/public/images/avatars/User/4249 and /dev/null differ
diff --git a/public/images/avatars/User/4275 b/public/images/avatars/User/4275
deleted file mode 100644
index 2659a14b7..000000000
Binary files a/public/images/avatars/User/4275 and /dev/null differ
diff --git a/public/images/avatars/User/4288 b/public/images/avatars/User/4288
deleted file mode 100644
index ca17e5328..000000000
Binary files a/public/images/avatars/User/4288 and /dev/null differ
diff --git a/public/images/avatars/User/4856 b/public/images/avatars/User/4856
deleted file mode 100644
index 96d1098fd..000000000
Binary files a/public/images/avatars/User/4856 and /dev/null differ
diff --git a/public/images/avatars/User/4858 b/public/images/avatars/User/4858
deleted file mode 100644
index 8df8790ba..000000000
Binary files a/public/images/avatars/User/4858 and /dev/null differ
diff --git a/public/images/avatars/User/4859 b/public/images/avatars/User/4859
deleted file mode 100644
index 78704a099..000000000
Binary files a/public/images/avatars/User/4859 and /dev/null differ
diff --git a/public/images/avatars/User/4861 b/public/images/avatars/User/4861
deleted file mode 100644
index a587c9656..000000000
Binary files a/public/images/avatars/User/4861 and /dev/null differ
diff --git a/public/images/avatars/User/4863 b/public/images/avatars/User/4863
deleted file mode 100644
index 26e7db3e7..000000000
Binary files a/public/images/avatars/User/4863 and /dev/null differ
diff --git a/public/images/avatars/User/4869 b/public/images/avatars/User/4869
deleted file mode 100644
index 030ab8a68..000000000
Binary files a/public/images/avatars/User/4869 and /dev/null differ
diff --git a/public/images/avatars/User/4874 b/public/images/avatars/User/4874
deleted file mode 100644
index 90e0e8474..000000000
Binary files a/public/images/avatars/User/4874 and /dev/null differ
diff --git a/public/images/avatars/User/4896 b/public/images/avatars/User/4896
deleted file mode 100644
index 757c2a628..000000000
Binary files a/public/images/avatars/User/4896 and /dev/null differ
diff --git a/public/images/homepage_icon.png b/public/images/homepage_icon.png
index 127f12e92..46f96a36f 100644
Binary files a/public/images/homepage_icon.png and b/public/images/homepage_icon.png differ
diff --git a/public/javascripts/course.js b/public/javascripts/course.js
index be29fdc30..4f091560d 100644
--- a/public/javascripts/course.js
+++ b/public/javascripts/course.js
@@ -260,8 +260,23 @@ function submitFocus(obj)
function submitComment()
{
- comment_editor.sync();
- $("#add_comment_form").submit();
+ if (newsReplyVerify()) {
+ comment_editor.sync();
+ $("#add_comment_form").submit();
+ }
+}
+
+function newsReplyVerify() {
+ var content = comment_editor.html();
+ if(content.length == 0) {
+ $("#add_reply_news").text("评论不能为空");
+ $("#add_reply_news").css('color', '#ff0000');
+ return false;
+ } else {
+ $("#add_reply_news").text("填写正确");
+ $("#add_reply_news").css('color', '#008000');
+ return true;
+ }
}
/////////////////////////////////////////////////课程讨论区
@@ -412,10 +427,10 @@ function regex_homework_name()
}
}
-//处理迟交扣分
-function check_late_penalty()
+//处理迟交、缺评扣分
+function check_late_penalty(id)
{
- var obj = $("input[name='late_penalty']");
+ var obj = $("#" + id);
var regex = /^\d+$/;
if(regex.test(obj.val()))
{
@@ -467,44 +482,59 @@ function regex_evaluation_num()
//点击是否开启匿评单选框效果
$(function(){
- $("#homework_common_homework_type").click(function(){
- if($("#homework_common_homework_type").attr("checked") == "checked")
- {
- $("#evaluation_setting").slideDown();
- $("#ta_proportion").removeAttr("disabled");
- }
- else
- {
- $("#evaluation_setting").slideUp();
- $("#ta_proportion").attr("disabled","disabled");
- }
- });
+ //$("#homework_common_homework_type").click(function(){
+ // if($("#homework_common_homework_type").attr("checked") == "checked")
+ // {
+ // $("#evaluation_setting").slideDown();
+ // $("#ta_proportion").removeAttr("disabled");
+ // }
+ // else
+ // {
+ // $("#evaluation_setting").slideUp();
+ // $("#ta_proportion").attr("disabled","disabled");
+ // }
+ //});
$("#absence_penalty").change(function(){
$("#absence_penalty_notice").html(" "+ $("#absence_penalty").val() +" ");
});
- $("#ta_proportion").change(function(){
- var ta_proportion = $("#ta_proportion").val();
- $("#student_proportion").val((100 - parseInt(ta_proportion * 100)) + "%");
- });
+ //$("#ta_proportion").change(function(){
+ // var ta_proportion = $("#ta_proportion").val();
+ // $("#student_proportion").val((100 - parseInt(ta_proportion * 100)) + "%");
+ //});
});
-//第一次加载时,如果未开启匿评作业,隐藏显示匿评配置信息
-$(function(){
- if($("#homework_common_homework_type").attr("id") != null && $("#homework_common_homework_type").val() != 2)
- {
- if($("#homework_common_homework_type").attr("checked") == "checked")
- {
- $("#evaluation_setting").show();
- $("#ta_proportion").removeAttr("disabled");
- }
- else
- {
- $("#evaluation_setting").hide();
- $("#ta_proportion").attr("disabled","disabled");
+
+//生成select
+function build_selector(max_num){
+ var html = "";
+ for(var i = 0; i <= max_num; i += 10){
+ if( i == max_num){
+ html += "" + i + "% ";
+ }else{
+ html += "" + i + "% ";
}
}
-});
+ html += " ";
+ return html;
+}
+
+//第一次加载时,如果未开启匿评作业,隐藏显示匿评配置信息
+//$(function(){
+// if($("#homework_common_homework_type").attr("id") != null && $("#homework_common_homework_type").val() != 2)
+// {
+// if($("#homework_common_homework_type").attr("checked") == "checked")
+// {
+// $("#evaluation_setting").show();
+// $("#ta_proportion").removeAttr("disabled");
+// }
+// else
+// {
+// $("#evaluation_setting").hide();
+// $("#ta_proportion").attr("disabled","disabled");
+// }
+// }
+//});
//老师提交 新建/修改 作业
function submit_homework(id)
@@ -866,41 +896,29 @@ function goTopEx() {
$(function(){
//匿评评分提示
- $(".student_score_info").bind("mouseover",function(e){
- //alert($(this).html());
+ $(".student_score_info").live("mouseover",function(){
$(this).find("div").show();
- //$(this).find("div").css("top",e.pageY);
- //$(this).find("div").css("left",e.pageX);
});
- $(".student_score_info").bind("mouseout",function(e){
- //alert($(this).html());
+ $(".student_score_info").live("mouseout",function(){
$(this).find("div").hide();
});
//最终成绩提示
- $(".student_final_scor_info").bind("mouseover",function(e){
- //alert($(this).html());
+ $(".student_final_scor_info").live("mouseover",function(){
$(this).find("div").show();
- //$(this).find("div").css("top",e.pageY);
- //$(this).find("div").css("left",e.pageX);
});
- $(".student_final_scor_info").bind("mouseout",function(e){
- //alert($(this).html());
+ $(".student_final_scor_info").live("mouseout",function(){
$(this).find("div").hide();
});
$("#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();
- });
+ ////附件下载提示
+ //$(".zip_download_alert").bind("mouseover",function(){
+ // $(this).next("div").show();
+ //});
+ //$(".zip_download_alert").bind("mouseout",function(){
+ // $(this).next("div").hide();
+ //});
});
//匿评弹框取消按钮
@@ -934,3 +952,8 @@ function SearchByName_1(url)
location.href = url + "&name=" + $("#course_student_name").val() + "&group=" + $("#late_penalty").val();
}
}
+
+//新建作业临时弹框
+function new_homework_alert(){
+ alert("您好!课程内直接发布作业的功能正在改进中,请直接点击\n顶部导航栏的“作业”向本课程发送作业。谢谢!如有问\n题,可参见帮助中心。");
+}
diff --git a/public/javascripts/homework.js b/public/javascripts/homework.js
index bfa0558eb..3589a0728 100644
--- a/public/javascripts/homework.js
+++ b/public/javascripts/homework.js
@@ -95,9 +95,9 @@ $(function(){
//发布作业
- $('#program-src').focus(function(){
- $(this).css('height', '100px');
- });
+ //$('#program-src').focus(function(){
+ // $(this).css('height', '100px');
+ //});
var datepickerOptions={dateFormat:'yy-mm-dd',firstDay:0,showWeek:true,showOtherMonths:true,selectOtherMonths:true};
@@ -115,7 +115,7 @@ $(function(){
minWidth: 753
});
- $('a.ProBtn').on('click', function(){
+ $('a.ProBtn').live('click', function(){
$("#BluePopupBox").dialog("open");
$(".ui-dialog-titlebar").hide();
$("a.CloseBtn").on('click', function(){
@@ -124,7 +124,6 @@ $(function(){
$('#textarea_input_test').focus();
});
-
var saveProgramAnswers = function() {
var test_numbers = 0;
var valid = true;
@@ -164,7 +163,7 @@ $(function(){
return valid;
}
- $("#BluePopupBox a.BlueCirBtn").on('click', function(){
+ $("#BluePopupBox a.BlueCirBtn").live('click', function(){
if(saveProgramAnswers()){
if($( "#BluePopupBox" ).dialog( "isOpen" )){
$("#BluePopupBox").dialog( "close" );
@@ -175,9 +174,16 @@ $(function(){
$("#BluePopupBox").on('click', 'a.icon_add', function(){
var html = bt('t:test-answer-list', null);
$(this).parent('.mt10').after(html);
-
+ var inputs = document.getElementsByName("program[input][]");
+ var outputs = document.getElementsByName("program[output][]");
+ if (inputs.length == outputs.length) {
+ for (var i=0; i.ke-toolbar-icon",toolbar).append('表情');
- params.toolbar_container.append(toolbar);
- //init
- var edit = this.edit;
- var body = edit.doc.body;
- edit.iframe[0].scroll = 'no';
- body.style.overflowY = 'hidden';
- //reset height
- var edit = this.edit;
- var body = edit.doc.body;
- paramsHeight = paramsHeight == undefined ? params.kindutil.removeUnit(this.height) : paramsHeight;
- edit.iframe.height(paramsHeight);
- this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight)+ (paramsHeight == undefined ? 30:paramsHeight) , paramsHeight));
-
- }
- }).loadPlugin('paste');
- return editor;
-}
-
-function nh_check_field(params){
- var result=true;
- if(params.content!=undefined){
- if(params.content.isEmpty()){
- result=false;
- }
- if(params.content.html()!=params.textarea.html() || params.issubmit==true){
- params.textarea.html(params.content.html());
- params.content.sync();
- if(params.content.isEmpty()){
- params.contentmsg.html('内容不能为空');
- params.contentmsg.css({color:'#ff0000'});
- }else{
- params.contentmsg.html('填写正确');
- params.contentmsg.css({color:'#008000'});
- }
- params.contentmsg.show();
- }
- }
- return result;
-}
-function init_form(params){
- params.form.submit(function(){
- var flag = false;
- if(params.form.attr('data-remote') != undefined ){
- flag = true
- }
- var is_checked = nh_check_field({
- issubmit:true,
- content:params.editor,
- contentmsg:params.contentmsg,
- textarea:params.textarea
- });
- if(is_checked){
- if(flag){
- return true;
- }else{
- $(this)[0].submit();
- return false;
- }
- }
- return false;
- });
-}
-function nh_reset_form(params){
- params.form[0].reset();
- params.textarea.empty();
- if(params.editor != undefined){
- params.editor.html(params.textarea.html());
- }
- params.contentmsg.hide();
-}
-//第二个参数是高度,可以传,可以不传
-function init_KindEditor_data(id){
- var height = arguments[1] ? arguments[1] : undefined;
- KindEditor.ready(function (K) {
- $("div[nhname='new_message_" + id + "']").each(function () {
- var params = {};
- params.kindutil = K;
- params.div_form = $(this);
- params.form = $("form", params.div_form);
- if (params.form == undefined || params.form.length == 0) {
- return;
- }
- params.textarea = $("textarea[nhname='new_message_textarea_" + id + "']", params.div_form);
- params.contentmsg = $("p[nhname='contentmsg_" + id + "']", params.div_form);
- params.toolbar_container = $("div[nhname='toolbar_container_" + id + "']", params.div_form);
- params.cancel_btn = $("#new_message_cancel_btn_" + id);
- params.submit_btn = $("#new_message_submit_btn_" + id);
- params.height = height;
- if (params.textarea.data('init') == undefined) {
- params.editor = init_editor(params);
- init_form(params);
- params.cancel_btn.click(function () {
- nh_reset_form(params);
- });
- params.submit_btn.click(function () {
- params.form.submit();
- });
- params.textarea.data('init', 1);
- $(this).show();
- }
- });
- });
+function init_editor(params){
+ // var minHeight; //最小高度
+ var paramsHeight = params.height; //设定的高度
+ var paramsWidth = params.width == undefined ? "100%" : params.width;
+
+ var editor = params.kindutil.create(params.textarea, {
+ resizeType : 1,minWidth:"1px",width:paramsWidth,
+ height:"30px",// == undefined ? "30px":paramsHeight+"px",
+ minHeight:"30px",// == undefined ? "30px":paramsHeight+"px",
+ items:['emoticons'],
+ afterChange:function(){//按键事件
+ nh_check_field({content:this,contentmsg:params.contentmsg,textarea:params.textarea});
+ var edit = this.edit;
+ var body = edit.doc.body;
+ edit.iframe.height(paramsHeight);
+ this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight) + (paramsHeight == undefined ? 30:paramsHeight), paramsHeight));
+ },
+ afterCreate:function(){
+ var toolbar = $("div[class='ke-toolbar']",params.div_form);
+ toolbar.css('width',24);
+ $(".ke-outline>.ke-toolbar-icon",toolbar).append('表情');
+ params.toolbar_container.append(toolbar);
+ //init
+ var edit = this.edit;
+ var body = edit.doc.body;
+ edit.iframe[0].scroll = 'no';
+ body.style.overflowY = 'hidden';
+ //reset height
+ var edit = this.edit;
+ var body = edit.doc.body;
+ paramsHeight = paramsHeight == undefined ? params.kindutil.removeUnit(this.height) : paramsHeight;
+ edit.iframe.height(paramsHeight);
+ this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight)+ (paramsHeight == undefined ? 30:paramsHeight) , paramsHeight));
+
+ }
+ }).loadPlugin('paste');
+ return editor;
+}
+
+function nh_check_field(params){
+ var result=true;
+ if(params.content!=undefined){
+ if(params.content.isEmpty()){
+ result=false;
+ }
+ if(params.content.html()!=params.textarea.html() || params.issubmit==true){
+ params.textarea.html(params.content.html());
+ params.content.sync();
+ if(params.content.isEmpty()){
+ params.contentmsg.html('内容不能为空');
+ params.contentmsg.css({color:'#ff0000'});
+ }else{
+ params.contentmsg.html('填写正确');
+ params.contentmsg.css({color:'#008000'});
+ }
+ params.contentmsg.show();
+ }
+ }
+ return result;
+}
+function init_form(params){
+ params.form.submit(function(){
+ var flag = false;
+ if(params.form.attr('data-remote') != undefined ){
+ flag = true
+ }
+ var is_checked = nh_check_field({
+ issubmit:true,
+ content:params.editor,
+ contentmsg:params.contentmsg,
+ textarea:params.textarea
+ });
+ if(is_checked){
+ if(flag){
+ return true;
+ }else{
+ $(this)[0].submit();
+ return false;
+ }
+ }
+ return false;
+ });
+}
+function nh_reset_form(params){
+ params.form[0].reset();
+ params.textarea.empty();
+ if(params.editor != undefined){
+ params.editor.html(params.textarea.html());
+ }
+ params.contentmsg.hide();
+}
+//第二个参数是高度,可以传,可以不传
+function init_KindEditor_data(id){
+ var height = arguments[1] ? arguments[1] : undefined;
+ var width = arguments[2] ? arguments[2] : undefined;
+ KindEditor.ready(function (K) {
+ $("div[nhname='new_message_" + id + "']").each(function () {
+ var params = {};
+ params.kindutil = K;
+ params.div_form = $(this);
+ params.form = $("form", params.div_form);
+ if (params.form == undefined || params.form.length == 0) {
+ return;
+ }
+ params.textarea = $("textarea[nhname='new_message_textarea_" + id + "']", params.div_form);
+ params.contentmsg = $("p[nhname='contentmsg_" + id + "']", params.div_form);
+ params.toolbar_container = $("div[nhname='toolbar_container_" + id + "']", params.div_form);
+ params.cancel_btn = $("#new_message_cancel_btn_" + id);
+ params.submit_btn = $("#new_message_submit_btn_" + id);
+ params.height = height;
+ params.width = width;
+ if (params.textarea.data('init') == undefined) {
+ params.editor = init_editor(params);
+ init_form(params);
+ params.cancel_btn.click(function () {
+ nh_reset_form(params);
+ });
+ params.submit_btn.click(function () {
+ params.form.submit();
+ });
+ params.textarea.data('init', 1);
+ $(this).show();
+ }
+ });
+ });
}
\ No newline at end of file
diff --git a/public/javascripts/init_activity_KindEditor.js b/public/javascripts/init_activity_KindEditor.js
new file mode 100644
index 000000000..b73ff10d3
--- /dev/null
+++ b/public/javascripts/init_activity_KindEditor.js
@@ -0,0 +1,144 @@
+/**
+ * Created by Alan on 2015/9/18.
+ */
+function init_editor(params){
+ // var minHeight; //最小高度
+ var id = arguments[1] ? arguments[1] : undefined;
+ var paramsHeight = params.height; //设定的高度
+ var paramsWidth = params.width == undefined ? "100%" : params.width;
+
+ var editor = params.kindutil.create(params.textarea, {
+ resizeType : 1,minWidth:"1px",width:"95%",
+ height:"30px",// == undefined ? "30px":paramsHeight+"px",
+ minHeight:"30px",// == undefined ? "30px":paramsHeight+"px",
+ items:['emoticons'],
+ afterChange:function(){//按键事件
+ nh_check_field({content:this,contentmsg:params.contentmsg,textarea:params.textarea});
+ var edit = this.edit;
+ var body = edit.doc.body;
+ edit.iframe.height(paramsHeight);
+ this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight) + (paramsHeight == undefined ? 30:paramsHeight), paramsHeight));
+ },
+ afterCreate:function(){
+ params.submit_btn.css("display","none");
+ var toolbar = $("div[class='ke-toolbar']",params.div_form);
+ toolbar.css('width',24);
+ $(".ke-outline>.ke-toolbar-icon",toolbar).append('表情');
+ params.toolbar_container.append(toolbar);
+ params.toolbar_container.style.display = 'none';
+ //init
+ var edit = this.edit;
+ var body = edit.doc.body;
+ edit.iframe[0].scroll = 'no';
+ body.style.overflowY = 'hidden';
+ //reset height
+ var edit = this.edit;
+ var body = edit.doc.body;
+ paramsHeight = paramsHeight == undefined ? params.kindutil.removeUnit(this.height) : paramsHeight;
+ edit.iframe.height(paramsHeight);
+ this.resize(null, Math.max((params.kindutil.IE ? body.scrollHeight : body.offsetHeight)+ (paramsHeight == undefined ? 30:paramsHeight) , paramsHeight));
+
+ },
+ afterFocus:function(){
+ $('#reply_image_' + id).removeClass('imageFuzzy');
+ //edit.iframe.width(paramsWidth);
+ this.resize(paramsWidth, null);
+ params.submit_btn.css('display','inline-block');
+ },
+
+ afterBlur:function(){
+ $('#reply_image_' + id).addClass('imageFuzzy');
+ this.resize("95%", null);
+ params.submit_btn.css("display","none");
+ }
+ }).loadPlugin('paste');
+ return editor;
+}
+
+function nh_check_field(params){
+ var result=true;
+ if(params.content!=undefined){
+ if(params.content.isEmpty()){
+ result=false;
+ }
+ if(params.content.html()!=params.textarea.html() || params.issubmit==true){
+ params.textarea.html(params.content.html());
+ params.content.sync();
+ if(params.content.isEmpty()){
+ params.contentmsg.html('内容不能为空');
+ params.contentmsg.css({color:'#ff0000'});
+ }else{
+ params.contentmsg.html('填写正确');
+ params.contentmsg.css({color:'#008000'});
+ }
+ params.contentmsg.show();
+ }
+ }
+ return result;
+}
+function init_form(params){
+ params.form.submit(function(){
+ var flag = false;
+ if(params.form.attr('data-remote') != undefined ){
+ flag = true
+ }
+ var is_checked = nh_check_field({
+ issubmit:true,
+ content:params.editor,
+ contentmsg:params.contentmsg,
+ textarea:params.textarea
+ });
+ if(is_checked){
+ if(flag){
+ return true;
+ }else{
+ $(this)[0].submit();
+ return false;
+ }
+ }
+ return false;
+ });
+}
+function nh_reset_form(params){
+ params.form[0].reset();
+ params.textarea.empty();
+ if(params.editor != undefined){
+ params.editor.html(params.textarea.html());
+ }
+ params.contentmsg.hide();
+}
+//第二个参数是高度,可以传,可以不传
+function init_activity_KindEditor_data(id){
+ var height = arguments[1] ? arguments[1] : undefined;
+ var width = arguments[2] ? arguments[2] : undefined;
+ KindEditor.ready(function (K) {
+ $("div[nhname='new_message_" + id + "']").each(function () {
+ var params = {};
+ params.kindutil = K;
+ params.div_form = $(this);
+ params.form = $("form", params.div_form);
+ if (params.form == undefined || params.form.length == 0) {
+ return;
+ }
+ params.textarea = $("textarea[nhname='new_message_textarea_" + id + "']", params.div_form);
+ params.contentmsg = $("p[nhname='contentmsg_" + id + "']", params.div_form);
+ params.toolbar_container = $("div[nhname='toolbar_container_" + id + "']", params.div_form);
+ params.cancel_btn = $("#new_message_cancel_btn_" + id);
+ params.submit_btn = $("#new_message_submit_btn_" + id);
+ params.height = height;
+ params.width = width;
+ if (params.textarea.data('init') == undefined) {
+ params.editor = init_editor(params, id);
+ init_form(params);
+ params.cancel_btn.click(function () {
+ nh_reset_form(params);
+ });
+ params.submit_btn.click(function () {
+ params.form.submit();
+ });
+ params.textarea.data('init', 1);
+ $(this).show();
+ }
+ });
+ });
+}
diff --git a/public/javascripts/new_user.js b/public/javascripts/new_user.js
index eb50c2762..e5f5e8b4c 100644
--- a/public/javascripts/new_user.js
+++ b/public/javascripts/new_user.js
@@ -180,6 +180,12 @@ function regexStudentWorkDescription()
}
}
+//学生作品
+function show_project()
+{
+ $("#about_project").slideToggle();
+}
+
//textarea自适应高度 纯js写的 有浏览器判断
/**
* 文本框根据输入内容自适应高度
@@ -249,4 +255,152 @@ var autoTextarea = function (elem, extra, maxHeight) {
addEvent('input', change);
addEvent('focus', change);
change();
+};
+
+/////////////////////////////////////////////////////////////////////////////////////创建项目
+//验证项目名称是不是为空
+function regex_project_name(){
+ var name = $.trim($("#project_name").val());
+ if(name=="")
+ {
+ $("#project_name_error_msg").text("项目名称不能为空");
+ return false;
+ }
+ else
+ {
+ $("#project_name_error_msg").text("");
+ return true;
+ }
+}
+
+//验证项目名称是否重复---项目名称可以重复。。。。
+function regex_project_name_same(){
+ var name = $.trim($("#project_name").val());
+ return true;
+}
+
+//验证项目描述
+function regex_project_desc(){
+ var desc = $.trim($("#project_description").val());
+ if(desc == "")
+ {
+ $("#project_desc_error_msg").text("项目名称不能为空");
+ return false;
+ }
+ else
+ {
+ $("#project_desc_error_msg").text("");
+ return true;
+ }
+}
+//提交
+function submit_project(){
+ if(regex_project_name()&®ex_project_desc()){
+ $("#new_project").submit();
+ }
+}
+/////////////////////////////////////////////////////////////////////////////////////创建项目 end
+//匿评弹框取消按钮
+function clickCanel(){hideModal("#popbox02");}
+//匿评弹框确定按钮
+function clickOK(path)
+{
+ clickCanel();
+ $.ajax({
+ type: "GET",
+ url: path,
+ data: 'text',
+ success: function (data) {
+ }
+ });
+}
+/////////////////////////////////////////////////////////////////////////////////////////
+
+var autoTextarea2 = function (elem,elem2, extra, maxHeight) {
+ extra = extra || 0;
+ var isFirefox = !!document.getBoxObjectFor || 'mozInnerScreenX' in window,
+ isOpera = !!window.opera && !!window.opera.toString().indexOf('Opera'),
+ addEvent = function (element, type, callback) {
+ element.addEventListener ?
+ element.addEventListener(type, callback, false) :
+ element.attachEvent('on' + type, callback);
+ },
+ getFirstStyle = elem.currentStyle ? function (name) {
+ var val = elem.currentStyle[name];
+
+ if (name === 'height' && val.search(/px/i) !== 1) {
+ var rect = elem.getBoundingClientRect();
+ return rect.bottom - rect.top -
+ parseFloat(getFirstStyle('paddingTop')) -
+ parseFloat(getFirstStyle('paddingBottom')) + 'px';
+ };
+
+ return val;
+ } : function (name) {
+ return getComputedStyle(elem, null)[name];
+ },
+ minHeight = parseFloat(getFirstStyle('height'))
+
+ elem.style.resize = 'none';
+ elem2.style.resize = 'none';
+ var change = function () {
+ var scrollTop, height,
+ padding = 0,
+ style = elem.style,
+ style2 = elem2.style;
+
+
+ if (elem._length === elem.value.length) return;
+ elem._length = elem.value.length;
+ elem2._length = elem._length;
+ if (!isFirefox && !isOpera) {
+ padding = parseInt(getFirstStyle('paddingTop')) + parseInt(getFirstStyle('paddingBottom'));
+ };
+ scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+
+ elem.style.height = minHeight + 'px';
+ elem2.style.height = minHeight + 'px';
+ if (elem.scrollHeight > minHeight) {
+ if (maxHeight && elem.scrollHeight > maxHeight) {
+ height = maxHeight - padding;
+ style.overflowY = 'auto';
+ style2.overflowY = 'auto';
+ } else {
+ height = elem.scrollHeight - padding;
+ style.overflowY = 'hidden';
+ style2.overflowY = 'hidden';
+ };
+ style.height = height + extra + 'px';
+ style2.height = height + extra + 'px';
+ scrollTop += parseInt(style.height) - elem.currHeight;
+ document.body.scrollTop = scrollTop;
+ document.documentElement.scrollTop = scrollTop;
+ elem.currHeight = parseInt(style.height);
+ };
+ if (elem2.scrollHeight > minHeight) {
+ if (maxHeight && elem2.scrollHeight > maxHeight) {
+ height = maxHeight - padding;
+ style.overflowY = 'auto';
+ style2.overflowY = 'auto';
+ } else {
+ height = elem2.scrollHeight - padding;
+ style.overflowY = 'hidden';
+ style2.overflowY = 'hidden';
+ };
+ style.height = height + extra + 'px';
+ style2.height = height + extra + 'px';
+ scrollTop += parseInt(style2.height) - elem2.currHeight;
+ document.body.scrollTop = scrollTop;
+ document.documentElement.scrollTop = scrollTop;
+ elem2.currHeight = parseInt(style2.height);
+ };
+ };
+
+ addEvent(elem, 'propertychange', change);
+ addEvent(elem, 'input', change);
+ addEvent(elem, 'focus', change);
+ addEvent(elem2, 'propertychange', change);
+ addEvent(elem2, 'input', change);
+ addEvent(elem2, 'focus', change);
+ change();
};
\ No newline at end of file
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 3e01d68ff..ac983479a 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -1833,7 +1833,7 @@ input#time_entry_comments { width: 90%;}
.tabular.settings p{ padding-left: 300px; }
.tabular.settings label{ margin-left: -300px; width: 295px; }
-.tabular.settings textarea { width: 99%; }
+.tabular.settings textarea { width: 96%; }
.settings.enabled_scm table {width:100%}
.settings.enabled_scm td.scm_name{ font-weight: bold; }
@@ -2807,4 +2807,7 @@ img.school_avatar {
width: 100px;
height: 100px;
max-width: none;
-}
\ No newline at end of file
+}
+
+.admin_message_warn{font-size: 12px;color: red;}
+a.btn_message_free{ background:#15BCCF; display:block; text-align:center; color:#fff; padding:3px 0; width:60px; margin-bottom:10px;}
\ No newline at end of file
diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css
index d810c4891..7c1e590db 100644
--- a/public/stylesheets/courses.css
+++ b/public/stylesheets/courses.css
@@ -23,9 +23,49 @@ a:hover.project_txt{ color:#066e9a;}
.noline{ border-bottom:none;}
.news_description{max-height: 360px;overflow:hidden; }
.news_description_none{max-height: none;}
+.wrapper {position:relative;}
+.attachmentContainer {display:inline-block;}
+.deadline {position:absolute; bottom:0px; display:inline-block; right:0px;}
a.news_foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:600px; height:20px; padding-top:3px; cursor:pointer;}
a:hover.news_foot{ color:#787b7e; border:1px solid #d4d4d4;}
+/*右侧内容新*/
+.ctt2{clear:both; }
+.hworkListBanner {width:720px; height:40px; background:#eaeaea; margin-bottom:10px; margin-left:5px;}
+.hworkListContainer {float:left; clear:both; width:720px; margin-left:5px;}
+.showHwork{ border:2px solid #269ac9; width:696px; padding:10px; color:#666666; padding-bottom:0px; }
+.showHworkP{ width:630px; float:left;}
+.showHwork ul li {margin-bottom: 5px;}
+.hworkPingText{ float:left; border:1px solid #e4e4e4; padding:5px; width:618px; height:35px;}
+.pingBox{ width:676px; padding:10px; background:#f5f3f3;}
+.pingBoxTit{ float:left; width:625px; margin-left:10px;}
+.pingText{border:1px solid #CCCCCC; margin:5px; padding:5px; width:610px; height:20px; }
+.pingBackTit{ float:left; width:573px; margin-left:10px; }
+.hworkUl{ height:50px; border-bottom:1px solid #eaeaea; line-height:50px; vertical-align:middle;}
+.hworkListRow {height:65px; border-bottom:1px solid #eaeaea; line-height:65px; vertical-align:middle;}
+.hworkListRow:hover {background-color:#f6f6f7; cursor:pointer;}
+.hworkUl li{ float:left;}
+.hworkListRow li{ float:left;}
+.hworkList380 {width:375px; text-align:left; height:50px; line-height:50px;padding-left:5px;}
+.hworkList80 {width:80px; text-align:center;}
+.hworkList50 {width:50px; text-align:center;}
+.codeList{ float:right; font-size:12px; color:#484848; padding:0px 3px; width:714px; margin-bottom:10px; }
+.hworkName {max-width:380px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; height:16px; line-height:16px;}
+.hworkDetail {max-width:100px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; height:14px; line-height:14px; font-size:12px; color:#888888;}
+.hworkDate {max-width:150px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; height:14px; line-height:14px; font-size:12px; color:#888888;}
+.hworkMenu {width:100px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:10px 20px; left:-110px; font-size:12px; color:#888888; display:none; line-height:2;}
+a.hworkExport {background:url(../images/homepage_icon2.png) -10px -401px no-repeat; padding-left:23px;}
+a.hworkSetting {background:url(../images/homepage_icon2.png) -10px -450px no-repeat; padding-left:23px;}
+.hworkInfor {font-size:12px; color:#269ac9; width:80px; height:40px; vertical-align:middle; float:left; line-height:40px; text-align:center; font-weight:bold;}
+.infoNi{ width:100px; padding:5px;-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; box-shadow:0px 0px 5px #194a81; color:#666; background:#fff; text-align:left; line-height:2; position:absolute; margin-top:-24px;margin-left: 40px;}
+.problemTxt {width:660px; margin-left:10px; color:#777777; position:relative;}
+.rTxtTit{width:560px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#269ac9; font-size:14px;}
+.width620{width: 620px;}
+.width625{width: 625px;}
+.width455{width: 455px;}
+.m_width620{max-width: 620px;}
+.width180{width: 180px;}
+
/*邮件邀请*/
.box_main{ width:345px; margin:0 auto;}
@@ -78,7 +118,7 @@ a:hover.talk_pic{border:1px solid #64bdd9;}
a.talk_btn{ background:#64bdd9; width:50px; height:20px; color:#fff; text-align:center; margin-top:12px; padding-top:3px;}
a:hover.talk_btn{ background:#2a9dc1;}
/****讨论区内页***/
-.mt0{ margin-top:0px;}
+.mt0{ margin-top:0px !important;}
.talk_info{ color:#7d7d7d; margin-left:60px; margin-top:10px;}
a.talk_edit{ color:#269ac9; margin-right:5px;}
a:hover.talk_edit{ color:#297fb8;}
@@ -101,6 +141,7 @@ a:hover.grey_btn{ background:#717171; color:#fff;}
.f_b{ font-weight: bold;}
.c_blue{ color:#64bdd9;}
.c_grey{ color:#999999;}
+a.c_grey{ color:#999999;}
.c_grey02{ color:#666666;}
.f_14{ font-size:14px;}
.c_dblue{ color:#3e6d8e;}
@@ -149,6 +190,7 @@ a.un_work_edit{color: white; display:block; padding:1px 5px; background-color: d
.dis{display:block; }
.undis{display:none;}
.c_red{ color:#de030d;}
+input.c_red {padding:0px; text-align:center; border:0;}
.f_12{ font-size:12px;}
.w_40{ width:40px; border:1px solid red;}
.dis_ul{ height:70px; border-bottom:1px dashed #d4d4d4; margin-bottom:10px;}
@@ -242,6 +284,7 @@ a:hover.tijiao{ background:#0f99a9;}
.members_left ul li a{ float:left; text-align:center;}
.members_left ul li span{ float:left; text-align:center; color:#484747;}
.w150{ text-align:center; width:150px;min-height: 10px;}
+.width150{width:150px;min-height: 10px;}
.f_b{ font-weight: bold;}
.members_right label{ margin-left:15px;}
.N_search{ height:20px; border:1px solid #999;}
@@ -300,7 +343,7 @@ a:hover.tijiao{ background:#0f99a9;}
.c_pink{ color:#e65d5e;}
.ni_con_work { width:300px; margin:25px 20px;}
.ni_con_work p{ color:#808181; }
-
+a.xls{ margin-left:5px; color:#136b3b;}
/* 学生列表*/
.st_list{ width:670px;}
.st_search{ }
@@ -521,11 +564,10 @@ img.ui-datepicker-trigger {
/*作业批次下拉*/
div#menu_r {height:41px; font-size:14px; font-weight:bold; margin-bottom:10px;}
div#menu_r ul {float: left;}
-div#menu_r ul.menu_r { background: #64bdd9; padding:0 10px; height:40px; }
+div#menu_r ul.menu_r { background: #269ac9; padding:0 10px; height:40px; }
div#menu_r li {position: relative; z-index: 9; margin: 0; display: block; float: left; }
div#menu_r li:hover>ul { left: -2px;}
div#menu_r a {position: relative;z-index: 10; height: 41px; display: block; float: left;line-height: 41px; text-decoration: none; font-size:14px; }
-div#menu_r {display: block; cursor: pointer; background-repeat: no-repeat;background-position: 95% 0;padding-right: 15px; _padding-right: 20px;}
div#menu_r ul a.parent {background: url(../images/item.png) -20px -30px no-repeat; width:60px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
div#menu_r ul a.parent:hover {background: url(../images/item.png) -20px -60px no-repeat;}
div#menu_r ul ul a.parent {background: url(../images/item.png) -20px 6px no-repeat;}
@@ -536,9 +578,9 @@ div#menu_r a { padding: 5px 12px 0 10px;line-height: 30px; color: #fff;}
div#menu_r li.last { background: none; }
/* menu::level2 */
div#menu_r ul ul li { background: none; }
-div#menu_r ul ul { position: absolute;top: 38px; left: -999em; width: 90px; padding: 5px 0 0 0; background:#fff; border:1px solid #15bccf; margin-top:1px;}
-div#menu_r ul ul a {padding: 0 0 0 15px; height: auto; float: none;display: block; line-height: 24px; font-size:12px; font-weight:normal;color:#15bccf;}
-div#menu_r ul ul a:hover { background:#64bdd9; color:#fff;}
+div#menu_r ul ul { position: absolute;top: 38px; left: -999em; width: 90px; padding: 5px 0 0 0; background:#fff; border:1px solid #269ac9; margin-top:1px;}
+div#menu_r ul ul a {padding: 0 0 0 15px; height: auto; float: none;display: block; line-height: 24px; font-size:12px; font-weight:normal;color:#269ac9;}
+div#menu_r ul ul a:hover { background:#297fb8; color:#fff;}
div#menu_r ul ul li.last { margin-left:15px; }
div#menu_r ul ul li {width: 100%;}
@@ -553,7 +595,7 @@ a.wzan_visited{background:url(../images/new_project/public_icon.png) 0px -503px
.newwork_btn a:hover{ background:#329cbd;}
.files_tag{ width:670px; height:22px; overflow:hidden; margin-bottom:10px;}
a.files_tag_icon{ background:#e2f3f9; color:#54aeca; border:1px solid #bbe2ef; padding:1px 10px; float:left; margin-right:10px;margin-bottom:10px; }
-a.files_tag_select{ background:#64bdd9; color:#fff; border:1px solid #64bdd9; padding:1px 10px; float:left; margin-right:10px;margin-bottom:10px;}
+a.files_tag_select{ background:#64bdd9; color:#fff; border:1px solid #bbe2ef; padding:1px 10px; float:left; margin-right:10px;margin-bottom:10px;}
/* 20150423作业评分*/
.ml14{ margin-left:14px;}
@@ -636,40 +678,40 @@ a:hover.icon_remove{background:url(images/icons.png) -20px -338px no-repeat;}
.t_c{ text-align:center;}
.hwork_tit{ width:210px; float:left; }
-.hwork_tit a{ width:205px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
-.hwork_tit_une{ width:270px; float:left; }
-.hwork_tit_une a{ width:265px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
+.hwork_tit a{ width:255px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
+.hwork_tit02{ width:235px; float:left; }
+.hwork_tit02 a{ width:230px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
.hwork_code{ width:56px; text-align:center; }
-.hwork_code02{ width:60px; text-align:center; }
+.hwork_code02{ width:32px; text-align:center; }
.hwork_tit_e{ width:420px; float:left; }
.hwork_tit_e a{ width:405px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
.hwork_num{ width:90px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
.mr18{ margin-right:18px;}
-a.hwork_center{ display:block; width:60px; margin-right:5px;overflow: hidden; white-space: nowrap; text-overflow:ellipsis;}
-.hwork_name{ display:block;width:80px; overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
-.absence_penalty{ display:block;width:45px; overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
-.border_ce {border: 1px solid #e4e4e4;}
+a.hwork_center{ display:block; width:60px; text-align:center; margin-right:5px;}
.show_hwork{ border:2px solid #64bdd9; width:646px; padding:10px; color:#666666; padding-bottom:0px; }
.show_hwork ul li{ margin-bottom:5px;}
-.show_hwork_arrow{ position:relative; top:2px; left:25px;background:url(../images/course/arrow_up.jpg) 0 0 no-repeat; width:20px; height:11px;}
+.show_hwork_arrow{ position:relative; top:2px; left:165px;background:url(../images/course/arrow_up.jpg) 0 0 no-repeat; width:20px; height:11px;}
.tit_fb{ font-weight:bold; width:66px; text-align:right; display:block; float:left;}
.ml160{ margin-left:160px;}
-.show_hwork_p{ width:580px; float:left;}
-.hwork_ping_text{ float:left; border:1px solid #e4e4e4; padding:5px; width:568px; height:50px;}
-.ping_box{ width:626px; padding:10px; background:#f5f3f3; }
+.show_hwork_p{ width:630px; float:left;}
+.hwork_ping_text{ float:left; border:1px solid #e4e4e4; padding:5px; width:615px; height:35px;}
+.ping_box{ width:676px; padding:10px; background:#f5f3f3; }
a.ping_pic{ display:block; width:34px; height:34px; padding:2px; border:1px solid #e3e3e3;}
a:hover.ping_pic{border:1px solid #64bdd9;}
.ping_box_tit{ float:left; width:575px; margin-left:10px;}
.ping_box_ul{}
.ping_line{ border-bottom:1px dashed #CCCCCC; padding-bottom:8px; margin-bottom:8px;}
-.ping_text{border:1px solid #CCCCCC; margin:5px; padding:5px; width:560px; height:50px; }
-.ping_back_tit{ float:left; width:523px; margin-left:10px; }
+.ping_text{border:1px solid #CCCCCC; margin:5px; padding:5px; width:610px; height:20px; }
+.ping_back_tit{ float:left; width:578px; margin-left:10px; }
a.down_btn{ border:1px solid #CCC; color:#999; padding:0px 5px; font-size:12px; text-align:center; display:block;}
a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;}
-.min_search{ width:140px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/public_icon.png) 185px -193px no-repeat; }
+.fr{ float:right;}
+.min_search{ width:200px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/public_icon.png) 185px -193px no-repeat; cursor:pointer;}
.li_min_search{ float:right; margin-right:-10px;}
-.info_ni_download{ 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: 200px;margin-top: 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;margin-left: 50px;margin-top: -5px;}
+.info_ni{ width:100px; padding:5px;-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; box-shadow:0px 0px 5px #194a81; color:#666; background:#fff; text-align:left;}
+.hwork_num{ width:90px; text-align:center; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+.hwork_name{width:80px; text-align:center;}
+.mr18{ margin-right:18px;}
/*返回顶部*/
.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;}
@@ -678,6 +720,7 @@ a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;}
.hwork_time_c{width:40px;color: #6d6d6d}
.hwork_score{ width:62px; text-align:center; }
.absence{width: 50px;text-align: center;}
+
/* 评分插件 */
input#score{ width:40px;}
.ui-slider{position:relative;width:200px;float:left;margin-right:10px;height:14px; margin-top:2px;background:#e2e2e2; }
@@ -685,12 +728,11 @@ input#score{ width:40px;}
.ui-slider .ui-slider-handle:hover,.ui-slider .ui-slider-handle:focus{background:#64bdd9;}
.ui-slider .ui-slider-handle:active{background-image:none;}
.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;top:0;height:100%;background:#64bdd9;left:0;}
-
/* 编程作品 */
.border_ce{ border:1px solid #e4e4e4; }
.border_ce tr td{ height:26px; }
-.td_tit{width:170px; text-align:center;}
-.td_50{width:60px; text-align:center;}
+.td_tit{width:155px; text-align:center;}
+.td_50{width:50px; text-align:center;}
a.work_list_tit{width:580px; display:block; overflow:hidden; font-size:14px; font-weight:bold; white-space: nowrap; text-overflow:ellipsis;}
.work_list_pro{ width:670px;}
.border_l{border-left:1px solid #e4e4e4;}
@@ -760,8 +802,8 @@ a:hover.icon_remove{background:url(images/icons.png) -20px -338px no-repeat;}
.T_C{ text-align:center;}
.SearchIcon{background:url(../images/homepage_icon2.png) 676px -393px no-repeat; }
.SearchIcon:hover{background:url(../images/homepage_icon2.png) 676px -419px no-repeat; }
-a.link_file{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; }
-a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
+a.link_file_a{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; }
+a:hover.link_file_a{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%;width: 1px;display: inline-block;padding-left: 16px;}
a.FilesName{ max-width:540px;overflow:hidden; white-space:nowrap; text-overflow:ellipsis; display:block;}
a.FilesName02{ max-width:665px;overflow:hidden; white-space:nowrap; text-overflow:ellipsis; display:block;}
@@ -769,3 +811,47 @@ a.FilesName02{ max-width:665px;overflow:hidden; white-space:nowrap; text-overflo
.ProResultUl li{ line-height:35px; border-bottom:1px solid #dddddd; }
.DateBorder{border:1px solid #d9d9d9; border-left:none; padding:7px 6px 6px 6px;}
.mb50{margin-bottom: 50px;}
+
+/* 课程主页 */
+.rside_nav{ background:#eaebec; padding:10px 10px;}
+.rside_box{ width:730px; border:1px solid #e7edf0;}
+.rside_top{ height:24px; background:#f5f8fa; border-bottom:1px solid #e7edf0; padding:8px 10px;}
+.rside_work_list{margin:10px; border-bottom:1px dashed #e5e5e5;}
+.imageWrapper {width:50px; height:auto; float:left; color:#999999; text-align:center;}
+.img_blue_icon{ background:url(../images/course/icons.png) 0 -400px no-repeat; width:37px; height:18px; color:#fff; font-size:12px; padding-left:7px; color:#fff; }
+.img_green_icon{ background:url(../images/course/icons.png) 0 -425px no-repeat; width:37px; height:18px; color:#fff; font-size:12px; padding-left:7px; color:#fff; }
+a.rside_work_tit{ font-size:14px; font-weight:bold; color:#3e4040; max-width:430px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+a:hover.rside_work_tit{ color:#0781b4;}
+.bgrey_icon{ color:#9b9b9b; border:1px solid #b6b6b6; background:#f0f0f0; font-size:12px; padding:0px 3px; }
+.dgrey_icon{ color:#717171; border:1px solid #717171; font-size:12px; padding:0px 3px;}
+.yellow_icon{ color:#ff5c60; border:1px solid #ff5c60; background:#ffffd5; font-size:12px; padding:0px 3px;}
+.arrow_r{background:url(../images/course/icons.png) 0 -450px no-repeat; width:22px; height:13px; }
+.c_dgreen{ color:#0e9e4f;}
+.list_more{ text-align:center; margin:10px 0;}
+.rside_massage_txt{ width:650px; margin-left:10px; }
+a.massage_tit{ max-width:530px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+a.rside_name{ display:block; max-width:80px;}
+.rside_talk_txt{ width:650px; margin-left:10px; color:#333;}
+.rside_talk_tit{ color:#0781b4; width:490px; display:block; }
+.rside_talkWrapArrow{ display:block; float:right; margin-right:10px;background:url(../images/course/arrow.png) 0 0 no-repeat; height:7px; width:13px;}
+.rside_talkWrapBox{ width:650px; margin-left:60px; }
+.rside_Msg_txt{ float:left; width:580px; margin-left:10px;}
+.rside_talkWrapMsg{ background:#f2f2f2; padding:10px;}
+.rside_talkWrapMsg ul li{}
+.rside_inputFeint{ border:1px solid #d9d9d9; background:#fff; width:623px; height:40px; margin:10px; margin-bottom:5px;color:#666;}
+a.icon_face{background:url(../images/public_icon.png) 0px -671px no-repeat; display:block; height:25px; width:40px; padding-left:25px; padding-top:3px; }
+a:hover.icon_face{background:url(../images/public_icon.png) -79px -671px no-repeat; }
+a.pro_mes_w{ height:20px; display:block; color:#999999;}
+.info_list{ border-top:1px solid #F2F2F2; padding:5px 0;}
+.info_list_r li{ height:20px;}
+.pai_box{background:#fff; padding:10px 0 10px 10px;width:230px; color:#3e4040; }
+
+.rside_work_con{ width:650px;}
+a.c_grey{ color:#999999;}
+a:hover.c_grey{ color:#333;}
+.link_file_a{ display:block; max-width:450px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+.last_time{width:auto; text-align:right; margin-right:70px;}
+.link_file_box{ width:360px;}
+a.postOptionLink{float: right;color: #64bdd9;display: block;padding: 1px 5px;border: 1px solid #64bdd9;width: initial;}
+a:hover.postOptionLink {color: #fff;background: #64bdd9;}
+
diff --git a/public/stylesheets/header.css b/public/stylesheets/header.css
index 2d6f5e0b8..998ae6fbd 100644
--- a/public/stylesheets/header.css
+++ b/public/stylesheets/header.css
@@ -1,117 +1,117 @@
-/*新个人主页框架css*/
-.navContainer {width:100%; background-color:#269ac9;}
-.homepageContentContainer {width:100%; margin:0 auto; background-color:#eaebed;}
-.homepageContent {width:1000px; background-color:#eaebed; margin:0 auto;}
-.navHomepage {width:1000px; height:54px; background-color:#269ac9; margin:0 auto;}
-.navHomepageLogo {width:60px; height:54px; line-height:54px; vertical-align:middle; margin-left:2px; margin-right:30px;}
-.navHomepageMenu {margin-right:20px;display:inline-block;height:54px; line-height:54px; vertical-align:middle; padding:0px 10px;}
-.navHomepageMenu:hover {background-color:#297fb8;}
-.navHomepageSearchBoxcontainer {margin-top:11px; }
-.navHomepageSearchBox {width:380px; border:none; outline:none; height:32px; margin-top:11px; background-color:#ffffff;}
-.navHomepageSearchInput {width:345px; height:32px; outline:none; border:none !important; float:left;padding: 0 0 0 5px !important; margin:0;}
-.homepageSearchIcon {width:30px; height:32px; background:url(../images/nav_icon.png) -8px 3px no-repeat; float:left;}
-a.homepageSearchIcon:hover {background:url(../images/nav_icon.png) -49px 3px no-repeat;}
-#navSearchAlert {display:none;}
-.navHomepageNews {width:30px; display:block; float:right; margin-top:8px; position:relative;}
-.homepageNewsIcon {background:url(../images/nav_icon.png) -5px -85px no-repeat; width:30px; height:35px; display:block;}
-.newsActive {width:10px; height:10px; border-radius:50%; border:2px solid #ffffff; background-color:#ff0000; position:absolute; left:17px; top:5px;}
-.navHomepageProfile {width:65px; display:block; float:right; margin-left:33px;}
-.homepageProfileMenuIcon {background:url(../images/nav_icon.png) 30px -155px no-repeat; width:65px; height:54px; position:relative; display:inline-block; line-height:0;}
-.homepageProfileMenuIconhover {background:url(../images/nav_icon.png) 30px -122px no-repeat;}
-/*.navHomepageProfile ul li ul {display:none;}
-.navHomepageProfile ul li:hover ul {display:block;}*/
-.homepageLeft {width:240px; float:left; margin-right:10px; margin-bottom:10px;}
-.homepageRight {width:750px; float:left; margin-top:15px; margin-bottom:10px;}
-.homepagePortraitContainer {width:238px; border:1px solid #dddddd; background-color:#ffffff; margin-top:15px; padding-bottom:15px;}
-.homepagePortraitImage {width:206px; height:206px; padding:2px; margin:15px 14px 10px 14px; position:relative; border:1px solid #cbcbcb;}
-.homepagePortraitImage:hover {border:1px solid #15bccf;}
-.homepageFollow {background:url(../images/homepage_icon.png) -10px -8px no-repeat; width:20px; height:20px; position:absolute; right:9px; top:9px;}
-.homepageFollowCancel {background:url(../images/homepage_icon.png) -178px -8px no-repeat; width:20px; height:20px; position:absolute; right:9px; top:9px;}
-.homepageEditProfile {width:20px; height:20px; border-radius:2px; background-color:#888888; position:absolute; right:9px; bottom:9px; font-size:12px; filter:alpha(opacity=50); -moz-opacity:0.5; opacity: 0.5;}
-.homepageEditProfileIcon {background:url(../images/homepage_icon.png) -11px -35px no-repeat; width:20px; height:20px; display:block;}
-.homepageImageName {font-size:16px; color:#484848; margin-left:15px; margin-right:8px; height:21px; float:left;}
-.homepageImageSex {top:116px; left:5px; width:20px; height:20px; background:url(../images/homepage_icon.png) -10px -112px no-repeat; float:left;}
-.homepageImageSexMan {top:116px; left:5px; width:20px; height:20px; background:url(../images/homepage_icon.png) -10px -112px no-repeat; float:left;}
-.homepageImageSexWomen {width: 20px;height: 20px;background: url(../images/homepage_icon.png) -10px -149px no-repeat;float: left;}
-.homepageSignatureTextarea {width:207px; height:80px; max-width:207px; max-height:80px; border:1px solid #d9d9d9; outline:none; margin:0px 0px 12px 15px;;}
-.homepageSignature {font-size:12px; color:#888888; margin-left:15px; margin-top:10px; margin-bottom:12px; width:208px;}
-.homepageImageBlock {margin:0 auto; width:78px; float:left; text-align:center; display:inline-block;}
-.homepageImageNumber {font-size:12px; color:#484848;}
-a.homepageImageNumber:hover {color:#15bccf;}
-.homepageImageText {font-size:12px; color:#888888;}
-.homepageVerDiv {height:28px; vertical-align:middle; width:1px; float:left; display:inline-block; background-color:#d1d1d1; margin-top:3px;}
-.homepageLeftMenuContainer {width:238px; border:1px solid #dddddd; border-bottom:none; background-color:#ffffff; margin-top:10px;}
-.homepageLeftMenuBlock {border-bottom:1px solid #dddddd; height:50px; line-height:50px; vertical-align:middle;}
-.homepageLeftMenuCourses {font-size:14px; border-bottom:1px solid #dddddd;}
-.homepageLeftMenuCoursesLine {padding-left:25px; height:38px; line-height:38px; vertical-align:middle;}
-.homepageLeftMenuCoursesLine:hover {background-color:#b3e0ee;}
-a.coursesLineGrey {color:#808080; display:block;}
-a.coursesLineGrey:hover {color:#ffffff;}
-.homepageLeftMenuMore {height:18px;}
-.homepageLeftMenuMore:hover {background-color:#b3e0ee;}
-.homepageLeftMenuMoreIcon {background:url(../images/homepage_icon.png) -74px -240px no-repeat; display:block; height:18px;}
-.homepageMenuSetting {display:inline-block; margin-right: 17px; margin-top: 18px;}
-a.homepageMenuText {color:#484848; font-size:16px; margin-left:20px;}
-.homepageLeftLabelContainer {width:238px; border:1px solid #dddddd; background-color:#ffffff; margin-top:10px;}
-.homepageLabelText {color:#484848; font-size:16px; margin-left:10px; margin-bottom:12px; display:block;}
-.homepageRightBanner {width:720px; height:34px; margin:0px auto; border-bottom:1px solid #e9e9e9;}
-.NewsBannerName {font-size:16px; color:#4b4b4b; display:block; background:url(../images/homepage_icon.png) -18px -230px no-repeat; width:150px; float:left; padding-left:15px; margin-top:4px;}
-.newsType {width:60px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:5px 10px; left:-40px; font-size:12px; color:#888888; display:none; line-height:2; z-index:9999;}
-.newsReadSetting {width:700px; background-color:#f6f6f6; border-bottom:1px solid #eeeeee; margin:10px auto; height:39px; line-height:39px; vertical-align:middle; font-size:14px; color:#7a7a7a; padding-left:10px;}
-.homepageNewsList {width:710px; height:49px; line-height:49px; vertical-align:middle; border-bottom:1px dashed #eaeaea; margin-left:10px;}
-.homepageNewsPortrait {width:40px; display:block; margin-top:7px;}
-.homepageNewsPublisher {width:80px; max-width:80px; margin-right:10px; font-size:12px; color:#15bccf; display:block; padding-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
-.homepageNewsType {width:95px; font-size:12px; color:#888888; display:block;}
-.homepageNewsContent {width:395px; max-width:395px; margin-right:10px; font-size:12px; color:#4b4b4b; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
-.homepageNewsTime {width:75px; font-size:12px; color:#888888; display:block; text-align:right;}
-a.homepageWhite {color:#ffffff !important;}
-a.homepageWhite:hover {color:#a1ebff !important;}
-a.newsGrey {color:#4b4b4b;}
-a.newsGrey:hover {color:#000000;}
-a.replyGrey {color:#888888; display:inline-block;}
-a.replyGrey:hover {color:#4b4b4b;}
-a.replyGrey1 {color:#888888;}
-a.replyGrey1:hover {color:#4b4b4b;}
-a.newsBlue {color:#15bccf;}
-a.newsBlue:hover {color:#0781b4;}
-a.menuGrey {color:#808080;}
-a.menuGrey:hover {color:#fe7d68;}
-.navSearchTypeBox {width:368px; height:35px; position:absolute; border:1px solid #e1e1e1; background-color:#ffffff; padding-left:10px; display:none; color:#3e3e3e; font-size:14px;}
-#navSearchAlert {display:none;}
-.none{display: none;}
-.db {display:block !important;}
-
-/*myctrip*/
-.userImage{position:absolute; right:140px; top:5px; width:30px;height:30px; background: url(../images/item.png) 2px 4px no-repeat; line-height:1.4;}
-a.topnav_login_a{color:#fff; display:inline-block;}
-a.topnav_login_a:hover {color:#a1ebff;}
-a.topnav_login_mes{color:#fff; width:10px;height:20px; padding-left:15px; background: url(../images/item.png) -84px -145px no-repeat; display:inline-block; vertical-align:top;}
-a.topnav_login_mes:hover {color:#a1ebff;}
-a.topnav_login_box{ color:#fff; font-size:14px; font-weight:bold; width:90px; display:inline-block;}
-.menuArrow {background:url(../images/item.png) -20px -40px no-repeat;}
-li.menuArrow:hover {background:url(../images/item.png) -20px -70px no-repeat;}
-a.topnav_login_box:hover {color:#a1ebff;}
-.navRow1 {margin:0; padding:0;}
-.navRow2 {margin:0; padding:0;}
-.topnav_login_list{ border:1px solid #269ac9; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-7px; position:absolute; z-index:9999; line-height:2;}
-.topnav_login_list a{color:#269ac9;}
-.topnav_login_list li{ }
-.portraitRadius {border-radius: 3px;}
-
-/*底部*/
-#Footer{background-color:#ffffff; padding-bottom:15px; color:#666666;} /*margin-bottom:10px;*/
-.footerAboutContainer {width:auto; border-bottom:1px solid #efefef;}
-.footerAbout{ width:485px; margin:0 auto;height:35px; line-height:35px; padding-top: 10px;}
-.languageBox {width:55px; height:20px; margin-left:5px; outline:none; color:#666666; border:1px solid #d9d9d9;}
-.departments{ width:950px; margin:5px auto 0 auto;height:30px;line-height:30px;}
-.copyright{ width:375px; margin:0 auto;height:20px;line-height:20px;}
-a.f_grey {color:#666666 !important;}
-a.f_grey:hover {color:#000000 !important;}
-.mr30 {margin-right: 30px;}
-
-
-/*注册登陆页面*/
-#loginSignButton {height:54px; padding-left:10px; padding-right:10px; text-align:center; line-height:54px; vertical-align:middle; color:#ffffff; font-size:16px;}
-#loginInButton {height:54px; padding-left:10px; padding-right:10px; text-align:center; line-height:54px; vertical-align:middle; color:#ffffff; font-size:16px;}
-#loginSignButton:hover {background-color:#297fb8;}
-#loginInButton:hover {background-color:#297fb8;}
+/*新个人主页框架css*/
+.navContainer {width:100%; background-color:#269ac9;}
+.homepageContentContainer {width:100%; margin:0 auto; background-color:#eaebed;}
+.homepageContent {width:1000px; background-color:#eaebed; margin:0 auto;}
+.navHomepage {width:1000px; height:54px; background-color:#269ac9; margin:0 auto;}
+.navHomepageLogo {width:60px; height:54px; line-height:54px; vertical-align:middle; margin-left:2px; margin-right:30px;}
+.navHomepageMenu {margin-right:20px;display:inline-block;height:54px; line-height:54px; vertical-align:middle; padding:0px 10px;}
+.navHomepageMenu:hover {background-color:#297fb8;}
+.navHomepageSearchBoxcontainer {margin-top:11px; }
+.navHomepageSearchBox {width:380px; border:none; outline:none; height:32px; margin-top:11px; background-color:#ffffff;}
+.navHomepageSearchInput {width:345px; height:32px; outline:none; border:none !important; float:left;padding: 0 0 0 5px !important; margin:0;}
+.homepageSearchIcon {width:30px; height:32px; background:url(../images/nav_icon.png) -8px 3px no-repeat; float:left;}
+a.homepageSearchIcon:hover {background:url(../images/nav_icon.png) -49px 3px no-repeat;}
+#navSearchAlert {display:none;}
+.navHomepageNews {width:30px; display:block; float:right; margin-top:8px; position:relative;}
+.homepageNewsIcon {background:url(../images/nav_icon.png) -5px -85px no-repeat; width:30px; height:35px; display:block;}
+.newsActive {width:10px; height:10px; border-radius:50%; border:2px solid #ffffff; background-color:#ff0000; position:absolute; left:17px; top:5px;}
+.navHomepageProfile {width:65px; display:block; float:right; margin-left:33px;}
+.homepageProfileMenuIcon {background:url(../images/nav_icon.png) 30px -155px no-repeat; width:65px; height:54px; position:relative; display:inline-block; line-height:0;}
+.homepageProfileMenuIconhover {background:url(../images/nav_icon.png) 30px -122px no-repeat;}
+/*.navHomepageProfile ul li ul {display:none;}
+.navHomepageProfile ul li:hover ul {display:block;}*/
+.homepageLeft {width:240px; float:left; margin-right:10px; margin-bottom:10px;}
+.homepageRight {width:750px; float:left; margin-top:15px; margin-bottom:10px;}
+.homepagePortraitContainer {width:238px; border:1px solid #dddddd; background-color:#ffffff; margin-top:15px; padding-bottom:15px;}
+.homepagePortraitImage {width:206px; height:206px; padding:2px; margin:15px 14px 10px 14px; position:relative; border:1px solid #cbcbcb;}
+.homepagePortraitImage:hover {border:1px solid #15bccf;}
+.homepageFollow {background:url(../images/homepage_icon.png) -10px -8px no-repeat; width:20px; height:20px; position:absolute; right:9px; top:9px;}
+.homepageFollowCancel {background:url(../images/homepage_icon.png) -178px -8px no-repeat; width:20px; height:20px; position:absolute; right:9px; top:9px;}
+.homepageEditProfile {width:20px; height:20px; border-radius:2px; background-color:#888888; position:absolute; right:9px; bottom:9px; font-size:12px; filter:alpha(opacity=50); -moz-opacity:0.5; opacity: 0.5;}
+.homepageEditProfileIcon {background:url(../images/homepage_icon.png) -11px -35px no-repeat; width:20px; height:20px; display:block;}
+.homepageImageName {font-size:16px; color:#484848; margin-left:15px; margin-right:8px; height:21px; float:left;}
+.homepageImageSex {top:116px; left:5px; width:20px; height:20px; background:url(../images/homepage_icon.png) -10px -112px no-repeat; float:left;}
+.homepageImageSexMan {top:116px; left:5px; width:20px; height:20px; background:url(../images/homepage_icon.png) -10px -112px no-repeat; float:left;}
+.homepageImageSexWomen {width: 20px;height: 20px;background: url(../images/homepage_icon.png) -10px -149px no-repeat;float: left;}
+.homepageSignatureTextarea {width:207px; height:80px; max-width:207px; max-height:80px; border:1px solid #d9d9d9; outline:none; margin:0px 0px 12px 15px;;}
+.homepageSignature {font-size:12px; color:#888888; margin-left:15px; margin-top:10px; margin-bottom:12px; width:208px;}
+.homepageImageBlock {margin:0 auto; width:78px; float:left; text-align:center; display:inline-block;}
+.homepageImageNumber {font-size:12px; color:#484848;}
+a.homepageImageNumber:hover {color:#15bccf;}
+.homepageImageText {font-size:12px; color:#888888;}
+.homepageVerDiv {height:28px; vertical-align:middle; width:1px; float:left; display:inline-block; background-color:#d1d1d1; margin-top:3px;}
+.homepageLeftMenuContainer {width:238px; border:1px solid #dddddd; border-bottom:none; background-color:#ffffff; margin-top:10px;}
+.homepageLeftMenuBlock {border-bottom:1px solid #dddddd; height:50px; line-height:50px; vertical-align:middle;}
+.homepageLeftMenuCourses {font-size:14px; border-bottom:1px solid #dddddd;}
+.homepageLeftMenuCoursesLine {padding-left:25px; height:38px; line-height:38px; vertical-align:middle;}
+.homepageLeftMenuCoursesLine:hover {background-color:#b3e0ee;}
+a.coursesLineGrey {color:#808080; display:block;}
+a.coursesLineGrey:hover {color:#ffffff;}
+.homepageLeftMenuMore {height:18px;}
+.homepageLeftMenuMore:hover {background-color:#b3e0ee;}
+.homepageLeftMenuMoreIcon {background:url(../images/homepage_icon.png) -74px -240px no-repeat; display:block; height:18px;}
+.homepageMenuSetting {display:inline-block; margin-right: 17px; margin-top: 18px;}
+a.homepageMenuText {color:#484848; font-size:16px; margin-left:20px;}
+.homepageLeftLabelContainer {width:238px; border:1px solid #dddddd; background-color:#ffffff; margin-top:10px;}
+.homepageLabelText {color:#484848; font-size:16px; margin-left:10px; margin-bottom:12px; display:block;}
+.homepageRightBanner {width:720px; height:34px; margin:0px auto; border-bottom:1px solid #e9e9e9;}
+.NewsBannerName {font-size:16px; color:#4b4b4b; display:block; background:url(../images/homepage_icon.png) -18px -230px no-repeat; width:150px; float:left; padding-left:15px; margin-top:4px;}
+.newsType {width:60px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:5px 10px; left:-40px; font-size:12px; color:#888888; display:none; line-height:2; z-index:9999;}
+.newsReadSetting {width:700px; background-color:#f6f6f6; border-bottom:1px solid #eeeeee; margin:10px auto; height:39px; line-height:39px; vertical-align:middle; font-size:14px; color:#7a7a7a; padding-left:10px;}
+.homepageNewsList {width:710px; height:49px; line-height:49px; vertical-align:middle; border-bottom:1px dashed #eaeaea; margin-left:10px;}
+.homepageNewsPortrait {width:40px; display:block; margin-top:7px;}
+.homepageNewsPublisher {width:80px; max-width:80px; margin-right:10px; font-size:12px; color:#15bccf; display:block; padding-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
+.homepageNewsType {width:95px; font-size:12px; color:#888888; display:block;}
+.homepageNewsContent {width:395px; max-width:395px; margin-right:10px; font-size:12px; color:#4b4b4b; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
+.homepageNewsTime {width:75px; font-size:12px; color:#888888; display:block; text-align:right;}
+a.homepageWhite {color:#ffffff !important;}
+a.homepageWhite:hover {color:#a1ebff !important;}
+a.newsGrey {color:#4b4b4b;}
+a.newsGrey:hover {color:#000000;}
+a.replyGrey {color:#888888; display:inline-block;}
+a.replyGrey:hover {color:#4b4b4b;}
+a.replyGrey1 {color:#888888;}
+a.replyGrey1:hover {color:#4b4b4b;}
+a.newsBlue {color:#15bccf;}
+a.newsBlue:hover {color:#0781b4;}
+a.menuGrey {color:#808080 !important;}
+a.menuGrey:hover {color:#fe7d68 !important;}
+.navSearchTypeBox {width:368px; height:35px; position:absolute; border:1px solid #e1e1e1; background-color:#ffffff; padding-left:10px; display:none; color:#3e3e3e; font-size:14px;}
+#navSearchAlert {display:none;}
+.none{display: none;}
+.db {display:block !important;}
+
+/*myctrip*/
+.userImage{position:absolute; right:140px; top:5px; width:30px;height:30px; background: url(../images/item.png) 2px 4px no-repeat; line-height:1.4;}
+a.topnav_login_a{color:#fff; display:inline-block;}
+a.topnav_login_a:hover {color:#a1ebff;}
+a.topnav_login_mes{color:#fff; width:10px;height:20px; padding-left:15px; background: url(../images/item.png) -84px -145px no-repeat; display:inline-block; vertical-align:top;}
+a.topnav_login_mes:hover {color:#a1ebff;}
+a.topnav_login_box{ color:#fff; font-size:14px; font-weight:bold; width:90px; display:inline-block;}
+.menuArrow {background:url(../images/item.png) -20px -40px no-repeat;}
+li.menuArrow:hover {background:url(../images/item.png) -20px -70px no-repeat;}
+a.topnav_login_box:hover {color:#a1ebff;}
+.navRow1 {margin:0; padding:0;}
+.navRow2 {margin:0; padding:0;}
+.topnav_login_list{ border:1px solid #eaeaea; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-7px; position:absolute; z-index:9999; line-height:2; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); margin-top: 1px; font-size: 12px;}
+.topnav_login_list a{color:#269ac9;}
+.topnav_login_list li{ }
+.portraitRadius {border-radius: 3px;}
+
+/*底部*/
+#Footer{background-color:#ffffff; padding-bottom:15px; color:#666666;} /*margin-bottom:10px;*/
+.footerAboutContainer {width:auto; border-bottom:1px solid #efefef;}
+.footerAbout{ width:485px; margin:0 auto;height:35px; line-height:35px; padding-top: 10px;}
+.languageBox {width:55px; height:20px; margin-left:5px; outline:none; color:#666666; border:1px solid #d9d9d9;}
+.departments{ width:950px; margin:5px auto 0 auto;height:30px;line-height:30px;}
+.copyright{ width:375px; margin:0 auto;height:20px;line-height:20px;}
+a.f_grey {color:#666666 !important;}
+a.f_grey:hover {color:#000000 !important;}
+.mr30 {margin-right: 30px;}
+
+
+/*注册登陆页面*/
+#loginSignButton {height:54px; padding-left:10px; padding-right:10px; text-align:center; line-height:54px; vertical-align:middle; color:#ffffff; font-size:16px;}
+#loginInButton {height:54px; padding-left:10px; padding-right:10px; text-align:center; line-height:54px; vertical-align:middle; color:#ffffff; font-size:16px;}
+#loginSignButton:hover {background-color:#297fb8;}
+#loginInButton:hover {background-color:#297fb8;}
diff --git a/public/stylesheets/new_user.css b/public/stylesheets/new_user.css
index c526b3245..8ecda84d4 100644
--- a/public/stylesheets/new_user.css
+++ b/public/stylesheets/new_user.css
@@ -223,6 +223,7 @@ a:hover.bgreen_n_btn{background:#08a384;}
.upbtn{ margin:42px 0 0 10px; border:none; color:#999; width:150px;}
.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
+.grey_btn_cir{ background:#b2b2b2; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;}
.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;}
.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;}
.bgreen_btn_cir{ background:#1abc9c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;}
@@ -261,7 +262,7 @@ li.menuArrow:hover {background:url(../images/item.png) -20px -70px no-repeat;}
a.topnav_login_box:hover {color:#a1ebff;}
.navRow1 {margin:0; padding:0;}
.navRow2 {margin:0; padding:0;}
-.topnav_login_list{ border:1px solid #269ac9; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-7px; position:absolute; z-index:9999; line-height:2;}
+.topnav_login_list{ border:1px solid #eaeaea; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-7px; position:absolute; z-index:9999; line-height:2; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); margin-top: 1px;}
.topnav_login_list a{color:#269ac9;}
.topnav_login_list li{ }
@@ -478,9 +479,9 @@ a.homepageSearchIcon:hover {background:url(../images/nav_icon.png) -49px 3px no-
.homepageImageSexWomen {width: 20px;height: 20px;background: url(../images/homepage_icon.png) -10px -149px no-repeat;float: left;}
a.UsersEditBtn{ display:block; width:55px; height:20px; border:1px solid #6d6d6d; color:#fff; background:#888888 url(../images/homepage_icon.png) -11px -35px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
a:hover.UsersEditBtn{ color:#484848; background:#888888 url(../images/homepage_icon.png) -11px -74px no-repeat;}
-a.UsersAttBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon.png) -9px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
+a.UsersAttBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon2.png) -9px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
a:hover.UsersAttBtn{border:1px solid #888888; }
-a.UsersApBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon.png) -177px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
+a.UsersApBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon2.png) -177px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
a:hover.UsersApBtn{border:1px solid #888888; }
.homepageSignatureTextarea {width:207px; height:80px; max-width:207px; max-height:80px; border:1px solid #d9d9d9; outline:none; margin:0px 0px 12px 0px;}
.homepageSignature {font-size:12px; color:#888888; margin:10px 0; width:208px;}
@@ -515,11 +516,16 @@ a.homepageMenuText {color:#484848; font-size:16px; margin-left:20px;}
.homepageNewsType {width:110px; padding-left: 5px; font-size:12px; color:#888888; display:block;}
.homepageNewsPubType {width:220px; font-size:12px; color:#888888; display: block;}
.homepageNewsContent {width:365px; max-width:365px; margin-right:10px; font-size:12px; color:#4b4b4b; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;max-height: 49px; }
+.homepageHomeworkContentWarn {width:110px; max-width:365px; margin-right:10px; font-size:12px; color:red; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;max-height: 49px; }
+.homepageHomeworkContent {width:245px; max-width:365px; margin-right:10px; font-size:12px; color:#4b4b4b; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;max-height: 49px; }
+
.homepageNewsTime {width:75px; font-size:12px; color:#888888; display:block; text-align:right;}
a.homepageWhite {color:#ffffff;}
a.homepageWhite:hover {color:#a1ebff}
a.newsGrey {color:#4b4b4b;}
a.newsGrey:hover {color:#000000;}
+a.newsRed {color:red;}
+a.newsRed:hovor {color:#888888;}
a.replyGrey {color:#888888; display:inline-block;}
a.replyGrey:hover {color:#4b4b4b;}
a.replyGrey1 {color:#888888;}
@@ -542,7 +548,8 @@ a.homepagePostTypeNotice {background:url(../images/homepage_icon.png) -87px -280
a.homepagePostTypeForum {background:url(../images/homepage_icon.png) -10px -310px no-repeat; padding-left:23px;}
a.homepagePostTypeQuiz {background:url(../images/homepage_icon.png) -90px -124px no-repeat; padding-left:23px;}
a.homepagePostTypeQuestion {background:url(../images/homepage_icon.png) -10px -273px no-repeat; padding-left:23px;}
-a.homepagePostTypeAll {background:url(../images/homepage_icon2.png) -10px -360px no-repeat; padding-left:23px;}
+a.homepagePostTypeMine {background:url(../images/homepage_icon.png) -187px -277px no-repeat; padding-left:23px;}
+a.homepagePostTypeAll {background:url(../images/homepage_icon.png) -185px -308px no-repeat; padding-left:23px;}
a.postTypeGrey {color:#888888;}
a.postTypeGrey:hover {color:#269ac9;}
.homepagePostBrief {width:710px; margin:0px auto; position:relative;}
@@ -562,7 +569,7 @@ a.postTypeGrey:hover {color:#269ac9;}
.homepagePostReplyBannerCount{width:255px; display:inline-block; margin-left:20px;}
.homepagePostReplyBannerTime{width:85px; display:inline-block;}
.homepagePostReplyBannerMore{width:330px; display:inline-block; text-align:right;}
-.homepagePostReplyInputContainer {width:680px; margin: 10px auto 0 auto;}
+.homepagePostReplyInputContainer {width:630px; float:left;}
.homepagePostReplyInput {width:663px; height:45px; max-width:663px; max-height:45px; border:1px solid #d9d9d9; outline:none; margin:20px auto 10px auto;}
.homepagePostReplyEmotion {background:url(../images/homepage_icon.png) -90px -88px no-repeat; width:50px; height:24px; float:left; padding-left:30px;}
.homepagePostReplySubmit {float:right; width:45px; height:24px; text-align:center; line-height:24px; vertical-align:middle; font-size:12px; color:#ffffff; background-color:#269ac9;}
@@ -574,7 +581,7 @@ a.postReplyCancel {color:#888888; display:block;}
a.postReplyCancel:hover {color:#ffffff;}
.homepagePostReplyInputContainer2 {width:595px; margin:0px auto;}
.homepagePostReplyInput2 {width:588px; height:45px; max-width:588px; max-height:45px; border:1px solid #d9d9d9; outline:none; margin:0px auto 10px auto;}
-.homepagePostReplyContainer {border-bottom:1px solid #e3e3e3; width:680px; margin:0px auto; margin-top:15px; min-height:60px;}
+.homepagePostReplyContainer {border-bottom:1px solid #e3e3e3; width:680px; margin:0px auto; margin-top:18px; min-height:48px;}
.homepagePostSetting {position:absolute; width:20px; height:20px; right:0px; top:0px;}
.homepagePostSetting ul li:hover ul {display:block;}
.homepagePostSettingIcon {background:url(../images/homepage_icon.png) -93px -5px no-repeat; width:20px; height:20px;}
@@ -582,8 +589,9 @@ a.postReplyCancel:hover {color:#ffffff;}
.homepagePostSettingIcon:hover {background:url(../images/homepage_icon.png) -93px -44px no-repeat;}
a.postOptionLink {color:#616060; display:block; width:55px; padding:0px 15px;}
a.postOptionLink:hover {color:#ffffff; background-color:#269ac9;}
-.homepagePostReplyPortrait {float:left; width:45px;}
-.homepagePostReplyDes {float:left; width:620px; margin-left:15px;}
+.homepagePostReplyPortrait {float:left; width:33px;}
+.imageFuzzy {filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity:0.5;opacity: 0.5;}
+.homepagePostReplyDes {float:left; width:632px; margin-left:15px;}
.homepagePostReplyPublisher {font-size:12px; color:#888888; margin-bottom:5px;}
.homepagePostReplyContent {font-size:12px; color:#484848; margin-bottom:12px;}
.homepagePostProjectState {width:52px; height:20px; line-height:20px; border-radius:1px; background-color:#28be6c; color:#ffffff; text-align:center; vertical-align:middle; font-size:12px; display:inline-block; margin-left:5px;}
@@ -665,16 +673,20 @@ a.referenceTypeBlock {color:#888888; display:inline-block; padding:0px 20px;}
/*20150826忘记密码 LB*/
-.BgBox{ width:968px; border:1px solid #dddddd; background:#fff; padding:15px; padding-top:10px;margin: 10px auto 20px auto;}
+.BgBox{ width:968px; border:1px solid #dddddd; background:#fff; padding:15px; padding-top:10px; margin:20px auto;}
.BgBox_h2{ font-size:16px; color:#484848; width:968px;border-bottom:1px solid #e3e3e3; padding-bottom:5px;}
-.NomalInput{width:308px; height:38px; border:1px solid #98a1a6 !important; outline:none; color:#888888; font-size:14px;}
-.BgBoxCon{ width:310px; margin:80px auto;}
+.NomalInput{width:308px; height:38px; border:1px solid #98a1a6; outline:none; color:#888888; font-size:14px;}
+.BgBoxCon{ width:310px; margin:140px auto 520px;}
.BgBoxConP{ font-size:14px; color:#484848;}
.LoginButton {width:315px; height:40px; background-color:#269ac9; font-size:14px; text-align:center; line-height:40px; vertical-align:middle;}
.LoginButton:hover {background-color:#297fb8;}
/*20150826协议 LB*/
.AgreementBox{ margin:20px 0; color:#666666; font-size:14px; line-height:1.9;}
-.Agreementh4{ color:#2980b9; font-weight:bold; font-size:14px; margin-top:30px; border: none;}
+.Agreementh4{ color:#2980b9; font-weight:bold; font-size:14px; margin-top:30px;}
+.AgreementTxt{text-indent:2em; margin-bottom:15px;}
+.AgreementImg{ margin:0px auto; width:619px;}
+.AgreementTxt{text-indent: 2em; margin-bottom: 15px;}
+.AgreementImg{margin: 0px auto; width: 820px;}
/*底部*/
#Footer{background-color:#ffffff; padding-bottom:15px; color:#666666;} /*margin-bottom:10px;*/
@@ -859,8 +871,6 @@ a:hover.BlueCirBtn{ background:#269ac9; color:#fff;}
.w720{width:721px;}
.w709{width: 709px;}
.w701{width: 701px;}
-a.AnnexBtn{ background: url(../images/homepage_icon2.png) 0px -343px no-repeat; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
-a:hover.AnnexBtn{background: url(../images/homepage_icon2.png) -90px -343px no-repeat; color:#269ac9;}
a.FilesBtn{ background: url(../images/homepage_icon2.png) 0px -373px no-repeat; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
a:hover.FilesBtn{background: url(../images/homepage_icon2.png) -89px -372px no-repeat; color:#269ac9;}
a.BlueCirBtnMini{ display:block;width:40px; height:22px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #269ac9; color:#269ac9; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
@@ -877,13 +887,13 @@ a:hover.BlueCirBtn{ background:#3598db; color:#fff;}
.W440{ width:440px;}
.W120{ width:110px;}
.W700{ width:700px;}
-a.AnnexBtn{ background: url(../images/homepage_icon.png) 0px -343px no-repeat; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
+a.AnnexBtn{ background: url(../images/homepage_icon.png) 0px -343px no-repeat; width:50px; height:20px; display:block; padding-left:20px; color:#888888;}
a:hover.AnnexBtn{background: url(../images/homepage_icon.png) -90px -343px no-repeat; color:#3598db;}
-a.FilesBtn{ background: url(../images/homepage_icon.png) 0px -373px no-repeat; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
+a.FilesBtn{ background: url(../images/homepage_icon.png) 0px -373px no-repeat; width:38px; height:20px; display:block; padding-left:20px; color:#888888;}
a:hover.FilesBtn{background: url(../images/homepage_icon.png) -89px -372px no-repeat; color:#3598db;}
a.BlueCirBtnMini{ display:block;width:40px; height:22px; background-color:#ffffff; line-height:24px; vertical-align:middle; text-align:center; border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.BlueCirBtnMini{ background:#3598db; color:#fff;}
-a.ProBtn{background: url(../images/homepage_icon.png) -86px -396px no-repeat; width:35px; height:20px; display:block; padding-left:20px; color:#888888;}
+a.ProBtn{background: url(../images/homepage_icon.png) -86px -396px no-repeat; width:30px; height:20px; display:block; padding-left:20px; color:#888888;}
a:hover.ProBtn{background: url(../images/homepage_icon.png) -86px -426px no-repeat; color:#3598db;}
a.DropBtn{background: url(../images/homepage_icon.png) -125px -339px no-repeat; width:85px; height:20px; display:block; color:#888888; font-size:14px;}
@@ -907,6 +917,7 @@ a:hover.icon_remove{background:url(../images/course/icons.png) -20px -338px no-r
.ProResultCon{ padding:10px; color:#888888; line-height:24px; border-bottom:1px solid #dddddd; }
.W50{ width:50px;}
.W200{ width:200px;}
+.m_w530{max-width: 530px;}
.ProResultTable{ color:#888888;}
.T_C{ text-align:center;}
.SearchIcon{background:url(../images/homepage_icon2.png) 676px -393px no-repeat; }
@@ -922,16 +933,16 @@ a.FilesName02{ max-width:665px;overflow:hidden; white-space:nowrap; text-overflo
a.UsersEditBtn{ display:block; width:55px; height:20px; border:1px solid #6d6d6d; color:#fff; background:#888888 url(../images/homepage_icon.png) -11px -35px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
a:hover.UsersEditBtn{ color:#484848; background:#888888 url(../images/homepage_icon.png) -11px -74px no-repeat;}
-a.UsersAttBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon.png) -9px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
+a.UsersAttBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon2.png) -9px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
a:hover.UsersAttBtn{border:1px solid #888888; }
-a.UsersApBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon.png) -177px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
+a.UsersApBtn{ display:block; width:55px; height:20px; border:1px solid #d3d3d3; color:#888888; background:#f2f3f3 url(../images/homepage_icon2.png) -177px -6px no-repeat; padding-left:25px; line-height:1.9;-moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px;}
a:hover.UsersApBtn{border:1px solid #888888; }
/*20150906编程作业设置弹框 LB*/
.C_lgrey{ color:#a5a5a5;}
.C_Blue{ color:#3598db;}
a.C_Blue{ color:#3598db;}
a:hover.C_Blue{ color:#297fb8;}
-.BluePopupBox{ border:3px solid #3598db; padding:20px; background:#fff; width:707px;}
+.BluePopupBox{ padding:20px; background:#fff; width:707px;}
/*.BluePopupBox:hover{ border:3px solid #297fb8; }*/
a.CloseBtn{background:url(../images/CloseBtn.png) 0px 0px no-repeat; width:13px; height:13px; display:block; float:right;}
a:hover.CloseBtn{background:url(../images/CloseBtn.png) 0px -24px no-repeat; }
@@ -979,6 +990,8 @@ img.ui-datepicker-trigger {
margin-bottom: 3px;
}
.message_title{border: 1px solid #D4D4D4;padding: 0.6em;margin-left: 1.4em;margin-right: 0.4em;border-radius: 4px;font-family: "Microsoft YaHei";background-size: 100% 100%;margin-bottom: 5px;background-color: #E8E8E8;}
+.message_title_red{border: 1px solid #D4D4D4;padding: 0.6em;margin-left: 1.4em;margin-right: 0.4em;border-radius: 4px;font-family: "Microsoft YaHei";background-size: 100% 100%;margin-bottom: 5px;background-color: #E8E8E8;color: red}
+
.description{display: none !important;}
.ispublic-label{display: none !important;}
.is_public_checkbox{display: none !important;}
@@ -1107,3 +1120,29 @@ a:hover.tijiao{ background:#0f99a9;}
#cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
#cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
#cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
+
+/*20150906关联项目LB*/
+a.RalationIcon{ background: url(../images/homepage_icon.png) -183px -396px no-repeat; width:70px; height:20px; display:block; padding-left:20px; color:#888888;}
+a:hover.RalationIcon{background: url(../images/homepage_icon.png) -183px -428px no-repeat; color:#3598db;}
+a.SetUpIcon{background: url(../images/homepage_icon.png) 0px -453px no-repeat; width:20px; height:20px; display:block; color:#888888;}
+a:hover.SetUpIcon{background: url(../images/homepage_icon.png) 0px -486px no-repeat; color:#3598db;}
+.W680{ width:680px;}
+.W710{ width:708px;}
+
+/* 开启匿评弹框 */
+.anonymos{width:480px;height:180px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}
+.anonymos_work {position:fixed !important;left:60%;top:60%;margin:-215px 0 0 -300px; box-shadow:0px 0px 8px #194a81; overflow:auto;}
+.ni_con { width:425px; margin:25px 30px;}
+.ni_con h2{ display:block; height:40px; width:425px; text-align:center; color:#3a3a3a;}
+.ni_con p{ color:#808181; }
+.ni_con a:hover{ text-decoration:none;}
+.ni_btn{ width:190px; margin:15px auto; line-height:1.9;}
+a.tijiao{ height:28px; display:block; width:80px; color:#fff; background:#15bccf; text-align:center; padding-top:4px; float:left; margin-right:15px;}
+a:hover.tijiao{ background:#0f99a9;}
+.c_pink{ color:#e65d5e;}
+.ni_con_work { width:300px; margin:25px 20px;}
+.ni_con_work p{ color:#808181; }
+
+a.link_file_a{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; }
+a:hover.link_file_a{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
+.link_file_a{ display:block; max-width:450px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css
index 5ff90bb43..dc5ab607f 100644
--- a/public/stylesheets/public.css
+++ b/public/stylesheets/public.css
@@ -1,4 +1,5 @@
/* CSS Document */
+/* 2015-06-26 */
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{ margin:0; padding:0;}
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体"; font-size:12px;line-height:1.5; background:#eaebec;}
div,img,tr,td,table{ border:0;}
@@ -8,9 +9,10 @@ a:link,a:visited{color:#7f7f7f;text-decoration:none;}
a:hover,a:active{color:#000;}
a:hover {text-decoration: none; }
textarea {resize: none;}
+.pInline {margin:0px; padding:0px; display:inline-block;}
/*常用*/
-select,input,textarea{ border:1px solid #64bdd9; background:#fff; color:#000; padding-left:5px; }
+select,input,textarea{ border:1px solid #269ac9; background:#fff; color:#000; padding-left:5px; }
.sub_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #707070; color:#000; border-radius:3px; padding:1px 10px; margin-bottom:10px; background:#dbdbdb;}
.sub_btn:hover{ background:#b5e2fa; color:#000; border:1px solid #3c7fb1;}
table{ background:#fff;}
@@ -19,7 +21,8 @@ table{ background:#fff;}
.line{border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;}
.no_border{ border:none;}
.min_search{ width:150px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/new_project/public_icon.png) 135px -193px no-repeat;}
-
+a.btn_message_free{ background:#ff5722; display:block; text-align:center; color:#fff; padding:3px 0; width:80px; margin-bottom:10px;}
+.db {display:block;}
/* font & color */
h2{ font-size:18px; color:#15bccf;}
h3{ font-size:14px; color:#e8770d;}
@@ -28,6 +31,7 @@ h4{ font-size:14px; color:#3b3b3b;}
.f14{font-size:14px;}
.f16{font-size:16px;}
.f18{font-size:18px;}
+.f20{font-size:20px;}
.fb{font-weight:bold;}
.lh20{line-height:20px;}
.lh22{line-height:22px;}
@@ -49,6 +53,8 @@ h4{ font-size:14px; color:#3b3b3b;}
.break_word{ word-break:break-all; word-wrap: break-word;}
.hidden{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
.flow_hidden{ width:300px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+.white_space{white-space:nowrap;}
+.pr {position:relative;}
/* Spacing */
.ml2{ margin-left:2px;}
@@ -71,10 +77,15 @@ h4{ font-size:14px; color:#3b3b3b;}
.ml100{ margin-left:100px;}
.ml110{ margin-left:110px;}
.ml320{ margin-left:320px;}
+.ml150 { margin-left:150px;}
+.mr-5 {margin-right:-5px;}
.mr5{ margin-right:5px;}
+.mr45 {margin-right:45px;}
+.mr55{ margin-right:55px;}
.mr10{ margin-right:10px;}
-.mr15 {margin-right: 15px;}
+.mr15 {margin-right:15px;}
.mr20{ margin-right:20px;}
+.mr25 {margin-right:25px;}
.mr30{ margin-right:30px;}
.mr40{ margin-right:40px;}
.mr45{margin-right: 45px;}
@@ -82,22 +93,28 @@ h4{ font-size:14px; color:#3b3b3b;}
.mr55{margin-right: 55px;}
.mr70{margin-right: 70px;}
.mw15{margin:0 15px;}
-.mw20{margin:0 20px;}
+.mw20{ margin: 0 20px;}
.mt1{margin-top: 1px;}
+.mt-4 {margin-top:-4px;}
+.mt0 {margin-top:0px !important;}
.mt3{ margin-top:3px;}
.mt5{ margin-top:5px;}
.mt8{ margin-top:8px;}
-.mt10{ margin-top:10px;}
+.mt10{ margin-top:10px !important;}
.mt30{ margin-top: 30px;}
+.mt12 { margin-top:12px;}
+.mt15 {margin-top:15px;}
+.mt19 {margin-top:19px !important;}
+.mb4{ margin-bottom:4px;}
.mb5{ margin-bottom:5px;}
-.mb8{ margin-bottom:8px;}
-.mb10{ margin-bottom:10px;}
+.mb8 {margin-bottom:8px;}
+.mb10{ margin-bottom:10px !important;}
.mb20{ margin-bottom:20px;}
.pl15{ padding-left:15px;}
.w20{ width:20px;}
.w40{width: 40px;}
.w45{ width: 45px;}
-.w50{ width:50px;}
+.w50 {width:50px;}
.w60{ width:60px;}
.w70{ width:70px;}
.w90{ width:90px;}
@@ -107,6 +124,7 @@ h4{ font-size:14px; color:#3b3b3b;}
.w280{ width:280px;}
.w265{ width: 265px;}
.w270{ width: 270px;}
+.w350 {width:350px;}
.w430{ width:470px;}
.w520{ width:520px;}
.w543{ width:543px;}
@@ -122,6 +140,7 @@ h4{ font-size:14px; color:#3b3b3b;}
.h50{ height:50px;}
.h70{ height:70px;}
.h150{ height:150px;}
+.p10 {padding-left:10px; padding-right:10px;}
/* Font & background Color */
a.b_grey{ background: #F5F5F5;}
@@ -165,10 +184,46 @@ a.c_green{ color:#28be6c;}
.b_green{background:#28be6c;}
.b_w{ background:#fff;}
+/*add by Tim*/
+.fontGrey {color:#cecece;}
+.fontGrey2 {color:#888888;}
+.fontGrey3 {color:#484848;}
+.fontBlue {color:#3498db;}
+a.underline {text-decoration:underline;}
+a.fontBlue {color:#297fb8;}
+a.fontGrey {color:#cecece;}
+a.fontGrey2 {color:#888888;}
+a.linkOrange {color:#ff7143;}
+a.linkBlue {color:#269ac9;}
+a.linkBlue:hover {color:#297fb8;}
+a.linkBlue2 {color:#3498db;}
+a.linkBlue2:hover {color:#297fb8;}
+a.buttonBlue {background-color:#269ac9;}
+a.buttonBlue:hover {background-color:#297fb8;}
+a.linkGrey {color:#484848;}
+a.linkGrey:hover {color:#269ac9;}
+a.linkGrey2 {color:#888888;}
+a.linkGrey2:hover {color:#484848;}
+a.linkGrey3 {color:#484848;}
+a.linkGrey3:hover {color:#000000;}
+a.linkGrey4 {color:#484848;}
+a.linkGrey4:hover {color:#297fb8;}
+a.linkGrey5 {color:#484848;}
+a.linkGrey5:hover {color:#3498db;}
+a.linkGrey6 {color:#484848 !important;}
+a.linkGrey6:hover {color:#ffffff !important;}
+a.bBlue {background-color:#3498db;}
+a.bBlue:hover {background-color:#297fb8;}
+a.submit_btn {border:1px solid #3498db; padding:3px 10px; border-radius:3px; color:#3498db;}
+a.submit_btn:hover {background-color:#3498db; color:#ffffff;}
+
/* commonBtn */
.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center;padding:2px 10px;}
a.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center;padding:2px 10px;}
a:hover.grey_btn{ background:#717171; color:#fff;}
+.grey_n_btn{ background:#d9d9d9; color:#656565; font-weight:normal;padding:2px 10px; text-align:center;}
+a.grey_n_btn{background:#d9d9d9; color:#656565;font-weight:normal; padding:2px 10px; text-align:center;}
+a:hover.grey_n_btn{ background:#717171; color:#fff;}
.green_btn{ background:#28be6c; color:#fff; font-size:14px; font-weight:normal;padding:2px 8px; text-align:center;}
a.green_btn{background:#28be6c;color:#fff;font-size:14px; font-weight:normal; padding:2px 8px; text-align:center;cursor: pointer;}
a:hover.green_btn{ background:#14ad5a;}
@@ -196,6 +251,15 @@ a:hover.blue_u_btn{background:#64bdd9; color:#fff;}
.blue_n_btn{ background:#64bdd9; color:#fff; font-weight:normal;padding:2px 10px; text-align:center;}
a.blue_n_btn{background:#64bdd9;color:#fff;font-weight:normal; padding:2px 10px; text-align:center;}
a:hover.blue_n_btn{ background:#329cbd;}
+.green_n_btn{background:#3cb761; padding:2px 10px; color:#fff;}
+a.green_n_btn{background:#3cb761; padding:2px 10px; color:#fff;}
+a:hover.green_n_btn{ background:#14ad5a;}
+.orange_n_btn{background:#ff5d31; padding:2px 10px; color:#fff;}
+a.orange_n_btn{background:#ff5d31; padding:2px 10px; color:#fff;}
+a:hover.orange_n_btn{background:#d63502;}
+.bgreen_n_btn{background:#1abc9c; padding:2px 10px; color:#fff;}
+a.bgreen_n_btn{background:#1abc9c; padding:2px 10px; color:#fff;}
+a:hover.bgreen_n_btn{background:#08a384;}
.nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;}
.more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;}
@@ -225,7 +289,7 @@ a:hover.blue_n_btn{ background:#329cbd;}
/*框架主类容*/
-#Container{ width:940px; margin:0 auto; }
+#Container{ width:1000px; margin:0 auto; }
/*头部导航*/
#Header{ margin:10px 0; background:#15bccf; height:40px; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; }
@@ -234,6 +298,18 @@ a:hover.blue_n_btn{ background:#329cbd;}
#TopNav ul li{ margin-top:8px;}
.topnav_a a{ font-size:14px; font-weight:bold; color:#fff; margin-right:10px;}
.topnav_a a:hover{color: #a1ebff;}
+#userInfo {float:right; display:inline-block; width:130px; padding-top:5px;}
+.userInfoRow2 {margin-top:-5px;}
+.myPractice {display:inline-block;}
+a.parent {background: url(../images/arrowList.png) -30px 3px no-repeat; width:95px; padding-right:50px;}
+a.parent:hover {background: url(../images/arrowList.png) -30px -14px no-repeat; width:95px; padding-right:50px; color:#fe7d68;}
+a.linkToOrange:hover {color:#fe7d68;}
+#userInfo ul li {positon: relative;}
+#userInfo ul li ul {display:none;}
+#userInfo ul li:hover ul {display:block; position:absolute;}
+#userInfo ul li:hover ul li ul {display:none;}
+#userInfo ul li:hover ul li:hover ul {display:block; position:absolute; left:110px; top:6px; width:148px; border:1px solid #15bccf; background-color:#ffffff; padding:5px 0px;}
+#userInfo ul li:hover ul li:hover ul li {max-width:148px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; display:block; padding: 0 10px; line-height:1.5; color:#15bccf;}
#TopUser{}
#TopUser ul li{ margin-top:8px;}
.topuser_a a{ font-size:14px; font-weight:bold; color:#fff; margin-right:10px;}
@@ -275,6 +351,22 @@ div#menu ul ul li {width: 100%;}
div#menu ul ul ul {padding: 0;margin: -38px 0 0 90px !important; width:200px; }
div#menu ul ul ul li a{ width:185px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf;}
+/*myctrip*/
+.userImage{position:absolute; right:140px; top:5px; width:30px;height:30px; background: url(../images/item.png) 2px 4px no-repeat; line-height:1.4;}
+a.topnav_login_a{color:#fff; display:inline-block;}
+a.topnav_login_a:hover {color:#a1ebff;}
+a.topnav_login_mes{color:#fff; width:10px;height:20px; padding-left:15px; background: url(../images/item.png) -84px -145px no-repeat; display:inline-block; vertical-align:top;}
+a.topnav_login_mes:hover {color:#a1ebff;}
+a.topnav_login_box{ color:#fff; font-size:14px; font-weight:bold; width:90px; display:inline-block;}
+.menuArrow {background:url(../images/item.png) -20px -40px no-repeat;}
+li.menuArrow:hover {background:url(../images/item.png) -20px -70px no-repeat;}
+a.topnav_login_box:hover {color:#a1ebff;}
+.navRow1 {margin:0; padding:0;}
+.navRow2 {margin:0; padding:0;}
+.topnav_login_list{ border:1px solid #269ac9; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-7px; position:absolute; z-index:9999; line-height:2;}
+.topnav_login_list a{color:#15bccf;}
+.topnav_login_list li{ }
+
/*主类容*/
#Main{ background:#fff; margin-bottom:10px;}
#content{}
@@ -294,10 +386,322 @@ a:hover.search_btn{ background: #0fa9bb;}
#RSide{ width:670px; margin-left:10px; background:#fff; padding:10px; margin-bottom:10px;}
+/*资源库*/
+.resources {width:728px; background-color:#ffffff; padding:10px 10px 20px 10px; border:1px solid #dddddd;}
+.resourcesBanner {width:730px; height:40px; background-color:#eaeaea; margin-bottom:10px;}
+.bannerName {background:#64bdd9; color:#ffffff; height:40px; line-height:40px; width:90px; text-align:center; font-weight:normal; vertical-align:middle; font-size: 16px; float:left;}
+.resourcesSelect {width:30px; height:34px; float:right; position:relative; margin-top:-6px;}
+.resourcesSelected {width:25px; height:20px; position:relative; background:url(../images/resource_icon_list.png) 0px 0px no-repeat;}
+.resourcesSelected:hover { background:url(../images/resource_icon_list.png) 0px -25px no-repeat;}
+.resourcesIcon {margin-top:15px; display:block; width:25px; height:20px;}
+.resourcesType {width:75px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:10px 20px; left:-90px; font-size:12px; color:#888888; display:none; line-height:2;}
+a.resourcesTypeAll {background:url(../images/homepage_icon.png) -180px -89px no-repeat; padding-left:23px;}
+a.resourcesTypeAtt {background:url(../images/homepage_icon.png) -180px -49px no-repeat; padding-left:23px;}
+a.resourcesGrey {font-size:12px; color:#888888;}
+a.resourcesGrey:hover {font-size:12px; color:#269ac9;}
+.resourcesBanner ul li:hover ul.resourcesType {display:block;}
+ul li:hover ul {display:block;}
+.resourcesUploadBox {float:right; width:103px; height:34px; background-color:#269ac9; line-height:34px; vertical-align:middle; text-align:center; margin-left:12px;}
+.resourcesUploadBox:hover {background-color:#297fb8;}
+a.uploadBoxIcon {background:url(../images/resource_icon_list.png) -35px 10px no-repeat; float:left; display:block; width:81px; height:30px; padding-left:22px; font-size:14px; color:#ffffff;}
+.resourcesSearchloadBox {border:1px solid #e6e6e6; width:225px; float:left; background-color:#ffffff;}
+.searchResource {border:none; outline:none; background-color:#ffffff; width:184px; height:32px; padding-left:10px; display:block; float:left;}
+.searchIcon{width:31px; height:32px; background-color:#ffffff; background:url(../images/resource_icon_list.png) -40px -15px no-repeat; display:block; float:left;}
+.resourcesSearchBanner {width:710px; height:34px; margin-bottom:10px; margin-top:15px; margin-left:auto; margin-right:auto;}
+.resourcesListTab {width:710px; height:40px; background-color:#f6f6f6; border-bottom:1px solid #eaeaea; font-size:14px; color:#7a7a7a; margin-left:auto; margin-right:auto;}
+.resourcesListCheckbox {width:20px; height:40px; line-height:40px; text-align:center; vertical-align:middle;}
+.resourcesCheckbox {padding:0px; margin:0px; margin-top:14px; width:12px; height:12px;}
+.resourcesListName {width:160px; height:40px; line-height:40px; text-align:left;}
+.resourcesListSize {width:105px; height:40px; line-height:40px; text-align:center;}
+.resourcesListType {width:150px; height:40px; line-height:40px; text-align:center;}
+.resourcesListUploader {width:180px; height:40px; line-height:40px; text-align:center;}
+.resourcesListTime {width:95px; height:40px; line-height:40px; text-align:center;}
+.resourcesList {width:710px; height:39px; background-color:#ffffff; border-bottom:1px dashed #eaeaea; color:#9a9a9a; font-size:12px; margin-left:auto; margin-right:auto;}
+.resourcesListOption {width:710px; height:40px; line-height:40px; vertical-align:middle; margin-left:auto; margin-right:auto; background-color:#f6f6f6;}
+.resourcesCheckAll {width:20px; height:40px; line-height:40px; text-align:center; vertical-align:middle; float:left;}
+.resourcesSelectSend {float:right;}
+.resourcesSelectSendButton {width:75px; height:28px; background-color:#ffffff; line-height:28px; vertical-align:middle; margin-top:5px; margin-right:10px; margin-left:15px; text-align:center; border:1px solid #269ac9; border-radius:5px; float:right;}
+a.sendButtonBlue {color:#269ac9;}
+a.sendButtonBlue:hover {color:#ffffff;}
+.resourcesSelectSendButton:hover {background-color:#297fb8;}
+a.resourcesBlack {font-size:12px; color:#4c4c4c;}
+a.resourcesBlack:hover {font-size:12px; color:#000000;}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 80px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 12px;
+ text-align: left;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.5;
+ color:#616060;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover{
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #64bdd9;
+ outline:none;
+}
+
+/*发送资源弹窗*/
+/*.resourceShareContainer {width:100%; height:100%; background:#666; filter:alpha(opacity=50); opacity:0.5; -moz-opacity:0.5; position:absolute; left:0; top:0; z-index:-999;}*/
+.resourceSharePopup {width:300px; height:auto; border:3px solid #269ac9; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:absolute; top:50%; left:50%; margin-left:-150px; z-index:1000;}
+.sendText {font-size:16px; color:#269ac9; line-height:16px; padding-top:20px; width:100px; display:inline-block; font-weight:bold;}
+.resourcesSendTo {float:left; height:20px; margin-top:15px;}
+.resourcesSendType {border:1px solid #e6e6e6; width:60px; height:24px; outline:none; font-size:14px; color:#888888;}
+.resourcePopupClose {width:20px; height:20px; display:inline-block; float:right;}
+.resourceClose {background:url(../images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block;}
+.resourcesSearchBox {border:1px solid #e6e6e6; width:225px; height:25px; background-color:#ffffff; margin-top:12px; margin-bottom:15px;}
+.searchResourcePopup {border:none; outline:none; background-color:#ffffff; width:184px; height:25px; padding-left:10px; display:inline-block; float:left;}
+.courseSend {width:260px; height:15px; line-height:15px; margin-bottom:10px;}
+.courseSendCheckbox {padding:0px; margin:0px; width:12px; height:12px; margin-right:10px; display:inline-block; margin-top:2px;}
+.sendCourseName {font-size:12px; color:#5f6060;}
+.courseSendSubmit {width:50px; height:25px; line-height:25px; text-align:center; vertical-align:middle; background-color:#269ac9; margin-right:25px; float:left;}
+.courseSendSubmit:hover {background-color:#297fb8;}
+.courseSendCancel {width:50px; height:25px; line-height:25px; text-align:center; vertical-align:middle; background-color:#c1c1c1; float:left}
+.courseSendCancel:hover {background-color:#717171;}
+.courseReferContainer {float:left; max-height:120px; overflow:scroll; overflow-x:hidden; margin-right:16px; margin-bottom:10px;}
+a.sendSourceText {font-size:14px; color:#ffffff; display:block;}
+
+/*上传资源弹窗*/
+.resourceUploadPopup {width:400px; height:auto; border:3px solid #269ac9; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:absolute; top:50%; left:50%; margin-left:-200px; z-index:1000;}
+.uploadText {font-size:16px; color:#269ac9; line-height:16px; padding-top:15px; width:140px; display:inline-block;}
+.uploadBoxContainer {height:33px; line-height:33px; margin-top:10px; position:relative;}
+.uploadBox {width:100px; height:33px; line-height:33px; text-align:center; vertical-align:middle; background-color:#269ac9; border-radius:3px; float:left; margin-right:12px;}
+.uploadBox:hover {background-color:#297fb8;}
+a.uploadIcon {background:url(../images/resource_icon_list.png) 8px -60px no-repeat; width:100px; height:33px; display:block;}
+.chooseFile {color:#ffffff; display:block; margin-left:32px;}
+.uploadResourceIntr {width:250px; height:33px; float:left; line-height:33px; font-size:12px;}
+.uploadResourceName {width:250px; display:inline-block; line-height:15px; font-size:12px; color:#444444; margin-bottom:2px;}
+.uploadResourceIntr2 {width:250px; display:inline-block; line-height:15px; font-size:12px; color:#444444;}
+.uploadType {margin:10px 0; border:1px solid #e6e6e6; width:100px; height:30px; outline:none; font-size:12px; color:#888888;}
+.uploadKeyword {margin-bottom:10px; outline:none; border:1px solid #e6e6e6; height:30px; width:280px;}
+
+/*评分设置弹窗*/
+.markPopup {width:290px; height:auto; padding:5px 0px 15px 15px; background-color:#ffffff; z-index:1000;}
+.markInput {margin-bottom:10px; outline:none; border:1px solid #e6e6e6; height:30px; width:140px; color:#3d3c3c;}
+.markPercentage {margin:10px 0; border:1px solid #e6e6e6; width:70px; height:30px; outline:none; font-size:12px; color:#3d3c3c;}
+
+
+/*新个人主页框架css*/
+.navContainer {width:100%; margin:0 auto; background-color:#269ac9;}
+.homepageContentContainer {width:100%; margin:0 auto; background-color:#eaebed;}
+.homepageContent {width:1000px; background-color:#eaebed; margin:0 auto;}
+.navHomepage {width:1000px; height:54px; background-color:#269ac9; margin:0 auto;}
+.navHomepageLogo {width:60px; height:54px; line-height:54px; vertical-align:middle; margin-left:2px; margin-right:30px;}
+.navHomepageMenu {margin-right:20px; display:inline-block;height:54px; line-height:54px; vertical-align:middle;}
+.navHomepageMenu:hover {background-color:#297fb8;}
+.navHomepageSearchBoxcontainer {margin-top:11px; }
+.navHomepageSearchBox {width:380px; border:none; outline:none; height:32px; background-color:#ffffff;}
+.navHomepageSearchInput {width:345px; height:32px; outline:none; border:none; float:left; padding-left:5px;; margin:0;}
+.homepageSearchIcon {width:30px; height:32px; background:url(../images/nav_icon.png) -8px 3px no-repeat; float:left;}
+a.homepageSearchIcon:hover {background:url(../images/nav_icon.png) -49px 3px no-repeat;}
+.navSearchTypeBox {width:368px; height:35px; line-height:35px; vertical-align:middle; position:absolute; border:1px solid #98a1a6; background-color:#ffffff; padding-left:10px; display:none; color:#3e3e3e; font-size:14px; top:43px;}
+#navSearchAlert {display:none;}
+.navHomepageNews {width:30px; display:block; float:right; margin-top:8px; position:relative;}
+.homepageNewsIcon {background:url(../images/nav_icon.png) -5px -85px no-repeat; width:30px; height:35px; display:block;}
+.newsActive {width:8px; height:8px; border-radius:50%; border:2px solid #ffffff; background-color:#ff0000; position:absolute; left:17px; top:5px;}
+.navHomepageProfile {width:65px; display:block; float:right; margin-left:33px;}
+.homepageProfileMenuIcon {background:url(../images/nav_icon.png) 30px -155px no-repeat; width:65px; height:54px; position:relative; display:inline-block;}
+.homepageProfileMenuIcon:hover {background:url(../images/nav_icon.png) 30px -122px no-repeat;}
+.navHomepageProfile ul li ul {display:none;}
+.navHomepageProfile ul li:hover ul {display:block;}
+.homepageLeft {width:240px; float:left; margin-right:10px; margin-bottom:10px; margin-top:15px;}
+.homepageRight {width:750px; float:left; margin-top:15px; margin-bottom:10px;}
+.homepagePortraitContainer {width:238px; border:1px solid #dddddd; background-color:#ffffff; padding-bottom:15px;}
+.homepagePortraitImage {width:206px; height:206px; padding:2px; margin:15px 14px 10px 14px; position:relative; border:1px solid #cbcbcb;}
+.homepagePortraitImage:hover {border:1px solid #297fb8;}
+.homepageFollow {background:url(../images/homepage_icon.png) -10px -8px no-repeat; width:20px; height:20px; position:absolute; right:9px; top:9px;}
+.homepageFollowCancel {background:url(../images/homepage_icon.png) -178px -8px no-repeat; width:20px; height:20px; position:absolute; right:9px; top:9px;}
+.homepageEditProfile {width:16px; height:16px; border-radius:2px; background-color:#888888; position:absolute; right:5px; bottom:5px; font-size:12px; filter:alpha(opacity=50); -moz-opacity:0.5; opacity: 0.5;}
+.homepageEditProfileIcon {background:url(../images/homepage_icon.png) -14px -37px no-repeat; width:16px; height:16px; display:block;}
+.homepageImageName {font-size:16px; color:#484848; margin-left:15px; margin-right:8px; height:25px; float:left;}
+.homepageImageSex {top:116px; left:5px; width:20px; height:20px; background:url(../images/homepage_icon.png) -10px -112px no-repeat; float:left;}
+.homepageImageSex2 {top:116px; left:5px; width:20px; height:20px; background:url(../images/homepage_icon.png) -10px -150px no-repeat; float:left;}
+.homepageSignature {font-size:12px; color:#888888; margin-left:15px; margin-top:10px; margin-bottom:12px; width:208px;}
+.homepageImageBlock {margin:0 auto; width:68px; float:left; text-align:center; display:inline-block;}
+.homepageImageNumber {font-size:12px; color:#484848; font-weight:bold;}
+a.homepageImageNumber:hover {color:#15bccf;}
+.homepageImageText {font-size:12px; color:#888888;}
+.homepageVerDiv {height:28px; vertical-align:middle; width:1px; float:left; display:inline-block; background-color:#d1d1d1; margin-top:3px;}
+.homepageLeftMenuContainer {width:238px; border:1px solid #dddddd; border-bottom:none; background-color:#ffffff; margin-top:10px;}
+.homepageLeftMenuBlock {border-bottom:1px solid #dddddd; height:50px; line-height:50px; vertical-align:middle;}
+.homepageLeftMenuCourses {font-size:14px; border-bottom:1px solid #dddddd;}
+.homepageLeftMenuCoursesLine {padding-left:25px; height:38px; line-height:38px; vertical-align:middle;}
+.homepageLeftMenuCoursesLine:hover {background-color:#b3e0ee;}
+a.coursesLineGrey {color:#15bccf; display:block;}
+a.coursesLineGrey:hover {color:#ffffff;}
+.homepageLeftMenuMore {height:18px;}
+.homepageLeftMenuMore:hover {background-color:#b3e0ee;}
+.homepageLeftMenuMoreIcon {background:url(../images/homepage_icon.png) -74px -240px no-repeat; display:block; height:18px;}
+.homepageMenuSetting {display:inline-block; margin-left:155px;}
+a.homepageMenuText {color:#484848; font-size:16px; margin-left:20px;}
+.homepageLeftLabelContainer {width:238px; border:1px solid #dddddd; background-color:#ffffff; margin-top:10px;}
+.homepageLabelText {color:#484848; font-size:16px; margin-left:10px; margin-bottom:12px; display:block;}
+.homepageRightBanner {width:720px; height:34px; margin:0px auto; border-bottom:1px solid #e9e9e9;}
+.NewsBannerName {font-size:16px; color:#4b4b4b; display:block; width:150px; float:left; margin-top:4px;}
+.newsType {width:60px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:5px 10px; left:-40px; font-size:12px; color:#888888; display:none; line-height:2; z-index:9999;}
+.newsReadSetting {width:700px; background-color:#f6f6f6; border-bottom:1px solid #eeeeee; margin:10px auto; height:39px; line-height:39px; vertical-align:middle; font-size:14px; color:#7a7a7a; padding-left:10px;}
+.homepageNewsList {width:710px; height:49px; line-height:49px; vertical-align:middle; border-bottom:1px dashed #eaeaea; margin-left:10px;}
+.homepageNewsPortrait {width:40px; display:block; margin-top:7px;}
+.homepageNewsPublisher {width:80px; max-width:80px; margin-right:10px; font-size:12px; color:#15bccf; display:block; padding-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
+.homepageNewsType {width:95px; font-size:12px; color:#888888; display:block;}
+.homepageNewsContent {width:395px; max-width:395px; margin-right:10px; font-size:12px; color:#4b4b4b; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
+.homepageNewsTime {width:75px; font-size:12px; color:#888888; display:block; text-align:right;}
+a.homepageWhite {color:#ffffff;}
+a.homepageWhite:hover {color:#a1ebff}
+a.newsGrey {color:#4b4b4b;}
+a.newsGrey:hover {color:#000000;}
+a.replyGrey {color:#888888; display:inline-block;}
+a.replyGrey:hover {color:#4b4b4b;}
+a.newsBlue {color:#269ac9;}
+a.newsBlue:hover {color:#297fb8;}
+a.menuGrey {color:#808080;}
+a.menuGrey:hover {color:#fe7d68;}
+
+/*个人主页右部分*/
+.homepagePostType {width:180px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:5px 10px; left:-170px; font-size:12px; color:#4b4b4b; line-height:2; z-index:9999; display:none;}
+.homepagePostTypeHomework {width:100px;}
+.homepagePostTypeProject {width:80px;}
+a.homepagePostTypeAssignment {background:url(../images/homepage_icon.png) -93px -318px no-repeat; padding-left:23px;}
+a.homepagePostTypeNotice {background:url(../images/homepage_icon.png) -87px -280px no-repeat; padding-left:23px;}
+a.homepagePostTypeForum {background:url(../images/homepage_icon.png) -10px -310px no-repeat; padding-left:23px;}
+a.homepagePostTypeQuiz {background:url(../images/homepage_icon.png) -90px -124px no-repeat; padding-left:23px;}
+a.homepagePostTypeQuestion {background:url(../images/homepage_icon.png) -10px -273px no-repeat; padding-left:23px;}
+a.homepagePostTypeAll {background:url(../images/homepage_icon.png) -10px -360px no-repeat; padding-left:23px;}
+a.postTypeGrey {color:#888888;}
+a.postTypeGrey:hover {color:#269ac9;}
+.homepagePostBrief {width:710px; margin:20px auto 0px auto; position:relative;}
+.homepagePostPortrait {float:left; width:90px;}
+.homepagePostDes {float:left; width:600px; margin-left:20px;}
+.homepagePostTo {font-size:14px; color:#484848; margin-bottom:8px;}
+.homepagePostTitle {font-size:14px; color:#484848; margin-bottom:10px; font-weight:bold;}
+.homepagePostSubmitContainer {height:30px; margin-bottom:10px;}
+.homepagePostSubmit {font-size:14px; color:#888888; width:80px; height:30px; text-align:center; vertical-align:middle; line-height:30px; border:1px solid #dddddd; background-color:#eaeaea; float:left; margin-right:20px;}
+.homepagePostSubmit:hover {background-color:#d8d8d8;}
+.homepagePostIntro {font-size:14px; color:#484848;}
+.homepagePostDeadline {font-size:12px; color:#888888; float:left; height:30px; line-height:30px; vertical-align:middle;}
+.homepagePostReply {width:720px; margin:0px auto; background-color:#f1f1f1; margin-top:10px;}
+.homepagePostReplyBanner {width:708px; height:33px; border:1px solid #e4e4e4; line-height:33px; vertical-align:middle; font-size:12px; color:#888888;}
+.borderBottomNone {border-bottom:none !important;}
+.homepagePostReplyBannerCount{width:255px; display:inline-block; margin-left:20px;}
+.homepagePostReplyBannerTime{width:85px; display:inline-block;}
+.homepagePostReplyBannerMore{width:330px; display:inline-block; text-align:right;}
+.homepagePostReplyInputContainer {width:690px; margin:0px auto;}
+.homepagePostReplyInput {width:680px; height:40px; max-width:680px; max-height:40px; border:1px solid #d9d9d9; outline:none; margin:15px auto 10px auto; padding-left:8px; padding-top:5px;}
+.homepagePostReplyEmotion {background:url(../images/homepage_icon.png) -90px -88px no-repeat; width:50px; height:24px; float:left; padding-left:30px;}
+.homepagePostReplySubmit {float:right; width:45px; height:24px; text-align:center; line-height:24px; vertical-align:middle; font-size:12px; color:#ffffff; background-color:#269ac9;}
+.homepagePostReplySubmit:hover {background-color:#297fb8;}
+a.postReplySubmit {color:#ffffff; display:block;}
+.homepagePostReplyCancel {float:right; width:45px; height:24px; text-align:center; line-height:24px; vertical-align:middle; font-size:12px; color:#888888; background-color:#cecece; margin-left:8px;}
+.homepagePostReplyCancel:hover {background-color:#717171;}
+a.postReplyCancel {color:#888888; display:block;}
+a.postReplyCancel:hover {color:#ffffff;}
+.homepagePostReplyInputContainer2 {width:620px; margin:0px auto;}
+.homepagePostReplyInput2 {width:610px; height:25px; max-width:610px; max-height:25px; border:1px solid #d9d9d9; outline:none; margin:0px auto 10px auto; padding-left:8px; padding-top:5px;}
+.homepagePostReplyContainer {border-bottom:1px solid #e3e3e3; width:690px; margin:0px auto; margin-top:15px; min-height:60px;}
+.homepagePostSetting {position:absolute; width:20px; height:20px; right:0px; top:0px;}
+.homepagePostSettingIcon {background:url(../images/homepage_icon.png) -93px -5px no-repeat; width:20px; height:20px;}
+.homepagePostSettiongText {width:85px; line-height:2; font-size:12px; color:#616060; background-color:#ffffff; border:1px solid #eaeaea; border-radius:3px; position:absolute; left:-68px; top:20px; padding:5px 0px; display:none;}
+.homepagePostSettingIcon:hover {background:url(../images/homepage_icon.png) -93px -44px no-repeat;}
+/*a.postOptionLink {color:#616060; display:block; width:55px; padding:0px 15px;}*/
+/*a.postOptionLink:hover {color:#ffffff; background-color:#15bccf;}*/
+.homepagePostReplyPortrait {float:left; width:45px;}
+.homepagePostReplyDes {float:left; width:620px; margin-left:15px;}
+.homepagePostReplyPublisher {font-size:12px; color:#484848; margin-bottom:5px;}
+.homepagePostReplyContent {font-size:12px; color:#484848; margin-bottom:12px;}
+.homepagePostProjectState {width:42px; height:20px; line-height:20px; border-radius:1px; background-color:#28be6c; color:#ffffff; text-align:center; vertical-align:middle; font-size:12px; display:inline-block; margin-left:5px;}
+.homepagePostAssignTo {float:left; font-size:14px; color:#15bccf; height:30px; line-height:30px; vertical-align:middle;}
+.homepagePostFileAtt {height:22px; line-height:22px; vertical-align:middle; background:url(../images/homepage_icon.png) -85px -150px no-repeat; padding-left:35px; font-size:14px; margin-right:25px;}
+.homepagePostImageAtt {height:22px; line-height:22px; vertical-align:middle; background:url(../images/homepage_icon.png) -86px -195px no-repeat; padding-left:35px; font-size:14px; margin-right:25px;}
+.postAttSize {color:#888888; font-size:12px;}
+a.postGrey {color:#484848;}
+a.postGrey:hover {color:#000000;}
+
+/*课程主页css*/
+.homepageCoursesType {width:75px; background-color:#ffffff; float:left; list-style:none; position:absolute; border:1px solid #eaeaea; border-radius:5px; top:15px; padding:5px 10px; left:-65px; font-size:12px; color:#4b4b4b; line-height:2; z-index:9999; display:none;}
+
+/*注册登陆页面*/
+#loginInBox {display:block; margin-top:143px;}
+#signUpBox {display:none; margin-top:79px;}
+#loginSignButton {height:54px; padding-left:10px; padding-right:10px; text-align:center; line-height:54px; vertical-align:middle; color:#ffffff; font-size:16px;}
+#loginInButton {height:54px; padding-left:10px; padding-right:10px; text-align:center; line-height:54px; vertical-align:middle; color:#ffffff; font-size:16px;}
+#loginSignButton:hover {background-color:#297fb8;}
+#loginInButton:hover {background-color:#297fb8;}
+.loginContentContainer {width:100%; background-color:#269ac9; margin-top:1px; height:580px;}
+.loginContent {width:1000px; margin:0px auto;}
+.loginLeft {width:595px; float:left;}
+.loginLogo {padding-left:208px; padding-top:155px;}
+.loginInro {width:465px; padding-top:55px; padding-left:50px; font-size:16px; color:#ffffff;}
+.loginRight {width:405px; float:left;}
+.loginChooseBox {width:405px; height:54px; background-color:#ffffff; padding-top:18px;}
+.loginChooseList {width:350px; height:30px; font-size:14px; margin:0px auto;}
+.loginChoose {width:55px; height:30px; border-bottom:1px solid #269ac9; text-align:center; font-weight:bold;}
+a.loginChooseTab {color:#484848; height:30px; display:block;}
+.loginInButton {width:315px; height:40px; background-color:#269ac9; margin-left:46px; font-size:14px; text-align:center; line-height:40px; vertical-align:middle; margin-top:20px;}
+.loginInButton:hover {background-color:#297fb8;}
+.loginUpButton {width:315px; height:40px; background-color:#269ac9; margin-left:46px; font-size:14px; text-align:center; line-height:40px; vertical-align:middle; margin-top:30px;}
+.loginUpButton:hover {background-color:#297fb8;}
+.loginChooseBorder {width:295px; height:30px; border-bottom:1px solid #e3e3e3;}
+.loginSign {width:405px; background-color:#ffffff;}
+.loginSignBox {width:308px; height:38px; margin-left:46px; border:1px solid #98a1a6; outline:none;}
+.loginSignOption {margin-left:46px; margin-top:15px;}
+.loginIn {width:405px; background-color:#ffffff; padding-bottom:30px;}
+.loginSignAlert {font-size:12px; color:#fc0000; margin-left:60px;}
+.loginSignRow {height:60px; min-height:60px;}
+
+/*课程选择弹窗*/
+.coursesChoosePopup {width:530px; height:auto; border:3px solid #269ac9; padding-left:20px; padding-bottom:35px; background-color:#ffffff; position:absolute; top:0; left:0; z-index:1000;}
+.coursesSearchBox {border:1px solid #e6e6e6; width:515px; height:25px; background-color:#ffffff; margin-top:12px; margin-bottom:15px;}
+.searchCoursesPopup {border:none; outline:none; background-color:#ffffff; width:470px; height:25px; padding-left:10px; display:inline-block; float:left;}
+.searchIconPopup{width:31px; height:25px; background-color:#ffffff; background:url(../images/homepage_icon.png) -180px -273px no-repeat; display:inline-block; float:left;}
+.searchIconPopup:hover {background:url(../images/homepage_icon.png) -180px -314px no-repeat;}
+
+/*导入作业弹窗*/
+.homeworkPublish {width:260px; height:15px; line-height:15px;}
+.homeworkPublishTime {font-size:12px; color:#b1b1b1; margin-left:22px; margin-bottom:8px;}
+
+/*引用资源库弹窗*/
+.referenceResourcesPopup {width:710px; height:auto; border:3px solid #269ac9; padding-left:20px; padding-right:20px; padding-bottom:35px; background-color:#ffffff; position:absolute; top:50%; left:50%; margin-left:-375px; z-index:1000;}
+.referenceText {font-size:16px; color:#269ac9; line-height:16px; padding-top:20px; display:inline-block; font-weight:bold;}
+.referenceSearchBox {border:1px solid #e6e6e6; width:235px; height:32px; background-color:#ffffff; margin-top:12px; margin-bottom:15px;}
+.searchReferencePopup {border:none; outline:none; background-color:#ffffff; width:190px; height:32px; padding-left:10px; display:inline-block; float:left;}
+.referenceSearchIcon{width:31px; height:25px; background-color:#ffffff; background:url(../images/homepage_icon.png) -170px -135px no-repeat; display:inline-block; float:left;}
+.referenceSearchIcon:hover {background:url(../images/homepage_icon.png) -170px -190px no-repeat;}
+.referenceResourceType {font-size:14px; width:355px; height:34px; line-height:34px; vertical-align:middle; background-color:#f6f6f6; margin-top:15px;}
+.referenceTypeActive {background-color:#269ac9; color:#ffffff !important;}
+a.referenceTypeBlock {color:#888888; display:inline-block; padding:0px 20px;}
+
+
+
/*底部*/
-#Footer{ padding-top:10px; background:#fff; margin-bottom:10px;}
-.copyright{ width:780px; margin:0 auto;height:30px; }
-.footlogo{ width:580px; margin:0 auto;height:50px; }
+#Footer{background-color:#ffffff; margin-bottom:10px; padding-bottom:15px; color:#666666;}
+.footerAboutContainer {width:auto; border-bottom:1px solid #efefef;}
+.footerAbout{ width:585px; margin:0 auto;height:35px; line-height:35px; border-bottom:1px solid #efefef; }
+.languageBox {width:55px; height:20px; margin-left:5px; outline:none; color:#666666; border:1px solid #d9d9d9;}
+.departments{ width:890px; margin:5px auto 0 auto;height:30px;line-height:30px;}
+.copyright{ width:375px; margin:0 auto;height:20px;line-height:20px;}
+a.f_grey {color:#666666;}
+a.f_grey:hover {color:#000000;}
/*意见反馈*/
html{ overflow-x:hidden;}
.scrollsidebar{ position: fixed; bottom:1px; right:1px; background:none; }
@@ -536,5 +940,6 @@ a.resourcesBlack:hover {font-size:12px; color:#000000;}
}
.AgreementBox{margin: 20px 0; color: #666666; font-size: 14px; line-height: 1.9;}
+.Agreementh4{ color:#2980b9; font-weight:bold; font-size:14px; margin-top:30px; border: none;}
.AgreementTxt{text-indent: 2em; margin-bottom: 15px;}
.AgreementImg{margin: 0px auto; width: 820px;}
diff --git a/public/stylesheets/public_new.css b/public/stylesheets/public_new.css
index 555cef836..7cd0a461c 100644
--- a/public/stylesheets/public_new.css
+++ b/public/stylesheets/public_new.css
@@ -789,3 +789,9 @@ div.flash.warning, .conflict {
/*消息铃铛样式*/
.navHomepageNews {width:30px; display:block; float:right; margin-top:4px; position:relative; margin-right: 8px;}
.newsActive {width:6px; height:6px; border-radius:50%; border:2px solid #ffffff; background-color:#ff0000; position:absolute; left:20px; top:8px;z-index:999}
+
+/*20150826协议 LB*/
+.AgreementBox{ margin:20px 0; color:#666666; font-size:14px; line-height:1.9;}
+.Agreementh4{ color:#2980b9; font-weight:bold; font-size:14px; margin-top:30px; border: none;}
+.AgreementTxt{text-indent: 2em; margin-bottom: 15px;}
+.AgreementImg{margin: 0px auto; width: 820px;}
\ No newline at end of file
diff --git a/spec/controllers/system_messages_controller_spec.rb b/spec/controllers/system_messages_controller_spec.rb
new file mode 100644
index 000000000..c65f5b5e0
--- /dev/null
+++ b/spec/controllers/system_messages_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe SystemMessagesController, :type => :controller do
+
+end
diff --git a/spec/factories/onclick_times.rb b/spec/factories/onclick_times.rb
new file mode 100644
index 000000000..fcdda983d
--- /dev/null
+++ b/spec/factories/onclick_times.rb
@@ -0,0 +1,7 @@
+FactoryGirl.define do
+ factory :onclick_time do
+ user_id 1
+onclick_time "2015-09-06 14:57:02"
+ end
+
+end
diff --git a/spec/factories/system_messages.rb b/spec/factories/system_messages.rb
new file mode 100644
index 000000000..7bcc27422
--- /dev/null
+++ b/spec/factories/system_messages.rb
@@ -0,0 +1,8 @@
+FactoryGirl.define do
+ factory :system_message do
+ id 1
+user_id 1
+content "MyString"
+ end
+
+end
diff --git a/spec/models/onclick_time_spec.rb b/spec/models/onclick_time_spec.rb
new file mode 100644
index 000000000..bc453f545
--- /dev/null
+++ b/spec/models/onclick_time_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe OnclickTime, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/system_message_spec.rb b/spec/models/system_message_spec.rb
new file mode 100644
index 000000000..fd8df4e92
--- /dev/null
+++ b/spec/models/system_message_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe SystemMessage, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end