base/app/models/actor.rb in social_stream-0.16.3 vs base/app/models/actor.rb in social_stream-0.17.0

- old
+ new

@@ -13,15 +13,17 @@ # application developer can define as many actor subtypes as required. # Actor subtypes are added to +config/initializers/social_stream.rb+ # # class Actor < ActiveRecord::Base - @subtypes_name = :subject - include SocialStream::Models::Supertype + # Actor is a supertype of all subjects defined in SocialStream.subjects + supertype_of :subject + include SocialStream::Models::Object - validates_presence_of :name, :subject_type + validates_presence_of :name, :message => '' + validates_presence_of :subject_type acts_as_messageable acts_as_url :name, :url_attribute => :slug @@ -60,17 +62,17 @@ :uniq => true has_many :relations, :dependent => :destroy - has_many :authored_objects, - :class_name => "ActivityObject", + has_many :authored_channels, + :class_name => "Channel", :foreign_key => :author_id, :dependent => :destroy - has_many :owned_objects, - :class_name => "ActivityObject", + has_many :owned_channels, + :class_name => "Channel", :foreign_key => :owner_id, :dependent => :destroy scope :alphabetic, order('actors.name') @@ -160,23 +162,24 @@ return nil if !notify_by_email #If actor has enabled the emails and has email return "#{name} <#{email}>" if email.present? #If actor is a Group, has enabled emails but no mail we return the highest_rank ones. if (group = self.subject).is_a? Group - relation = group.relation_customs.sort.first - receivers = group.contact_actors(:direction => :sent, :relations => relation) emails = Array.new - receivers.each do |receiver| - next unless Actor.normalize(receiver).subject_type.eql?("User") + group.relation_notifys.each do |relation| + receivers = group.contact_actors(:direction => :sent, :relations => relation) + receivers.each do |receiver| + next unless Actor.normalize(receiver).subject_type.eql?("User") - receiver_emails = receiver.mailboxer_email(object) - case receiver_emails - when String - emails << receiver_emails - when Array - receiver_emails.each do |receiver_email| - emails << receiver_email + receiver_emails = receiver.mailboxer_email(object) + case receiver_emails + when String + emails << receiver_emails + when Array + receiver_emails.each do |receiver_email| + emails << receiver_email + end end end end return emails end @@ -193,9 +196,14 @@ end # A given relation defined and managed by this actor def relation_custom(name) relation_customs.find_by_name(name) + end + + # All {Relation relations} with the 'notify' permission + def relation_notifys + relations.joins(:relation_permissions => :permission).where('permissions.action' => 'notify') end # The {Relation::Public} for this {Actor} def relation_public Relation::Public.of(self)