app/models/alchemy_crm/mailing.rb in alchemy_crm-2.0.1 vs app/models/alchemy_crm/mailing.rb in alchemy_crm-2.0.2
- old
+ new
@@ -1,93 +1,93 @@
# encoding: UTF-8
module AlchemyCrm
- class Mailing < ActiveRecord::Base
+ class Mailing < ActiveRecord::Base
- MAILING_PAGE_LAYOUT_PREFIX = "newsletter_layout_"
+ MAILING_PAGE_LAYOUT_PREFIX = "newsletter_layout_"
- belongs_to :page, :dependent => :destroy, :class_name => 'Alchemy::Page'
- has_many :deliveries, :dependent => :destroy
- has_many :recipients, :through => :deliveries
- belongs_to :newsletter
+ belongs_to :page, :dependent => :destroy, :class_name => 'Alchemy::Page'
+ has_many :deliveries, :dependent => :destroy
+ has_many :recipients, :through => :deliveries
+ belongs_to :newsletter
- validates_presence_of :name
- validates_presence_of :newsletter_id, :on => :create
+ validates_presence_of :name
+ validates_presence_of :newsletter_id, :on => :create
- before_create :set_sha1
- after_create :create_page
+ before_create :set_sha1
+ after_create :create_page
- # Returns all contacts found via newsletter.
- def newsletter_contacts
- return [] if newsletter.blank?
- newsletter.contacts
- end
+ # Returns all contacts found via newsletter.
+ def newsletter_contacts
+ return [] if newsletter.blank?
+ newsletter.contacts
+ end
- # Returns all contacts found via newsletter contacts and additional email addresses.
- def contacts
- (newsletter_contacts + contacts_from_additional_email_addresses).uniq
- end
+ # Returns all contacts found via newsletter contacts and additional email addresses.
+ def contacts
+ (newsletter_contacts + contacts_from_additional_email_addresses).uniq
+ end
- def contacts_count
- return 0 if contacts.blank?
- contacts.count
- end
+ def contacts_count
+ return 0 if contacts.blank?
+ contacts.count
+ end
- def contacts_not_having_email_yet
- return contacts if recipients.empty?
- contacts.select { |c| !recipients.collect(&:email).include?(c.email) }
- end
+ def contacts_not_having_email_yet
+ return contacts if recipients.empty?
+ contacts.select { |c| !recipients.collect(&:email).include?(c.email) }
+ end
- # Returns a list of all email addresses for contacts that have not got any email yet.
- def emails
- contacts_not_having_email_yet.collect(&:email)
- end
+ # Returns a list of all email addresses for contacts that have not got any email yet.
+ def emails
+ contacts_not_having_email_yet.collect(&:email)
+ end
- # Return a list of email addresses from additional_email_addresses field.
- def additional_emails
- return [] if additional_email_addresses.blank?
- additional_email_addresses.gsub(/\s/,'').split(',').uniq
- end
+ # Return a list of email addresses from additional_email_addresses field.
+ def additional_emails
+ return [] if additional_email_addresses.blank?
+ additional_email_addresses.gsub(/\s/,'').split(',').uniq
+ end
- # Returns a list of contacts found or initialized by email address from additional_email_addresses field.
- def contacts_from_additional_email_addresses
- additional_emails.collect{ |email| Contact.find_or_initialize_by_email(:email => email) }
- end
+ # Returns a list of contacts found or initialized by email address from additional_email_addresses field.
+ def contacts_from_additional_email_addresses
+ additional_emails.collect{ |email| Contact.find_or_initialize_by_email(:email => email) }
+ end
- # Makes a copy of another mailing.
- def self.copy(id)
- source = self.find(id)
- new(source.attributes.merge(
- "name" => "#{source.name} (#{::I18n.t(:copy, :scope => :alchemy_crm, :default => 'Copy')})"
- ).except("id", "updated_at", "created_at", "sha1", "salt", "page_id"))
- end
+ # Makes a copy of another mailing.
+ def self.copy(id)
+ source = self.find(id)
+ new(source.attributes.merge(
+ "name" => "#{source.name} (#{::I18n.t(:copy, :scope => :alchemy_crm, :default => 'Copy')})"
+ ).except("id", "updated_at", "created_at", "sha1", "salt", "page_id"))
+ end
- def next_pending_delivery
- deliveries.pending.first
- end
+ def next_pending_delivery
+ deliveries.pending.first
+ end
- private
+ private
- def create_page
- mailing_root = Alchemy::Page.find_by_name('Alchemy CRM Rootpage')
- raise "Alchemy CRM Rootpage not found. Did you seed the database?" if mailing_root.blank?
- mailing_page = Alchemy::Page.new(
- :name => "Mailing #{self.name}",
- :sitemap => false,
- :page_layout => newsletter.layout,
- :language => Alchemy::Language.get_default,
- :parent_id => mailing_root.id
- )
- if mailing_page.save
- self.page = mailing_page
- save
- else
- raise "Error while creating Mailingpage: #{mailing_page.errors.full_messages}"
- end
- end
+ def create_page
+ mailing_root = Alchemy::Page.find_by_name('Alchemy CRM Rootpage')
+ raise "Alchemy CRM root page not found. Did you seed the database?" if mailing_root.blank?
+ mailing_page = Alchemy::Page.new(
+ :name => "Mailing #{name}",
+ :sitemap => false,
+ :page_layout => newsletter.layout,
+ :language => Alchemy::Language.get_default,
+ :parent_id => mailing_root.id
+ )
+ if mailing_page.save
+ self.page = mailing_page
+ save
+ else
+ raise "Error while creating mailing page: #{mailing_page.errors.full_messages.join(' ')}"
+ end
+ end
- def set_sha1
- self.salt = [Array.new(6){rand(256).chr}.join].pack("m")[0..7]
- self.sha1 = Digest::SHA1.hexdigest(Time.now.to_i.to_s + salt)
- end
+ def set_sha1
+ self.salt = [Array.new(6){rand(256).chr}.join].pack("m")[0..7]
+ self.sha1 = Digest::SHA1.hexdigest(Time.now.to_i.to_s + salt)
+ end
- end
+ end
end