blob: e3bf58ff86af4c92bf8557dce25a1dc543dfceee [file] [log] [blame]
#
# send reminders for missing board reports
#
ASF::Mail.configure
sent = {}
unsent = []
sent_emails = [] if @sendsummary # initial automated reminder
# extract values for common fields
from = @from
unless from
sender = ASF::Person.find(env.user)
from = "#{sender.public_name.inspect} <#{sender.id}@apache.org>"
end
# iterate over the agenda
Agenda.parse(@agenda, :full).each do |item|
# decide whether or not to skip the report based on the setting of @pmcs
next if @pmcs and not @pmcs.include? item['title']
next if not @pmcs and not item['report'].to_s.empty?
# select exec officer, additional officer, and committee reports
next unless item[:attach] =~ /^(4[A-Z]|\d|[A-Z]+)$/
# bail if chair email can't be found
unless item['chair_email']
unsent << item['title']
next
end
# substitute [whoTo] values
if item['to'] == 'president'
whoTo = 'operations@apache.org'
else
whoTo = 'board@apache.org'
end
# values to substitute
view = {
whoTo: whoTo,
link: item['title'].gsub(/\W/, '-'),
project: item['title']
}
# apply changes to both subject and the message text itself
subject = Mustache.render(@subject, view)
message = Mustache.render(@message, view)
# cc list
cclist = []
mail_list = item['mail_list']
if mail_list
if @selection == 'inactive'
cclist << "dev@#{mail_list}.apache.org"
elsif item[:attach] =~ /^[A-Z]+/
cclist << "private@#{mail_list}.apache.org"
else # This is not a PMC, and the mail_list may already include the domain
mail_list = mail_list + '@apache.org' unless mail_list.include? '@'
cclist << mail_list
end
end
# construct email
mail = Mail.new do
from from
to "#{item['owner']} <#{item['chair_email']}>"
cc cclist unless cclist.empty?
subject subject
body message
end
# deliver mail
mail.deliver! unless @dryrun
if @sendsummary # initial automated reminder
# Mustache is not able to iterate over a hash
sent_emails << {name: item['title'], emails: [mail.to, mail.cc].flatten.join(',')}
end
sent[item['title']] = mail.to_s
end
# provide a response to the request
unsent += @pmcs - sent.keys if @pmcs
if @sendsummary # initial automated reminder
view = {
meeting: @meeting,
agenda: @agenda,
unsent: unsent,
sent_emails: sent_emails,
}
render = AgendaTemplate.render(@summary, view)
subject = render[:subject]
body = render[:body]
mail = Mail.new do
from from
to from
subject subject
body body
end
mail.deliver! unless @dryrun
sent[:summary] = mail.to_s
end
{count: sent.length, unsent: unsent, sent: sent, dryrun: @dryrun}