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.
		
		
		
		
		
			
		
			
				
					
					
						
							166 lines
						
					
					
						
							6.8 KiB
						
					
					
				
			
		
		
	
	
							166 lines
						
					
					
						
							6.8 KiB
						
					
					
				| # 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.
 | |
| 
 | |
| class UserScore < ActiveRecord::Base
 | |
|   belongs_to :user
 | |
| 
 | |
|   def self.find_max_file
 | |
|     self.maximum(:file)
 | |
|   end
 | |
|   
 | |
|   def self.find_min_file
 | |
|     self.minimum(:file)
 | |
|   end
 | |
|   
 | |
|   def self.find_max_issue
 | |
|     self.maximum(:issue)
 | |
|   end
 | |
|   
 | |
|   def self.find_min_issue
 | |
|     self.minimum(:file)
 | |
|   end
 | |
|   # 以上类方法目测没用,反正也报错
 | |
|   # ===============================================================================
 | |
| 
 | |
|   # 前略·协同得分
 | |
|   # operate      - 更新操作 类型 symbol
 | |
|   # user         - 计分用户
 | |
|   #
 | |
|   # Examples
 | |
|   #   
 | |
|   #   UserScore.joint(:post_message, User.current, nil)
 | |
|   #   # => true #当前用户发帖计分操作成功
 | |
|   #
 | |
|   # Returns boolean. 返回积分保存结果
 | |
|   def self.joint(operate, current_user, target_user, options={})
 | |
|     case operate 
 | |
|     when :post_message            # current_user 发帖了
 | |
|       Rails.logger.info "[UserScore#joint] ===> User: #{current_user} posting a message. options => (#{options.to_s})"
 | |
|     when :post_issue              # current_user 对 target_user 的缺陷留言了
 | |
|       Rails.logger.info "[UserScore#joint] ===> User: #{current_user} posting a issue. options => (#{options.to_s})"
 | |
|     when :change_issue_status     # current_user 更改了缺陷的状态
 | |
|       Rails.logger.info "[UserScore#joint] ===> User: #{current_user} change issue status. options => (#{options.to_s})"
 | |
|     when :reply_message           # current_user 对 target_user 留言的回复
 | |
|       Rails.logger.info "[UserScore#joint] ===> User: #{current_user} reply message. options => (#{options.to_s})"
 | |
|     when :reply_posting           # current_user 对 target_user 帖子的回复
 | |
|       Rails.logger.info "[UserScore#joint] ===> User: #{current_user} reply posting. options => (#{options.to_s})"
 | |
|     else
 | |
|       Rails.logger.error "[UserScore#joint] ===> #{operate} is not define."
 | |
|       return false
 | |
|     end
 | |
|   rescue => e
 | |
|     Rails.logger.error "[UserScore#joint] ===> Exception: #{e}."
 | |
|   end
 | |
| 
 | |
|   # 前略·影响力得分
 | |
|   # operate      - 更新操作 类型 symbol
 | |
|   # user         - 计分用户
 | |
|   #
 | |
|   # Examples
 | |
|   #   
 | |
|   #   UserScore.influence(:followed_by, user)
 | |
|   #   # => true #当前被关注用户记分成功
 | |
|   #
 | |
|   # Returns boolean. 返回积分保存结果
 | |
|   def self.influence(operate, current_user, target_user, options={})
 | |
|     case operate 
 | |
|     when :followed_by # current_user 关注了target_user
 | |
|       Rails.logger.info "[UserScore#influence] ===> User: #{current_user} be followed. options => (#{options.to_s})"
 | |
|     else
 | |
|       Rails.logger.error "[UserScore#influence] ===> #{operate} is not define."
 | |
|       return false
 | |
|     end
 | |
|   rescue => e
 | |
|     Rails.logger.error "[UserScore#influence] ===> Exception: #{e}."
 | |
|   end
 | |
| 
 | |
|   # 前略·技术得分
 | |
|   # operate      - 更新操作 类型 symbol
 | |
|   # user         - 计分用户
 | |
|   #
 | |
|   # Examples
 | |
