bugfix : checkIdAvailable était exécutée via l'acquisition…
[Plinn.git] / skins / custom_generic / folder_contents.py
old mode 100644 (file)
new mode 100755 (executable)
index 26fa044..2be413b
@@ -1,4 +1,4 @@
-##parameters=b_start=0, key='', reverse=0, ids=(), items_copy='', items_cut='', items_delete='', items_new='', items_paste='', items_rename='', items_up='', items_down='', items_top='', items_bottom='', items_sort='', template='', macro='', ajax='',**others
+##parameters=b_start=0, key='', reverse=0, ids=(), items_copy='', items_cut='', items_delete='', items_new='', items_paste='', items_rename='', items_up='', items_down='', items_top='', items_bottom='', items_sort='', template='', macro='', ajax=''
 ##
 from Products.Plinn.PloneMisc import Batch
 from DateTime import DateTime
 ##
 from Products.Plinn.PloneMisc import Batch
 from DateTime import DateTime
@@ -15,6 +15,7 @@ from Products.CMFDefault.utils import html_marshal
 
 mtool = getToolByName(script, 'portal_membership')
 checkPermission = mtool.checkPermission
 
 mtool = getToolByName(script, 'portal_membership')
 checkPermission = mtool.checkPermission
+isAnon = mtool.isAnonymousUser()
 utool = getToolByName(script, 'portal_url')
 portal_url = utool()
 
 utool = getToolByName(script, 'portal_url')
 portal_url = utool()
 
@@ -23,60 +24,60 @@ form = context.REQUEST.form
 default_target = 'object/folderContents'
 default_kw = {'b_start': b_start, 'key': key, 'reverse': reverse, 'ajax' : ajax}
 if items_copy :
 default_target = 'object/folderContents'
 default_kw = {'b_start': b_start, 'key': key, 'reverse': reverse, 'ajax' : ajax}
 if items_copy :
-       if ajax : default_kw['syncFragments']=['rightCell']
-       if context.validateItemIds(**form) and \
-                       context.folder_copy_control(**form) and \
-                       context.setRedirect(context, default_target, **default_kw):
-               return
+    if ajax : default_kw['syncFragments']=['rightCell']
+    if context.validateItemIds(**form) and \
+            context.folder_copy_control(**form) and \
+            context.setRedirect(context, default_target, **default_kw):
+        return
 elif items_cut :
 elif items_cut :
-       if ajax : default_kw['syncFragments']=['rightCell']
-       if context.validateItemIds(**form) and \
-                       context.folder_cut_control(**form) and \
-                       context.setRedirect(context, default_target, **default_kw):
-                       return
+    if ajax : default_kw['syncFragments']=['rightCell']
+    if context.validateItemIds(**form) and \
+            context.folder_cut_control(**form) and \
+            context.setRedirect(context, default_target, **default_kw):
+            return
 elif items_delete and \
 elif items_delete and \
-               context.validateItemIds(**form) and \
-               context.folder_delete_control(**form) and \
-               context.setRedirect(context, default_target, **default_kw):
-       return
+        context.validateItemIds(**form) and \
+        context.folder_delete_control(**form) and \
+        context.setRedirect(context, default_target, **default_kw):
+    return
 elif items_new and \
 elif items_new and \
-               context.setRedirect(context, 'object/new', **default_kw):
-       return
+        context.setRedirect(context, 'object/new', **default_kw):
+    return
 elif items_paste :
 elif items_paste :
-       if ajax : default_kw['syncFragments']=['rightCell']
-       if context.folder_paste_control(**form) and \
-                       context.setRedirect(context, default_target, **default_kw):
-                       return
+    if ajax : default_kw['syncFragments']=['rightCell']
+    if context.folder_paste_control(**form) and \
+            context.setRedirect(context, default_target, **default_kw):
+            return
 elif items_rename and \
 elif items_rename and \
-               context.validateItemIds(**form) and \
-               context.setRedirect(context, 'object/rename_items', ids=ids,
-                                                       **default_kw):
-       return
+        context.validateItemIds(**form) and \
+        context.setRedirect(context, 'object/rename_items', ids=ids,
+                            **default_kw):
+    return
 elif items_sort and \
 elif items_sort and \
-               context.folder_sort_control(**form) and \
-               context.setRedirect(context, default_target, b_start=b_start):
-       return
+        context.folder_sort_control(**form) and \
+        context.setRedirect(context, default_target, b_start=b_start):
+    return
 elif items_up and \
 elif items_up and \
-               context.validateItemIds(**form) and \
-               context.folder_up_control(**form) and \
-               context.setRedirect(context, default_target, **default_kw):
-       return
+        context.validateItemIds(**form) and \
+        context.folder_up_control(**form) and \
+        context.setRedirect(context, default_target, **default_kw):
+    return
 elif items_down and \
 elif items_down and \
-               context.validateItemIds(**form) and \
-               context.folder_down_control(**form) and \
-               context.setRedirect(context, default_target, **default_kw):
-       return
+        context.validateItemIds(**form) and \
+        context.folder_down_control(**form) and \
+        context.setRedirect(context, default_target, **default_kw):
+    return
 elif items_top and \
 elif items_top and \
-               context.validateItemIds(**form) and \
-               context.folder_top_control(**form) and \
-               context.setRedirect(context, default_target, **default_kw):
-       return
+        context.validateItemIds(**form) and \
+        context.folder_top_control(**form) and \
+        context.setRedirect(context, default_target, **default_kw):
+    return
 elif items_bottom and \
 elif items_bottom and \
-               context.validateItemIds(**form) and \
-               context.folder_bottom_control(**form) and \
-               context.setRedirect(context, default_target, **default_kw):
-       return
-       
+        context.validateItemIds(**form) and \
+        context.folder_bottom_control(**form) and \
+        context.setRedirect(context, default_target, **default_kw):
+    return
+    
 
 options = {}
 
 
 options = {}
 
@@ -84,165 +85,133 @@ items_add_allowed = checkPermission(AddPortalContent, context)
 upitems_list_allowed = checkPermission(ListFolderContents, context, 'aq_parent')
 manage_props_allowed = checkPermission(ManageProperties, context)
 
 upitems_list_allowed = checkPermission(ListFolderContents, context, 'aq_parent')
 manage_props_allowed = checkPermission(ManageProperties, context)
 
-# information pour remonter au dossier parent
-up_info = {}
-if upitems_list_allowed:
-       up_obj = context.aq_parent
-       if hasattr(up_obj, 'portal_url'):
-               up_url = up_obj.getActionInfo('object/folderContents')['url']
-               up_info = { 'icon': '%s/UpFolder_icon.gif' % portal_url,
-                                       'id': up_obj.getId(),
-                                       'url': up_url }
-       else:
-               up_info = { 'icon': '',
-                                       'id': 'Root',
-                                       'url': '' }
-options['up_info'] = up_info
-
 target = context.getActionInfo(default_target)['url']
 
 if not key:
 target = context.getActionInfo(default_target)['url']
 
 if not key:
-       (key, reverse) = context.getDefaultSorting()
-       is_default = 1
+    (key, reverse) = context.getDefaultSorting()
+    is_default = 1
 elif (key, reverse) == context.getDefaultSorting():
 elif (key, reverse) == context.getDefaultSorting():
-       is_default = 1
+    is_default = 1
 else:
 else:
