7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
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 from zope.dublincore.interfaces import IZopeDublinCore |
|
13 |
|
14 from pyams_workflow.interfaces import IWorkflowPublicationInfo |
12 |
15 |
13 __docformat__ = 'restructuredtext' |
16 __docformat__ = 'restructuredtext' |
14 |
17 |
15 |
18 |
16 # import standard library |
19 # import standard library |
91 |
94 |
92 class SortedMergeMode(object): |
95 class SortedMergeMode(object): |
93 """Sorted merge mode base class""" |
96 """Sorted merge mode base class""" |
94 |
97 |
95 sort_index = None |
98 sort_index = None |
|
99 sort_key = None |
96 |
100 |
97 @classmethod |
101 @classmethod |
98 def get_results(cls, views, context): |
102 def get_results(cls, views, context): |
99 results = (view.get_results(context, |
103 results = (view.get_results(context, |
100 sort_index=cls.sort_index, |
104 sort_index=cls.sort_index, |
101 reverse=True) |
105 reverse=True) |
102 for view in views) |
106 for view in views) |
103 yield from merge(*results) |
107 yield from merge(*results, key=cls.sort_key) |
104 |
108 |
105 |
109 |
106 @utility_config(name='{0}.sort'.format(CREATION_DATE_ORDER), provides=IViewsMerger) |
110 @utility_config(name='{0}.sort'.format(CREATION_DATE_ORDER), provides=IViewsMerger) |
107 class CreationDateSortedMergeMode(SortedMergeMode): |
111 class CreationDateSortedMergeMode(SortedMergeMode): |
108 """Merge pre-sorted views by creation date""" |
112 """Merge pre-sorted views by creation date""" |
109 |
113 |
110 label = _("Sort all results by creation date") |
114 label = _("Sort all results by creation date") |
111 sort_index = CREATION_DATE_ORDER |
115 sort_index = CREATION_DATE_ORDER |
|
116 sort_key = lambda x: IZopeDublinCore(x).created |
112 |
117 |
113 |
118 |
114 @utility_config(name='{0}.sort'.format(UPDATE_DATE_ORDER), provides=IViewsMerger) |
119 @utility_config(name='{0}.sort'.format(UPDATE_DATE_ORDER), provides=IViewsMerger) |
115 class UpdateDateSortedMergeMode(SortedMergeMode): |
120 class UpdateDateSortedMergeMode(SortedMergeMode): |
116 """Merge pre-sorted views by last update date""" |
121 """Merge pre-sorted views by last update date""" |
117 |
122 |
118 label = _("Sort all results by last update date") |
123 label = _("Sort all results by last update date") |
119 sort_index = UPDATE_DATE_ORDER |
124 sort_index = UPDATE_DATE_ORDER |
|
125 sort_key = lambda x: IZopeDublinCore(x).modified |
120 |
126 |
121 |
127 |
122 @utility_config(name='{0}.sort'.format(PUBLICATION_DATE_ORDER), provides=IViewsMerger) |
128 @utility_config(name='{0}.sort'.format(PUBLICATION_DATE_ORDER), provides=IViewsMerger) |
123 class PublicationDateSortedMergeMode(SortedMergeMode): |
129 class PublicationDateSortedMergeMode(SortedMergeMode): |
124 """Merge pre-sorted views by publication date""" |
130 """Merge pre-sorted views by publication date""" |
125 |
131 |
126 label = _("Sort all results by current publication date") |
132 label = _("Sort all results by current publication date") |
127 sort_index = PUBLICATION_DATE_ORDER |
133 sort_index = PUBLICATION_DATE_ORDER |
|
134 sort_key = lambda x: IWorkflowPublicationInfo(x).publication_date |
128 |
135 |
129 |
136 |
130 @utility_config(name='{0}.sort'.format(FIRSTPUBLICATION_DATE_ORDER), provides=IViewsMerger) |
137 @utility_config(name='{0}.sort'.format(FIRSTPUBLICATION_DATE_ORDER), provides=IViewsMerger) |
131 class FirstPublicationDateSortedMergeMode(SortedMergeMode): |
138 class FirstPublicationDateSortedMergeMode(SortedMergeMode): |
132 """Merge pre-sorted views by first publication date""" |
139 """Merge pre-sorted views by first publication date""" |
133 |
140 |
134 label = _("Sort all results by first publication date") |
141 label = _("Sort all results by first publication date") |
135 sort_index = FIRSTPUBLICATION_DATE_ORDER |
142 sort_index = FIRSTPUBLICATION_DATE_ORDER |
|
143 sort_key = lambda x: IWorkflowPublicationInfo(x).first_publication_date |