diff --git a/app/api/mobile/entities/course_dynamic.rb b/app/api/mobile/entities/course_dynamic.rb
index fe31668ff..6077a8722 100644
--- a/app/api/mobile/entities/course_dynamic.rb
+++ b/app/api/mobile/entities/course_dynamic.rb
@@ -4,56 +4,50 @@ module Mobile
include Redmine::I18n
def self.course_dynamic_expose(field)
expose field do |c,opt|
- if field == :update_time
- (format_time(c[field]) if (c.is_a?(Hash) && c.key?(field)))
- elsif field == :news_count
- obj = nil
- c[:dynamics].each do |d|
- if d[:type] == 1
- obj = d[:count]
- end
- end
- obj
- elsif field == :document_count
- obj = nil
- c[:dynamics].each do |d|
- if d[:type] == 3
- obj = d[:count]
- end
- end
- obj
- elsif field == :topic_count
- obj = nil
- c[:dynamics].each do |d|
- if d[:type] == 2
- obj = d[:count]
- end
- end
- obj
- elsif field == :homework_count
- obj = nil
- c[:dynamics].each do |d|
- if d[:type] == 4
- obj = d[:count]
- end
- end
- obj
- else
+ # if field == :news_count
+ # obj = nil
+ # c[:dynamics].each do |d|
+ # if d[:type] == 1
+ # obj = d[:count]
+ # end
+ # end
+ # obj
+ # elsif field == :document_count
+ # obj = nil
+ # c[:dynamics].each do |d|
+ # if d[:type] == 3
+ # obj = d[:count]
+ # end
+ # end
+ # obj
+ # elsif field == :topic_count
+ # obj = nil
+ # c[:dynamics].each do |d|
+ # if d[:type] == 2
+ # obj = d[:count]
+ # end
+ # end
+ # obj
+ # elsif field == :homework_count
+ # obj = nil
+ # c[:dynamics].each do |d|
+ # if d[:type] == 4
+ # obj = d[:count]
+ # end
+ # end
+ # obj
+ # else
c[field] if (c.is_a?(Hash) && c.key?(field))
- end
+ # end
end
end
- course_dynamic_expose :type
- course_dynamic_expose :count
course_dynamic_expose :course_name
course_dynamic_expose :course_term
course_dynamic_expose :course_time
course_dynamic_expose :course_id
course_dynamic_expose :course_img_url
course_dynamic_expose :message
- course_dynamic_expose :update_time
- course_dynamic_expose :count
course_dynamic_expose :news_count
course_dynamic_expose :document_count
course_dynamic_expose :topic_count
@@ -63,62 +57,32 @@ module Mobile
course_dynamic_expose :current_user_is_member
course_dynamic_expose :current_user_is_teacher
- expose :documents,using:Mobile::Entities::Attachment do |f,opt|
- obj = nil
- f[:dynamics].each do |d|
- if d[:type] == 3
- obj = d[:documents]
- end
- end
- obj
- end
+ # expose :documents,using:Mobile::Entities::Attachment do |f,opt|
+ # obj = nil
+ # f[:dynamics].each do |d|
+ # if d[:type] == 3
+ # obj = d[:documents]
+ # end
+ # end
+ # obj
+ # end
expose :topics,using:Mobile::Entities::Message do |f,opt|
- obj = nil
- f[:dynamics].each do |d|
- if d[:type] == 2
- obj = d[:topics]
- end
- end
- obj
+ f[:topics]
end
expose :homeworks,using:Mobile::Entities::Homework do |f,opt|
- obj = nil
- f[:dynamics].each do |d|
- if d[:type] == 4
- obj = d[:homeworks]
- end
- end
- obj
+ f[:homeworks]
end
expose :news,using:Mobile::Entities::News do |f,opt|
- obj = nil
- f[:dynamics].each do |d|
- if d[:type] == 1
- obj = d[:news]
- end
- end
- obj
+ f[:news]
end
expose :better_students,using:Mobile::Entities::User do |f,opt|
- obj = nil
- f[:dynamics].each do |d|
- if d[:type] == 6
- obj = d[:better_students]
- end
- end
- obj
+ f[:better_students]
end
expose :active_students,using:Mobile::Entities::User do |f,opt|
- obj = nil
- f[:dynamics].each do |d|
- if d[:type] == 7
- obj = d[:active_students]
- end
- end
- obj
+ f[:active_students]
end
end
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 086ecfb7f..a44b58789 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -337,6 +337,19 @@ class AdminController < ApplicationController
format.html
end
end
+
+ #学校列表
+ def schools
+ @school_name = params[:school_name]
+ if @school_name
+ @schools = School.where("name like '%#{@school_name}%'")
+ else
+ @schools = School.all
+ end
+ respond_to do |format|
+ format.html
+ end
+ end
#移动端版本管理
def mobile_version
@versions = PhoneAppVersion.reorder('created_at desc')
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index a1c7ae875..1623979f0 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -604,7 +604,7 @@ class CoursesController < ApplicationController
def toggleCourse
@course_prefs = Course.find_by_extra(@course.extra)
- unless (@course_prefs.student != User.current || User.current.admin?)
+ unless (User.current.allowed_to?(:as_teacher,@course_prefs) || User.current.admin?)
render_403
end
end
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index 4b655cf31..34e97e4dd 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -40,9 +40,9 @@ class HomeworkCommonController < ApplicationController
# @homework_detail_programing = HomeworkDetailPrograming.new
# @homework.homework_detail_programing = @homework_detail_programing
# end
- # respond_to do |format|
- # format.html
- # end
+ respond_to do |format|
+ format.html
+ end
end
#新建作业下一步
@@ -144,6 +144,8 @@ class HomeworkCommonController < ApplicationController
end
if homework.save
+ homework_detail_programing.save if homework_detail_programing
+ homework_detail_manual.save if homework_detail_manual
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_create)
@@ -254,7 +256,6 @@ class HomeworkCommonController < ApplicationController
client.request(request)
end
result = JSON.parse(res.body)
- homework_detail_programing.question_id = result["id"] if result["status"] && result["status"] == 0
end
@homework.save_attachments(params[:attachments])
diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb
index 9385c73ee..185e7128e 100644
--- a/app/controllers/news_controller.rb
+++ b/app/controllers/news_controller.rb
@@ -71,13 +71,12 @@ class NewsController < ApplicationController
scope = @course ? @course.news.course_visible : News.course_visible
@news_count = scope.count
- #@news_pages = Paginator.new @news_count, @limit, params['page']
- #@offset ||= scope_page.offset
+ @q = params[:subject]
if params[:subject].nil?
scope_order = scope.all(:include => [:author, :course],
:order => "#{News.table_name}.created_on DESC")
else
- scope_order = scope.where("news.title like '#{'%' << params[:subject].to_s << '%'}'").all(:include => [:author, :course],
+ scope_order = scope.where("#{News.table_name}.title like '#{'%' << params[:subject].to_s << '%'}'").all(:include => [:author, :course],
:order => "#{News.table_name}.created_on DESC")
end
diff --git a/app/controllers/poll_controller.rb b/app/controllers/poll_controller.rb
index 758747e02..8f81bc2c6 100644
--- a/app/controllers/poll_controller.rb
+++ b/app/controllers/poll_controller.rb
@@ -137,11 +137,19 @@ class PollController < ApplicationController
@poll_questions.poll_answers.new question_option
end
end
- if @poll_questions.save
- respond_to do |format|
- format.js
+ # 如果是插入的话,那么从插入的这个id以后的question_num都将要+1
+ if params[:quest_id]
+ @is_insert = true
+ @poll.poll_questions.where("question_number > #{params[:quest_num].to_i}").update_all(" question_number = question_number + 1")
+ @poll_question_num = params[:quest_num].to_i
+ @poll_questions.question_number = params[:quest_num].to_i + 1
+ end
+ if @poll_questions.save
+ respond_to do |format|
+ format.js
+ end
end
- end
+
end
#修改题目
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb
index f5fa007a5..e0aea0c2e 100644
--- a/app/controllers/repositories_controller.rb
+++ b/app/controllers/repositories_controller.rb
@@ -449,6 +449,8 @@ update
def stats
@project_id = params[:id]
@repository_id = @repository.identifier
+ # 提交次数统计
+ @status_commit_count = Changeset.count(:conditions => ["#{Changeset.table_name}.repository_id = ?", @repository.id])
render :layout => 'base_projects'
end
@@ -459,6 +461,12 @@ update
data = graph_commits_per_month(@repository)
when "commits_per_author"
data = graph_commits_per_author(@repository)
+ when "author_commits_per_month"
+ data = graph_author_commits_per_month(@repository)
+ when "author_commits_six_month"
+ data = author_commits_six_month(@repository)
+ when "author_code_six_months"
+ data = author_code_six_month(@repository)
end
if data
headers["Content-Type"] = "image/svg+xml"
@@ -617,6 +625,123 @@ update
)
graph.burn
end
+
+ # 用户最近一年的提交次数
+ def graph_author_commits_per_month(repository)
+ @date_to = Date.today
+ @date_from = @date_to << 12
+ @date_from = Date.civil(@date_from.year, @date_from.month, @date_from.day)
+ commits_by_author = Changeset.count(:all, :group => :committer,
+ :conditions => ["#{Changeset.table_name}.repository_id = ? AND #{Changeset.table_name}.commit_date BETWEEN ? AND ?", repository.id, @date_from, @date_to])
+ commits_by_author = commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}.last(25)
+
+ fields = commits_by_author.collect {|r| r.first}
+ commits_data = commits_by_author.collect {|r| r.last}
+
+ fields = fields + [""]*(10 - fields.length) if fields.length<10
+ commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10
+
+ # Remove email adress in usernames
+ fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') }
+
+ graph = SVG::Graph::BarHorizontal.new(
+ :height => 400,
+ :width => 600,
+ :fields => fields,
+ :stack => :side,
+ :scale_integers => true,
+ :show_data_values => true,
+ :rotate_y_labels => false,
+ :graph_title => l(:label_author_commits_year),
+ :show_graph_title => true,
+ :no_css => true
+ )
+ graph.add_data(
+ :data => commits_data,
+ :title => l(:label_revision_commit_count)
+ )
+ graph.burn
+ end
+
+ # 用户最近六个月的提交次数
+ def author_commits_six_month(repository)
+ @date_to = Date.today
+ @date_from = @date_to << 6
+ @date_from = Date.civil(@date_from.year, @date_from.month, @date_from.day)
+ commits_by_author = Changeset.count(:all, :group => :committer,
+ :conditions => ["#{Changeset.table_name}.repository_id = ? AND #{Changeset.table_name}.commit_date BETWEEN ? AND ?", repository.id, @date_from, @date_to])
+ commits_by_author = commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}.last(25)
+
+ fields = commits_by_author.collect {|r| r.first}
+ commits_data = commits_by_author.collect {|r| r.last}
+
+ fields = fields + [""]*(10 - fields.length) if fields.length<10
+ commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10
+
+ # Remove email adress in usernames
+ fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') }
+
+ graph = SVG::Graph::BarHorizontal.new(
+ :height => 400,
+ :width => 600,
+ :fields => fields,
+ :stack => :side,
+ :scale_integers => true,
+ :show_data_values => true,
+ :rotate_y_labels => false,
+ :graph_title => l(:label_author_commits_six_month),
+ :show_graph_title => true
+ )
+ graph.add_data(
+ :data => commits_data,
+ :title => l(:label_revision_commit_count)
+ )
+ graph.burn
+ end
+
+ # 最近六个月代码量统计
+ def author_code_six_month(repository)
+ @date_to = Date.today
+ @date_from = @date_to << 6
+ @date_from = Date.civil(@date_from.year, @date_from.month, @date_from.day)
+ commits_by_author = Changeset.count(:group => :committer, :conditions => ["#{Changeset.table_name}.repository_id = ? AND #{Changeset.table_name}.commit_date BETWEEN ? AND ?", repository.id, @date_from, @date_to])
+ commits_by_author = commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}.last(40)
+ all_author = []
+ commits_by_author.each do |cba|
+ all_author << cba.first
+ end
+ # all_author = all_author.collect {|c| c.gsub(%r{/ /<.+@.+>}, '') }
+ all_author = all_author.collect {|c| c.split.first }
+ commits_by_author = repository.commits(all_author, "#{@date_from}", "#{@date_to}", repository.id == 150 ? "szzh" : 'master')
+
+ fields = commits_by_author.collect {|r| r.first}
+ commits_data = commits_by_author.collect {|r| r.last}
+
+ fields = fields + [""]*(10 - fields.length) if fields.length<10
+ commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10
+
+ # Remove email adress in usernames
+ fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') }
+
+ graph = SVG::Graph::BarHorizontal.new(
+ :height => 400,
+ :width => 600,
+ :fields => fields,
+ :stack => :side,
+ :scale_integers => true,
+ :show_data_values => true,
+ :rotate_y_labels => false,
+ :graph_title => l(:label_author_code_six_month),
+ :show_graph_title => true
+ )
+ graph.add_data(
+ :data => commits_data,
+ :title => l(:lable_revision_code_count)
+ )
+ graph.burn
+ end
+
+
def check_hidden_repo
project = Project.find(params[:id])
if !User.current.member_of?(project)
diff --git a/app/controllers/school_controller.rb b/app/controllers/school_controller.rb
index 008fe00fc..3e0c280ac 100644
--- a/app/controllers/school_controller.rb
+++ b/app/controllers/school_controller.rb
@@ -4,28 +4,21 @@ class SchoolController < ApplicationController
def upload
uploaded_io = params[:logo]
- school_id = 0
- schools = School.where("name = ?", params[:school])
-
- schools.each do |s|
- school_id = s.id
- end
-
+ school_id ||= params[:id]
unless uploaded_io.nil?
File.open(Rails.root.join('public', 'images', 'school', school_id.to_s+'.png'), 'wb') do |file|
file.write(uploaded_io.read)
end
-
s1 = School.find(school_id)
s1.logo_link = '/images/school/'+school_id.to_s+'.png'
s1.save
-
-
- end
+ end
+ redirect_to admin_schools_url(:school_name => params[:school_name])
end
def upload_logo
-
+ @school = School.find params[:id]
+ @school_name = params[:school_name]
end
#获取制定学校开设的课程数
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index fa5ce8405..5cb43f4e8 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -112,39 +112,20 @@ class UsersController < ApplicationController
#added by young
def user_projects
-
- #add by huang
unless User.current.admin?
if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?)
render_404
return
end
end
- #end
- # if User.current.admin?
- # @memberships = @user.memberships.all(conditions: "projects.project_type = #{Project::ProjectType_project}")
- # else
- # cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1"
- # @memberships = @user.memberships.all(:conditions => cond)
- # end
- #events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 20)
- #@events_by_day = events.group_by(&:event_date)
- # @state = 0
-
- limit = 10;
- query = Project.joins("join members m on #{Project.table_name}.id=m.project_id")
- query = query.where("m.user_id = ? and #{Project.table_name}.project_type=?",@user.id,Project::ProjectType_project)
+ projects = @user.projects.visible.order("updated_on desc")
if(params[:status] == '1')
- query = query.where("#{Project.table_name}.user_id = ?",@user.id);
+ projects = projects.where("user_id = ?",@user.id)
elsif(params[:status] == '2')
- query = query.where("#{Project.table_name}.user_id <> ?",@user.id);
+ projects = projects.where("user_id <> ?",@user.id)
end
- @obj_count = query.count();
-
- @obj_pages = Paginator.new @obj_count,limit,params['page']
- @list = query.order("#{Project.table_name}.updated_on desc,#{Project.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all();
- @params = params
-
+ @list = paginateHelper projects,10
+ @params = params[:status]
respond_to do |format|
format.html{render :layout=>'base_users_new'}
format.api
@@ -262,57 +243,20 @@ class UsersController < ApplicationController
def user_courses
unless User.current.admin?
- if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?)
+ if !@user.active?
render_404
return
end
end
-
- #@user.coursememberships.all(:conditions => Course.visible_condition(User.current))
-
- limit = 10;
- query = Course.joins("join members m on #{Course.table_name}.id=m.course_id")
- query = query.where("m.user_id = ?",@user.id)
+ courses = @user.courses.visible.order("created_at desc")
if(params[:status] == '1')
- query = query.where("endup_time >= ? or endup_time is null or endup_time=''",Time.now);
+ courses = courses.where("endup_time >= ? or endup_time is null or endup_time=''",Time.now)
elsif(params[:status] == '2')
- query = query.where("endup_time < ?",Time.now);
+ courses = courses.where("endup_time < ?",Time.now)
end
- @obj_count = query.count();
-
- @obj_pages = Paginator.new @obj_count,limit,params['page']
- @list = query.order("#{Course.table_name}.updated_at desc,#{Course.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all();
- @params = params
+ @list = paginateHelper courses,10
+ @params = params[:status]
render :layout=>'base_users_new'
-
- # if User.current == @user || User.current.admin?
- # membership = @user.coursememberships.all
- # else
- # membership = @user.coursememberships.all(:conditions => Course.visible_condition(User.current))
- # end
- #
- # membership.sort! {|older, newer| newer.created_on <=> older.created_on }
- # @memberships = []
- # membership.collect { |e|
- # @memberships.push(e)
- # }
- # ## 判断课程是否过期 [需封装]
- # @memberships_doing = []
- # @memberships_done = []
- # #now_time = Time.now.year
- # @memberships.map { |e|
- # #end_time = e.course.get_time.year
- # isDone = course_endTime_timeout?(e.course)
- # if isDone
- # @memberships_done.push e
- # else
- # @memberships_doing.push e
- # end
- # }
- # respond_to do |format|
- # format.html
- # format.api
- # end
end
# modified by fq
@@ -482,95 +426,6 @@ class UsersController < ApplicationController
render :layout=>nil
end
- # def user_course_activities
- # @list = []
- # lastid = nil
- # if params[:lastid]!=nil && !params[:lastid].empty?
- # lastid = params[:lastid];
- # end
- #
- # user_ids = []
- # if @user == User.current
- # watcher = User.watched_by(@user)
- # watcher.push(User.current)
- # user_ids = watcher.map{|x| x.id}
- # else
- # user_ids << @user.id
- # end
- #
- # query_rec_count = 8
- # query_times = 10 #query_times次没查到query_rec_count条记录就不查了
- # query_i = 0;
- # while( true )
- # query_i = query_i+1
- # if(query_i>query_times)
- # break
- # end
- # query = Activity.where(user_id: user_ids)
- # if(lastid != nil)
- # query = query.where("id < ?",lastid)
- # end
- # lastid,item_list = query_activities(query,'course');
- # for item in item_list
- # @list << item
- # if @list.count() >= query_rec_count
- # break
- # end
- # end
- # if @list.count() >= query_rec_count
- # break
- # end
- # if lastid == nil
- # break
- # end
- # end
- # render :layout=>nil
- # end
- #
- # def user_project_activities
- # @list = []
- # lastid = nil
- # if params[:lastid]!=nil && !params[:lastid].empty?
- # lastid = params[:lastid];
- # end
- #
- # user_ids = []
- # if @user == User.current
- # watcher = User.watched_by(@user)
- # watcher.push(User.current)
- # user_ids = watcher.map{|x| x.id}
- # else
- # user_ids << @user.id
- # end
- #
- # query_rec_count = 8
- # query_times = 10 #query_times次没查到query_rec_count条记录就不查了
- # query_i = 0;
- # while( true )
- # query_i = query_i+1
- # if(query_i>query_times)
- # break
- # end
- # query = Activity.where(user_id: user_ids)
- # if(lastid != nil)
- # query = query.where("id < ?",lastid)
- # end
- # lastid,item_list = query_activities(query,'project');
- # for item in item_list
- # @list << item
- # if @list.count() >= query_rec_count
- # break
- # end
- # end
- # if @list.count() >= query_rec_count
- # break
- # end
- # if lastid == nil
- # break
- # end
- # end
- # render :action=>'user_course_activities',:layout=>nil
- # end
def user_course_activities
lastid = nil
if params[:lastid]!=nil && !params[:lastid].empty?
@@ -629,7 +484,7 @@ class UsersController < ApplicationController
query = query.where("#{Activity.table_name}.id < ?",lastid)
end
query = query.order("#{Activity.table_name}.id desc")
- @list = query_activities(query);
+ @list = query_activities(query)
render :action=>'user_course_activities',:layout=>nil
end
diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb
index 9ce107f8b..6b14db9bb 100644
--- a/app/controllers/welcome_controller.rb
+++ b/app/controllers/welcome_controller.rb
@@ -100,44 +100,6 @@ class WelcomeController < ApplicationController
@course_page = FirstPage.find_by_page_type('course')
@school_id = params[:school_id] || User.current.user_extensions.school.try(:id) || 117
@logoLink ||= logolink()
-
- ##3-8月份为查找春季课程,9-2月份为查找秋季课程
- #month_now = Time.now.strftime("%m").to_i
- #year_now = Time.new.strftime("%Y").to_i
- #(month_now >= 3 && month_now < 9) ? course_term = l(:label_spring) : course_term = l(:label_autumn)
- ##year_now -= 1 if year_now < 3
- #@school_id.nil? ? @cur_school_course = [] : @cur_school_course = find_miracle_course(10,7,@school_id, year_now, course_term)
- ##未登录或者当前学校未开设课程
- #if @cur_school_course.empty?
- # @has_course = false
- # User.current.logged? ? course_count = 9 : course_count = 10
- # @cur_school_course += find_all_new_hot_course(course_count, @school_id, year_now, course_term)
- # while @cur_school_course.count < 9 do
- # if course_term == l(:label_spring)
- # course_term = l(:label_autumn)
- # year_now -= 1
- # else
- # course_term = l(:label_spring)
- # end
- # @cur_school_course += find_all_new_hot_course((10-@cur_school_course.count), nil, year_now, course_term)
- # end
- #else
- # if @cur_school_course.count < 9
- # @has_course = false
- # @cur_school_course += find_all_new_hot_course(9-@cur_school_course.count, @school_id, year_now, course_term)
- # if @cur_school_course.count < 9
- # if course_term == l(:label_spring)
- # course_term = l(:label_autumn)
- # year_now -= 1
- # else
- # course_term = l(:label_spring)
- # end
- # @cur_school_course += find_all_new_hot_course(9-@cur_school_course.count, nil, year_now, course_term)
- # end
- # else
- # @has_course = true
- # end
- #end
end
def logolink()
diff --git a/app/helpers/api_helper.rb b/app/helpers/api_helper.rb
index 1f34112ad..f26f5c19b 100644
--- a/app/helpers/api_helper.rb
+++ b/app/helpers/api_helper.rb
@@ -1,5 +1,11 @@
# encoding: utf-8
module ApiHelper
+ ONE_MINUTE = 60 * 1000
+ ONE_HOUR = 60 * ONE_MINUTE
+ ONE_DAY = 24 * ONE_HOUR
+ ONE_MONTH = 30 * ONE_DAY
+
+ ONE_YEAR = 12 * ONE_MONTH
#获取用户的工作单位
def get_user_work_unit user
work_unit = ""
@@ -163,5 +169,37 @@ module ApiHelper
end
+ # 获取当前时间
+ def time_from_now time
+ lastUpdateTime = time.to_i*1000
+
+ currentTime = Time.now.to_i*1000
+ timePassed = currentTime - lastUpdateTime;
+ timeIntoFormat = 0
+ updateAtValue = ""
+ if timePassed < 0
+ updateAtValue = "时间有问题"
+ elsif timePassed < ONE_MINUTE
+ updateAtValue = "一分钟前"
+ elsif timePassed < ONE_HOUR
+ timeIntoFormat = timePassed / ONE_MINUTE
+ updateAtValue = timeIntoFormat.to_s + "分钟前"
+ elsif (timePassed < ONE_DAY)
+ timeIntoFormat = timePassed / ONE_HOUR
+ updateAtValue = timeIntoFormat.to_s + "小时前"
+ elsif (timePassed < ONE_MONTH)
+ timeIntoFormat = timePassed / ONE_DAY
+ updateAtValue = timeIntoFormat.to_s + "天前"
+ elsif (timePassed < ONE_YEAR)
+ timeIntoFormat = timePassed / ONE_MONTH
+ updateAtValue = timeIntoFormat.to_s + "个月前"
+ else
+ timeIntoFormat = timePassed / ONE_YEAR
+ updateAtValue = timeIntoFormat.to_s + "年前"
+ end
+ updateAtValue
+
+ end
+
end
\ No newline at end of file
diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb
index 5cbc3af5a..c77eba0c5 100644
--- a/app/helpers/repositories_helper.rb
+++ b/app/helpers/repositories_helper.rb
@@ -236,13 +236,14 @@ module RepositoriesHelper
# 判断项目是否有主版本库
def judge_main_repository(pro)
if pro.repositories.blank?
- return false
+ status = false
else
- pro.repositories.sort.each do |rep|
- rep.is_default?
- return true
+ pro.repositories.each do |rep|
+ status = true and break if rep.is_default?
+ status = false
end
end
+ status
end
# def cvs_field_tags(form, repository)
# content_tag('p', form.text_field(
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 0b2d74ee8..8a49f8e2d 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -364,14 +364,15 @@ module UsersHelper
end
def query_activities(query)
- list = query.limit(8).all
- result = [];
+ list = query.limit(13).all
+ result = []
for item in list
container = get_activity_container(item)
result << { :item=>item,:e=>container }
end
- return result
+ result
end
+
def get_activity_container activity
return activity.activity_container
end
diff --git a/app/models/repository/git.rb b/app/models/repository/git.rb
index c1f0020eb..7c484e87f 100644
--- a/app/models/repository/git.rb
+++ b/app/models/repository/git.rb
@@ -38,6 +38,12 @@ class Repository::Git < Repository
'Git'
end
+ def commits(authors, start_date, end_date, branch='master')
+ scm.commits(authors, start_date, end_date,branch).map {|commit|
+ [commit[:author], commit[:num]]
+ }
+ end
+
def report_last_commit
extra_report_last_commit
end
diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb
index 185f448ce..c2944fed5 100644
--- a/app/services/courses_service.rb
+++ b/app/services/courses_service.rb
@@ -654,36 +654,42 @@ class CoursesService
return
end
if current_user == @user || current_user.admin?
- membership = @user.coursememberships.page(1).per(15)
+ membership = @user.coursememberships
else
- membership = @user.coursememberships.page(1).per(15).all(:conditions => Course.visible_condition(current_user))
+ membership = @user.coursememberships.all(:conditions => Course.visible_condition(current_user))
end
if membership.nil? || membership.count == 0
raise l(:label_no_courses, :locale => get_user_language(current_user))
end
- membership.sort! { |older, newer| newer.created_on <=> older.created_on }
+ #membership.sort! { |older, newer| newer.created_on <=> older.created_on }
#定义一个数组集合,存放hash数组,该hash数组包括课程的信息,并包含课程的最新发布的资源,最新的讨论区留言,最新的作业,最新的通知
result = []
#对用户所有的课程进行循环,找到每个课程最新发布的资源,最新的讨论区留言,最新的作业,最新的通知,并存进数组
+
membership.each do |mp|
course = mp.course
latest_course_dynamics = []
+ notices_count = 0
+ topic_count = 0
+ topics = nil
+ homeworkss = nil
+ notices = nil
# 课程通知
latest_news = course.news.page(1).per(2).order("created_on desc")
unless latest_news.first.nil?
- latest_course_dynamics << {:type => 1, :time => latest_news.first.created_on,:count=>course.news.count,
- :news => latest_news.all}
+ notices_count = course.news.count
+ notices = latest_news.all
+ latest_course_dynamics << {:time => latest_news.first.created_on }
end
-
# 课程讨论区
latest_message = course.boards.first.topics.page(1).per(2)
unless latest_message.first.nil?
- latest_course_dynamics << {:type => 2, :time => latest_message.first.created_on, :count =>course.boards.nil? ? 0 : course.boards.first.topics.count,
- :topics => latest_message.all}
+ topic_count = course.boards.nil? ? 0 : course.boards.first.topics.count
+ topics = latest_message.all
+ latest_course_dynamics << {:time => latest_message.first.created_on}
end
-
# 课程资源
# latest_attachment = course.attachments.order("created_on desc").page(1).per(2)
# unless latest_attachment.first.nil?
@@ -694,14 +700,17 @@ class CoursesService
#课程作业 已经交的学生列表(暂定显示6人),未交的学生列表,作业的状态
homeworks = course.homework_commons.page(1).per(2).order('created_at desc')
unless homeworks.first.nil?
- latest_course_dynamics << {:type => 4, :time => homeworks.first.updated_at, :count=>course.homework_commons.count , :homeworks => homeworks}
+ homeworkss = homeworks
+ latest_course_dynamics << {:time => homeworks.first.updated_at}
end
latest_course_dynamics.sort! { |order, newer| newer[:time] <=> order[:time] }
# 课程学霸 学生总分数排名靠前的5个人
homework_count = course.homework_commons.count
sql = "select users.*,ROUND(sum(student_works.final_score),2) score from student_works left outer join users on student_works.user_id = users.id" <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{course.id}) GROUP BY student_works.user_id ORDER BY score desc limit 0,4"
+
better_students = User.find_by_sql(sql)
+
# 找出在课程讨论区发帖回帖数最多的
active_students = []
sql1 = " select users.*,count(author_id)*2 active_count from messages " <<
@@ -710,20 +719,41 @@ class CoursesService
" GROUP BY messages.author_id ORDER BY count(author_id) desc " <<
" limit 0,4"
active_students = User.find_by_sql(sql1)
+
if homework_count != 0 && !better_students.empty?
- latest_course_dynamics <<{:type=> 6,:time=>"1970-01-01 0:0:0 +0800",:count=> 4,:better_students=> better_students}
+ latest_course_dynamics <<{:time=>"1970-01-01 0:0:0 +0800"}
end
unless active_students.empty?
- latest_course_dynamics <<{:type=> 7,:time=>"1970-01-01 0:0:0 +0800",:count=> 4,:active_students=>active_students}
+ latest_course_dynamics <<{:time=>"1970-01-01 0:0:0 +0800"}
end
latest_course_dynamic = latest_course_dynamics.first
unless latest_course_dynamic.nil?
- result << {:course_name => course.name,:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course), :course_id => course.id, :course_img_url => url_to_avatar(course), :course_time => course.time, :course_term => course.term,:message => "", :dynamics => latest_course_dynamics,
- :course_student_num=>course ? course.members.count : 0,:time_from_now=> distance_of_time_in_words(Time.now, latest_course_dynamic[:time].to_time) << "前",:time=>latest_course_dynamic[:time].to_time}
+ result << {:course_name => course.name,
+ :current_user_is_member => current_user.member_of_course?(course),
+ :current_user_is_teacher => is_course_teacher(current_user,course),
+ :course_id => course.id,
+ :course_img_url => url_to_avatar(course),
+ :course_time => course.time,
+ :course_term => course.term,
+ :news_count => notices_count,
+ :homework_count => homework_count,
+ :topic_count => topic_count,
+ :news => notices,
+ :homeworks => homeworkss,
+ :topics => topics,
+ :better_students => better_students,
+ :active_students => active_students,
+ :message => "",
+ :course_student_num=>course ? course.members.count : 0,
+ #:time_from_now=> distance_of_time_in_words(Time.now, latest_course_dynamic[:time].to_time) << "前",
+ :time_from_now=>time_from_now(latest_course_dynamic[:time].to_time), #.strftime('%Y-%m-%d %H:%M:%S').to_s,
+ :time=>latest_course_dynamic[:time].to_time}
end
+
end
#返回数组集合
result.sort! { |order, newer| newer[:time] <=> order[:time] }
+
result
end
diff --git a/app/views/admin/schools.html.erb b/app/views/admin/schools.html.erb
new file mode 100644
index 000000000..0956981e8
--- /dev/null
+++ b/app/views/admin/schools.html.erb
@@ -0,0 +1,50 @@
+
+ <%=l(:label_school_plural)%>
+
+<%= form_tag({:controller => 'admin', :action => 'schools' }, :method => :get,:id=>"search_course_form") do %>
+ <%= submit_tag "搜索",:style => "float: right;margin-right: 15px;"%>
+
+<% end %>
+
+
+
+
+<% html_title(l(:label_project_plural)) -%>
diff --git a/app/views/avatar/_avatar_form.html.erb b/app/views/avatar/_avatar_form.html.erb
index 632ea5d4d..43aaf9132 100644
--- a/app/views/avatar/_avatar_form.html.erb
+++ b/app/views/avatar/_avatar_form.html.erb
@@ -43,7 +43,7 @@
-<%#= link_to l(:button_delete_file),{:controller => :avatar,:action => :delete_image,:remote=>true,:source_type=> source.class,:source_id=>source.id},:confirm => l(:text_are_you_sure), :method => :post, :class => "btn_addPic", :style => "text-decoration:none;" %>
+<%= link_to l(:button_delete_file),{:controller => :avatar,:action => :delete_image,:remote=>true,:source_type=> source.class,:source_id=>source.id},:confirm => l(:text_are_you_sure), :method => :post, :class => "btn_addPic", :style => "text-decoration:none;" %>
<%= l(:button_upload_photo) %>
diff --git a/app/views/courses/_new_groups_name.html.erb b/app/views/courses/_new_groups_name.html.erb
index 39fa33677..fc2c5a62d 100644
--- a/app/views/courses/_new_groups_name.html.erb
+++ b/app/views/courses/_new_groups_name.html.erb
@@ -31,7 +31,7 @@
<% if @canShowCode%>
<%= form_tag(updategroupname_course_path(@course,:group_id => group.id), method: 'get', remote:true, :id => 'update_group_'+group.id.to_s) do %>
-
+
<% end %>
@@ -47,7 +47,7 @@
<%= form_tag( addgroups_course_path(@course), method: 'get',:remote=>true,:id => 'add_group_name') do %>
-
+
<% end %>
diff --git a/app/views/homework_common/index.html.erb b/app/views/homework_common/index.html.erb
index 2de96bca1..6847da2c7 100644
--- a/app/views/homework_common/index.html.erb
+++ b/app/views/homework_common/index.html.erb
@@ -48,7 +48,7 @@
- <% if homework.homework_type == 2 && homework.homework_detail_programing%>
+ <% if homework.homework_type == 2 && homework.homework_detail_programing && @is_teacher%>
">
@@ -71,18 +71,30 @@
<% end%>
+
+
+
+
开发语言:
+
+ <% if homework.homework_detail_programing.language.to_i == 1%>
+ C
+ <% elsif homework.homework_detail_programing.language.to_i == 2%>
+ C++
+ <% end%>
+
+
+
<% end%>
-
-
- <% unless homework.attachments.empty?%>
+ <% unless homework.attachments.empty?%>
+
附件:
<%= render :partial => 'student_work/work_attachments', :locals => {:attachments => homework.attachments} %>
- <% end%>
-
-
+
+
+ <% end%>
扣分标准:
diff --git a/app/views/homework_common/next_step.html.erb b/app/views/homework_common/next_step.html.erb
index 75e9f4c0a..e84d0f87a 100644
--- a/app/views/homework_common/next_step.html.erb
+++ b/app/views/homework_common/next_step.html.erb
@@ -11,7 +11,7 @@
<%= hidden_field_tag "course",@course.id%>
<%= render :partial => 'homework_common/homework_detail_manual_form', :locals => { :homework => @homework,:f => f,:edit_mode => false } %>
提交
- <%= link_to "上一步", new_homework_common_path(:course => @course.id), :class => "orange_btn_homework fl"%>
+ <%#= link_to "上一步", new_homework_common_path(:course => @course.id), :class => "orange_btn_homework fl"%>
<%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%>
<% end%>
@@ -22,7 +22,7 @@
<%= hidden_field_tag "homework_common[homework_type]","2"%>
<%= render :partial => 'homework_common/homework_detail_programing_form', :locals => { :homework => @homework,:f => f,:edit_mode => false } %>
提交
- <%= link_to "上一步", new_homework_common_path(:course => @course.id), :class => "orange_btn_homework fl"%>
+ <%#= link_to "上一步", new_homework_common_path(:course => @course.id), :class => "orange_btn_homework fl"%>
<%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%>
<% end%>
diff --git a/app/views/layouts/_base_header.html.erb b/app/views/layouts/_base_header.html.erb
index 16fa44c73..c4f61d73c 100644
--- a/app/views/layouts/_base_header.html.erb
+++ b/app/views/layouts/_base_header.html.erb
@@ -34,7 +34,7 @@
<%=link_to l(:label_my_message)+'('+User.current.count_new_jour.to_s+')',
- { :controller => 'users', :action => 'user_newfeedback', id: User.current.id, host: Setting.host_user },
+ {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.host_user},
{:class => 'my-message'} if User.current.logged?%>
diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb
index 972b3b3a6..b168e5f81 100644
--- a/app/views/layouts/base_projects.html.erb
+++ b/app/views/layouts/base_projects.html.erb
@@ -80,11 +80,13 @@
<% if @project.project_type == 0 %>
- <%= l(:label_project_score)%> :
- <%= link_to(format("%.2f" ,project_scores(@project) ).to_i, {:controller => 'projects',
- :action => 'show_projects_score',
- :remote => true,
- :id => @project.id}, :class => "c_orange f14" ) %>
+ <% unless project_scores(@project) == 0 %>
+ <%= l(:label_project_score)%> :
+ <%= link_to(format("%.2f" ,project_scores(@project) ).to_i, {:controller => 'projects',
+ :action => 'show_projects_score',
+ :remote => true,
+ :id => @project.id}, :class => "c_orange f14" ) %>
+ <% end %>
<% end %>
diff --git a/app/views/layouts/base_users_new.html.erb b/app/views/layouts/base_users_new.html.erb
index bbfe9a1ea..683c7b0b5 100644
--- a/app/views/layouts/base_users_new.html.erb
+++ b/app/views/layouts/base_users_new.html.erb
@@ -126,52 +126,110 @@
- <% if @center_flag %>
-
- <% end %>
+
+
+ <% if @center_flag %>
+
+
+
+ <% else%>
+
+
+ <% end %>
+
+
+
+
<% if !@user.user_extensions.nil? && @user.user_extensions.identity == 0 %>
- - 创建课程 :
- - 发布作业 :
+ <% if(get_create_course_count(@user)) == 0 %>
+ - 创建课程 :
+ <% end %>
+ <% if(get_homework_commons_count(@user)) == 0 %>
+ - 发布作业 :
+ <% end %>
+ <% end %>
+ <% if (get_join_course_count(@user) != 0) %>
+ - 加入课程 :
+ <% end %>
+ <% if @user.user_extensions.identity == 0 %>
+ - 参加匿评 :
+ <% end %>
+ <% if (get_projectandcourse_attachment_count(@user) != 0) %>
+ - 发布资源 :
+ <% end %>
+ <% if (get_create_project_count(@user) != 0) %>
+ - 创建项目 :
+ <% end %>
+ <% if (get_join_project_count(@user) != 0) %>
+ - 加入项目 :
+ <% end %>
+ <% if (get_create_issue_count(@user) != 0) %>
+ - 发布缺陷 :
+ <% end %>
+ <% if (get_resolve_issue_count(@user) != 0) %>
+ - 解决缺陷 :
<% end %>
- - 加入课程 :
- - 参加匿评 :
- - 发布资源 :
- - 创建项目 :
- - 加入项目 :
- - 发布缺陷 :
- - 解决缺陷 :
<% if !@user.user_extensions.nil? && @user.user_extensions.identity == 0 %>
- - <%= get_create_course_count(@user) %>
- - <%= get_homework_commons_count(@user) %>
+ <% if(get_create_course_count(@user)) == 0 %>
+ - <%= get_create_course_count(@user) %>
+ <% end %>
+ <% if(get_homework_commons_count(@user)) == 0 %>
+ - <%= get_homework_commons_count(@user) %>
+ <% end %>
+ <% end %>
+ <% if (get_join_course_count(@user) != 0) %>
+ - <%= get_join_course_count(@user) %>
+ <% end %>
+ <% if @user.user_extensions.identity == 0 %>
+ - <%= get_anonymous_evaluation_count(@user) %>
+ <% end %>
+ <% if (get_projectandcourse_attachment_count(@user) != 0) %>
+ - <%= get_projectandcourse_attachment_count(@user) %>
+ <% end %>
+ <% if (get_create_project_count(@user) != 0) %>
+ - <%= get_create_project_count(@user) %>
+ <% end %>
+ <% if (get_join_project_count(@user) != 0) %>
+ - <%= get_join_project_count(@user) %>
+ <% end %>
+ <% if (get_create_issue_count(@user) != 0) %>
+ - <%= get_create_issue_count(@user) %>
+ <% end %>
+ <% if (get_resolve_issue_count(@user) != 0) %>
+ - <%= get_resolve_issue_count(@user) %>
<% end %>
- - <%= get_join_course_count(@user) %>
- - <%= get_anonymous_evaluation_count(@user) %>
- - <%= get_projectandcourse_attachment_count(@user) %>
- - <%= get_create_project_count(@user) %>
- - <%= get_join_project_count(@user) %>
- - <%= get_create_issue_count(@user) %>
- - <%= get_resolve_issue_count(@user) %>
diff --git a/app/views/news/_course_news.html.erb b/app/views/news/_course_news.html.erb
index f801aff87..e2c50fe24 100644
--- a/app/views/news/_course_news.html.erb
+++ b/app/views/news/_course_news.html.erb
@@ -24,8 +24,8 @@
<% end %>
- <%= form_tag({:controller => 'news', :action => 'index', :course_id => @course },:remote=>'true', :method => :get,:id=>"news_query_form", :class => 'query_form') do %>
-
+ <%= form_tag({:controller => 'news', :action => 'index', :course_id => @course }, :method => :get,:id=>"news_query_form", :class => 'query_form') do %>
+
搜索
<% end %>
@@ -34,7 +34,7 @@
<%= render :partial => 'course_news_list', :locals=>{ :newss=>@newss,:obj_pages=>@obj_pages, :obj_count=>@obj_count} %>
-
+
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
<%= stylesheet_link_tag 'scm' %>
diff --git a/app/views/poll/_new_MC.html.erb b/app/views/poll/_new_MC.html.erb
index 8c47baa01..e5f2a6b82 100644
--- a/app/views/poll/_new_MC.html.erb
+++ b/app/views/poll/_new_MC.html.erb
@@ -1,5 +1,6 @@
<%= form_for PollQuestion.new,:url =>create_poll_question_poll_path(@poll.id),:remote => true do |f|%>
+ <% insert_begin = insert_begin %>
diff --git a/app/views/poll/_poll_form.html.erb b/app/views/poll/_poll_form.html.erb
index 74ca9fb32..6d1f3b6bb 100644
--- a/app/views/poll/_poll_form.html.erb
+++ b/app/views/poll/_poll_form.html.erb
@@ -2,27 +2,227 @@
@@ -9,9 +12,11 @@
*
<%end%>
+
<%= link_to("", delete_poll_question_poll_index_path(:poll_question => poll_question.id),
method: :delete, :confirm => l(:text_are_you_sure), :remote => true, :class => "ur_icon_de") %>
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/_show_MCQ.html.erb b/app/views/poll/_show_MCQ.html.erb
index 63b9d1c1f..fb2c03080 100644
--- a/app/views/poll/_show_MCQ.html.erb
+++ b/app/views/poll/_show_MCQ.html.erb
@@ -12,6 +12,7 @@
<%= link_to("", delete_poll_question_poll_index_path(:poll_question => poll_question.id),
method: :delete, :confirm => l(:text_are_you_sure), :remote => true, :class => "ur_icon_de") %>
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/_show_mulit.html.erb b/app/views/poll/_show_mulit.html.erb
index 2d52fffb5..ad01d0a3e 100644
--- a/app/views/poll/_show_mulit.html.erb
+++ b/app/views/poll/_show_mulit.html.erb
@@ -13,9 +13,21 @@
<%= link_to("", delete_poll_question_poll_index_path(:poll_question => poll_question.id),
method: :delete, :confirm => l(:text_are_you_sure), :remote => true, :class => "ur_icon_de") %>
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/_show_single.html.erb b/app/views/poll/_show_single.html.erb
index 8caa7b1a5..f5846b6b7 100644
--- a/app/views/poll/_show_single.html.erb
+++ b/app/views/poll/_show_single.html.erb
@@ -12,8 +12,20 @@
<%= link_to("", delete_poll_question_poll_index_path(:poll_question => poll_question.id),
method: :delete, :confirm => l(:text_are_you_sure), :remote => true, :class => "ur_icon_de") %>
+
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/poll/create_poll_question.js.erb b/app/views/poll/create_poll_question.js.erb
index ac44ebb4c..8a597514e 100644
--- a/app/views/poll/create_poll_question.js.erb
+++ b/app/views/poll/create_poll_question.js.erb
@@ -1,4 +1,8 @@
+<% if @is_insert %>
+ $("#poll_content").html('<%= escape_javascript(render :partial => 'poll_content', :locals => {:poll => @poll})%>');
+<% else %>
$("#new_poll_question").html("");
+
$("#poll_content").append("" +
"
" +
"<% if @poll_questions.question_type == 1%>" +
@@ -23,4 +27,4 @@ $("#poll_content").append("
" +
"<% end%>" +
"
" +
"
");
-
+<% end %>
diff --git a/app/views/projects/yun_dep.html.erb b/app/views/projects/yun_dep.html.erb
index 20abf038f..7a774f4e4 100644
--- a/app/views/projects/yun_dep.html.erb
+++ b/app/views/projects/yun_dep.html.erb
@@ -5,27 +5,27 @@
-
云化部署中...
-
-
0%
+
云化部署中....
+
+
+
+<%= form_tag(upload_school_path(@school.id),method: "post", multipart: true) do %>
+ <%#= text_field_tag 'school'%>
+
+
+ <%= image_tag(@school.logo_link, id: "avatar_image", :class=>"school_avatar")%>
+
上传图片
+ <%= file_field_tag 'logo',:style => "display:none;", :id => "file", :onchange => "showPreview(this)"%>
+
+
+ <%= submit_tag('上传') %>
+ <%= submit_tag('取消') %>
+
+
<% end %>
+
diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb
index 807fc80fe..b259e20a5 100644
--- a/app/views/student_work/_programing_work_show.html.erb
+++ b/app/views/student_work/_programing_work_show.html.erb
@@ -24,50 +24,41 @@
-
测试结果:
-
-
-
- 输入 |
- 输出 |
- 测试结果 |
-
- <%@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%>
- |
+ <% if @is_teacher%>
+ 测试结果:
+
+
+
+ 输入 |
+ 输出 |
+ 测试结果 |
- <% end%>
-
-
-
-
-
+ <%@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%>
- 测试结果:
-
-
-
- <% if @is_teacher%>
+
+
+
+
<%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
diff --git a/app/views/student_work/index.html.erb b/app/views/student_work/index.html.erb
index 781277b57..92f6f93e0 100644
--- a/app/views/student_work/index.html.erb
+++ b/app/views/student_work/index.html.erb
@@ -55,21 +55,23 @@
<% end%>
<% if @is_teacher%>
- <% if @homework.student_works.empty?%>
- <%= link_to "附件", "javascript:void(0)", class: "down_btn fr zip_download_alert", :onclick => "alert('没有学生提交作业,无法下载附件')" %>
- <% else%>
- <%= link_to "附件", zipdown_assort_path(obj_class: @homework.class, obj_id: @homework, format: :json),
- remote: true, class: "down_btn fr zip_download_alert", :id => "download_homework_attachments" %>
+ <% unless @homework.homework_type == 2%>
+ <% if @homework.student_works.empty?%>
+ <%= link_to "附件", "javascript:void(0)", class: "down_btn fr zip_download_alert", :onclick => "alert('没有学生提交作业,无法下载附件')" %>
+ <% else%>
+ <%= link_to "附件", zipdown_assort_path(obj_class: @homework.class, obj_id: @homework, format: :json),
+ remote: true, class: "down_btn fr zip_download_alert", :id => "download_homework_attachments" %>
+ <% end%>
+
+ 使用
+ winzip
+ 工具进行解压可能会导致
+ 下载文件乱码
+ ,建议您使用
+ winrar
+ 工具进行解压
+
<% end%>
-
- 使用
- winzip
- 工具进行解压可能会导致
- 下载文件乱码
- ,建议您使用
- winrar
- 工具进行解压
-
<%= link_to("匿评", evaluation_list_student_work_index_path(:homework => @homework.id, :format => 'xls'),:class=>'down_btn fr') if @homework.homework_type == 1%>
<%= link_to("缺评", absence_penalty_list_student_work_index_path(:homework => @homework.id, :format => 'xls'),:class=>'down_btn fr') if @homework.homework_type == 1%>
<%= link_to l(:label_list), student_work_index_path(:homework => @homework.id,:order => @order, :sort => @b_sort, :name => @name, :format => 'xls'),:class=>'down_btn fr'%>
@@ -137,6 +139,14 @@
<% if @homework.homework_type == 2 && @homework.homework_detail_programing%>
+ ">
+
+ 输入
+ |
+
+ 输出
+ |
+
<% @homework.homework_tests.each do |test|%>
">
@@ -149,8 +159,20 @@
<% end%>
|
+
+
+
+
开发语言:
+
+ <% if @homework.homework_detail_programing.language.to_i == 1%>
+ C
+ <% elsif @homework.homework_detail_programing.language.to_i == 2%>
+ C++
+ <% end%>
+
+
+
<% end%>
-
<% unless @homework.attachments.empty?%>
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index 2c91f394f..3b1ee93c8 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -29,49 +29,6 @@
<% end %>
-
-
- <% if !@center_flag %>
-
- <% end %>
课程动态
@@ -82,29 +39,6 @@
- <% if !@center_flag %>
-
- <% end %>
-
项目动态
diff --git a/app/views/users/user_courses.html.erb b/app/views/users/user_courses.html.erb
index 36e061efa..ee8d95b00 100644
--- a/app/views/users/user_courses.html.erb
+++ b/app/views/users/user_courses.html.erb
@@ -13,9 +13,9 @@
diff --git a/app/views/users/user_projects.html.erb b/app/views/users/user_projects.html.erb
index e7eeedb29..977945d7f 100644
--- a/app/views/users/user_projects.html.erb
+++ b/app/views/users/user_projects.html.erb
@@ -13,9 +13,9 @@
diff --git a/app/views/welcome/course.html.erb b/app/views/welcome/course.html.erb
index 143c32dbe..4edec2202 100644
--- a/app/views/welcome/course.html.erb
+++ b/app/views/welcome/course.html.erb
@@ -56,21 +56,11 @@
<% end %>
-
- <%= l(:label_welcome_trustie_course) %>
+ <%= l(:label_welcome_trustie_course) %>
<% else %>
<% unless @course_page.nil? %>
-
<%= l(:label_welcome_trustie_course) %>
,
@@ -112,7 +102,6 @@
course_term = "春季学期"
end
%>
- <%# (month_now >= 3 && month_now < 9) ? course_term = "春季学期" : course_term = "秋季学期" %>
<% cur_school_course = @school_id.nil? ? [] : find_miracle_course(10,7,@school_id, year_now, course_term) %>
<% if cur_school_course.count == 0 %>
diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb
index c03b0de76..816d6550a 100644
--- a/app/views/welcome/index.html.erb
+++ b/app/views/welcome/index.html.erb
@@ -45,10 +45,10 @@
<% if @organization.nil? %>
<% unless @first_page.nil? %>
- <%= l(:label_welcome_trustie_project)%>,
- <%= l(:label_welcome_trustie_project_description)%>
+
+ <%= @first_page.description.html_safe %>
<% end %>
<% else %>
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 2aca152cb..a3e7dff99 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -7,6 +7,7 @@ RedmineApp::Application.configure do
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
+ config.log_level =:debug
config.logger = Logger.new('log/development.log', 'daily') # daily, weekly or monthly
# Show full error reports and disable caching
config.consider_all_requests_local = true
diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml
index 6c2646acf..e47cd476c 100644
--- a/config/locales/projects/zh.yml
+++ b/config/locales/projects/zh.yml
@@ -350,7 +350,7 @@ zh:
label_input_email: 请输入邮箱地址
label_invite_trustie_user: "邀请Trustie注册用户"
- label_invite_trustie_user_tips: "输入姓名、邮箱、昵称"
+ label_invite_trustie_user_tips: "支持姓名、邮箱、昵称搜索!"
label_user_role_null: 用户和角色不能留空!
label_invite_project: 邀请您加入项目
label_mail_invite_success: 您已成功加入项目!
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index d89ecb4f5..1018a213a 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -381,6 +381,7 @@ zh:
label_organization_choose: --请选择组织--
label_organization_name: 组织名称
label_organization_list: 组织列表
+ label_school_plural: 学校列表
label_organization_new: 新建组织
label_organization_edit: 修改组织
label_project_plural: 项目列表
@@ -669,6 +670,8 @@ zh:
label_tag: 标签
label_revision: 修订
label_revision_plural: 修订
+ lable_revision_code_count: 代码量
+ label_revision_commit_count: 提交次数
label_revision_id: 修订 %{value}
label_associated_revisions: 相关修订版本
label_added: 已添加
@@ -715,6 +718,11 @@ zh:
label_commits_per_month: 每月提交次数
label_commits_per_author: 每用户提交次数
+ label_author_commits_per_month: 用户最近一月的提交次数
+ label_author_commits_six_month: 用户最近六个月提交次数
+ label_author_commits_year: 最近一年的提交次数
+ label_author_code_six_month: 用户最近六个月代码量
+ label_author_code_year: 用户最近一年代码量
label_view_diff: 查看差别
label_diff_inline: 直列
label_diff_side_by_side: 并排
diff --git a/config/routes.rb b/config/routes.rb
index 1ae607eb7..280053f60 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -39,6 +39,17 @@ RedmineApp::Application.routes.draw do
end
+ resources :school do
+ collection do
+
+ end
+
+ member do
+ get 'upload_logo'
+ post 'upload'
+ end
+ end
+
resources :homework_attach do
collection do
get 'get_homework_member_list'
@@ -670,6 +681,7 @@ RedmineApp::Application.routes.draw do
match 'admin/test_email', :via => :get
match 'admin/default_configuration', :via => :post
get 'admin/organization'
+ get 'admin/schools'
resources :auth_sources do
member do
@@ -808,9 +820,6 @@ RedmineApp::Application.routes.draw do
post 'school/search_school/', :to => 'school#search_school'
get 'school/search_school/', :to => 'school#search_school'
- post 'school/upload', :to => 'school#upload'
- get 'school/upload_logo', :to => 'school#upload_logo'
-
######added by nie
match 'tags/show_projects_tags'
########### added by liuping
diff --git a/db/schema.rb b/db/schema.rb
index 912b4e8b4..0e8cde619 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -454,6 +454,13 @@ ActiveRecord::Schema.define(:version => 20150722015428) do
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
@@ -737,6 +744,16 @@ ActiveRecord::Schema.define(:version => 20150722015428) do
add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id"
+ create_table "journal_details_copy", :force => true do |t|
+ t.integer "journal_id", :default => 0, :null => false
+ t.string "property", :limit => 30, :default => "", :null => false
+ t.string "prop_key", :limit => 30, :default => "", :null => false
+ t.text "old_value"
+ t.text "value"
+ end
+
+ add_index "journal_details_copy", ["journal_id"], :name => "journal_details_journal_id"
+
create_table "journal_replies", :id => false, :force => true do |t|
t.integer "journal_id"
t.integer "user_id"
@@ -854,7 +871,6 @@ ActiveRecord::Schema.define(:version => 20150722015428) do
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"
diff --git a/lib/redmine.rb b/lib/redmine.rb
index 3043cfe5d..0f6c14b8a 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 :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
menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb
index 1876190d9..927018b34 100644
--- a/lib/redmine/scm/adapters/git_adapter.rb
+++ b/lib/redmine/scm/adapters/git_adapter.rb
@@ -380,6 +380,36 @@ module Redmine
nil
end
+ def parse_commit(commits)
+ sum = {file: 0, insertion: 0, deletion: 0}
+ commits.split("\n").each do |commit|
+ if /(\d+)\s+?file/ =~ commit
+ sum[:file] += $1 .to_i
+ end
+ if /(\d+)\s+?insertion/ =~ commit
+ sum[:insertion] += $1.to_i
+ end
+ if /(\d+)\s+?deletion/ =~ commit
+ sum[:deletion] += $1.to_i
+ end
+ end
+ sum[:insertion] + sum[:deletion]
+ end
+
+ def commits(authors, start_date, end_date, branch='master')
+ rs = []
+ authors.each do |author|
+ cmd_args = %W|log #{branch} --pretty=tformat: --shortstat --author=#{author} --since=#{start_date} --until=#{end_date}|
+ commits = ''
+ git_cmd(cmd_args) do |io|
+ commits = io.read
+ end
+ logger.info "git log output for #{author} #{commits}"
+ rs << {author: author, num: parse_commit(commits)}
+ end
+ rs
+ end
+
class Revision < Redmine::Scm::Adapters::Revision
# Returns the readable identifier
def format_identifier
diff --git a/public/assets/kindeditor/kindeditor.js b/public/assets/kindeditor/kindeditor.js
index a9633861e..270618522 100644
--- a/public/assets/kindeditor/kindeditor.js
+++ b/public/assets/kindeditor/kindeditor.js
@@ -5104,8 +5104,8 @@ KEditor.prototype = {
}
}
});
- statusbar.removeClass('statusbar').addClass('ke-statusbar')
- .append('');
+ //statusbar.removeClass('statusbar').addClass('ke-statusbar')
+ // .append('');
if (self._fullscreenResizeHandler) {
K(window).unbind('resize', self._fullscreenResizeHandler);
self._fullscreenResizeHandler = null;
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index d4d309181..3e01d68ff 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -2796,4 +2796,15 @@ div.repos_explain{
.upload_img img{max-width: 100%;}
#activity .upload_img img{max-width: 580px;}
-img,embed{max-width: 100%;}
\ No newline at end of file
+img,embed{max-width: 100%;}
+
+img.school_avatar {
+ background: rgb(245, 245, 245);
+ padding: 4px;
+ border: 1px solid #e5dfc7;
+ float: left;
+ display: block;
+ width: 100px;
+ height: 100px;
+ max-width: none;
+}
\ No newline at end of file
diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css
index 778a474cd..00a2f0034 100644
--- a/public/stylesheets/courses.css
+++ b/public/stylesheets/courses.css
@@ -665,7 +665,6 @@ a:hover.ping_pic{border:1px solid #64bdd9;}
.ping_back_tit{ float:left; width:523px; 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;}
-.fr{ float:right;}
.min_search{ width:140px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/public_icon.png) 185px -193px no-repeat; }
.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;}
diff --git a/public/stylesheets/polls.css b/public/stylesheets/polls.css
index 353ec3937..83fa5089b 100644
--- a/public/stylesheets/polls.css
+++ b/public/stylesheets/polls.css
@@ -28,7 +28,7 @@ a:hover.pollsbtn{ background:#64bdd9; color:#fff; text-decoration:none;}
#polls div{word-break: break-all;word-wrap: break-word;}
.ur_prefix_content{ color:#656565; text-indent:30px; margin-top:10px; }
.ur_card{border-top:1px solid #dcdcdc;margin-top:20px; color:#3a3a3a;}
-.ur_title{ padding:20px 0px ; float:left; width:604px; }
+.ur_title{ padding:20px 0px ; float:left; width:564px; }
.ur_required{ font-weight: bold; color:red;}
.ur_inputs{ color:#666;}
.ur_table{border-top:1px solid #dcdcdc; background:#fff;}
@@ -101,10 +101,13 @@ a:hover.icon_remove{background:url(images/icons.png) -20px -338px no-repeat;}
.ur_editor02{width:648px; border:1px solid #cbcbcb; padding:10px; margin-bottom:10px;}
a.ur_button_submit{ display:block; width:106px; height:31px; margin:0 auto; background:#15bccf; color:#fff; font-size:16px; text-align:center; padding-top:4px; margin-bottom:10px; }
a:hover.ur_button_submit{ background:#0fa9bb; text-decoration:none;}
+
a.ur_icon_de{ background:url(images/icons.png) 0px -338px no-repeat; width:16px; height:27px; display:block;float:right; margin-top:15px;}
a:hover.ur_icon_de{ background:url(images/icons.png) -20px -338px no-repeat;}
.ur_icon_edit{ background:url(images/icons.png) 0px -272px no-repeat; width:16px; height:27px; display:block;float:right; margin-top:15px; margin-right:10px;}
a:hover.ur_icon_edit{ background:url(images/icons.png) -21px -272px no-repeat;}
+.ur_icon_add{ background:url(images/icons.png) 0px -310px no-repeat; width:16px; height:27px; display:block;float:right; margin-top:15px; margin-right:10px;}
+a:hover.ur_icon_add{background:url(images/icons.png) -20px -310px no-repeat;}
/***弹框***/
.popbox_polls{width:300px;height:100px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-100px 0 0 -150px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}
diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css
index f005b2df6..fa1bec754 100644
--- a/public/stylesheets/project.css
+++ b/public/stylesheets/project.css
@@ -551,7 +551,24 @@ p.percent {
font-size: 12px;
}
.repositorytitle select{ width: 110px; height: 21px; }
-
+.riviseRed {
+ width:15px;
+ height:15px;
+ margin-right: 3px;
+ background-color:#FF0000;
+ filter:alpha(opacity=50); /* ie 有效*/
+ -moz-opacity:0.5; /* Firefox 有效*/
+ opacity: 0.5; /* 通用,其他浏览器 有效*/
+}
+.changeBlue {
+ width:15px;
+ height:15px;
+ margin-right: 3px;
+ background-color:#0000FF;
+ filter:alpha(opacity=50); /* ie 有效*/
+ -moz-opacity:0.5; /* Firefox 有效*/
+ opacity: 0.5; /* 通用,其他浏览器 有效*/
+}
/*导出*/