-       is_default = 0
-
-columns = ( {'key': 'Lock',
-                        'title': '',
-                        'width': '16',
-                        'colspan': None}
-                       , {'key': 'Type',
-                        'title': 'Type',
-                        'width': None,
-                        'colspan': '2'}
-                       , {'key': 'title_or_id',
-                        'title': 'Name',
-                        'width': None,
-                        'colspan': None}
-                       , {'key': 'modified',
-                        'title': 'Last Modified',
-                        'width': None,
-                        'colspan': None}
-                       , {'key': 'position',
-                        'title': 'Position',
-                        'width': None,
-                        'colspan': None }
-                       )
-
-for column in columns: 
-       images = []
-       if key == column['key'] :
-               if not is_default and manage_props_allowed :
-                       images.append( {'src' : getattr(context, 'set_default_sorting.gif').absolute_url(),
-                                                       'alt' : 'Set Sorting as Default',
-                                                       'id'     : 'SetSortingAsDefault',
-                                                       'href': '%s?%s' % (target, make_query(items_sort=True,
-                                                                                                                                 key=key,
-                                                                                                                                 reverse= (key != 'position' and [reverse] or [False])[0] )
-                                                                                                 )
-                                                        }
-                                                        )
-
-               if key != 'position' :
-                       if reverse :
-                               toggleImg = getattr(context, 'arrowDown.gif')
-                               alt = 'descending sort'
-                       else :
-                               toggleImg = getattr(context, 'arrowUp.gif')
-                               alt = 'ascending sort'
-                       query = make_query(key=column['key'], reverse = not reverse)
-               else :  
-                       toggleImg = getattr(context, 'arrowUp.gif')
-                       alt = 'ascending sort'
-                       query = make_query(key=column['key'])
-               images.append( {'src' : toggleImg.absolute_url(), 'alt' : alt} )
-       else :
-               if key != 'position' :
-                       query = make_query(key=column['key'], reverse = reverse)
-               else :
-                       query = make_query(key=column['key'])
-       
-       column['url'] = '%s?%s' % (target, query)
-       column['images'] = images
+    is_default = 0
+
+columns = ( {'key': 'Type',
+             'title': 'Type',
+             'width': None,
+             'colspan': '2'}
+            , {'key': 'id',
+             'title': 'Name',
+             'width': None,
+             'colspan': None}
+            , {'key': 'modified',
+             'title': 'Last Modified',
+             'width': None,
+             'colspan': None}
+            )
+
+for column in columns:  
+    images = []
+    if key == column['key'] :
+        if not is_default and manage_props_allowed :
+            images.append( {'src' : getattr(context, 'set_default_sorting.gif').absolute_url(),
+                            'alt' : 'Set Sorting as Default',
+                            'id'     : 'SetSortingAsDefault',
+                            'href': '%s?%s' % (target, make_query(items_sort=True,
+                                                                  key=key,
+                                                                  reverse= (key != 'position' and [reverse] or [False])[0] )
+                                                  )
+                             }
+                             )
+
+        if key != 'position' :
+            if reverse :
+                toggleImg = getattr(context, 'arrowDown.gif')
+                alt = 'descending sort'
+            else :
+                toggleImg = getattr(context, 'arrowUp.gif')
+                alt = 'ascending sort'
+            query = make_query(key=column['key'], reverse = not reverse)
+        else :  
+            toggleImg = getattr(context, 'arrowUp.gif')
+            alt = 'ascending sort'
+            query = make_query(key=column['key'])
+        images.append( {'src' : toggleImg.absolute_url(), 'alt' : alt} )
+    else :
+        if key != 'position' :
+            query = make_query(key=column['key'], reverse = reverse)
+        else :
+            query = make_query(key=column['key'])
+    
+    column['url'] = '%s?%s' % (target, query)
+    column['images'] = images
 
 context.filterCookie()
 folderfilter = context.REQUEST.get('folderfilter', '')
 filter = context.decodeFolderFilter(folderfilter)
 
 context.filterCookie()
 folderfilter = context.REQUEST.get('folderfilter', '')
 filter = context.decodeFolderFilter(folderfilter)
-items = context.listNearestFolderContents(contentFilter=filter)
+items = context.listCatalogedContents(contentFilter=filter)
 sort_dir = reverse and 'desc' or 'asc'
 sort_dir = reverse and 'desc' or 'asc'
-sortFunc = key in ['Type', 'title_or_id'] and 'nocase' or 'cmp'
+sortFunc = key in ['Type'] and 'nocase' or 'cmp'
 items = sequence.sort( items, ((key, sortFunc, sort_dir),) )
 batch_obj = Batch(items, context.default_batch_size, b_start, orphan=0, quantumleap=1)
 items = []
 items = sequence.sort( items, ((key, sortFunc, sort_dir),) )
 batch_obj = Batch(items, context.default_batch_size, b_start, orphan=0, quantumleap=1)
 items = []
-i = 1
-display_delete_button = False
+display_delete_button = not isAnon # TODO : à revoir
 for item in batch_obj:
 for item in batch_obj:
