task_mailer.rb
2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class TaskMailer < ActionMailer::Base
  def method_missing(name, *args)
    task = args.shift
    if task.kind_of?(Task) && task.respond_to?("#{name}_message")
      send_message(task, task.send("#{name}_message"), *args)
    else
      super
    end
  end
  def target_notification(task, message)
    msg = extract_message(message)
    recipients task.target.notification_emails
    url_for_tasks_list = task.target.kind_of?(Environment) ? '' : url_for(task.target.url.merge(:controller => 'tasks', :action => 'index'))
    from self.class.generate_from(task)
    subject '[%s] %s' % [task.requestor.environment.name, task.description]
    body :requestor => task.requestor.name,
      :target => task.target.name,
      :message => msg,
      :environment => task.requestor.environment.name,
      :url => generate_environment_url(task, :controller => 'home'),
      :tasks_url => url_for_tasks_list
  end
  def invitation_notification(task)
    msg = task.expanded_message
    msg = msg.gsub /<url>/, generate_environment_url(task, :controller => 'account', :action => 'signup', :invitation_code => task.code)
    recipients task.friend_email
    from self.class.generate_from(task)
    subject '[%s] %s' % [ task.requestor.environment.name, task.description ]
    body :message => msg
  end
  protected
  def extract_message(message)
    if message.kind_of?(Proc)
      self.instance_eval(&message)
    else
      message.to_s
    end
  end
  def send_message(task, message)
    text = extract_message(message)
    recipients task.requestor.notification_emails
    from self.class.generate_from(task)
    subject '[%s] %s' % [task.requestor.environment.name, task.description]
    body :requestor => task.requestor.name,
      :message => text,
      :environment => task.requestor.environment.name,
      :url => url_for(:host => task.requestor.environment.default_hostname, :controller => 'home')
  end
  def self.generate_from(task)
    "#{task.requestor.environment.name} <#{task.requestor.environment.contact_email}>"
  end
  def generate_environment_url(task, url = {})
    url_for(Noosfero.url_options.merge(:host => task.requestor.environment.default_hostname).merge(url))
  end
end