diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 61354add7..524bde9d7 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -695,21 +695,28 @@ class CoursesController < ApplicationController
# 显示老师和助教的活动
# @authors = searchTeacherAndAssistant(@course)
@authors = course_all_member(@course)
+ Dir.glob("#{Rails.root}/app/models/*.rb").sort.each { |file| require file }
events = []
- @authors.each do |author|
- @activity = Redmine::Activity::Fetcher.new(User.current, :course => @course,
- :with_subprojects => false,
- :author => author.user)
-
- @activity.scope_select {|t| has["show_#{t}"]}
- # modify by nwb
- # 添加私密性判断
- if User.current.member_of_course?(@course)|| User.current.admin?
- events += @activity.events(@days, @course.created_at)
- else
- events += @activity.events(@days, @course.created_at, :is_public => 1)
+ key = "course_events_#{@course.id}".to_sym
+ if Rails.env.production? && Setting.course_cahce_enabled?
+ events = Rails.cache.read(key) || []
+ end
+ if events.empty?
+ @authors.each do |author|
+ @activity = Redmine::Activity::Fetcher.new(User.current, :course => @course,
+ :with_subprojects => false,
+ :author => author.user)
+
+ @activity.scope_select {|t| has["show_#{t}"]}
+ # modify by nwb
+ # 添加私密性判断
+ if User.current.member_of_course?(@course)|| User.current.admin?
+ events += @activity.events(@days, @course.created_at)
+ else
+ events += @activity.events(@days, @course.created_at, :is_public => 1)
+ end
end
-
+ Rails.cache.write(key, events) if Rails.env.production? && Setting.course_cahce_enabled?
end
else
# @author = @course.teacher
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 5ae70fd7c..5af4e2038 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -2330,4 +2330,11 @@ module ApplicationHelper
def cur_user_works_for_homework homework
homework.student_works.where("user_id = ?",User.current).first
end
+
+ def file_preview_tag(file, html_options={})
+ if %w(pdf pptx doc docx xls xlsx).any?{|x| file.filename.downcase.end_with?(x)}
+ link_to '预览', download_named_attachment_path(file.id, file.filename, preview: true),html_options
+ end
+ end
+
end
diff --git a/app/models/activity.rb b/app/models/activity.rb
index e871ae735..5ec778641 100644
--- a/app/models/activity.rb
+++ b/app/models/activity.rb
@@ -5,4 +5,6 @@ class Activity < ActiveRecord::Base
validates :act_id, presence: true
validates :act_type, presence: true
validates :user_id, presence: true
+
+ include Trustie::Cache::ClearCourseEvent
end
diff --git a/app/models/forge_activity.rb b/app/models/forge_activity.rb
index e94a29867..6b75552c0 100644
--- a/app/models/forge_activity.rb
+++ b/app/models/forge_activity.rb
@@ -19,4 +19,5 @@ class ForgeActivity < ActiveRecord::Base
validates :project_id,presence: true
validates :forge_act_id,presence: true
validates :forge_act_type, presence: true
+
end
diff --git a/app/views/courses/show.html.erb b/app/views/courses/show.html.erb
index 09d1aa27d..654c25a42 100644
--- a/app/views/courses/show.html.erb
+++ b/app/views/courses/show.html.erb
@@ -126,4 +126,4 @@
});
nh_new_notify_count_show();
});
-
\ No newline at end of file
+
diff --git a/app/views/files/_course_list.html.erb b/app/views/files/_course_list.html.erb
index 7f3e426fc..8bb6f8970 100644
--- a/app/views/files/_course_list.html.erb
+++ b/app/views/files/_course_list.html.erb
@@ -25,7 +25,9 @@
<% if file.is_public? || User.current.member_of_course?(course) %>
- <%= link_to truncate(file.filename,length: 35, omission: '...'), download_named_attachment_path(file.id, file.filename, preview: true),:title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
+ <%= link_to truncate(file.filename,length: 35, omission: '...'),
+ download_named_attachment_path(file.id, file.filename),
+ :title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
<% if User.current.logged? %>
<% if (is_course_teacher(User.current,@course) || file.author_id == User.current.id) && course_contains_attachment?(@course,file) %>
<%= link_to("选入我的其他课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %>
@@ -40,7 +42,7 @@
<% else %>
<%= link_to("选入我的课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %>
<% end %>
- <%= link_to_attachment file, text: '下载', class: 'f_l re_open' %>
+ <%= file_preview_tag(file, class: 'f_l re_open') %>
<% else %>
<% end %>
diff --git a/app/views/files/_project_file_list.html.erb b/app/views/files/_project_file_list.html.erb
index 81b69d754..9f9e86cff 100644
--- a/app/views/files/_project_file_list.html.erb
+++ b/app/views/files/_project_file_list.html.erb
@@ -18,7 +18,9 @@
<% project_attachments.each do |file| %>
- <%= link_to truncate(file.filename,length: 35, omission: '...'), download_named_attachment_path(file.id, file.filename, preview: true),:title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
+ <%= link_to truncate(file.filename,length: 35, omission: '...'),
+ download_named_attachment_path(file.id, file.filename),
+ :title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
<% if User.current.logged? %>
<% if (manage_allowed || file.author_id == User.current.id) && project_contains_attachment?(project,file) %>
<%= link_to(l(:label_slected_to_other_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %>
@@ -30,7 +32,7 @@
<% else %>
<%= link_to(l(:label_slected_to_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %>
<% end %>
- <%= link_to_attachment file, text: '下载', class: 'f_l re_open' %>
+ <%= file_preview_tag(file, class: 'f_l re_open') %>
<% end %>
diff --git a/config/settings.yml b/config/settings.yml
index f952e23bf..d0af6d7a1 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -66,7 +66,8 @@ upload_avatar_max_size:
### delayjob for send email.
delayjob_enabled:
default: 1
-
+course_cahce_enabled:
+ default: 1
bcc_recipients:
default: 1
plain_text_mail:
diff --git a/lib/trustie/cache/clear_course_event.rb b/lib/trustie/cache/clear_course_event.rb
new file mode 100644
index 000000000..98ec8b4fd
--- /dev/null
+++ b/lib/trustie/cache/clear_course_event.rb
@@ -0,0 +1,17 @@
+#coding=utf-8
+
+module Trustie
+ module Cache
+ module ClearCourseEvent
+ def self.included(base)
+ base.class_eval{
+ after_create :clear_course_events
+ }
+ end
+ def clear_course_events
+ Rails.cache.delete("course_events_#{self.act.course_id}".to_sym) if Rails.env.production? && Setting.course_cahce_enabled?
+ end
+ end
+ end
+end
+