-       item_icon = item.getIcon(1)
-       item_id = item.getId()
-       item_position = key == 'position' and str(b_start + i) or '...'
-       i += 1
-       item_url = item.absolute_url()
-       try : item_delete_allowed = context.objectIdCanBeDeleted(item_id)
-       except : item_delete_allowed = checkPermission(DeleteObjects, context) # std zope perm
-       if not display_delete_button :
-               display_delete_button = item_delete_allowed
-       items.append(
-               {'lock' : not checkPermission(ModifyPortalContent, item),
-                'checkbox': item_delete_allowed and ('cb_%s' % item_id) or '',
-                'icon': item_icon and ( '%s/%s' % (portal_url, item_icon) ) or '',
-                'id': item_id,
-                'modified': item.modified().strftime(locale_date_fmt),
-                'position': item_position,
-                'title_or_id': item.title_or_id(),
-                'type': item.Type() or None,
-                'url': item_url } )
+    item_icon = item.getIcon
+    item_id = item.getId
+    item_url = item.getURL()
+    items.append(
+        {'checkbox': not isAnon,
+         'icon': item_icon and ( '%s/%s' % (portal_url, item_icon) ) or '',
+         'id': item_id,
+         'modified': item.modified.strftime(locale_date_fmt),
+         'title_or_id': item.Title or item_id,
+         'type': item.Type or None,
+         'url': item_url } )
 
 options['batch'] = { 'listColumnInfos': tuple(columns),
 
 options['batch'] = { 'listColumnInfos': tuple(columns),
-                                        'listItemInfos': tuple(items),
-                                        'sort_key' : key,
-                                        'sort_dir' : sort_dir,
-                                        'batch_obj': batch_obj }
+                     'listItemInfos': tuple(items),
+                     'firstItemPos' : b_start + 1,
+                     'sort_key' : key,
+                     'sort_dir' : sort_dir,
+                     'batch_obj': batch_obj }
 
 hidden_vars = []
 for name, value in html_marshal(**default_kw):
 
 hidden_vars = []
 for name, value in html_marshal(**default_kw):
-       hidden_vars.append( {'name': name, 'value': value} )
-       
+    hidden_vars.append( {'name': name, 'value': value} )
+    
 # buttons
 buttons = []
 if items_add_allowed and context.allowedContentTypes():
 # buttons
 buttons = []
 if items_add_allowed and context.allowedContentTypes():
-       buttons.append( {'name': 'items_new', 'value': 'New...'} )
-       if items:
-               buttons.append( {'name': 'items_rename', 'value': 'Rename'} )
-               
+    buttons.append( {'name': 'items_new', 'value': 'New...'} )
+    if items:
+        buttons.append( {'name': 'items_rename', 'value': 'Rename'} )
+        
 if checkPermission(ViewManagementScreens, context) and items:
 if checkPermission(ViewManagementScreens, context) and items:
-       buttons.append( {'name': 'items_cut', 'value': 'Cut'} )
-       buttons.append( {'name': 'items_copy', 'value': 'Copy'} )
-       
+    buttons.append( {'name': 'items_cut', 'value': 'Cut'} )
+    buttons.append( {'name': 'items_copy', 'value': 'Copy'} )
+    
 if items_add_allowed and context.cb_dataValid():
 if items_add_allowed and context.cb_dataValid():
-       buttons.append( {'name': 'items_paste', 'value': 'Paste'} )
-       
+    buttons.append( {'name': 'items_paste', 'value': 'Paste'} )
+    
 if display_delete_button and items:
 if display_delete_button and items:
-       buttons.append( {'name': 'items_delete', 'value': 'Delete'} )
+    buttons.append( {'name': 'items_delete', 'value': 'Delete'} )
 
 length = batch_obj.sequence_length
 is_orderable = manage_props_allowed and (key == 'position') and length > 1
 is_sortable = manage_props_allowed and not is_default
 options['form'] = { 'action': target,
 
 length = batch_obj.sequence_length
 is_orderable = manage_props_allowed and (key == 'position') and length > 1
 is_sortable = manage_props_allowed and not is_default
 options['form'] = { 'action': target,
-                                       'listHiddenVarInfos': tuple(hidden_vars),
-                                       'listButtonInfos': tuple(buttons),
-                                       'is_orderable': is_orderable,
-                                       'is_sortable': is_sortable }
+                    'listHiddenVarInfos': tuple(hidden_vars),
+                    'listButtonInfos': tuple(buttons),
+                    'is_orderable': is_orderable,
+                    'is_sortable': is_sortable,
+                    'items_add_allowed': items_add_allowed }
 if not ajax and is_orderable :
 if not ajax and is_orderable :
-       deltas = range( 1, min(5, length) ) + range(5, length, 5)
-       options['form']['listDeltas'] = tuple(deltas)
+    deltas = range( 1, min(5, length) ) + range(5, length, 5)
+    options['form']['listDeltas'] = tuple(deltas)
 
 if template and macro :
 
 if template and macro :
-       options['template'] = template
-       options['macro'] = macro
-       return context.use_macro(**options)
+    options['template'] = template
+    options['macro'] = macro
+    return context.use_macro(**options)
 else :
 else :
-       options.update(others)
-       return context.folder_contents_template(**options)
-
+    return context.folder_contents_template(**options)