src/pyams_content/shared/common/zmi/header.py
changeset 310 61c586146b50
parent 277 9649f8ce3b1c
child 956 a8723fffbaf6
equal deleted inserted replaced
309:7f470b562ab8 310:61c586146b50
   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