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 +