src/pyams_content/shared/view/__init__.py
changeset 856 0e8c775ca958
parent 796 2ef3bacda742
child 919 45ff6cd59fe0
--- a/src/pyams_content/shared/view/__init__.py	Tue Jul 17 18:01:26 2018 +0200
+++ b/src/pyams_content/shared/view/__init__.py	Tue Jul 17 18:01:54 2018 +0200
@@ -9,6 +9,7 @@
 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
 # FOR A PARTICULAR PURPOSE.
 #
+from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
 
 __docformat__ = 'restructuredtext'
 
@@ -65,6 +66,8 @@
 
     select_context_type = FieldProperty(IWfView['select_context_type'])
     selected_content_types = FieldProperty(IWfView['selected_content_types'])
+    select_context_datatype = FieldProperty(IWfView['select_context_datatype'])
+    selected_datatypes = FieldProperty(IWfView['selected_datatypes'])
     order_by = FieldProperty(IWfView['order_by'])
     reversed_order = FieldProperty(IWfView['reversed_order'])
     limit = FieldProperty(IWfView['limit'])
@@ -89,6 +92,16 @@
             content_types |= set(self.selected_content_types)
         return list(content_types)
 
+    def get_data_types(self, context):
+        data_types = set()
+        if self.select_context_datatype:
+            content = IWfTypedSharedContent(context, None)
+            if content is not None:
+                data_types.add(content.data_type)
+        if self.selected_datatypes:
+            data_types |= set(self.selected_datatypes)
+        return list(data_types)
+
     def get_results(self, context, sort_index=None, reverse=None, limit=None, ignore_cache=False):
         results = _MARKER
         if not ignore_cache:
@@ -153,6 +166,10 @@
         content_types = view.get_content_types(context)
         if content_types:
             params &= Any(catalog['content_type'], content_types)
+        # check data types
+        data_types = view.get_data_types(context)
+        if data_types:
+            params &= Any(catalog['data_type'], data_types)
         # check workflow states
         wf_params = None
         for workflow in registry.getAllUtilitiesRegisteredFor(IWorkflow):