114 self.state = state_format.format(state=state_label.get_label(context, request, format=False), |
114 self.state = state_format.format(state=state_label.get_label(context, request, format=False), |
115 principal=security.get_principal(state.state_principal).title) |
115 principal=security.get_principal(state.state_principal).title) |
116 self.state_date = translate(_("since {date}")).format(date=format_datetime(state.state_date, request=request)) |
116 self.state_date = translate(_("since {date}")).format(date=format_datetime(state.state_date, request=request)) |
117 # check for links to other versions |
117 # check for links to other versions |
118 links = [] |
118 links = [] |
|
119 published_versions = sorted(versions.get_versions(workflow.published_states), |
|
120 key=lambda x: IWorkflowState(x).version_id) |
119 draft_versions = sorted(versions.get_versions(workflow.update_states), |
121 draft_versions = sorted(versions.get_versions(workflow.update_states), |
120 key=lambda x: IWorkflowState(x).version_id) |
122 key=lambda x: IWorkflowState(x).version_id) |
121 waiting_versions = sorted(versions.get_versions(workflow.waiting_states), |
|
122 key=lambda x: IWorkflowState(x).version_id) |
|
123 published_versions = sorted(versions.get_versions(workflow.published_states), |
|
124 key=lambda x: IWorkflowState(x).version_id) |
|
125 if (state.version_id > 1) or (state.state != workflow.initial_state): |
123 if (state.version_id > 1) or (state.state != workflow.initial_state): |
|
124 targets = set() |
|
125 if published_versions: |
|
126 target = published_versions[0] |
|
127 if (target is not context) and (target not in targets): |
|
128 links.append({'title': translate(_("access published version")), |
|
129 'href': absolute_url(target, request, 'admin'), |
|
130 'css_class': 'text-danger'}) |
|
131 targets.add(target) |
126 if draft_versions: |
132 if draft_versions: |
127 target = draft_versions[0] |
133 target = draft_versions[0] |
128 if target is not context: |
134 if (target is not context) and (target not in targets): |
129 links.append({'title': translate(_("access new version")), |
135 links.append({'title': translate(_("access new version")), |
130 'href': absolute_url(target, request, 'admin'), |
136 'href': absolute_url(target, request, 'admin'), |
131 'css_class': 'text-danger'}) |
137 'css_class': 'text-danger'}) |
132 elif waiting_versions: |
138 targets.add(target) |
133 target = waiting_versions[-1] |
139 else: |
134 if target is not context: |
140 waiting_versions = sorted(versions.get_versions(workflow.waiting_states), |
135 links.append({'title': translate(_("access waiting version")), |
141 key=lambda x: IWorkflowState(x).version_id) |
136 'href': absolute_url(target, request, 'admin'), |
142 if waiting_versions: |
137 'css_class': 'text-danger'}) |
143 target = waiting_versions[-1] |
138 if published_versions: |
144 if (target is not context) and (target not in targets): |
139 target = published_versions[0] |
145 links.append({'title': translate(_("access waiting version")), |
140 if target is not context: |
146 'href': absolute_url(target, request, 'admin'), |
141 links.append({'title': translate(_("access published version")), |
147 'css_class': 'text-danger'}) |
142 'href': absolute_url(target, request, 'admin'), |
148 targets.add(target) |
143 'css_class': 'text-danger'}) |
149 if (state.version_id > 1) and (state.state not in (workflow.retired_states | workflow.archived_states)): |
144 if state.state not in (workflow.retired_states | workflow.archived_states): |
150 retired_versions = sorted(filter(lambda x: IWorkflowState(x).version_id < state.version_id, |
145 retired_versions = sorted(versions.get_versions(workflow.retired_states), |
151 versions.get_versions(workflow.retired_states)), |
146 key=lambda x: IWorkflowState(x).version_id) |
152 key=lambda x: IWorkflowState(x).version_id) |
147 if retired_versions: |
153 if retired_versions: |
148 target = retired_versions[-1] |
154 target = retired_versions[-1] |
149 if target is not context: |
155 if (target is not context) and (target not in targets): |
150 links.append({'title': translate(_("access retired version")), |
156 links.append({'title': translate(_("access retired version")), |
151 'href': absolute_url(target, request, 'admin'), |
157 'href': absolute_url(target, request, 'admin'), |
152 'css_class': 'text-danger'}) |
158 'css_class': 'text-danger'}) |
153 else: |
159 else: |
154 archived_versions = sorted(versions.get_versions(workflow.archived_states), |
160 archived_versions = sorted(filter(lambda x: IWorkflowState(x).version_id < state.version_id, |
|
161 versions.get_versions(workflow.archived_states)), |
155 key=lambda x: IWorkflowState(x).version_id) |
162 key=lambda x: IWorkflowState(x).version_id) |
156 if archived_versions: |
163 if archived_versions: |
157 target = archived_versions[-1] |
164 target = archived_versions[-1] |
158 if target is not context: |
165 if (target is not context) and (target not in targets): |
159 links.append({'title': translate(_("access archived version")), |
166 links.append({'title': translate(_("access archived version")), |
160 'href': absolute_url(target, request, 'admin'), |
167 'href': absolute_url(target, request, 'admin'), |
161 'css_class': 'text-danger'}) |
168 'css_class': 'text-danger'}) |
162 self.versions_links = links |
169 self.versions_links = links |
163 |
170 |