in www/roster/models/committer.rb [6:269]
def self.serialize(id, env)
response = {}
person = ASF::Person.find(id)
person.reload!
return unless person.attrs['cn']
response[:id] = id
response[:member] = person.asf_member?
m = person.createTimestamp.match(/^(\d\d\d\d)(\d\d)(\d\d)/)
if m
response[:createTimestamp] = m[1] + '-' + m[2] + '-' + m[3]
else
response[:createTimestamp] = person.createTimestamp
end
name = {}
auth = Auth.info(env)
isSelfOrMember = (id == env.user or auth[:member])
if person.icla
name[:public_name] = person.public_name
if isSelfOrMember
name[:legal_name] = person.icla.legal_name
end
end
unless person.attrs['cn'].empty?
name[:ldap] = person.attrs['cn'].first.force_encoding('utf-8')
end
unless (person.attrs['givenName'] || []).empty?
name[:given_name] = person.attrs['givenName'].first.force_encoding('utf-8')
end
unless person.attrs['sn'].empty?
name[:family_name] = person.attrs['sn'].first.force_encoding('utf-8')
end
response[:name] = name
response[:email_forward] = person.mail
response[:email_alt] = person.alt_email
response[:email_other] = person.all_mail - person.mail - person.alt_email
unless person.pgp_key_fingerprints.empty?
response[:pgp] = person.pgp_key_fingerprints
end
unless person.ssh_public_keys.empty?
response[:ssh] = person.ssh_public_keys
end
response[:host] = person.attrs['host'] || ['(none)']
response[:inactive] = person.inactive?
if person.attrs['asf-sascore']
response[:sascore] = person.attrs['asf-sascore'].first
end
if person.attrs['githubUsername']
response[:githubUsername] = person.attrs['githubUsername']
end
response[:urls] = person.urls unless person.urls.empty?
response[:groups] = person.services
response[:committer] = []
response[:committees] = []
response[:podlings] = []
pmcs = ASF::Committee.pmcs
pmc_names = pmcs.map(&:name)
podlings = ASF::Podling.current.map(&:id)
person.groups.map(&:name).each do |group|
unless pmc_names.include? group
response[:groups] << group
end
end
person.project_owners.map(&:name).each do |project|
if pmc_names.include? project
response[:committees] << project
elsif podlings.include? project
response[:podlings] << project
else
end
end
person.projects.map(&:name).each do |project|
if pmc_names.include? project
response[:committer] << project
elsif podlings.include? project
response[:podlings] << project
else
end
end
ASF::Authorization.new('asf').each do |group, members|
response[:groups] << group if members.include? id
end
ASF::Authorization.new('pit').each do |group, members|
response[:groups] << group if members.include? id
end
response[:committees].sort!
response[:groups].sort!
response[:committer].sort!
response[:podlings].sort!
response[:committees].uniq!
response[:groups].uniq!
response[:committer].uniq!
response[:podlings].uniq!
member = {}
inMembersTxt = ASF::Member.find(id)
if inMembersTxt
member[:status] = ASF::Member.status[id] || 'Active'
end
response[:forms] = {}
if auth[:member]
if person.icla&.claRef and (auth[:secretary] or auth[:root])
ASF::ICLAFiles.update_cache(env)
file = ASF::ICLAFiles.match_claRef(person.icla.claRef)
if file
url = ASF::SVN.svnurl('iclas')
response[:forms][:icla] = "#{url}/#{file}"
end
end
if inMembersTxt
member[:info] = person.members_txt
if person.icla
ASF::MemApps.update_cache(env)
file = ASF::MemApps.find1st(person)
if file
url = ASF::SVN.svnurl('member_apps')
response[:forms][:member] = "#{url}/#{file}"
end
end
file = ASF::EmeritusFiles.find(person)
if file
response[:forms][:emeritus] = ASF::EmeritusFiles.svnpath!(file)
end
epoch, file = ASF::EmeritusRequestFiles.find(person, true)
if file
response[:forms][:emeritus_request] = ASF::EmeritusRequestFiles.svnpath!(file)
response[:emeritus_request_age] = (((Time.now.to_i - epoch.to_i).to_f/SECS_TO_DAYS)).round(1).to_s
elsif epoch
response[:forms][:emeritus_request] = ASF::EmeritusRequestFiles.svnpath!(epoch)
end
file = ASF::EmeritusRescindedFiles.find(person)
if file
response[:forms][:emeritus_rescinded] = ASF::EmeritusRescindedFiles.svnpath!(file)
end
file = ASF::EmeritusReinstatedFiles.find(person)
if file
response[:forms][:emeritus_reinstated] = ASF::EmeritusReinstatedFiles.svnpath!(file)
end
if auth[:secretary]
path, _name, _timestamp, epoch = ASF::WithdrawalRequestFiles.findpath(person.id, env, true)
if path
response[:forms][:withdrawal_request] = path
response[:withdrawal_request_age] = (((Time.now.to_i - epoch).to_f/SECS_TO_DAYS)).round(1).to_s
end
end
else
if person.member_nomination
member[:nomination] = person.member_nomination
end
end
else
response[:forms][:icla] = '' if person.icla&.claRef
end
response[:member] = member unless member.empty?
if isSelfOrMember
response[:moderates] = {}
require 'whimsy/asf/mlist'
ASF::MLIST.moderates(person.all_mail, response)
end
if env.user == id or auth[:root] or auth[:secretary]
require 'whimsy/asf/mlist'
ASF::MLIST.subscriptions(person.all_mail, response)
ASF::MLIST.digests(person.all_mail, response)
response[:privateNosub] = []
end
response[:chairOf] = []
response[:committees].each do |cttee|
pmc = ASF::Committee.find(cttee)
chairs = pmc.chairs.map {|x| x[:id]}
response[:chairOf] << cttee if chairs.include?(id)
if response[:subscriptions]
pmail = pmc.private_mail_list rescue ''
subbed = false
subs = response[:subscriptions]
digs = response[:digests]
subs += digs if digs
subs.each do |sub|
if sub[0] == pmail
subbed = true
end
end
response[:privateNosub] << cttee unless subbed
end
end
response[:pmcs] = []
response[:nonpmcs] = []
pmcs.each do |pmc|
response[:pmcs] << pmc.name if pmc.roster.include?(person.id)
response[:chairOf] << pmc.name if pmc.chairs.map{|ch| ch[:id]}.include?(person.id)
end
response[:pmcs].sort!
response[:pmcs].uniq!
response[:nonPMCchairOf] = []
nonpmcs = ASF::Committee.nonpmcs
nonpmcs.each do |nonpmc|
response[:nonpmcs] << nonpmc.name if nonpmc.roster.include?(person.id)
response[:nonPMCchairOf] << nonpmc.name if nonpmc.chairs.map{|ch| ch[:id]}.include?(person.id)
end
response[:nonpmcs].sort!
response[:nonpmcs].uniq!
response
end