175 lines
4.6 KiB
Ruby
175 lines
4.6 KiB
Ruby
#coding=utf-8
|
|
|
|
class AtController < ApplicationController
|
|
respond_to :json
|
|
|
|
def show
|
|
@logger = Logger.new(Rails.root.join('log', 'at.log').to_s)
|
|
users = find_at_users(params[:type], params[:id])
|
|
@users = users
|
|
@users = users.uniq { |u| u.id }.delete_if { |u| u.id == User.current.id }.sort{|x,y| to_pinyin(x.show_name) <=> to_pinyin(y.show_name)} if users
|
|
|
|
#加上all
|
|
if User.current.logged? && @users.size > 0
|
|
allUser = Struct.new(:id, :name).new
|
|
allUser.id = @users.map{|u| u.id}.join(",")
|
|
allUser.name = "all"
|
|
@users.insert(0, allUser)
|
|
end
|
|
@users
|
|
end
|
|
|
|
private
|
|
def to_pinyin(s)
|
|
Pinyin.t(s).downcase
|
|
end
|
|
|
|
def find_at_users(type, id)
|
|
@logger.info("#{type}, #{id}")
|
|
case type
|
|
when "Issue"
|
|
find_issue(id)
|
|
when 'Project'
|
|
find_project(id)
|
|
when 'Course'
|
|
find_course(id)
|
|
when 'Activity', 'CourseActivity', 'ForgeActivity','UserActivity', 'OrgActivity','PrincipalActivity'
|
|
find_activity(id, type)
|
|
when 'Attachment'
|
|
find_attachment(id)
|
|
when 'Message'
|
|
find_message(id)
|
|
when 'HomeworkCommon'
|
|
find_homework(id)
|
|
when 'Topic'
|
|
find_topic(id)
|
|
when 'JournalsForMessage'
|
|
find_journals_for_message(id)
|
|
when 'Principal'
|
|
find_principal(id)
|
|
when 'BlogComment'
|
|
find_blog_comment(id)
|
|
when 'All'
|
|
nil
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
|
|
def find_topic(id)
|
|
|
|
end
|
|
|
|
def find_issue(id)
|
|
#1. issues list persons
|
|
#2. project persons
|
|
issue = Issue.find(id)
|
|
journals = issue.journals
|
|
at_persons = journals.map(&:user) + issue.project.users
|
|
at_persons.uniq { |u| u.id }.delete_if { |u| u.id == User.current.id }
|
|
end
|
|
|
|
def find_project(id)
|
|
return [] if id.to_i<0
|
|
at_persons = Project.find(id).users
|
|
at_persons.delete_if { |u| u.id == User.current.id }
|
|
end
|
|
|
|
def find_course(id)
|
|
at_persons = Course.find(id).users
|
|
at_persons.delete_if { |u| u.id == User.current.id }
|
|
end
|
|
|
|
def find_activity(id, type)
|
|
|
|
## 基本上是本类型中的 加上所属类型的用户
|
|
case type
|
|
when 'Activity'
|
|
activity = Activity.find(id)
|
|
(find_at_users(activity.act_type, activity.act_id) ||[]) +
|
|
(find_at_users(activity.activity_container_type, activity.activity_container_id) || [])
|
|
when 'CourseActivity'
|
|
activity = CourseActivity.find(id)
|
|
(find_at_users(activity.course_act_type, activity.course_act_id) || []) + (find_course(activity.course.id) || [])
|
|
when 'ForgeActivity'
|
|
activity = ForgeActivity.find(id)
|
|
(find_at_users(activity.forge_act_type, activity.forge_act_id) ||[]) +
|
|
(find_project(activity.project_id) || [])
|
|
when 'UserActivity'
|
|
activity = UserActivity.find(id)
|
|
(find_at_users(activity.act_type, activity.act_id) || []) +
|
|
(find_at_users(activity.container_type, activity.container_id) || [])
|
|
when 'OrgActivity'
|
|
activity = OrgActivity.find(id)
|
|
(find_at_users(activity.org_act_type, activity.org_act_id) || []) +
|
|
(find_at_users(activity.container_type, activity.container_id) || [])
|
|
when 'PrincipalActivity'
|
|
activity = PrincipalActivity.find(id)
|
|
find_at_users(activity.principal_act_type, activity.principal_act_id)
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
|
|
#作业应该是关联课程,取课程的用户列表
|
|
def find_homework(id)
|
|
homework = HomeworkCommon.find(id)
|
|
find_course(homework.course_id)
|
|
end
|
|
|
|
def find_attachment(id)
|
|
attachment = Attachment.find(id)
|
|
find_at_users(attachment.container_type, attachment.container_id)
|
|
end
|
|
|
|
#Message
|
|
def find_message(id)
|
|
message = Message.find(id)
|
|
at_persons = message.board.messages.map(&:author)
|
|
(at_persons || []) + (find_project(message.board.project_id)||[])
|
|
end
|
|
|
|
#News
|
|
def find_news(id)
|
|
find_project(News.find(id).project_id)
|
|
end
|
|
|
|
#JournalsForMessage
|
|
def find_journals_for_message(id)
|
|
jounrnal = JournalsForMessage.find(id)
|
|
if jounrnal.jour_type == 'Principal'
|
|
[jounrnal.user] + (JournalsForMessage.where(m_reply_id: id).map(&:user) || [])
|
|
else
|
|
find_at_users(jounrnal.jour_type, jounrnal.jour_id)
|
|
end
|
|
end
|
|
|
|
#Poll
|
|
def find_poll(id)
|
|
end
|
|
|
|
#Journal
|
|
def find_journal(id)
|
|
end
|
|
|
|
#Document
|
|
def find_document(id)
|
|
find_project(Document.find(id).project_id)
|
|
end
|
|
|
|
#ProjectCreateInfo
|
|
def find_project_create_info(id)
|
|
|
|
end
|
|
|
|
#Principal
|
|
def find_principal(id)
|
|
end
|
|
|
|
#BlogComment
|
|
def find_blog_comment(id)
|
|
blog = BlogComment.find(id)
|
|
blog.author.watcher_users
|
|
end
|
|
|
|
end |