From dc9a0209fbaf9ae547db11e494641f20df77aff6 Mon Sep 17 00:00:00 2001 From: Nicolas Demonte Date: Thu, 11 Apr 2019 14:49:47 +0200 Subject: [PATCH] Trigger reindexations concerning validation states #22001 --- src/pfwbged/policy/indexers.py | 13 +++++++++++++ src/pfwbged/policy/subscribers/document.py | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/src/pfwbged/policy/indexers.py b/src/pfwbged/policy/indexers.py index fe94269..e012776 100644 --- a/src/pfwbged/policy/indexers.py +++ b/src/pfwbged/policy/indexers.py @@ -45,6 +45,8 @@ def can_last_version_validate(obj, **kw): for child in reversed(obj.values()): if child.portal_type != 'dmsmainfile': continue + if api.content.get_state(child) == 'trashed': + continue wf_tool = getToolByName(obj, 'portal_workflow') workflowActions = wf_tool.listActionInfos(object=child) return bool('submit' in [x.get('id') for x in workflowActions]) @@ -60,6 +62,8 @@ def has_last_version_accept(obj, **kw): for child in reversed(obj.values()): if child.portal_type != 'dmsmainfile': continue + if api.content.get_state(child) == 'trashed': + continue last_version = child for task in reversed(obj.values()): if task.portal_type != 'validation': @@ -81,6 +85,8 @@ def has_last_version_refuse(obj, **kw): for child in reversed(obj.values()): if child.portal_type != 'dmsmainfile': continue + if api.content.get_state(child) == 'trashed': + continue last_version = child for task in reversed(obj.values()): if task.portal_type != 'validation': @@ -92,3 +98,10 @@ def has_last_version_refuse(obj, **kw): break return False grok.global_adapter(has_last_version_refuse, name='has_last_version_refuse') + + +def reindex_after_version_changes(document): + if IDmsDocument.providedBy(document): + document.reindexObject(idxs=['can_last_version_validate', + 'has_last_version_accept', + 'has_last_version_refuse']) diff --git a/src/pfwbged/policy/subscribers/document.py b/src/pfwbged/policy/subscribers/document.py index 841398f..8afbe48 100644 --- a/src/pfwbged/policy/subscribers/document.py +++ b/src/pfwbged/policy/subscribers/document.py @@ -33,6 +33,7 @@ from collective.dms.basecontent.dmsfile import IDmsFile, IDmsAppendixFile from pfwbged.folder.folder import IFolder from pfwbged.basecontent.behaviors import IPfwbDocument +from pfwbged.policy.indexers import reindex_after_version_changes from pfwbged.policy import _ from mail import changeWorkflowState @@ -113,6 +114,7 @@ def change_validation_state(context, event): if api.content.get_state(validation) == 'refused': api.content.transition(validation, 'cancel-refusal') validation.reindexObject(idxs=['review_state']) + reindex_after_version_changes(aq_parent(context)) @grok.subscribe(IDmsFile, IObjectWillBeRemovedEvent) @@ -132,6 +134,7 @@ def delete_tasks(context, event): obj = rv.from_object #obj.aq_parent.manage_delObjects([obj.getId()]) # we don't want to verify Delete object permission on object del aq_parent(obj)[obj.getId()] + reindex_after_version_changes(aq_parent(context)) @grok.subscribe(IDmsFile, IObjectAddedEvent) @@ -140,6 +143,7 @@ def version_is_signed_at_creation(context, event): if context.signed: api.content.transition(context, 'finish_without_validation') context.reindexObject(idxs=['review_state']) + reindex_after_version_changes(aq_parent(context)) ### Workflow for other documents @@ -260,6 +264,8 @@ def version_note_finished(context, event): context.__ac_local_roles_block__ = False context.reindexObjectSecurity() + reindex_after_version_changes(document) + @grok.subscribe(IDmsDocument, IAfterTransitionEvent) def document_is_processed(context, event): @@ -781,3 +787,4 @@ def set_permissions_on_files_on_add(context, event): context.reindexObject(idxs=['allowedRolesAndUsers']) document.reindexObject(idxs=['allowedRolesAndUsers']) + reindex_after_version_changes(document)