#用户等级类 - by zjc
class UserLevels < ActiveRecord::Base
  attr_accessible :user_id, :level
  belongs_to :user

  #获取user的等级  -by zjc
  def self.get_level(user)
    unless user.nil?
      if user.level.nil?
        UserLevels.update_user_level(user)
      end
      user.level.level
    end

  end

  #更新用户的等级 -by zjc
  def self.update_user_level(user)
    unless user.nil?
      user_level = user.level.nil? ? UserLevels.new : user.level
      user_level.user = user

      #判断user的等级
      pis = user.project_infos #ProjectInfo.find_all_by_user_id(self.id)
      isManager = false;
      pis.each do |pi|
        #判断是否为项目管理员
        if user.allowed_to?({:controller => "projects", :action => "edit"}, pi.project)
          isManager = true;
        end
      end
      has_effective_praise_count = false;
      user.messages.each do |message|
        if message.parent_id.nil?
          ptcs = PraiseTreadCache.find_all_by_object_id(message.id)
          ptcs.each do |ptc|
            if ptc.object_type == 'Message' && ptc.praise_num.to_i > 5
              has_effective_praise_count = true
            end
          end
        end
      end
      if !has_effective_praise_count
        user.memos do |memo|
          if memo.parent_id.nil?
            ptcs = PraiseTreadCache.find_all_by_object_id(memo.id)
            ptcs.each do |ptc|
              if ptc.object_type == 'Memo' && ptc.praise_num > 5
                has_effective_praise_count = true
              end
            end
          end
        end
      end

      if isManager || user.changesets.count > 100
        user_level.level = 3
      elsif (user.changesets.count > 1 && user.changesets.count <= 100) || has_effective_praise_count
        user_level.level = 2
      else
        user_level.level = 1
      end
      user_level.save
      user.reload
    end

  end
end