You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.5 KiB
91 lines
1.5 KiB
require 'User'
|
|
require 'Group'
|
|
require 'Site'
|
|
require 'MailAliasRole'
|
|
require 'MailAliasPerson'
|
|
require 'MailAccount'
|
|
|
|
class SystemDataBackend
|
|
|
|
def initialize(backend)
|
|
@backend = backend
|
|
@data = Hash.new
|
|
end
|
|
|
|
def users
|
|
load(:User)
|
|
end
|
|
|
|
def groups
|
|
load(:Group)
|
|
end
|
|
|
|
def sites
|
|
load(:Site)
|
|
end
|
|
|
|
def mailAliasRoles
|
|
load(:MailAliasRole)
|
|
end
|
|
|
|
def mailAliasPeople
|
|
load(:MailAliasPerson)
|
|
end
|
|
|
|
def mailAccounts
|
|
load(:MailAccount)
|
|
end
|
|
|
|
def userByName(name)
|
|
users.find{|user| user.name == name}
|
|
end
|
|
|
|
def groupByName(name)
|
|
groups.find{|group| group.name == name}
|
|
end
|
|
|
|
def siteByName(name)
|
|
sites.find{|site| site.name == name}
|
|
end
|
|
|
|
def usersInGroup(group)
|
|
case
|
|
when group.members.instance_of?(Array):
|
|
Hash[group.members.map{|uid| [uid, userByName(uid)] if userByName(uid)}]
|
|
when goup.members.nil?:
|
|
{}
|
|
else
|
|
{group.members => userByName(group.members)} if userByName(group.members)
|
|
end
|
|
end
|
|
|
|
def mailAliasRolesBySite(site)
|
|
mailAliasRoles.find_all{|mail| mail.site == site.name}
|
|
end
|
|
|
|
def mailAliasPeopleBySite(site)
|
|
mailAliasPeople.find_all{|mail| mail.site == site.name}
|
|
end
|
|
|
|
def mailAccountsBySite(site)
|
|
mailAccounts.find_all{|mail| mail.site == site.name}
|
|
end
|
|
|
|
private
|
|
|
|
def load(kind)
|
|
load!(kind) if ! @data[kind]
|
|
@data[kind]
|
|
end
|
|
|
|
def load!(kind)
|
|
@data[kind] = Array.new
|
|
@backend.load(kind) do |data|
|
|
data[:backend] = @backend
|
|
@data[kind].push(
|
|
eval(kind.to_s + '.new(data)')
|
|
)
|
|
end
|
|
end
|
|
|
|
end
|