|   #   
 | |
|   #   UserScore.skill(:followed_by, current_user, target_user)
 | |
|   #   # => true #当前current_user对target_user用户帖子的记分成功
 | |
|   #
 | |
|   # Returns boolean. 返回积分保存结果
 | |
|   def self.skill(operate, current_user, target_user, options={})
 | |
|     case operate 
 | |
|     # when :treading          # current_user 踩了 target_user 的帖子
 | |
|     #   Rails.logger.info "[UserScore#skill] ===> User: #{current_user} treading #{target_user}'s posting. options => (#{options.to_s})"
 | |
|     when :treaded_by_user   # current_user 踩了 target_user 的帖子
 | |
|       Rails.logger.info "[UserScore#skill] ===> User: #{current_user} treaded_by #{target_user}. options => (#{options.to_s})"
 | |
|     when :praised_by_user    # current_user 顶了 target_user 的帖子
 | |
|       Rails.logger.info "[UserScore#skill] ===> User: #{current_user} praised_by #{target_user}. options => (#{options.to_s})"
 | |
|     else
 | |
|       Rails.logger.error "[UserScore#skill] ===> #{operate} is not define."
 | |
|       return false
 | |
|     end
 | |
|   rescue => e
 | |
|     Rails.logger.error "[UserScore#skill] ===> Exception: #{e}."
 | |
|   end
 | |
| 
 | |
|   # 前略·项目得分
 | |
|   # operate      - 更新操作 类型 symbol
 | |
|   # user         - 计分用户
 | |
|   #
 | |
|   # Examples
 | |
|   #   
 | |
|   #   UserScore.project(:pull_code, current_user)
 | |
|   #   # => true #当前current_user对项目贡献积分成功
 | |
|   #
 | |
|   # Returns boolean. 返回积分保存结果
 | |
|   def self.project(operate, current_user, options={})
 | |
|     current_user, target_user = get_users(current_user, nil)
 | |
|     user_score = current_user.user_score_attr
 | |
|     case operate 
 | |
|     when :push_code         # current_user 提交了代码
 | |
|       Rails.logger.debug "[UserScore#project] ===> User: [#{current_user.id},#{current_user.name}] pushed code one time. options => (#{options.to_s})"
 | |
|     when :push_document     # current_user 
 | |
|       user_score.active = user_score.active.to_i + 4
 | |
|       user_score.save
 | |
|       Rails.logger.debug "[UserScore#project] ===> User: [#{current_user.id},#{current_user.name}] pushed a document. options => (#{options.to_s})"
 | |
|     when :push_file         # current_user
 | |
|       user_score.active = user_score.active.to_i + 4
 | |
|       user_score.save
 | |
|       Rails.logger.debug "[UserScore#project] ===> User: [#{current_user.id},#{current_user.name}] pushed a file. options => (#{options.to_s})"
 | |
|     when :update_issue_ratio      # current_user
 | |
|       user_score.active = user_score.active.to_i + 2
 | |
|       user_score.save
 | |
|       Rails.logger.debug "[UserScore#project] ===> User: [#{current_user.id},#{current_user.name}] updated issue ratio. options => (#{options.to_s})"
 | |
|     when :post_issue        # current_user
 | |
|       user_score.active = user_score.active.to_i + 4
 | |
|       user_score.save
 | |
|       Rails.logger.debug "[UserScore#project] ===> User: [#{current_user.id},#{current_user.name}] posting issue. options => (#{options.to_s})"
 | |
|     else
 | |
|       Rails.logger.error "[UserScore#project] ===> #{operate} is not define."
 | |
|       return false
 | |
|     end
 | |
|   rescue => e
 | |
|     Rails.logger.error "[UserScore#project] ===> Exception: #{e}."
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def self.get_users(current_user, target_user)
 | |
|     cUser =  (current_user.kind_of?User) ? current_user : User.find_by_id(current_user)
 | |
|     tUser =  (target_user.kind_of?User) ? target_user : User.find_by_id(target_user)
 | |
|     
 | |
|     [cUser, tUser]
 | |
|   end
 | |
| end
 |