# copyright 2007 ETH Zurich, DMATL
# author lorenz textor

noOwner = True          # True = do not show owner roles
showAll = False         # True = show also folders/documents without local roles
encoding = 'mac-roman'  # mac-roman or latin1

CONTAINERS = ['Silva Folder','Silva Publication']
CONTENT = ['Silva Document', 'Silva Personal Information', 'Silva VVZ Page', 'IMAP Calendar List', 'Silva Image', 'Silva File']

objects = [container]

def scan_assets(this_container):
    for obj in this_container.objectValues(CONTAINERS+CONTENT):
        objects.append(obj)

def scan_assets_in(this_container):
    scan_assets(this_container)
    for folder in this_container.objectValues(CONTAINERS):
        scan_assets_in(folder)

scan_assets_in(container)

for obj in objects:
    output = []
    for role in obj.get_local_roles():
        if not noOwner or role[1][0]!='Owner':
            output.append('"user","%s (%s)","%s"' % (context.sec_get_member(role[0]).fullname(), role[0], ' / '.join(role[1])))
    groups = obj.sec_get_groupsmapping()
    if groups:
        groups = groups.getMappings()
        for group in groups:
            output.append('"group","%s","%s"' % (group, ' / '.join(groups[group])))
    minimumRole = context.getAcquiredMinimumRole(obj)
    if showAll or not minimumRole[1] or output:
        print '"%s","%s","%s"' % (obj.meta_type, obj.absolute_url_path(), minimumRole[0])
        print '\n'.join(output)
        print
context.REQUEST.RESPONSE.setHeader('Content-type', 'octet-stream/octet-stream')
context.REQUEST.RESPONSE.setHeader('Content-disposition', 'inline; filename="access.csv"')
return printed.encode(encoding, 'replace')
return printed

