2016-03-05 03:16:04 +08:00
# 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.
include AvatarHelper
module UsersHelper
def users_status_options_for_select ( selected )
user_count_by_status = User . count ( :group = > 'status' ) . to_hash
options_for_select ( [ [ l ( :label_all ) , '' ] ,
[ " #{ l ( :status_active ) } ( #{ user_count_by_status [ 1 ] . to_i } ) " , '1' ] ,
[ " #{ l ( :status_registered ) } ( #{ user_count_by_status [ 2 ] . to_i } ) " , '2' ] ,
[ " #{ l ( :status_locked ) } ( #{ user_count_by_status [ 3 ] . to_i } ) " , '3' ] ] , selected . to_s )
end
2016-12-16 14:21:51 +08:00
def task_count ( unsolved_issues_count , unfinished_homework_count , unfinished_test_count , unfinished_poll_count , anonymous_evaluation_count , unapproval_homework )
result = unsolved_issues_count + unfinished_homework_count + unfinished_test_count + unfinished_poll_count + anonymous_evaluation_count + unapproval_homework
end
2016-12-16 19:36:37 +08:00
# 判断某个时间再多少天前
# params[:num] 天数
def many_days_ago time , num
time > Time . now - 86400 * num
end
2016-11-16 11:26:17 +08:00
def issue_list ( issues , & block )
ancestors = [ ]
issues . each do | issue |
while ( ancestors . any? && ! issue . is_descendant_of? ( ancestors . last ) )
ancestors . pop
end
yield issue , ancestors . size
ancestors << issue unless issue . leaf?
end
end
2016-11-17 17:02:02 +08:00
# 我的issue 来源
2016-11-16 16:57:02 +08:00
def options_for_issue_project_list ( issues )
issues = issues . group_by { | issue | issue . project_id }
issues . map { | issue | [ Project . find ( issue [ 0 ] ) . name , issue [ 0 ] ] } . unshift ( [ " 来源 " , 0 ] )
end
2016-11-17 17:02:02 +08:00
# 我的issue指派给我
def options_for_my_issue_list ( issues )
# issues = issues.group_by{|issue| issue.assigned_to_id }
# issues.map{ |issue| [User.find(issue[0]).show_name, issue[0]]}.unshift(["指派给", 0])
end
2016-12-23 11:12:05 +08:00
# 作业待匿评的次数
def work_anonymous_num homework
# student_work_ids = StudentWork.where(:homework_common_id => homework.id)
# total_eva_count = StudentWorksEvaluationDistribution.where(:student_work_id => student_work_ids).count
# already_eva_count = StudentWorksScore.where("SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id in #{student_work_ids} AND reviewer_role = 3 ) AS t GROUP BY user_id")
# unfinished_eva_count = total_eva_count - already_eva_count
end
2016-03-05 03:16:04 +08:00
def get_resource_type type
case type
when 'Course'
2016-07-01 11:11:53 +08:00
'班级资源'
2016-03-05 03:16:04 +08:00
when 'Project'
'项目资源'
when 'Issue'
'缺陷附件'
when 'Message'
'讨论区附件'
when 'Document'
'文档附件'
when 'News'
'通知附件'
when 'HomewCommon'
'作业附件'
when 'StudentWorkScore'
'批改附件'
when 'Principal'
'用户资源'
when 'OrgSubfield'
'组织资源'
end
end
2016-12-16 14:03:01 +08:00
# 作业类型提示
def homework_type_tip homework_type
case homework_type
when 1
2016-12-16 15:28:45 +08:00
" 普通作业 "
2016-12-16 14:03:01 +08:00
when 2
" 编程作业 "
when 3
" 分组作业 "
end
end
2016-07-28 16:22:33 +08:00
# 获取消息角色
def applied_project_message_type role
case role
2016-07-29 15:58:24 +08:00
when 3
2016-07-28 16:22:33 +08:00
" 管理员 "
2016-07-29 15:58:24 +08:00
when 4
2016-07-28 16:22:33 +08:00
" 开发人员 "
2016-07-29 15:58:24 +08:00
when 5
2016-07-28 16:22:33 +08:00
" 报告人员 "
end
end
2016-11-29 18:19:29 +08:00
# 获取pullrequest消息状态
def pull_request_message_status ma
case ma . status
when 1
2016-12-07 09:00:33 +08:00
" 创建了PullRequest: "
2016-11-29 18:19:29 +08:00
when 2
2016-12-07 09:00:33 +08:00
" 接受了PullRequest: "
2016-11-29 18:19:29 +08:00
when 3
2016-12-07 09:00:33 +08:00
" 重新打开了PullRequest: "
2016-11-29 18:19:29 +08:00
when 4
2016-12-07 09:00:33 +08:00
" 关闭了PullRequest: "
2016-11-29 18:19:29 +08:00
end
end
2016-07-29 14:49:37 +08:00
# 判断当前用户能否对消息进行操作
def allow_to_show applied_message
( User . current . id == applied_message . user_id && applied_message . status == 1 ) ? true : false
end
# 项目申请消息通过状态判断用户
# status(1: 申请的消息; 2: 已操作过该消息( 包括同意或者拒绝, 消息状态更新) ; 3: 拒绝消息; 4:被拒人收到消息; 5: 拒绝者收到消息; 6: 同意后申请人收到消息; 7: 同意后批准人收到消息)
def applied_project_users applied_message
2016-07-29 15:58:24 +08:00
# case applied_message.status
# when 3,2,1,5,4,7,6
2016-12-23 09:34:23 +08:00
user = User . find ( applied_message . applied_user_id )
2016-07-29 15:58:24 +08:00
# end
2016-07-29 14:49:37 +08:00
end
2016-08-02 14:53:33 +08:00
def applied_project_status applied_message
case applied_message . status
when 4
" 被拒绝 "
when 5
2016-12-22 13:48:03 +08:00
" 已拒绝 "
2016-08-02 14:53:33 +08:00
when 6
" 已通过 "
when 7
2016-12-22 13:48:03 +08:00
" 已同意 "
2016-08-02 14:53:33 +08:00
end
end
2016-07-29 14:49:37 +08:00
# 项目申请消息通过状态判断tip描述
def applied_project_tip applied_message
case applied_message . status
when 4
2016-12-07 09:00:33 +08:00
" 拒绝申请加入: "
2016-07-29 15:58:24 +08:00
when 5 , 3 , 2 , 1 , 7
2016-12-07 09:00:33 +08:00
" 申请加入: "
2016-07-29 15:58:24 +08:00
when 6
2016-12-07 09:00:33 +08:00
" 同意申请加入: "
2016-07-29 14:49:37 +08:00
end
end
2016-08-03 17:36:04 +08:00
# 单位申请消息:通过用户的状态判断
# status(0: 申请消息; 1,2,3: 系统消息)
def applied_school_users applied_message
user = User . find ( applied_message . applied_user_id )
end
# 单位申请消息通过状态判断tip描述
def applied_school_tip applied_message
case applied_message . status
when 1 , 2 , 3
" 您添加新的单位: "
when 0
" 申请了单位: "
end
end
2016-12-07 15:13:51 +08:00
def is_current_user
is_current_user = ( User . current == @user )
end
2016-08-02 14:53:33 +08:00
def applied_project_tip_header applied_message
case applied_message . status
when 4
" 婉拒您 "
when 5 , 3 , 2 , 1 , 7
2016-11-01 15:06:08 +08:00
" 申请: "
2016-08-02 14:53:33 +08:00
when 6
" 同意您 "
end
end
2016-08-05 16:32:10 +08:00
2016-03-05 03:16:04 +08:00
def get_resource_origin attach
type = attach . container_type
content = attach . container
unless content . nil?
case type
when 'Course'
result = current_time_and_term_resource content
when 'Project'
result = content . name
when 'Issue'
result = content . subject
when 'Message'
result = content . subject
when 'News'
result = content . title
when 'HomewCommon'
result = content . name
when 'StudentWorkScore'
result = content . name
when 'Principal'
result = content . name
when 'OrgSubfield'
result = content . name
end
end
end
def current_time_and_term_resource course
2016-09-09 10:23:18 +08:00
str = course . syllabus . title + " <span class='fb'> · </span> "
2016-03-05 03:16:04 +08:00
term = cur_course_term_resource
name = course . name
if ( course . time == course . end_time && course . term == course . end_term ) || ( course . end_term . nil? && course . end_time . nil? ) || course . time > Time . now . year
2016-09-09 10:23:18 +08:00
str = str + name + " ( " + course . time . to_s + course . term . to_s + " ) "
2016-03-05 03:16:04 +08:00
elsif course . time == Time . now . year && set_term_value ( cur_course_term ) < = set_term_value ( course . term )
2016-09-09 10:23:18 +08:00
str = str + name + " ( " + course . time . to_s + course . term . to_s + " ) "
2016-03-05 03:16:04 +08:00
elsif course . end_time < Time . now . year || ( course . end_time == Time . now . year && set_term_value ( cur_course_term ) > = set_term_value ( course . term ) )
2016-09-09 10:23:18 +08:00
str = str + name + " ( " + course . end_time . to_s + course . end_term . to_s + " ) "
2016-03-05 03:16:04 +08:00
else
2016-09-09 10:23:18 +08:00
str = str + name + " ( " + Time . now . year . to_s + cur_course_term_resource . to_s + " ) "
2016-03-05 03:16:04 +08:00
end
str
end
def cur_course_term_resource
month = Time . now . month
if month > = 9 || month < 2
term = " 秋 "
elsif ( month > = 7 && Time . now . day > = 15 ) || month == 8
term = " 夏 "
else
term = " 春 "
end
term
end
def title_for_message type
case type
when nil
'消息'
when 'unviewed'
'未读消息'
when 'apply'
'用户申请'
when 'system_messages'
'系统消息'
when 'homework'
'作业消息'
when 'course_message'
2016-07-01 11:11:53 +08:00
'班级讨论'
2016-03-05 03:16:04 +08:00
when 'course_news'
2016-07-01 11:11:53 +08:00
'班级通知'
2016-03-05 03:16:04 +08:00
when 'poll'
2016-07-01 11:11:53 +08:00
'班级问卷'
2016-03-05 03:16:04 +08:00
when 'issue'
'项目任务'
when 'forge_message'
'项目讨论'
when 'forge_news'
'项目新闻'
when 'forum'
'贴吧帖子'
when 'user_feedback'
'用户留言'
end
end
def link_to_user_version ( version , options = { } )
return '' unless version && version . is_a? ( Version )
link_to_if version . visible? , format_version_name ( version ) , { :controller = > 'versions' , :action = > 'show' , :id = > version } , :class = > " linkBlue "
end
# 统计未读消息数
def unviewed_message ( user )
2016-06-16 15:46:16 +08:00
courses = user . courses . where ( " is_delete = 1 " )
course_ids = courses . empty? ? " (-1) " : " ( " + courses . map { | course | course . id } . join ( " , " ) + " ) "
course_count = CourseMessage . where ( " user_id =? and viewed =? and course_id not in #{ course_ids } " , user , 0 ) . count
2016-03-05 03:16:04 +08:00
forge_count = ForgeMessage . where ( " user_id =? and viewed =? " , user , 0 ) . count
org_count = OrgMessage . where ( " user_id =? and viewed =? " , user , 0 ) . count
user_feedback_count = UserFeedbackMessage . where ( " user_id =? and viewed =? " , user , 0 ) . count
user_memo_count = MemoMessage . where ( " user_id =? and viewed =? " , user , 0 ) . count
at_count = user . at_messages . where ( viewed : false ) . count
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + at_count + org_count
end
def user_mail_notification_options ( user )
user . valid_notification_options . collect { | o | [ l ( o . last ) , o . first ] }
end
def change_status_link ( user )
url = { :controller = > 'users' , :action = > 'update' , :id = > user , :page = > params [ :page ] , :status = > params [ :status ] , :tab = > nil }
if user . locked?
link_to l ( :button_unlock ) , url . merge ( :user = > { :status = > User :: STATUS_ACTIVE } ) , :method = > :put , :class = > 'icon icon-unlock'
elsif user . registered?
link_to l ( :button_activate ) , url . merge ( :user = > { :status = > User :: STATUS_ACTIVE } ) , :method = > :put , :class = > 'icon icon-unlock'
elsif user != User . current
link_to l ( :button_lock ) , url . merge ( :user = > { :status = > User :: STATUS_LOCKED } ) , :method = > :put , :class = > 'icon icon-lock'
end
end
def user_settings_tabs
tabs = [ { :name = > 'general' , :partial = > 'users/general' , :label = > :label_general } ,
{ :name = > 'memberships' , :partial = > 'users/memberships' , :label = > :label_project_plural }
]
if Group . all . any?
tabs . insert 1 , { :name = > 'groups' , :partial = > 'users/groups' , :label = > :label_group_plural }
end
tabs
end
# this method is used to get all projects that tagged one tag
# added by william
def get_users_by_tag ( tag_name )
User . tagged_with ( tag_name ) . order ( 'updated_on desc' )
end
# added by fq
# <div class="pagination" >
# <ul>
# <li><%= link_to("所有动态", {:controller => 'users', :action => 'show'}) %></li>
# <li><%= link_to("只看自己", {:controller => 'users', :action => 'show', :type => 1}) %></li>
# <li><%= link_to("所有反馈", {:controller => 'users', :action => 'show', :type => 2}) %></li>
# </ul></div>
# TODO: 待删
# def show_activity(state)
# content = ''.html_safe
# case state
# when 0
# s = content_tag('span', l(:label_user_all_activity), :class => "current-page")
# content << content_tag('li', s)
# content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1}))
# content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2}))
# when 1
# s = content_tag('span', l(:label_user_activity_myself), :class => "current-page")
# content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'}))
# content << content_tag('li', s, :class => "current-page")
# content << content_tag('li', link_to(l(:label_user_all_respond), {:controller => 'users', :action => 'show', :type => 2}))
# when 2
# s = content_tag('span', l(:label_user_all_respond), :class => "current-page")
# content << content_tag('li', link_to(l(:label_user_all_activity), {:controller => 'users', :action => 'show'}))
# content << content_tag('li', link_to(l(:label_user_activity_myself), {:controller => 'users', :action => 'show', :type => 1}))
# content << content_tag('li', s, :class => "current-page")
# end
# content_tag('div', content, :class => "pagination")
# end
#TODO: 待删
def watch_projects ( state )
content = '' . html_safe
case state
when 0
s = content_tag ( 'span' , l ( :label_project_take ) , :class = > " current-page " )
content << content_tag ( 'li' , s )
content << content_tag ( 'li' , link_to ( l ( :label_has_watched_project ) , { :controller = > 'users' , :action = > 'watch_projects' , :type = > 1 } ) )
when 1
s = content_tag ( 'span' , l ( :label_has_watched_project ) , :class = > " current-page " )
content << content_tag ( 'li' , link_to ( l ( :label_project_take ) , { :controller = > 'users' , :action = > 'user_projects' } ) )
content << content_tag ( 'li' , s , :class = > " current-page " )
end
content_tag ( 'div' , content , :class = > " pagination " )
end
def user_course ( state )
content = '' . html_safe
if @user != User . current
if @user . user_extensions . identity == 0
case state
when 0
s = content_tag ( 'span' , '他执教的课程' , :class = > " current-page " )
content << content_tag ( 'li' , s )
content << content_tag ( 'li' , link_to ( '他发布的作业' , { :controller = > 'users' , :action = > 'user_courses' , :type = > 1 } ) )
content_tag ( 'div' , content , :class = > " pagination " )
when 1
s = content_tag ( 'span' , '他发布的作业' , :class = > " current-page " )
content << content_tag ( 'li' , link_to ( '他执教的课程' , { :controller = > 'users' , :action = > 'user_courses' } ) )
content << content_tag ( 'li' , s , :class = > " current-page " )
content_tag ( 'div' , content , :class = > " pagination " )
end
else
case state
when 0
s = content_tag ( 'span' , '他的课程' , :class = > " current-page " )
content << content_tag ( 'li' , s )
content << content_tag ( 'li' , link_to ( '他的作业' , { :controller = > 'users' , :action = > 'user_courses' , :type = > 1 } ) )
content_tag ( 'div' , content , :class = > " pagination " )
when 1
s = content_tag ( 'span' , '他的作业' , :class = > " current-page " )
content << content_tag ( 'li' , link_to ( '他的课程' , { :controller = > 'users' , :action = > 'user_courses' , :type = > 0 } ) )
content << content_tag ( 'li' , s , :class = > " current-page " )
content_tag ( 'div' , content , :class = > " pagination " )
end
end
else
if @user . user_extensions . identity == 0
case state
when 0
s = content_tag ( 'span' , l ( :label_teaching_course ) , :class = > " current-page " )
content << content_tag ( 'li' , s )
content << content_tag ( 'li' , link_to ( l ( :label_release_homework ) , { :controller = > 'users' , :action = > 'user_courses' , :type = > 1 } ) )
content_tag ( 'div' , content , :class = > " pagination " )
when 1
s = content_tag ( 'span' , l ( :label_release_homework ) , :class = > " current-page " )
content << content_tag ( 'li' , link_to ( l ( :label_teaching_course ) , { :controller = > 'users' , :action = > 'user_courses' } ) )
content << content_tag ( 'li' , s , :class = > " current-page " )
content_tag ( 'div' , content , :class = > " pagination " )
end
else
case state
when 0
s = content_tag ( 'span' , l ( :label_my_course ) , :class = > " current-page " )
content << content_tag ( 'li' , s )
content << content_tag ( 'li' , link_to ( '我的作业' , { :controller = > 'users' , :action = > 'user_courses' , :type = > 1 } ) )
content_tag ( 'div' , content , :class = > " pagination " )
when 1
s = content_tag ( 'span' , '我的作业' , :class = > " current-page " )
content << content_tag ( 'li' , link_to ( l ( :label_my_course ) , { :controller = > 'users' , :action = > 'user_courses' , :type = > 0 } ) )
content << content_tag ( 'li' , s , :class = > " current-page " )
content_tag ( 'div' , content , :class = > " pagination " )
end
end
end
end
# added by huang
def sort_user ( state , project_type )
content = '' . html_safe
case state
when 0
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , users_path ( params . merge ( { :user_sort_type = > '1' , :project_type = > project_type } ) ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , users_path ( params . merge ( { :user_sort_type = > '2' , :project_type = > project_type } ) ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , users_path ( params . merge ( { :user_sort_type = > '0' , :project_type = > project_type } ) ) , :class = > " selected " ) )
when 1
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , users_path ( params . merge ( { :user_sort_type = > '1' , :project_type = > project_type } ) ) , :class = > " selected " ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , users_path ( params . merge ( { :user_sort_type = > '2' , :project_type = > project_type } ) ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , users_path ( params . merge ( { :user_sort_type = > '0' , :project_type = > project_type } ) ) ) )
when 2
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , users_path ( params . merge ( { :user_sort_type = > '1' , :project_type = > project_type } ) ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , users_path ( params . merge ( { :user_sort_type = > '2' , :project_type = > project_type } ) ) , :class = > " selected " ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , users_path ( params . merge ( { :user_sort_type = > '0' , :project_type = > project_type } ) ) ) )
end
content = content_tag ( 'ul' , content )
content_tag ( 'div' , content , :class = > " tabs " )
end
def sort_user_enterprise ( state , project_type )
content = '' . html_safe
case state
when 0
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , users_path ( :user_sort_type = > '1' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , users_path ( :user_sort_type = > '2' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , users_path ( :user_sort_type = > '0' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
when 1
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , users_path ( :user_sort_type = > '1' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , users_path ( :user_sort_type = > '2' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , users_path ( :user_sort_type = > '0' , :project_type = > project_type ) ) )
when 2
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , users_path ( :user_sort_type = > '1' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , users_path ( :user_sort_type = > '2' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , users_path ( :user_sort_type = > '0' , :project_type = > project_type ) ) )
end
content = content_tag ( 'ul' , content )
content_tag ( 'div' , content , :class = > " tabs_enterprise " )
end
def gender_avatar_uri user
img_uri = '/images/sidebar/female.png'
return img_uri if user . user_extensions . blank?
person_gender = user . user_extensions . gender
img_uri = ( person_gender == 1 ) ? '/images/sidebar/female.png' : '/images/sidebar/male.png'
end
include CoursesHelper
def is_watching? ( user )
login_user = User . current # 登录者
courses = user . projects . where ( 'project_type=1' )
return true if ( ( login_user == user ) or login_user . admin? )
courses . each do | course |
return true if login_user . member_of? ( course )
end
## 下面的代码只判断是否是老师或者助教,上面是成员都可以看到
# people_ids = []
# user.projects.where('project_type=1').each do |project|
# tmp = searchTeacherAndAssistant(project)
# people_ids += (members_to_user_ids(tmp)) unless tmp.nil?
# end
# people_ids.include?(login_user.id) or (login_user == user) or login_user.admin?
false
end
# base user上面的navbar显示内容
def show_item_on_navbar params
displayed_item = %w|index|
displayed_item . include? ( params [ 'action' ] )
end
# base user上面searchBar显示
def show_search_bar params
displayed_flag = %w|index|
! displayed_flag . include? ( params [ 'action' ] )
end
#获取指定用户的未过期的课程列表
def user_courses_list user
result = [ ]
user . coursememberships . map ( & :course ) . each do | course |
if ! course_endTime_timeout? ( course )
result << course
end
end
return result
end
2016-07-04 16:19:05 +08:00
#获取指定用户的课程大纲
def user_syllabus ( user )
results = [ ]
courses = user_courses_list ( user )
other = Syllabus . new ( title : '未命名课程' )
courses . each do | c |
other << c unless c . syllabus
end
user . syllabuses . to_a << other
end
2016-03-05 03:16:04 +08:00
#获取用户参与的公开的课程列表
def user_public_course_list user
membership = user . coursememberships . all #@user.coursememberships.all(:conditions => Course.visible_condition(User.current))
membership . sort! { | older , newer | newer . created_on < = > older . created_on }
memberships = [ ]
membership . collect { | e |
memberships . push ( e )
}
## 判断课程是否过期 [需封装]
memberships_doing = [ ]
memberships_done = [ ]
memberships . map { | e |
if course_endTime_timeout? ( e . course )
memberships_done . push e
else
memberships_doing . push e
end
}
end
#获取用户留言相关的连接
def user_jour_feed_back_url active
if active . act_type == " JournalsForMessage "
jour = JournalsForMessage . find active . act_id
if jour
case jour . jour_type
when " Principal "
link_to ( l ( :label_goto ) , user_newfeedback_user_path ( jour . jour_id ) )
when " Project "
link_to ( l ( :label_goto ) , project_feedback_path ( jour . jour_id ) )
when " Bid "
link_to ( l ( :label_goto ) , course_for_bid_path ( jour . jour_id ) )
when " Course "
link_to ( l ( :label_goto ) , course_feedback_path ( jour . jour_id ) )
when " Contest "
link_to ( l ( :label_goto ) , show_contest_contest_path ( jour . jour_id ) )
when " Softapplication "
link_to ( l ( :label_goto ) , softapplication_path ( jour . jour_id ) )
when " HomeworkAttach "
link_to ( l ( :label_goto ) , course_for_bid_path ( jour . jour_id ) )
end
end
end
end
def get_watcher_users ( obj )
count = User . watched_by ( obj . id ) . count
if count == 0
return [ 0 , [ ] ]
end
list = User . watched_by ( obj . id ) . order ( " #{ Watcher . table_name } .id desc " ) . limit ( 10 ) . all
return [ count , list ] ;
end
def get_fans_users ( obj )
count = obj . watcher_users . count
if count == 0
return [ 0 , [ ] ]
end
list = obj . watcher_users . order ( " #{ Watcher . table_name } .id desc " ) . limit ( 10 ) . all
return [ count , list ] ;
end
def get_visitor_users ( obj )
query = Visitor . where ( " master_id=? " , obj . id )
count = query . count
if count == 0
return [ 0 , [ ] ]
end
list = query . order ( " updated_on desc " ) . limit ( 10 ) . all
return [ count , list ]
end
def get_create_course_count ( user )
user . courses . visible . where ( " tea_id = ? " , user . id ) . count
end
#获取加入课程数
def get_join_course_count ( user )
user . courses . visible . count - get_create_course_count ( user )
end
#发布作业数
def get_homework_commons_count ( user )
HomeworkCommon . where ( " user_id = ? " , user . id ) . count
end
#资源数
def get_projectandcourse_attachment_count ( user )
Attachment . where ( " author_id = ? and container_type in ('Project','Course') " , user . id ) . count
end
#创建项目数
def get_create_project_count ( user )
user . projects . visible . where ( " projects.user_id= #{ user . id } " ) . count
end
#加入项目数
def get_join_project_count ( user )
user . projects . visible . count - get_create_project_count ( user )
end
#创建缺陷数
def get_create_issue_count ( user )
Issue . where ( " author_id = ? " , user . id ) . count
end
#解决缺陷数
def get_resolve_issue_count ( user )
Issue . where ( " assigned_to_id = ? and status_id=3 " , user . id ) . count
end
#参与匿评数
def get_anonymous_evaluation_count ( user )
StudentWorksScore . where ( " user_id = ? and reviewer_role=3 " , user . id ) . count
end
def query_activities ( query )
list = query . limit ( 13 ) . all
result = [ ]
for item in list
container = get_activity_container ( item )
result << { :item = > item , :e = > container }
end
result
end
def get_activity_container activity
return activity . activity_container
end
def get_activity_act_showname_htmlclear ( activity )
str = get_activity_act_showname ( activity )
str = str . gsub ( / <.*> / , '' )
str = str . gsub ( / \ r / , '' )
str = str . gsub ( / \ n / , '' )
str = str . lstrip . rstrip
if str == ''
str = 'RE:'
end
return str . html_safe
end
# journal.details 记录每个动作的新旧值
def get_issue_des_update ( journal )
no_html = " message "
arr = details_to_strings ( journal . details , no_html )
unless journal . notes . blank?
arr << journal . notes
end
str = ''
arr . each { | item | str = str + item }
return str
end
def get_activity_act_showname ( activity )
case activity . act_type
when " HomeworkCommon "
return activity . act . name
when " Issue "
return activity . act . subject
when " Journal "
arr = details_to_strings ( activity . act . details , true )
arr << activity . act . notes
str = ''
arr . each { | item | str = str + item }
return str
when " JournalsForMessage "
return activity . act . notes
when " Message "
return activity . act . subject
when " News "
return activity . act . title
when " Poll "
return activity . act . polls_name
when " Contest "
return ''
when " Contestnotification "
return ''
when " Principal "
return ''
else
return activity . act_type
end
end
def get_activity_act_createtime ( activity )
case activity . act_type
when " HomeworkCommon "
return activity . act . created_at
when " Poll "
return activity . act . created_at
else
return activity . act . created_on
end
end
def get_activity_container_url e
if ! e . visible?
return " javascript:; "
end
if e . class . to_s == 'Course'
return url_for ( :controller = > 'courses' , :action = > " show " , :id = > e . id , :host = > Setting . host_course )
end
return url_for ( :controller = > 'projects' , :action = > " show " , :id = > e . id , :host = > Setting . host_name )
end
def get_activity_url ( activity , e )
if ! e . visible?
return " javascript:; "
end
case activity . act_type
# when "Contest"
# when "Contestnotification"
# when "Principal"
when " HomeworkCommon "
return homework_common_index_path ( :course = > e . id )
when " Issue "
return issue_path ( activity . act . id )
when " Journal "
return issue_path ( activity . act . journalized_id )
when " JournalsForMessage "
return e . class . to_s == 'Course' ? course_feedback_path ( e ) : project_feedback_path ( e )
when " Message "
return e . class . to_s == 'Course' ? course_boards_path ( e ) : project_boards_path ( e )
when " News "
return news_path ( activity . act )
#return e.class.to_s == 'Course' ? course_news_index_path(e) : project_news_index_path(e)
when " Poll "
return poll_index_path ( :polls_group_id = > activity . act . polls_group_id , :polls_type = > e . class . to_s )
else
return 'javascript:;'
end
end
def get_activity_opt ( activity , e )
case activity . act_type
when " HomeworkCommon "
return '创建了作业'
when " News "
return e . class . to_s == 'Course' ? '发布了通知' : '添加了新闻'
when " Issue "
return '发表了问题'
when " Journal "
return '更新了问题'
when " JournalsForMessage "
return e . class . to_s == 'Course' ? '发表了留言' : '提交了反馈'
#return ( activity.act.reply_id == nil || activity.act.reply_id == 0 ) ? '' : ''
when " Message "
return ( activity . act . parent_id == nil || activity . act . parent_id == '' ) ? '发布了帖子' : '回复了帖子'
when " Poll "
return '创建了问卷'
else
return '有了新动态'
end
end
#获取指定用户作为老师的课程
def get_as_teacher_courses user
type = [ ]
option = [ ]
option << " 请选择发布作业的课程 "
option << - 1
type << option
user . courses . visible . where ( " is_delete =? " , 0 ) . select ( " courses.*,(SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a " ) . order ( " a desc " ) . select { | c | user . allowed_to? ( :as_teacher , c ) } . each do | course |
option = [ ]
option << course . name + " ( " + course . time . to_s + course . term + " ) "
option << course . id
type << option
end
type
end
#根据姓名搜索用户
def search_user_by_name user_ids , name
result_ids = [ ]
user_ids . each do | user_id |
user = User . find user_id
username = user . lastname . to_s . downcase + user . firstname . to_s . downcase
if username . include? ( name )
result_ids << user_id
end
end
result_ids
end
2016-07-26 16:45:36 +08:00
#课程的班级列表最近更新时间
def syllabus_course_list_sort syllabuses
syllabuses . each do | sy |
updated_at = sy . updated_at
courses = sy . courses . not_deleted
unless courses . empty?
course_ids = " ( " + courses . map { | course | course . id } . join ( " , " ) + " ) "
updated_at = CourseActivity . where ( " course_id in #{ course_ids } " ) . order ( " updated_at desc " ) . first . updated_at
end
sy [ :last_update ] = updated_at
end
syllabuses
end
2016-08-05 16:12:53 +08:00
#获取按作业的发布者排序的用户ID
def hw_publisher_user_ids search , course_ids
if search && search != " "
all_homeworks = HomeworkCommon . where ( " course_id in #{ course_ids } " )
all_user_ids = all_homeworks . map { | hw | hw . user_id }
user_str_ids = search_user_by_name all_user_ids , search
user_ids = user_str_ids . empty? ? " (-1) " : " ( " + user_str_ids . join ( " , " ) + " ) "
else
user_ids = " (-1) "
end
return user_ids
end
2016-12-28 11:30:31 +08:00
# 获取竞赛申请者的角色
def get_role_str role
str = " "
case role
when 1
str = " 管理员 "
when 2
str = " 评委 "
when 3
str = " 参赛者 "
when 4
str = " 管理员、评委 "
end
str
end
2016-03-05 03:16:04 +08:00
end