@ -10,158 +10,158 @@ homework_type == 1 文件提交
homework_type == 2 Project 提 交
= end
class Bid < ActiveRecord :: Base
Enterprise = 1
Contest = 2
Homework = 3
HomeworkFile = 1
HomeworkProject = 2
attr_accessible :author_id , :budget , :deadline , :name , :description , :homework_type , :password
include Redmine :: SafeAttributes
include ApplicationHelper
has_many_kindeditor_assets :assets , :dependent = > :destroy
belongs_to :author , :class_name = > 'User' , :foreign_key = > :author_id
belongs_to :course
has_many :biding_projects , :dependent = > :destroy
has_many :projects , :through = > :biding_projects
has_many :courses_member , :class_name = > 'User' , :through = > :courses
has_many :journals_for_messages , :as = > :jour , :dependent = > :destroy
has_many :acts , :class_name = > 'Activity' , :as = > :act , :dependent = > :destroy
has_many :homework_for_courses , :dependent = > :destroy
has_many :courses , :through = > :homework_for_courses , :source = > :course
has_many :homeworks , :class_name = > 'HomeworkAttach' , :dependent = > :destroy
has_many :homework_evaluations , :through = > :homeworks
has_many :join_in_contests , :dependent = > :destroy
has_many :praise_tread , as : :praise_tread_object , dependent : :destroy
# has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}"
acts_as_attachable
NAME_LENGTH_LIMIT = 60
DESCRIPTION_LENGTH_LIMIT = 3000
validates :name , length : { maximum : NAME_LENGTH_LIMIT } , presence : true
validates :description , length : { maximum : DESCRIPTION_LENGTH_LIMIT }
validates :author_id , presence : true
validates :deadline , presence : true , format : { :with = > / ^[ \ d]{4}[-][ \ d]{1,2}[-][ \ d]{1,2}$ / }
validates :name , length : { maximum : NAME_LENGTH_LIMIT }
validates :budget , format : { with : - > ( p ) { if p . reward_type == 1 then / ^( \ d+)$|^( \ d+).([0-9]{2})|^( \ d+).([0-9]{1})$ /
elsif p . reward_type == 3 then / ^( \ d+)$|^( \ d+).([0-9]{1})$ / end } }
validate :validate_user
validate :validate_reward_type
after_create :act_as_activity
after_destroy :delete_kindeditor_assets
scope :visible , lambda { | * args |
nil
}
scope :like , lambda { | arg |
if arg . blank?
where ( nil )
else
pattern = " % #{ arg . to_s . strip . downcase } % "
where ( " LOWER(id) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p " , :p = > pattern )
end
}
scope :course_visible , lambda { | * args |
includes ( :courses ) . where ( Course . allowed_to_condition ( args . shift || User . current , :view_homeworks , * args ) )
}
acts_as_watchable
acts_as_taggable
acts_as_event :title = > Proc . new { | o | " #{ l ( :label_course_homework ) } # #{ o . id } : #{ o . name } " } ,
:description = > :description ,
:author = > :author ,
:url = > Proc . new { | o | { :controller = > 'bids' , :action = > 'show' , :id = > o . id } }
acts_as_activity_provider :type = > 'homeworks' ,
:author_key = > :author_id
acts_as_activity_provider :find_options = > { :include = > [ :projects , :author ] } ,
:author_key = > :author_id
safe_attributes 'name' ,
'description' ,
'budget' ,
'deadline' ,
'homework_type' ,
'reward_type' ,
'password'
# Enterprise = 1
# Contest = 2
# Homework = 3
# HomeworkFile = 1
# HomeworkProject = 2
# attr_accessible :author_id, :budget, :deadline, :name, :description, :homework_type, :password
# include Redmine::SafeAttributes
# include ApplicationHelper
# has_many_kindeditor_assets :assets, :dependent => :destroy
# belongs_to :author, :class_name => 'User', :foreign_key => :author_id
# belongs_to :course
# has_many :biding_projects, :dependent => :destroy
# has_many :projects, :through => :biding_projects
# has_many :courses_member, :class_name => 'User', :through => :courses
# has_many :journals_for_messages, :as => :jour, :dependent => :destroy
# has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
# has_many :homework_for_courses, :dependent => :destroy
# has_many :courses, :through => :homework_for_courses, :source => :course
# has_many :homeworks, :class_name => 'HomeworkAttach', :dependent => :destroy
# has_many :homework_evaluations, :through => :homeworks
# has_many :join_in_contests, :dependent => :destroy
# has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
# # has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}"
# acts_as_attachable
#
# NAME_LENGTH_LIMIT = 60
# DESCRIPTION_LENGTH_LIMIT = 3000
# validates :name, length: {maximum: NAME_LENGTH_LIMIT}, presence: true
# validates :description, length: {maximum: DESCRIPTION_LENGTH_LIMIT}
# validates :author_id, presence: true
# validates :deadline, presence: true, format: {:with => /^[\d]{4}[-][\d]{1,2}[-][\d]{1,2}$/}
# validates :name, length: {maximum: NAME_LENGTH_LIMIT}
# validates :budget, format: { with: ->(p) { if p.reward_type == 1 then /^(\d+)$|^(\d+).([0-9]{2})|^(\d+).([0-9]{1})$/
# elsif p.reward_type == 3 then /^(\d+)$|^(\d+).([0-9]{1})$/ end } }
#
# validate :validate_user
# validate :validate_reward_type
# after_create :act_as_activity
# after_destroy :delete_kindeditor_assets
# scope :visible, lambda {|*args|
# nil
# }
#
# scope :like, lambda {|arg|
# if arg.blank?
# where(nil)
# else
# pattern = "%#{arg.to_s.strip.downcase}%"
# where("LOWER(id) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p", :p => pattern)
# end
# }
#
# scope :course_visible, lambda {|*args|
# includes(:courses).where(Course.allowed_to_condition(args.shift || User.current, :view_homeworks, *args))
# }
#
# acts_as_watchable
# acts_as_taggable
#
# acts_as_event :title => Proc.new {|o| "#{l(:label_course_homework)} ##{o.id}: #{o.name}" },
# :description => :description,
# :author => :author,
# :url => Proc.new {|o| {:controller => 'bids', :action => 'show', :id => o.id}}
#
# acts_as_activity_provider :type => 'homeworks',
# :author_key => :author_id
#
# acts_as_activity_provider :find_options => {:include => [:projects, :author]},
# :author_key => :author_id
#
# safe_attributes 'name',
# 'description',
# 'deadline'
def add_jour ( user , notes , reference_user_id = 0 , options = { } )
if options . count == 0
jfm = JournalsForMessage . new ( :user_id = > user . id , :notes = > notes , :reply_id = > reference_user_id )
self . journals_for_messages << jfm
jfm
else
jfm = self . journals_for_messages . build ( options )
jfm . save
jfm
end
end
def self . creat_bids ( budget , deadline , name , description = nil , reward_type )
self . create ( :author_id = > User . current . id , :budget = > budget ,
:deadline = > deadline , :name = > name , :description = > description , :commit = > 0 , :reward_type = > reward_type )
# self.acts << Activity.new(:user_id => self.author_id)
end
def update_bids ( budget , deadline , name , description = nil )
if ( User . current . id == self . author_id )
self . name = name
self . budget = budget
self . deadline = deadline
self . description = description
self . save
end
end
def delete_bids
unless self . nil?
if User . current . id == self . author_id
self . destroy
end
end
end
def set_commit ( commit )
self . update_attribute ( :commit , commit )
end
private
def validate_user
errors . add :author_id , :invalid if author . nil? || ! author . active?
end
def validate_reward_type
errors . add :reward_type , :invalid if self . reward_type == 0
end
def act_as_activity
self . acts << Activity . new ( :user_id = > self . author_id )
end
# used to validate weather the user is the creater of the bid
# added by william
def validate_bid_manager ( user_id )
unless user_id . nil?
if self . author_id == user_id
return true
else
return false
end
end
end
# Time 2015-04-01 14:19:06
# Author lizanle
# Description 删除对应课程通知的图片资源
def delete_kindeditor_assets
delete_kindeditor_assets_from_disk self . id , OwnerTypeHelper :: BID
end
# 'description',
# 'budget',
# 'deadline',
# 'homework_type',
# 'reward_type',
# 'password'
#
#
# # safe_attributes 'name',
# # 'description',
# # 'deadline'
# def add_jour(user, notes, reference_user_id = 0, options = {})
# if options.count == 0
# jfm = JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id)
# self.journals_for_messages << jfm
# jfm
# else
# jfm = self.journals_for_messages.build(options)
# jfm.save
# jfm
# end
# end
#
# def self.creat_bids(budget, deadline, name, description=nil, reward_type)
# self.create(:author_id => User.current.id, :budget => budget,
# :deadline => deadline, :name => name, :description => description, :commit => 0, :reward_type => reward_type)
# # self.acts << Activity.new(:user_id => self.author_id)
# end
#
# def update_bids(budget, deadline, name, description=nil)
# if(User.current.id == self.author_id)
# self.name = name
# self.budget = budget
# self.deadline = deadline
# self.description = description
# self.save
# end
# end
#
# def delete_bids
# unless self.nil?
# if User.current.id == self.author_id
# self.destroy
# end
# end
# end
#
# def set_commit(commit)
# self.update_attribute(:commit, commit)
# end
#
# private
#
# def validate_user
# errors.add :author_id, :invalid if author.nil? || !author.active?
# end
#
# def validate_reward_type
# errors.add :reward_type, :invalid if self.reward_type == 0
# end
#
# def act_as_activity
# self.acts << Activity.new(:user_id => self.author_id)
# end
#
# # used to validate weather the user is the creater of the bid
# # added by william
# def validate_bid_manager(user_id)
# unless user_id.nil?
# if self.author_id == user_id
# return true
# else
# return false
# end
# end
# end
#
# # Time 2015-04-01 14:19:06
# # Author lizanle
# # Description 删除对应课程通知的图片资源
# def delete_kindeditor_assets
# delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::BID
# end
end