## Script (Python) "folder_contents_generator"
##bind container=container
##bind context=context
##bind namespace=ns
##bind script=script
##bind subpath=traverse_subpath
##parameters=contentFilter=None
##title=
##
content_list = context.listFolderContents(contentFilter=contentFilter)

from AccessControl import getSecurityManager
checkPermission = getSecurityManager().checkPermission

#Insert a .. that simulates parent folder.
parent = context.aq_inner.aq_parent
uplevel = None
if getattr(parent, 'isPrincipiaFolderish', False):
    from AccessControl import getSecurityManager
    checkPermission = getSecurityManager().checkPermission
    if checkPermission('List folder contents', parent) and context!=context.portal_url.getPortalObject():
        uplevel = { 'url'         : "%s/%s"%(parent.absolute_url(), parent.getTypeInfo().getActionById('folderContents'))
                  , 'can_modify'  : False
                  , 'icon'        : 'icons/uponelevel.gif'
                  , 'hiicon'      : 'icons/uponelevel_over.gif'
                  , 'id'          : parent.getId()
                  , 'title'       : '.. (Gå opp ett nivå)'
                  , 'fulltitle'   : parent.Title()
                  , 'portal_type' : ''
                  , 'modifieddate': ''
                  , 'type'        : ''
                  , 'owner'       : ''
                  , 'state'       : ''
                  }


pw = context.portal_workflow
pt = context.portal_types

getTypeInfo = pt.getTypeInfo

filtered_content_list = []
append = filtered_content_list.append
for content in content_list:
    if checkPermission('View', content):
        view = ''
        if getattr(content, 'isPrincipiaFolderish', False):
            if checkPermission('List folder contents', content):
                view = content.getTypeInfo().getActionById( 'folderContents' )
                if not view:
                    view = content.getTypeInfo().getActionById( 'view' )
        else:
            view = content.getTypeInfo().getActionById( 'view' )
        if checkPermission('Modify portal content', content):
            edit = content.getTypeInfo().getActionById('edit')
        else:
            edit = None
        
        portal_type = content.portal_type
        tmp =  {}
        tmp['url'] = "%s/%s"%( content.absolute_url(), view ) 
        if edit:
             tmp['can_modify'] = 1
             tmp['edit_url'] = "%s/%s"%( content.absolute_url(), edit )
        else:
             tmp['can_modify'] = 0
            
        tmp['icon'] = content.getIcon(relative_to_portal=False)
        tmp['hiicon'] = content.getHighlightedIcon(relative_to_portal=False)
        tmp['id'] = content.getId()
        tmp['title'] = content.Title() or content.getId()
        tmp['fulltitle'] = tmp['title']
        if len(tmp['title'])>50:
             tmp['title'] = tmp['title'][:50] + '...'
        tmp['portal_type'] = getTypeInfo(portal_type).getId()
        tmp['type'] = getTypeInfo(portal_type).Title()
        tmp['modifieddate'] = DateTime( content.ModificationDate() ).strftime("%d.%m.%y %H:%M")
        tmp['owner'] = content.Creator()
        tmp['state'] = pw.getInfoFor(content, 'review_state', '')
        append(tmp)

request = ns['request']
sortby = request.get('sortby', 'title')
if sortby!= 'title':
  # We always have title as the second sort_order
  filtered_content_list = [(str(item.get(sortby, None)).lower(), str(item['title']).lower(), item,) for item in filtered_content_list]
  filtered_content_list.sort()
  filtered_content_list = [item for sorter, title, item in filtered_content_list]
else:
  filtered_content_list = [(str(item['title'].lower()), item,) for item in filtered_content_list]
  filtered_content_list.sort()
  filtered_content_list = [item for title, item in filtered_content_list]

if uplevel:
    filtered_content_list.insert(0, uplevel)
return filtered_content_list
