in www/roster/models/nonpmc.rb [1:181]
def self.serialize(id, env)
cttee = ASF::Committee.find(id)
return unless cttee.nonpmc?
hasLDAP = !ASF::Project[cttee.name].nil?
members = cttee.owners
committers = cttee.committers
mail_list = cttee.mail_list.sub(/@apache\.org/,'')
mail_list = 'legal' if mail_list =~ /^legal-/ && cttee.name != 'dataprivacy'
mail_list = 'fundraising' if mail_list =~ /^fundraising-/
ASF::Committee.load_committee_info
ASF::Person.preload(['cn', 'mail', 'asf-altEmail', 'githubUsername'], (members + committers).uniq)
image = ASF::SiteImage.find(id)
moderators = nil
modtime = nil
subscribers = nil
subtime = nil
pSubs = []
unMatchedSubs = []
unMatchedSecSubs = []
currentUser = ASF::Person.find(env.user)
analysePrivateSubs = false
if cttee.roster.include? env.user or currentUser.asf_member?
require 'whimsy/asf/mlist'
moderators, modtime = ASF::MLIST.list_moderators(mail_list)
subscribers, subtime = ASF::MLIST.list_subs(mail_list)
if mail_list == 'press'
%w{markpub announce}.each do |alt_list|
mods, _ = ASF::MLIST.list_moderators(alt_list)
moderators.merge! mods
subs, _ = ASF::MLIST.list_subs(alt_list)
subscribers.merge! subs
end
end
analysePrivateSubs = currentUser.asf_member?
unless analysePrivateSubs
user_mail = currentUser.all_mail || []
pMods = moderators["private@#{mail_list}.apache.org"] || []
analysePrivateSubs = !(pMods & user_mail).empty?
end
if analysePrivateSubs
pSubs = ASF::MLIST.private_subscribers(mail_list)[0]||[]
unMatchedSubs=Set.new(pSubs)
pSubs.map!(&:downcase)
sSubs = ASF::MLIST.security_subscribers(mail_list)[0]||[]
unMatchedSecSubs = Set.new(sSubs)
end
lists = ASF::MLIST.domain_lists(mail_list, true)
else
lists = ASF::MLIST.domain_lists(mail_list, false)
end
roster = ASF.dup(cttee.roster)
if roster.empty?
cttee.chairs.each do |ch|
roster[ch[:id]] = {name: ch[:name], date: 'unknown'}
end
end
cttee_members = roster.keys
roster.each {|_, info| info[:role] = 'Committee member'}
members.each do |person|
roster[person.id] ||= {
name: person.public_name,
role: 'Committee member'
}
if analysePrivateSubs
allMail = person.all_mail.map(&:downcase)
roster[person.id]['notSubbed'] = true if (allMail & pSubs).empty?
unMatchedSubs.delete_if {|k| allMail.include? k.downcase}
unMatchedSecSubs.delete_if {|k| allMail.include? k.downcase}
end
roster[person.id]['ldap'] = true
end
committers.each do |person|
roster[person.id] ||= {
name: person.public_name,
role: 'Committer'
}
end
roster.each do |k, v|
person = ASF::Person.find(k)
v[:member] = person.asf_member?
v['githubUsername'] = (person.attrs['githubUsername'] || []).join(', ')
end
if cttee.chair and roster[cttee.chair.id]
roster[cttee.chair.id]['role'] = 'Committee chair'
end
unknownSubs = []
asfMembers = []
unknownSecSubs = []
nonASFmails = {}
moderators&.each { |_, mods| mods.each {|m| nonASFmails[m] = '' unless m.end_with? '@apache.org'} }
if unMatchedSubs.length > 0 or nonASFmails.length > 0 or unMatchedSecSubs.length > 0
load_emails
unMatchedSubs.each { |addr|
who = nil
@people.each do |person|
if person[:mail].any? {|mail| mail.downcase == addr.downcase}
who = person
end
end
if who
if who[:member]
asfMembers << { addr: addr, person: who }
else
unknownSubs << { addr: addr, person: who }
end
else
unknownSubs << { addr: addr, person: nil }
end
}
nonASFmails.each {|k, v|
@people.each do |person|
if person[:mail].any? {|mail| ASF::Mail.to_canonical(mail.downcase) == ASF::Mail.to_canonical(k.downcase)}
nonASFmails[k] = person[:id]
end
end
}
unMatchedSecSubs.each { |addr|
who = nil
@people.each do |person|
if person[:mail].any? {|mail| mail.downcase == addr.downcase}
who = person
end
end
if who
unless who[:member]
unknownSecSubs << { addr: addr, person: who }
end
else
unknownSecSubs << { addr: addr, person: nil }
end
}
end
return {
id: id,
chair: cttee.chair&.id,
display_name: cttee.display_name,
description: cttee.description,
schedule: cttee.schedule,
report: cttee.report,
site: cttee.site,
established: cttee.established,
hasLDAP: hasLDAP,
ldap: members.map(&:id),
members: cttee_members,
committers: committers.map(&:id),
roster: roster,
mail: lists.sort.to_h,
moderators: moderators,
modtime: modtime,
subscribers: subscribers,
subtime: subtime,
nonASFmails: nonASFmails,
image: image,
analysePrivateSubs: analysePrivateSubs,
unknownSubs: unknownSubs,
asfMembers: asfMembers,
unknownSecSubs: unknownSecSubs,
}
end