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.
		
		
		
		
		
			
		
			
				
					
					
						
							262 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
	
	
							262 lines
						
					
					
						
							13 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
 | 
						|
end
 |