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 '--' |