class Workshop < ActiveRecord::Base translates :info, :title belongs_to :conference has_many :workshop_facilitators, :dependent => :destroy has_many :users, :through => :workshop_facilitators accepts_nested_attributes_for :workshop_facilitators, :reject_if => proc {|u| u[:user_id].blank?}, :allow_destroy => true before_create :make_slug def to_param slug end def role(user) workshop_facilitators.each do |u| return u.role.to_sym if u.user_id == user.id end return nil end def facilitator?(user) !!role(user) end def creator?(user) role(user) == :creator end def can_edit?(user) creator?(user) || conference.host?(user) end def can_delete?(user) creator?(user) || conference.host?(user) end def can_show_interest?(user) !facilitator?(user) end def interested?(user) user.present? && !!WorkshopInterest.find_by(workshop_id: id, user_id: user.id) end def interested_count workshops = WorkshopInterest.where(:workshop_id => id) workshops ? workshops.size : 0 end def can_translate?(user) user.can_translate? || can_edit?(user) end private def make_slug if !self.slug s = self.title.gsub(/[^a-z1-9]+/i, '-').chomp('-').gsub(/\-([A-Z])/, '\1') if Organization.find_by(:slug => s) && self.locations && self.locations[0] s += '-' + self.locations[0].city if Organization.find_by(:slug => s) && locations[0].territory s += '-' + self.locations[0].territory end if Organization.find_by(:slug => s) s += '-' + self.locations[0].country end end attempt = 1 ss = s while Organization.find_by(:slug => s) attempt += 1 s = ss + '-' + attempt end self.slug = s end end end