src/pyams_content/component/extfile/zmi/__init__.py
changeset 1414 3a4788a4127c
parent 1022 2a0a220c2e81
child 1417 2d29fd159410
equal deleted inserted replaced
1413:fbe52dda730c 1414:3a4788a4127c
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
       
    14 
       
    15 from z3c.form import field
    13 from z3c.form import field
       
    14 from z3c.table.column import GetAttrColumn
       
    15 from z3c.table.interfaces import IColumn
       
    16 from zope.dublincore.interfaces import IZopeDublinCore
    16 from zope.interface import Interface
    17 from zope.interface import Interface
    17 from zope.schema import Choice
    18 from zope.schema import Choice
    18 
    19 
    19 from pyams_content.component.association.interfaces import IAssociationContainer
    20 from pyams_content.component.association.interfaces import IAssociationContainer
    20 from pyams_content.component.association.zmi import AssociationItemAJAXAddForm, AssociationItemAJAXEditForm
    21 from pyams_content.component.association.zmi import AssociationItemAJAXAddForm, \
       
    22     AssociationItemAJAXEditForm, AssociationsTable
    21 from pyams_content.component.association.zmi.interfaces import IAssociationsView
    23 from pyams_content.component.association.zmi.interfaces import IAssociationsView
    22 from pyams_content.component.extfile import EXTERNAL_FILES_FACTORIES
    24 from pyams_content.component.extfile import EXTERNAL_FILES_FACTORIES
    23 from pyams_content.component.extfile.interfaces import IExtAudio, IExtFile, IExtFileContainerTarget, IExtImage, \
    25 from pyams_content.component.extfile.interfaces import IExtAudio, IExtFile, \
    24     IExtMedia, IExtVideo
    26     IExtFileContainerTarget, IExtImage, IExtMedia, IExtVideo
    25 from pyams_content.component.extfile.zmi.widget import I18nExtFileTitleFieldWidget
    27 from pyams_content.component.extfile.zmi.widget import I18nExtFileTitleFieldWidget
    26 from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event
    28 from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event
    27 from pyams_content.component.paragraph.zmi.container import ParagraphContainerCounterBase
    29 from pyams_content.component.paragraph.zmi.container import ParagraphContainerCounterBase
    28 from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerTable, IParagraphTitleToolbar
    30 from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerTable, \
       
    31     IParagraphTitleToolbar
    29 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    32 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
    30 from pyams_form.form import ajax_config
    33 from pyams_form.form import ajax_config
    31 from pyams_form.security import ProtectedFormObjectMixin
    34 from pyams_form.security import ProtectedFormObjectMixin
    32 from pyams_pagelet.pagelet import pagelet_config
    35 from pyams_pagelet.pagelet import pagelet_config
    33 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
    36 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu
    34 from pyams_skin.layer import IPyAMSLayer
    37 from pyams_skin.layer import IPyAMSLayer
       
    38 from pyams_skin.table import I18nColumn
    35 from pyams_skin.viewlet.toolbar import ToolbarMenuDivider, ToolbarMenuItem
    39 from pyams_skin.viewlet.toolbar import ToolbarMenuDivider, ToolbarMenuItem
       
    40 from pyams_utils.adapter import adapter_config
       
    41 from pyams_utils.date import SH_DATETIME_FORMAT, format_datetime
    36 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    42 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
       
    43 from pyams_utils.timezone import tztime
    37 from pyams_viewlet.viewlet import viewlet_config
    44 from pyams_viewlet.viewlet import viewlet_config
    38 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
    45 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
       
    46 
       
    47 
       
    48 __docformat__ = 'restructuredtext'
    39 
    49 
    40 from pyams_content import _
    50 from pyams_content import _
    41 
    51 
    42 
    52 
    43 class IExtFileFactoryChooser(Interface):
    53 class IExtFileFactoryChooser(Interface):
   391     def get_ajax_output(self, changes):
   401     def get_ajax_output(self, changes):
   392         if changes:
   402         if changes:
   393             return self.get_associations_table()
   403             return self.get_associations_table()
   394         else:
   404         else:
   395             return super(self.__class__, self).get_ajax_output(changes)
   405             return super(self.__class__, self).get_ajax_output(changes)
       
   406 
       
   407 
       
   408 #
       
   409 # External files containers columns
       
   410 #
       
   411 
       
   412 @adapter_config(name='created',
       
   413                 context=(IExtFileContainerTarget, IPyAMSLayer, AssociationsTable),
       
   414                 provides=IColumn)
       
   415 class AssociationsTableCreatedColumn(I18nColumn, GetAttrColumn):
       
   416     """Associations table creation date column"""
       
   417 
       
   418     _header = _("Created")
       
   419     weight = 40
       
   420 
       
   421     def getValue(self, obj):
       
   422         dc = IZopeDublinCore(obj, None)
       
   423         if dc is not None:
       
   424             return format_datetime(tztime(dc.created), SH_DATETIME_FORMAT, request=self.request)
       
   425         return '--'
       
   426 
       
   427 
       
   428 @adapter_config(name='modified',
       
   429                 context=(IExtFileContainerTarget, IPyAMSLayer, AssociationsTable),
       
   430                 provides=IColumn)
       
   431 class AssociationsTableModifiedColumn(I18nColumn, GetAttrColumn):
       
   432     """Associations table modification date column"""
       
   433 
       
   434     _header = _("Modified")
       
   435     weight = 45
       
   436 
       
   437     def getValue(self, obj):
       
   438         dc = IZopeDublinCore(obj)
       
   439         last = None
       
   440         if obj.data:
       
   441             for value in obj.data.values():
       
   442                 if value is None:
       
   443                     continue
       
   444                 file_dc = IZopeDublinCore(value, None)
       
   445                 if (file_dc is not None) and (file_dc.modified > dc.created):
       
   446                     last = max(file_dc.created, file_dc.modified) if last is None \
       
   447                         else max(last, file_dc.created, file_dc.modified)
       
   448             if last is not None:
       
   449                 return format_datetime(tztime(last), SH_DATETIME_FORMAT,
       
   450                                        request=self.request)
       
   451         return '--'