mirror of
https://github.com/ENSL/ensl.org.git
synced 2025-06-04 18:50:57 +00:00
Purged git history and removed sensitive information.
This commit is contained in:
commit
6bcc8dc76b
862 changed files with 25312 additions and 0 deletions
100
app/models/contester.rb
Normal file
100
app/models/contester.rb
Normal file
|
@ -0,0 +1,100 @@
|
|||
class Contester < ActiveRecord::Base
|
||||
include Extra
|
||||
|
||||
TREND_FLAT = 0
|
||||
TREND_UP = 1
|
||||
TREND_DOWN = 2
|
||||
|
||||
attr_protected :id, :updated_at, :created_at, :trend
|
||||
attr_accessor :user
|
||||
|
||||
scope :active, :include => :team, :conditions => {"contesters.active" => true}
|
||||
scope :ordered, :select => "contesters.*, (score + extra) AS total_score", :order => "total_score DESC, score DESC, win DESC, loss ASC"
|
||||
scope :chronological, :order => "created_at DESC"
|
||||
scope :of_contest, lambda { |contest| {:conditions => {"contesters.contest_id" => contest.id}} }
|
||||
|
||||
has_many :challenges_sent, :class_name => "Challenge", :foreign_key => "contester1_id"
|
||||
has_many :challenges_received, :class_name => "Challenge", :foreign_key => "contester2_id"
|
||||
has_many :matches, :through => :contest, :conditions => "(contester1_id = contesters.id OR contester2_id = contesters.id)"
|
||||
belongs_to :team
|
||||
belongs_to :contest
|
||||
|
||||
validates_presence_of :team, :contest
|
||||
validates_inclusion_of [:score, :win, :loss, :draw, :extra], :in => 0..9999, :allow_nil => true
|
||||
validates_uniqueness_of :team_id, :scope => :contest_id, :message => "You can't join same contest twice."
|
||||
#validate_on_create:validate_member_participation
|
||||
#validate_on_create:validate_contest
|
||||
#validate_on_create:validate_playernumber
|
||||
|
||||
before_create :init_variables
|
||||
|
||||
|
||||
def to_s
|
||||
team.to_s
|
||||
end
|
||||
|
||||
def total
|
||||
score + extra.to_i
|
||||
end
|
||||
|
||||
def statuses
|
||||
{false => "Inactive", true => "Active"}
|
||||
end
|
||||
|
||||
def lineup
|
||||
contest.status == Contest::STATUS_CLOSED ? team.teamers.distinct : team.teamers.active
|
||||
end
|
||||
|
||||
def get_matches
|
||||
contest.matches.all :conditions => ["contester1_id = ? OR contester2_id = ?", id, id]
|
||||
end
|
||||
|
||||
def init_variables
|
||||
self.active = true
|
||||
self.trend = Contester::TREND_FLAT
|
||||
self.extra = 0
|
||||
end
|
||||
|
||||
def validate_member_participation
|
||||
# TODO joku erhe
|
||||
# for member in team.teamers.present do
|
||||
# for team in member.user.active_teams do
|
||||
# if team.contesters.active.exists?(:contest_id => contest_id)
|
||||
# errors.add_to_base "Member #{member.user} is already participating with team #{team.name}"
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
end
|
||||
|
||||
def validate_contest
|
||||
if contest.end.past? or contest.status == Contest::STATUS_CLOSED
|
||||
errors.add :contest, I18n.t(:contests_closed)
|
||||
end
|
||||
end
|
||||
|
||||
def validate_playernumber
|
||||
if team.teamers.active.distinct.count < 6
|
||||
errors.add :team, I18n.t(:contests_join_need6)
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
update_attribute :active, false
|
||||
end
|
||||
|
||||
def can_create? cuser, params = {}
|
||||
return false unless cuser
|
||||
return false if cuser.banned?(Ban::TYPE_LEAGUE)
|
||||
return true if cuser.admin?
|
||||
return true if team.is_leader? cuser and Verification.contain params, [:team_id, :contest_id]
|
||||
return false
|
||||
end
|
||||
|
||||
def can_update? cuser
|
||||
cuser and cuser.admin?
|
||||
end
|
||||
|
||||
def can_destroy? cuser
|
||||
cuser and team.is_leader? cuser or cuser.admin?
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue