1.添加课程动态model

2.优化课程动态逻辑及权限处理
CourseModify
nwb 11 years ago
parent 8768193e72
commit a20feafa4e

@ -416,16 +416,16 @@ class CoursesController < ApplicationController
@date_from = @date_to - @days-1.years
@author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))
# 决定显示所用用户或单个用户活动
#@activity = Redmine::Activity::Fetcher.new(User.current, :course => @course,
# :with_subprojects => false,
# :author => @author)
#@activity.scope_select {|t| !has["show_#{t}"].nil?}
#events = @activity.events(@date_from, @date_to)
@activity = Activity.where("update_on between " +@date_from.to_s + " and " +@date_to.to_s ).order('id desc')
@activity_count = @activity.count
@activity_pages = Paginator.new @activity_count, pre_count, params['page']
@activity = activity.offset(@activity_pages.offset).limit(@activity_pages.per_page).all
@activity = Redmine::Activity::Fetcher.new(User.current, :course => @course,
:with_subprojects => false,
:author => @author)
@activity.scope_select {|t| !has["show_#{t}"].nil?}
events = @activity.events(@date_from, @date_to)
# @activity = Activity.where("update_on between " +@date_from.to_s + " and " +@date_to.to_s ).order('id desc')
#@activity_count = @activity.count
#@activity_pages = Paginator.new @activity_count, pre_count, params['page']
# @activity = activity.offset(@activity_pages.offset).limit(@activity_pages.per_page).all
@offset, @limit = api_offset_and_limit({:limit => 10})
@events_count = events.count

@ -25,7 +25,7 @@ class Course < ActiveRecord::Base
has_many :course_infos, :class_name => 'CourseInfos',:dependent => :destroy
has_many :enabled_modules, :dependent => :delete_all
has_many :boards, :dependent => :destroy, :order => "position ASC"
has_many :journals_for_messages, :as => :jour, :dependent => :destroy
has_many :course_journals_for_messages, :class_name => 'CourseJournalsForMessage', :as => :jour, :dependent => :destroy
acts_as_taggable
#acts_as_nested_set :order => 'name', :dependent => :destroy

