diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 8e23041c6..086ecfb7f 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -34,13 +34,21 @@ class AdminController < ApplicationController
def projects
@status = params[:status] || 1
- scope = Project.status(@status).order('lft')
+ scope = Project.status(@status).order('id asc')
scope = scope.like(params[:name]) if params[:name].present?
@projects = scope.where(project_type: Project::ProjectType_project).all
render :action => "projects", :layout => false if request.xhr?
end
+ def courses
+ @name = params[:name]
+ @courses = Course.like(@name)
+ respond_to do |format|
+ format.html
+ end
+ end
+
def users
sort_init 'login', 'asc'
sort_update %w(login firstname lastname mail admin created_on last_login_on)
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 3b25438df..00d740ee7 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -443,26 +443,19 @@ class CoursesController < ApplicationController
def create
cs = CoursesService.new
@course = cs.create_course(params,User.current)[:course]
- if @course.new_record?
+ if @course
respond_to do |format|
- format.html { render :action => 'new', :layout => 'new_base' } #Added by young
- format.api { render_validation_errors(@course) }
+ flash[:notice] = l(:notice_successful_create)
+ format.html {redirect_to settings_course_url(@course, :course_type => 1)}
+ format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'courses', :action => 'show', :id => @course.id) }
end
else
respond_to do |format|
- format.html {
- # render :layout => 'base_courses'
- flash[:notice] = l(:notice_successful_create)
- if params[:continue]
- redirect_to new_course_url(attrs, :course => '0')
- elsif params[:course_continue]
- redirect_to new_course_url(:course => '1')
- else
- redirect_to settings_course_url(@course, :course_type => 1)
- end
- }
- format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'courses', :action => 'show', :id => @course.id) }
- end
+ flash[:notice] = l(:notice_create_failed)
+ # @course = Course.new
+ format.html { redirect_to new_course_path } #Added by young
+ format.api { render_validation_errors(@course) }
+ end
end
end
@@ -532,7 +525,7 @@ class CoursesController < ApplicationController
@trackers = Tracker.sorted.all
@course = Course.new
@course.safe_attributes = params[:course]
- month = Time.now.month
+ # month = Time.now.month
render :layout => 'new_base'
end
diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb
index 0003f7586..19c1214e2 100644
--- a/app/controllers/files_controller.rb
+++ b/app/controllers/files_controller.rb
@@ -37,7 +37,7 @@ class FilesController < ApplicationController
obj.each do |container|
@attachments += container.attachments
end
- @all_attachments = visable_attachemnts(@attachments)
+ @all_attachments = User.current.admin? ? @attachments : visable_attachemnts(@attachments)
@limit = 10
@feedback_count = @all_attachments.count
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index 5cd55e23b..6b2cd21ed 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -92,7 +92,6 @@ class HomeworkCommonController < ApplicationController
@homework.publish_time = params[:homework_common][:publish_time]
@homework.homework_type = params[:homework_common][:homework_type]
@homework.late_penalty = params[:late_penalty]
- @homework.user_id = User.current.id
@homework.course_id = @course.id
#匿评作业相关属性
@@ -135,6 +134,7 @@ class HomeworkCommonController < ApplicationController
#statue 1:启动成功,2:启动失败,作业总数大于等于2份时才能启动匿评,3:已开启匿评,请务重复开启,4:没有开启匿评的权限
def start_anonymous_comment
@statue =4 and return unless User.current.admin? || User.current.allowed_to?(:as_teacher,@course)
+ @statue = 5 and return if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
if @homework_detail_manual.comment_status == 1
student_works = @homework.student_works
if student_works && student_works.size >=2
diff --git a/app/controllers/journals_controller.rb b/app/controllers/journals_controller.rb
index aa3a7e0ea..d8cd8eeec 100644
--- a/app/controllers/journals_controller.rb
+++ b/app/controllers/journals_controller.rb
@@ -74,6 +74,7 @@ class JournalsController < ApplicationController
text = text.to_s.strip.gsub(%r{
((.|\s)*?) }m, '[...]')
@content = "> #{ll(Setting.default_language, :text_user_wrote, user)}\n> "
@content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
+ @content = "" << @content
@id = user.id
rescue ActiveRecord::RecordNotFound
render_404
diff --git a/app/controllers/stores_controller.rb b/app/controllers/stores_controller.rb
index b1705c826..85ea85241 100644
--- a/app/controllers/stores_controller.rb
+++ b/app/controllers/stores_controller.rb
@@ -72,6 +72,22 @@ class StoresController < ApplicationController
l(:label_borad_project), #l(:label_contest_innovate),
l(:label_forum) ]
end
+
+ #缺失文件列表
+ def lost_file
+ attachments = []
+ Attachment.where("container_id is not null and container_type is not null and container_type <> 'Bid' and container_type <> 'HomeworkAttach'").each do |attachment|
+ unless File.exist?(attachment.diskfile)
+ attachments << attachment
+ end
+ end
+ respond_to do |format|
+ format.xls {
+ send_data(homework_to_xls(attachments), :type => "text/excel;charset=utf-8; header=present",
+ :filename => "#{l(:label_file_lost_list)}.xls")
+ }
+ end
+ end
private
@@ -117,4 +133,27 @@ class StoresController < ApplicationController
else
end
end
+
+ #作品列表转换为excel
+ def homework_to_xls attachments
+ xls_report = StringIO.new
+ book = Spreadsheet::Workbook.new
+ sheet1 = book.create_worksheet :name => "homework"
+ blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
+ sheet1.row(0).default_format = blue
+ sheet1.row(0).concat(["文件ID","文件名","硬盘路径","上传时间","是否公开","所属对象","所属对象Id"])
+ count_row = 1
+ attachments.each do |attachment|
+ sheet1[count_row,0] = attachment.id
+ sheet1[count_row,1] = attachment.filename
+ sheet1[count_row,2] = attachment.diskfile
+ sheet1[count_row,3] = format_time(attachment.created_on)
+ sheet1[count_row,4] = (attachment.is_public == 1 || attachment.is_public) ? "是" :"否"
+ sheet1[count_row,5] = attachment.container_type
+ sheet1[count_row,6] = attachment.container_id
+ count_row += 1
+ end
+ book.write xls_report
+ xls_report.string
+ end
end
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index e695a6fb0..deeefcd75 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -2,10 +2,11 @@ class StudentWorkController < ApplicationController
layout "base_courses"
include StudentWorkHelper
require 'bigdecimal'
- before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty]
+ before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work]
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy]
+ before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
def index
@order,@b_sort,@name = params[:order] || "final_score",params[:sort] || "desc",params[:name] || ""
@@ -241,9 +242,8 @@ class StudentWorkController < ApplicationController
end
end
- #评价列表显示
+ #缺评列表显示
def student_work_absence_penalty
- render_403 unless User.current.allowed_to?(:as_teacher,@course)
order = params[:order] || "desc"
if @homework.student_works.empty?
@stundet_works = []
@@ -251,7 +251,7 @@ class StudentWorkController < ApplicationController
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
@stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM(
SELECT * ,
- (SELECT COUNT(*) FROM `student_works_evaluation_distributions` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS all_count,
+ (SELECT evaluation_num FROM homework_detail_manuals WHERE homework_detail_manuals.homework_common_id = #{@homework.id}) AS all_count,
(SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
FROM `student_works`
WHERE homework_common_id = #{@homework.id}
@@ -264,6 +264,39 @@ class StudentWorkController < ApplicationController
end
end
+ #导出缺评列表
+ def absence_penalty_list
+ if @homework.student_works.empty?
+ @stundet_works = []
+ else
+ work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
+ @stundet_works = StudentWork.find_by_sql("SELECT * FROM (SELECT *,(all_count - has_count) AS absence FROM(
+ SELECT * ,
+ (SELECT evaluation_num FROM homework_detail_manuals WHERE homework_detail_manuals.homework_common_id = #{@homework.id}) AS all_count,
+ (SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
+ FROM `student_works`
+ WHERE homework_common_id = #{@homework.id}
+ ) AS table_1) AS table_2
+ where absence > 0 order by absence")
+ end
+ respond_to do |format|
+ format.xls {
+ send_data(absence_penalty_list_xls(@stundet_works), :type => "text/excel;charset=utf-8; header=present",
+ :filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_absence_list)}.xls")
+ }
+ end
+ end
+
+ #导出匿评列表
+ def evaluation_list
+ respond_to do |format|
+ format.xls {
+ send_data(evaluation_list_xls(@homework.student_works), :type => "text/excel;charset=utf-8; header=present",
+ :filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_evaluation_list)}.xls")
+ }
+ end
+ end
+
private
#获取作业
def find_homework
@@ -293,6 +326,10 @@ class StudentWorkController < ApplicationController
render_403 unless (User.current.id == @work.user_id || User.current.admin?) && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 )
end
+ def teacher_of_course
+ render_403 unless User.current.allowed_to?(:as_teacher,@course)
+ end
+
#根据条件过滤作业结果
def search_homework_member homeworks,name
name = name.downcase
@@ -302,6 +339,7 @@ class StudentWorkController < ApplicationController
select_homework
end
+ #作品列表转换为excel
def homework_to_xls items
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
@@ -328,4 +366,55 @@ class StudentWorkController < ApplicationController
book.write xls_report
xls_report.string
end
+
+ #缺评列表转换为excel
+ def absence_penalty_list_xls items
+ xls_report = StringIO.new
+ book = Spreadsheet::Workbook.new
+ sheet1 = book.create_worksheet :name => "homework"
+ blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
+ sheet1.row(0).default_format = blue
+
+ sheet1.row(0).concat([l(:excel_student_id),l(:excel_nickname),l(:excel_user_name),l(:lable_all_penalty),l(:lable_has_penalty),l(:lable_absence_penalty)])
+ count_row = 1
+ items.each do |homework|
+ sheet1[count_row,0] = homework.user.user_extensions.student_id
+ sheet1[count_row,1] = homework.user.login
+ sheet1[count_row,2] = homework.user.lastname.to_s + homework.user.firstname.to_s
+ sheet1[count_row,3] = homework.all_count
+ sheet1[count_row,4] = homework.has_count
+ sheet1[count_row,5] = homework.absence
+ count_row += 1
+ end
+ book.write xls_report
+ xls_report.string
+ end
+
+ #匿评列表转换为excel
+ def evaluation_list_xls items
+ xls_report = StringIO.new
+ book = Spreadsheet::Workbook.new
+ sheet1 = book.create_worksheet :name => "homework"
+ blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
+ sheet1.row(0).default_format = blue
+
+ sheet1.row(0).concat([l(:label_work_name),l(:label_work_id),l(:label_work_autor),l(:label_evaluation_id),l(:label_evaluation_name),
+ l(:label_evaluation_score),l(:label_evaluation_common),l(:label_evaluation_time)])
+ count_row = 1
+ items.each do |homework|
+ homework.student_works_scores.where(:reviewer_role => 3).each do |score|
+ sheet1[count_row,0] = homework.name
+ sheet1[count_row,1] = homework.user.user_extensions.student_id
+ sheet1[count_row,2] = homework.user.show_name
+ sheet1[count_row,3] = score.user.user_extensions.student_id
+ sheet1[count_row,4] = score.user.show_name
+ sheet1[count_row,5] = score.score
+ sheet1[count_row,6] = score.comment
+ sheet1[count_row,7] = format_time(score.created_at)
+ count_row += 1
+ end
+ end
+ book.write xls_report
+ xls_report.string
+ end
end
\ No newline at end of file
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 5af4e2038..a31bd6189 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -2278,7 +2278,9 @@ module ApplicationHelper
#获取匿评相关连接代码
def homework_anonymous_comment homework
if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业
- if homework.student_works.count >= 2 #作业份数大于2
+ if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
+ link = "启动匿评 ".html_safe
+ elsif homework.student_works.count >= 2 #作业份数大于2
case homework.homework_detail_manual.comment_status
when 1
link = link_to '启动匿评', alert_anonymous_comment_homework_common_path(homework), id: "#{homework.id}_start_anonymous_comment", remote: true, disable_with: '加载中...',:class => 'fr mr10 work_edit'
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 340559828..0d0b82752 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -186,7 +186,7 @@ class Mailer < ActionMailer::Base
@course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, courses c
where m.user_id = '#{user.id}' and c.id = m.course_id and jfm.jour_id = c.id
and jfm.jour_type='Course' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
-
+
@user_journal_messages = user.journals_for_messages.where("jour_type='Principal' and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC')
# 查询user在项目中留言(用户反馈)
diff --git a/app/models/project.rb b/app/models/project.rb
index 49ed2d0ee..f201e6e3c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -839,7 +839,7 @@ class Project < ActiveRecord::Base
# Yields the given block for each project with its level in the tree
def self.project_tree(projects, &block)
ancestors = []
- projects.sort_by(&:lft).each do |project|
+ projects.sort_by(&:id).each do |project|
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
end
diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb
index faca0738a..b77703a37 100644
--- a/app/services/courses_service.rb
+++ b/app/services/courses_service.rb
@@ -201,12 +201,14 @@ class CoursesService
@course.class_period = params[:class_period].to_i
params[:course][:is_public] ? @course.is_public = 1 : @course.is_public = 0
params[:course][:open_student] ? @course.open_student = 1 : @course.open_student = 0
+ else
+
end
@issue_custom_fields = IssueCustomField.sorted.all
@trackers = Tracker.sorted.all
- if @course.save
+ if @course && @course.save
#unless User.current.admin?
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
m = Member.new(:user => current_user, :roles => [r])
diff --git a/app/views/admin/courses.html.erb b/app/views/admin/courses.html.erb
new file mode 100644
index 000000000..1615bccbc
--- /dev/null
+++ b/app/views/admin/courses.html.erb
@@ -0,0 +1,76 @@
+
+ <%= link_to l(:label_course_new), {:controller => 'courses', :action => 'new'}, :class => 'icon icon-add' %>
+
+
+
+ <%=l(:label_course_all)%>
+
+
+<%= form_tag({}, :method => :get) do %>
+
+
+ 课程:
+
+ <%= text_field_tag 'name', params[:name], :size => 30, :placeholder => '课程名称' %>
+ <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
+
+ <%= l(:button_clear)%>
+
+
+<% end %>
+
+
+
+
+<% html_title(l(:label_course_all)) -%>
diff --git a/app/views/admin/projects.html.erb b/app/views/admin/projects.html.erb
index 4c9479a6d..f5b7955bf 100644
--- a/app/views/admin/projects.html.erb
+++ b/app/views/admin/projects.html.erb
@@ -1,5 +1,5 @@
-<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
+ <%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
@@ -7,62 +7,70 @@
<%= form_tag({}, :method => :get) do %>
-
-
+
+
<%= l(:label_filter_plural) %>
-
-
- <%= l(:field_status) %> :
-
- <%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
-
- <%= l(:label_project) %>:
-
- <%= text_field_tag 'name', params[:name], :size => 30 %>
- <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
- <%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
-
+
+
+ <%= l(:field_status) %> :
+
+ <%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
+
+ <%= l(:label_project) %>:
+
+ <%= text_field_tag 'name', params[:name], :size => 30 %>
+ <%= submit_tag l(:button_apply), :class => "small", :name => nil %>
+ <%= link_to l(:button_clear), {:controller => 'admin', :action => 'projects'}, :class => 'icon icon-reload' %>
+
<% end %>
<% html_title(l(:label_project_plural)) -%>
diff --git a/app/views/courses/_history.html.erb b/app/views/courses/_history.html.erb
index df2737337..e9639f4f0 100644
--- a/app/views/courses/_history.html.erb
+++ b/app/views/courses/_history.html.erb
@@ -9,7 +9,7 @@
- <%= link_to journal.user, user_path(journal.user),:class => 'c_blue fb fl mb10', :target => "_blank"%>
+ <%= link_to journal.user.show_name, user_path(journal.user),:class => 'c_blue fb fl mb10', :target => "_blank"%>
<%= format_time(journal.created_on) %>
diff --git a/app/views/files/_course_list.html.erb b/app/views/files/_course_list.html.erb
index 8536a3ef5..353d19dab 100644
--- a/app/views/files/_course_list.html.erb
+++ b/app/views/files/_course_list.html.erb
@@ -22,7 +22,7 @@
<% curse_attachments.each do |file| %>
- <% if file.is_public? || User.current.member_of_course?(course) %>
+ <% if file.is_public? || User.current.member_of_course?(course) || User.current.admin? %>
<%= link_to truncate(file.filename,length: 35, omission: '...'),
diff --git a/app/views/forums/_show_topics.html.erb b/app/views/forums/_show_topics.html.erb
index 9af8538ed..f46600a6c 100644
--- a/app/views/forums/_show_topics.html.erb
+++ b/app/views/forums/_show_topics.html.erb
@@ -4,36 +4,40 @@
<% if memos.any? %>
<% memos.each do |topic| %>
- <%= link_to image_tag(url_to_avatar(topic.author), :class => "avatar"), user_path(topic.author) if topic.author%>
-
-
-
- <%= link_to h(topic.subject), forum_memo_path(topic.forum, topic) %>
-
-
-
- <%= link_to (topic.replies_count), forum_memo_path(topic.forum, topic) %>
-
-
- 回答
-
-
-
-
-
-
-
- <%= authoring topic.created_at, topic.author %>
-
- <% author = topic.last_reply.try(:author)%>
- <% if author%>
- 最后回复:<%=link_to_user author %>
- <% end%>
-
-
-
-
-
+
+
+ <%= link_to image_tag(url_to_avatar(topic.author), :class => "avatar"), user_path(topic.author) if topic.author%>
+
+
+
+
+ <%= link_to h(topic.subject), forum_memo_path(topic.forum, topic) %>
+
+
+
+ <%= link_to (topic.replies_count), forum_memo_path(topic.forum, topic) %>
+
+
+ 回答
+
+
+
+
+
+
+
+ <%= authoring topic.created_at, topic.author %>
+
+ <% author = topic.last_reply.try(:author)%>
+ <% if author%>
+ 最后回复:<%=link_to_user author %>
+ <% end%>
+
+
+
+
+
+
<% end %>
diff --git a/app/views/homework_common/index.html.erb b/app/views/homework_common/index.html.erb
index 3208bb969..a1aa49c8c 100644
--- a/app/views/homework_common/index.html.erb
+++ b/app/views/homework_common/index.html.erb
@@ -41,12 +41,13 @@
<%= homework.description.html_safe %>
+
-