socialforge/app/helpers/welcome_helper.rb

222 lines
6.9 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module WelcomeHelper
StudentRoles = [5, 10]
def find_all_hot_project
sort_project_by_hot
end
def find_all_hot_course
sort_course_by_hot
end
def find_all_hot_bid
sort_bid_by_hot
end
def find_all_hot_contest
sort_contest_by_hot
end
def cal_memos_count event
return nil if event.parent_id
event.replies_count
rescue NoMethodError
nil
end
def cal_issues_count event
event.journals.count
rescue NoMethodError
nil
end
def topic_last_time topic
return topic.event_datetime if ( !(topic.methods.to_s =~ %r[last_reply]) || topic.last_reply.nil? )
topic.last_reply.event_datetime
end
def time_tag_welcome time
text = distance_of_time_in_words(Time.now, time)
content_tag('span', text, :title => format_time(time))
end
def show_grade project
grade = 0
begin
grade = project.project_status.grade if project && project.project_status
rescue Exception => e
logger.error "[WelcomeHelper] ===> #{e}"
end
"项目评分:".html_safe << grade.to_s
end
def show_user_content event
str = '&nbsp;'.html_safe
case event.event_type
when 'news' , 'issue', 'message' , 'bid' , 'wiki-page' , 'document'
str << content_tag("span", "发表了") << content_tag("span", find_all_event_type(event)) << ':&nbsp;'.html_safe << link_to(truncate(event.event_title, length: 30, omission:'...'), event.event_url)
when 'reply' ,'Reply', 'Memo'
str << content_tag("span", "发表了") << content_tag("span", find_all_event_type(event)) << ':&nbsp;'.html_safe << link_to(truncate(strip_tags(event.event_description), length: 30, omission:'...'), event.event_url)
when 'attachment'
str << content_tag('span', '上传了') << content_tag('span', find_all_event_type(event)) << ':&nbsp;'.html_safe << link_to(truncate(event.event_title, length: 30, omission:'...'), project_files_path(event.container)) #<< link_to(('&nbsp;'.html_safe+l(:button_download)), event.event_url)
else
str << content_tag("span", "更新了") << content_tag("span", find_all_event_type(event)) << ':&nbsp;'.html_safe << link_to(truncate(event.event_title, length: 30, omission:'...'), event.event_url)
end
str
rescue Exception => e
str << content_tag("span", '未知内容')
end
def show_event_reply event
str = "回复("
case event.event_type
when "issue"
str << link_to(cal_issues_count(event), issue_path(event)) << ")"
when "Memo"
str << link_to(cal_memos_count(event), forum_memo_path(event.forum_id,event.id)) << ")"
else
str = ""
end
str.html_safe
end
# 返回学生数量即roles表中定义的Reporter
def studentCount project
# searchCountByRoles project,StudentRoles
# or
searchStudent(project).count
end
def find_new_forum_topics limit=9
Memo.where('memos.parent_id IS NULL').reorder('memos.created_at DESC').limit(limit)
# activity = Redmine::Activity::Fetcher.new(nil)
# activity.scope=['memos']
# activity.events_welcome(nil, nil, {:limit => limit})
end
private
def sort_project_by_hot
sort_project_by_hot_rails 0, 'grade DESC'
end
def sort_course_by_hot
sort_project_by_hot_rails 1, 'course_ac_para DESC'
end
def sort_bid_by_hot
sort_bid_by_hot_rails 1
end
def sort_contest_by_hot
sort_bid_by_hot_rails 2
end
#取得所有活动
def find_all_activities limit=6
# users = []
# activities = Activity.find_by_sql("select distinct user_id from activities order by id DESC limit #{limit}" )
# activities.each { |activity|
# users << activity.user_id
# }
# user_objs = User.find_by_sql("SELECT * FROM users WHERE (users.id IN #{"(" << users.join(',') << ")"} )")
activity = Redmine::Activity::Fetcher.new(nil)
logger.debug "[WelcomeHelper] ===> activity::#{activity.event_types}"
activity.events_welcome(nil, nil, {:limit => limit, :types => 'welcome'})
end
#取得论坛数据
def find_hot_forum_topics limit=9
## 以下语句会内链接自身查询出最后一条回复时间,没有回复的帖子不会显示
# Memo.find_by_sql("
# SELECT memos.*, reply.created_at AS last_reply_date FROM memos AS memos
# INNER JOIN memos
# AS reply ON memos.last_reply_id=reply.id
# WHERE memos.parent_id IS NULL
# ORDER BY memos.replies_count DESC, memos.created_at DESC
# LIMIT #{limit}")
#Memo.order('replies_count DESC').where('replies_count <> 0').limit(limit)
resultSet = Memo.order('replies_count DESC, created_at DESC').where('parent_id IS NULL').limit(limit)
resultSet += Message.order('replies_count DESC, created_on DESC').where('parent_id IS NULL').limit(limit)
resultSet.sort! {|x,y| (y.replies_count <=> x.replies_count).nonzero? || (y.event_datetime <=> x.event_datetime)}
resultSet.take(limit)
end
def sort_project_by_hot_rails project_type=0, order_by='grade DESC', limit=15
Project.find_by_sql("
SELECT p.id, p.name, p.description, p.identifier, t.project_id
FROM projects AS p RIGHT OUTER JOIN (
SELECT project_id,grade FROM project_statuses
WHERE project_type = #{project_type} ORDER BY #{order_by} LIMIT #{limit} ) AS t ON p.id = t.project_id ")
end
def sort_bid_by_hot_rails reward_type, limit = 10
Bid.visible.where('reward_type = ?', reward_type).reorder('bids.commit desc').limit(limit)
end
def find_all_event_type event
case event.event_type
when 'news'
'新闻'
when 'issue'
'缺陷'
when 'attachment'
'附件'
when 'message'
'主题'
when 'Reply','reply'
'回复'
when 'bid'
'作业'
when 'Memo'
'主题'
when 'document'
'文件'
when 'changeset'
'版本库'
when 'issue-note'
'问题说明'
else
event.event_type
end
end
def searchStudent project
searchPeopleByRoles(project, StudentRoles)
end
def searchPeopleByRoles project, roles_id
people = []
begin
people = project.members.joins(:member_roles).where("member_roles.role_id IN (:role_id)", {:role_id => roles_id})
rescue Exception => e
logger.error "[CoursesHelper] ===> #{e}"
end
people
end
end