64 lines
1.9 KiB
Ruby
64 lines
1.9 KiB
Ruby
include Devise::Models
|
|
|
|
module JamRuby
|
|
class TextMessage < ApplicationRecord
|
|
|
|
self.primary_key = 'id'
|
|
|
|
default_scope { order('created_at DESC') }
|
|
|
|
attr_accessible :target_user_id, :source_user_id, :message
|
|
|
|
belongs_to :target_user, :class_name => "JamRuby::User", :foreign_key => "target_user_id"
|
|
belongs_to :source_user, :class_name => "JamRuby::User", :foreign_key => "source_user_id"
|
|
|
|
validate :same_school_protection
|
|
def same_school_protection
|
|
if source_user && target_user
|
|
if !source_user.is_platform_instructor && !target_user.is_platform_instructor
|
|
if source_user.school_id != target_user.school_id
|
|
errors.add(:target_user, ValidationMessages::CAN_ONLY_CHAT_SAME_SCHOOL)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
validates :message, length: {minimum: 1, maximum: 400}, no_profanity: true
|
|
|
|
def self.index(target_user_id, source_user_id, options = {})
|
|
offset = options[:offset]
|
|
limit = options[:limit]
|
|
|
|
# if not specified, default offset to 0
|
|
offset ||= 0
|
|
offset = offset.to_i
|
|
|
|
# if not specified, default limit to 10
|
|
limit ||= 10
|
|
limit = limit.to_i
|
|
|
|
TextMessage
|
|
.offset(offset)
|
|
.limit(limit)
|
|
.where('(source_user_id = (?) AND target_user_id = (?)) OR (source_user_id = (?) AND target_user_id = (?))', source_user_id, target_user_id, target_user_id, source_user_id)
|
|
|
|
end
|
|
|
|
def self.create(message, target_user_id, source_user_id)
|
|
sanitized_text = Sanitize.fragment(message, elements: HtmlSanitize::SAFE)
|
|
|
|
# create new message
|
|
tm = TextMessage.new
|
|
tm.message = sanitized_text
|
|
tm.target_user_id = target_user_id
|
|
tm.source_user_id = source_user_id
|
|
tm.save
|
|
|
|
# send notification
|
|
@notification = Notification.send_text_message(sanitized_text, User.find(source_user_id), User.find(target_user_id), tm.id)
|
|
|
|
tm
|
|
end
|
|
end
|
|
end
|