aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/discussion.rb12
-rw-r--r--app/models/inboxes/ability.rb6
-rw-r--r--app/models/message.rb12
-rw-r--r--app/models/speaker.rb10
4 files changed, 23 insertions, 17 deletions
diff --git a/app/models/discussion.rb b/app/models/discussion.rb
index ca56596..7230538 100644
--- a/app/models/discussion.rb
+++ b/app/models/discussion.rb
@@ -84,20 +84,26 @@ class Discussion < ActiveRecord::Base
end
end
+ # return amount of unreaded messages for current discussion
+ def count_unread_mess(user)
+ speaker = find_speaker_by_user(user)
+ messages.where("updated_at > ?", speaker.updated_at ).where("user_id != ?", speaker.id ).count
+ end
+
def mark_as_read_for(user)
speaker = Speaker.find_or_create_by_user_id_and_discussion_id(user.id, self.id)
# flag.update_attributes(:updat => Time.zone.now)
speaker.touch
end
-
+
def find_speaker_by_user user
Speaker.find_by_discussion_id_and_user_id(self.id, user.id)
end
-
+
private
def check_that_has_at_least_two_users
errors.add :recipient_tokens, t("inboxes.discussions.choose_at_least_one_recipient") if !self.recipient_ids || self.recipient_ids.size < 2
end
-end \ No newline at end of file
+end
diff --git a/app/models/inboxes/ability.rb b/app/models/inboxes/ability.rb
index 4d8408f..deb3d81 100644
--- a/app/models/inboxes/ability.rb
+++ b/app/models/inboxes/ability.rb
@@ -15,20 +15,20 @@ module Inboxes
# and therefore should be easy to test in isolation.
def self.register_ability(ability)
self.abilities.add(ability)
-
+
end
def initialize(user)
# raise "Initializing 3rd patry"
# self.clear_aliased_actions
-
+
# can [:index, :create], Discussion
# can :read, Discussion do |discussion|
# discussion.can_participate?(user)
# end
#include any abilities registered by extensions, etc.
-
+
Ability.abilities.each do |clazz|
ability = clazz.send(:new, user)
@rules = rules + ability.send(:rules)
diff --git a/app/models/message.rb b/app/models/message.rb
index 3579e63..436775b 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -1,20 +1,20 @@
class Message < ActiveRecord::Base
default_scope order(:created_at)
-
+
belongs_to :discussion, :counter_cache => true, :touch => true
belongs_to :user
-
+
validates :user, :discussion, :body, :presence => true
-
+
after_save :mark_discussion_as_read
-
+
def visible_for? user
self.created_at.to_i >= self.discussion.user_invited_at(user).to_i
end
-
+
private
-
+
def mark_discussion_as_read
self.discussion.mark_as_read_for(self.user)
end
diff --git a/app/models/speaker.rb b/app/models/speaker.rb
index 0ed9cdd..4d8795b 100644
--- a/app/models/speaker.rb
+++ b/app/models/speaker.rb
@@ -1,16 +1,16 @@
class Speaker < ActiveRecord::Base
belongs_to :user
belongs_to :discussion
-
+
validates_uniqueness_of :user_id, :scope => :discussion_id
validates :user, :discussion, :presence => true
-
+
after_destroy :destroy_discussion
-
+
private
-
+
def destroy_discussion
self.discussion.destroy unless self.discussion.speakers.any?
end
-
+
end