You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							282 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
	
	
							282 lines
						
					
					
						
							14 KiB
						
					
					
				| # 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
 | |
| 
 | |
|   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
 | |
| 
 | |
|   #获取用户参与的公开的课程列表
 | |
|   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
 | |
| end
 |