@ -0,0 +1,108 @@
# nwb
# 课程与项目分离后的处理留言类
class CourseJournalsForMessage < ActiveRecord::Base
self.table_name = "#{table_name_prefix}journals_for_messages#{table_name_suffix}"
include Redmine::SafeAttributes
safe_attributes "jour_type", # 留言所属类型
"jour_id", # 留言所属类型的id
"notes", # 留言内容
"reply_id", # 留言被回复留言者的用户id(用户a回复了用户b这是b的id用以查询谁给b留言了)
"status", # 留言是否被查看(弃用)
"user_id", # 留言者的id
"m_parent_id", # 留言信息的父留言id
"is_readed", # 留言是否已读
"m_reply_count", # 留言的回复数量
"m_reply_id" # 回复某留言的留言id(a留言回复了b留言这是b留言的id)
acts_as_tree :foreign_key => 'm_parent_id', :counter_cache => :m_reply_count, :order => "#{JournalsForMessage.table_name}.created_on ASC"
belongs_to :project,
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Project' "
belongs_to :course,
:foreign_key => 'jour_id',
:conditions => "#{self.table_name}.jour_type = 'Course' "
belongs_to :jour, :polymorphic => true
belongs_to :user
belongs_to :homework_attach
belongs_to :at_user, :class_name => "User", :foreign_key => 'reply_id'
acts_as_event :title => Proc.new {|o| "#{l(:label_my_message)}"},
:datetime => Proc.new {|o| o.updated_on },
:author => Proc.new {|o| o.user },
:description => Proc.new{|o| o.notes },
:type => Proc.new {|o| o.jour_type },
:url => Proc.new {|o|
(o.jour.kind_of? Project) ? {:controller => 'projects', :action => 'feedback', :id => o.jour, :r => o.id, :anchor => "word_li_#{o.id}"} : {}
}#{:controller => 'documents', :action => 'show', :id => o.id}}
acts_as_activity_provider :author_key => :user_id,
:timestamp => "#{self.table_name}.updated_on",
:find_options => {:include => :course }
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
validates :notes, presence: true
after_create :act_as_activity #huang
after_create :reset_counters!
after_destroy :reset_counters!
# default_scope { where('m_parent_id IS NULL') }
def self.create_by_user? user
if user.anonymous?
return false
else
return true
end
end
def self.remove_by_user? user
if( self.user == user ||
( self.jour.kind_of?(User) && self.jour== user )
)
true
else
false
end
end
def self.delete_message(message_id)
self.find(message_id).destroy
# self.destroy_all "id = #{message_id}"
end
def reference_user
User.find(reply_id)
end
def self.reference_message(user_id)
@user = User.find(user_id)
message = JournalsForMessage.find_by_sql("select * from journals_for_messages where reply_id = #{@user.id}
or (jour_type = 'Bid' and jour_id in (select id from bids where author_id = #{@user.id}))")
message
end
def act_as_activity
if self.jour_type == 'Principal'
unless self.user_id == self.jour.id && self.user_id != self.reply_id && self.reply_id != 0
# self.acts << Activity.new(:user_id => self.user_id)
self.acts << Activity.new(:user_id => self.jour_id)
end
elsif self.jour_type == 'Project'
self.acts << Activity.new(:user_id => self.reply_id)
elsif self.jour_type == 'Course'
self.acts << Activity.new(:user_id => self.reply_id)
else
end
end
def reset_counters!
self.class.reset_counters!(self)
end
def self.reset_counters! journals_for_messages
# jfm_id = journals_for_messages.id.to_i
count = find_all_by_m_parent_id(journals_for_messages.m_parent_id).count #(SELECT COUNT(*) FROM #{JournalsForMessage.table_name} WHERE m_parent_id = #{jfm_id} )
update_all("m_reply_count = #{count.to_i}", ["id = ?", journals_for_messages.m_parent_id])
end
end

@ -75,8 +75,12 @@ module Redmine
elsif respond_to?(:visible)
scope = scope.visible(user, options)
elsif options[:course]
ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
scope = scope.scoped(:conditions => Course.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options))
if Course.new.methods.include?(event_type.to_s)
ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
scope = scope.scoped(:conditions => Course.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options))
else
scope = scope.scoped(:conditions =>"1=0")
end
else
ActiveSupport::Deprecation.warn "acts_as_activity_provider with implicit :permission option is deprecated. Add a visible scope to the #{self.name} model or use explicit :permission option."
scope = scope.scoped(:conditions => Project.allowed_to_condition(user, "view_#{self.name.underscore.pluralize}".to_sym, options))

@ -99,15 +99,18 @@ Redmine::AccessControl.map do |map|
map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true
#课程权限模块
#added by nwb
map.permission :view_course, {:courses => [:show], :activities => [:index]}, :public => true, :read => true
map.permission :search_course, {:search => :index}, :public => true, :read => true
map.permission :add_course, {:courses => [:new, :create]}, :require => :loggedin
map.permission :edit_course, {:courses => [:settings, :edit, :update]}, :require => :member
map.permission :close_course, {:courses => [:close, :reopen]}, :require => :member, :read => true
map.permission :select_course_modules, {:courses => :modules}, :require => :member
map.permission :view_course_journals_for_messages, {:gantts => [:show, :update]}, :read => true
map.course_module :course do
end
#end
map.project_module :issue_tracking do |map|
# Issue categories
@ -411,6 +414,8 @@ Redmine::Activity.map do |activity|
activity.register :memos, :class_name => 'Memo'
activity.register :journals_for_messages
# end
#added by nwb
activity.register :course_journals_for_messages
end
Redmine::Search.map do |search|

@ -45,9 +45,11 @@ module Redmine
@event_types = Redmine::Activity.available_event_types
if @project
@event_types = @event_types.select {|o| @project.self_and_descendants.detect {|p| @user.allowed_to?("view_#{o}".to_sym, p)}}
@event_types = @event_types.select { |o| @project.self_and_descendants.detect { |p| @user.allowed_to?("view_#{o}".to_sym, p) } }
elsif @course
@event_types = @event_types.select { |o| @user.allowed_to?("view_#{o}".to_sym,@course) }
else
@event_types = @event_types.select {|o| @user.allowed_to?("view_#{o}".to_sym,@course)} if @course
@event_types = @event_types.select { |o| @user.allowed_to?("view_#{o}".to_sym, @course) } if @course
end
@event_types
end

Loading…
Cancel
Save