Make saved searches private by default #4566
This commit is contained in:
parent
d82a32792c
commit
20e957d2a4
|
@ -44,6 +44,10 @@ msgstr "Retour à attribuer"
|
|||
msgid "Back to draft"
|
||||
msgstr "Retour à la rédaction"
|
||||
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Back to private"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/incomingmail_workflow/definition.xml
|
||||
msgid "Back to registering"
|
||||
msgstr "Retour à indicater"
|
||||
|
@ -138,6 +142,10 @@ msgstr "Sans suite"
|
|||
msgid "Obsolete"
|
||||
msgstr "Obsolète"
|
||||
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Private"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/pfwbgeddocument_workflow/definition.xml
|
||||
msgid "Process"
|
||||
msgstr "Traiter"
|
||||
|
@ -151,7 +159,12 @@ msgstr "Traité"
|
|||
msgid "Processing"
|
||||
msgstr "En cours de traitement"
|
||||
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/appendix_workflow/definition.xml
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Published"
|
||||
msgstr "Publiée"
|
||||
|
||||
|
|
|
@ -45,6 +45,10 @@ msgstr ""
|
|||
msgid "Back to draft"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Back to private"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/incomingmail_workflow/definition.xml
|
||||
msgid "Back to registering"
|
||||
msgstr ""
|
||||
|
@ -128,6 +132,10 @@ msgstr ""
|
|||
msgid "Obsolete"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Private"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/pfwbgeddocument_workflow/definition.xml
|
||||
msgid "Process"
|
||||
msgstr ""
|
||||
|
@ -141,7 +149,12 @@ msgstr ""
|
|||
msgid "Processing"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Publish"
|
||||
msgstr ""
|
||||
|
||||
#: ../profiles/default/workflows/appendix_workflow/definition.xml
|
||||
#: ../profiles/default/workflows/private_public_workflow/definition.xml
|
||||
msgid "Published"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0"?>
|
||||
<metadata>
|
||||
<version>8</version>
|
||||
<version>9</version>
|
||||
<dependencies>
|
||||
<dependency>profile-collective.dms.basecontent:default</dependency>
|
||||
<dependency>profile-collective.dms.batchimport:default</dependency>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<object name="pfwbgeddocument_workflow" meta_type="Workflow"/>
|
||||
<object name="pfwbgedfolder_workflow" meta_type="Workflow"/>
|
||||
<object name="pfwbgedmainfolder_workflow" meta_type="Workflow"/>
|
||||
<object name="private_public_workflow" meta_type="Workflow"/>
|
||||
<object name="versionnote_workflow" meta_type="Workflow"/>
|
||||
<bindings>
|
||||
<default>
|
||||
|
@ -17,7 +18,7 @@
|
|||
<bound-workflow workflow_id=""/>
|
||||
</type>
|
||||
<type type_id="pfwbgedcollection">
|
||||
<bound-workflow workflow_id="one_state_workflow"/>
|
||||
<bound-workflow workflow_id="private_public_workflow"/>
|
||||
</type>
|
||||
<type type_id="pfwbgedlink">
|
||||
<bound-workflow workflow_id=""/>
|
||||
|
|
|
@ -0,0 +1,106 @@
|
|||
<?xml version="1.0"?>
|
||||
<dc-workflow workflow_id="private_public_workflow"
|
||||
title="Private Public Workflow"
|
||||
description="Accessible by owner and managers when private, by everyone when published"
|
||||
state_variable="review_state"
|
||||
initial_state="private"
|
||||
manager_bypass="True"
|
||||
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
|
||||
i18n:domain="plone">
|
||||
<permission>Access contents information</permission>
|
||||
<permission>Delete objects</permission>
|
||||
<permission>Modify portal content</permission>
|
||||
<permission>View</permission>
|
||||
<state state_id="private" title="Private" i18n:attributes="title">
|
||||
<exit-transition transition_id="publish"/>
|
||||
<permission-map name="View" acquired="False">
|
||||
<permission-role>Manager</permission-role>
|
||||
<permission-role>Owner</permission-role>
|
||||
</permission-map>
|
||||
<permission-map name="Access contents information" acquired="False">
|
||||
<permission-role>Manager</permission-role>
|
||||
<permission-role>Owner</permission-role>
|
||||
</permission-map>
|
||||
<permission-map name="Modify portal content" acquired="False">
|
||||
<permission-role>Manager</permission-role>
|
||||
<permission-role>Owner</permission-role>
|
||||
</permission-map>
|
||||
<permission-map name="Delete objects" acquired="False">
|
||||
<permission-role>Manager</permission-role>
|
||||
<permission-role>Owner</permission-role>
|
||||
</permission-map>
|
||||
</state>
|
||||
<state state_id="published" title="Published" i18n:attributes="title">
|
||||
<exit-transition transition_id="back_to_private"/>
|
||||
<permission-map name="View" acquired="False">
|
||||
<permission-role>Anonymous</permission-role>
|
||||
</permission-map>
|
||||
<permission-map name="Access contents information" acquired="False">
|
||||
<permission-role>Anonymous</permission-role>
|
||||
</permission-map>
|
||||
<permission-map name="Modify portal content" acquired="False">
|
||||
<permission-role>Manager</permission-role>
|
||||
<permission-role>Owner</permission-role>
|
||||
</permission-map>
|
||||
<permission-map name="Delete objects" acquired="False">
|
||||
<permission-role>Manager</permission-role>
|
||||
<permission-role>Owner</permission-role>
|
||||
</permission-map>
|
||||
</state>
|
||||
<transition transition_id="back_to_private" title="Back to private" new_state="private" trigger="USER" before_script="" after_script="" i18n:attributes="title">
|
||||
<action url="" category="workflow" icon="" i18n:translate="">Back to private</action>
|
||||
<guard>
|
||||
<guard-role>Manager</guard-role>
|
||||
<guard-role>Owner</guard-role>
|
||||
</guard>
|
||||
</transition>
|
||||
<transition transition_id="publish" title="Publish" new_state="published" trigger="USER" before_script="" after_script="" i18n:attributes="title">
|
||||
<action url="" category="workflow" icon="" i18n:translate="">Publish</action>
|
||||
<guard>
|
||||
<guard-role>Manager</guard-role>
|
||||
<guard-role>Owner</guard-role>
|
||||
</guard>
|
||||
</transition>
|
||||
<variable variable_id="action" for_catalog="False" for_status="True" update_always="True">
|
||||
<description>Previous transition</description>
|
||||
<default>
|
||||
<expression>transition/getId|nothing</expression>
|
||||
</default>
|
||||
<guard>
|
||||
</guard>
|
||||
</variable>
|
||||
<variable variable_id="actor" for_catalog="False" for_status="True" update_always="True">
|
||||
<description>The ID of the user who performed the last transition</description>
|
||||
<default>
|
||||
<expression>user/getId</expression>
|
||||
</default>
|
||||
<guard>
|
||||
</guard>
|
||||
</variable>
|
||||
<variable variable_id="comments" for_catalog="False" for_status="True" update_always="True">
|
||||
<description>Comment about the last transition</description>
|
||||
<default>
|
||||
<expression>python:state_change.kwargs.get('comment', '')</expression>
|
||||
</default>
|
||||
<guard>
|
||||
</guard>
|
||||
</variable>
|
||||
<variable variable_id="review_history" for_catalog="False" for_status="False" update_always="False">
|
||||
<description>Provides access to workflow history</description>
|
||||
<default>
|
||||
<expression>state_change/getHistory</expression>
|
||||
</default>
|
||||
<guard>
|
||||
<guard-permission>Request review</guard-permission>
|
||||
<guard-permission>Review portal content</guard-permission>
|
||||
</guard>
|
||||
</variable>
|
||||
<variable variable_id="time" for_catalog="False" for_status="True" update_always="True">
|
||||
<description>When the previous transition was performed</description>
|
||||
<default>
|
||||
<expression>state_change/getDateTime</expression>
|
||||
</default>
|
||||
<guard>
|
||||
</guard>
|
||||
</variable>
|
||||
</dc-workflow>
|
|
@ -94,6 +94,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
role = u'responsible'
|
||||
id = '%s-%s' % (type, role)
|
||||
if id not in container:
|
||||
|
@ -108,6 +110,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
# opinions
|
||||
type = u'opinion'
|
||||
role = u'enquirer'
|
||||
|
@ -124,6 +128,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
role = u'responsible'
|
||||
id = '%s-%s' % (type, role)
|
||||
if id not in container:
|
||||
|
@ -138,6 +144,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
# validations
|
||||
type = u'validation'
|
||||
role = u'enquirer'
|
||||
|
@ -154,6 +162,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
role = u'responsible'
|
||||
id = '%s-%s' % (type, role)
|
||||
if id not in container:
|
||||
|
@ -168,6 +178,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
# informations
|
||||
sort_on = u'created'
|
||||
type = u'information'
|
||||
|
@ -185,6 +197,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
role = u'responsible'
|
||||
id = '%s-%s' % (type, role)
|
||||
if id not in container:
|
||||
|
@ -199,6 +213,8 @@ def create_tasks_collections(context):
|
|||
item_count=item_count,
|
||||
query=query,
|
||||
)
|
||||
api.content.transition(collection, 'publish')
|
||||
|
||||
|
||||
|
||||
def setup_folder_portlets(folder):
|
||||
|
|
|
@ -81,4 +81,21 @@
|
|||
handler=".registry.setup_mail_reader_group"
|
||||
/>
|
||||
|
||||
<genericsetup:upgradeSteps
|
||||
source="8"
|
||||
destination="9"
|
||||
profile="pfwbged.policy:default">
|
||||
|
||||
<genericsetup:upgradeStep
|
||||
title="Update saved search workflow"
|
||||
description=""
|
||||
handler=".workflow.update_saved_search_workflow"
|
||||
/>
|
||||
|
||||
<genericsetup:upgradeDepends
|
||||
title="Reimport workflows"
|
||||
import_steps="workflow" />
|
||||
|
||||
</genericsetup:upgradeSteps>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -76,25 +76,44 @@ def update_refused_version_state(context):
|
|||
version.reindexObject(idxs=['allowedRolesAndUsers', 'review_state'])
|
||||
|
||||
|
||||
def refresh_workflow_permissions(context, workflow_id):
|
||||
def refresh_workflow_permissions(context, workflow_id, folder_path=None):
|
||||
if not folder_path:
|
||||
folder_path = '/'.join(api.portal.get().getPhysicalPath())
|
||||
portal_workflow = api.portal.get_tool('portal_workflow')
|
||||
portal_catalog = api.portal.get_tool('portal_catalog')
|
||||
workflow = portal_workflow.getWorkflowById(workflow_id)
|
||||
portal = api.portal.get()
|
||||
folder_path = '/'.join(portal['documents'].getPhysicalPath())
|
||||
|
||||
for dx_type, wf_ids in portal_workflow._chains_by_type.items():
|
||||
if workflow_id in wf_ids:
|
||||
query = {'path': {
|
||||
'query': folder_path},
|
||||
'portal_type': dx_type}
|
||||
query = {
|
||||
'path': {'query': folder_path},
|
||||
'portal_type': dx_type,
|
||||
}
|
||||
results = portal_catalog.unrestrictedSearchResults(query)
|
||||
for brain in results:
|
||||
obj = brain.getObject()
|
||||
workflow.updateRoleMappingsFor(obj)
|
||||
obj.reindexObjectSecurity()
|
||||
obj.reindexObject(idxs=['allowedRolesAndUsers'])
|
||||
obj.reindexObject(idxs=['allowedRolesAndUsers', 'review_state'])
|
||||
|
||||
|
||||
def incomingmail_deletion_permissions(context):
|
||||
refresh_workflow_permissions(context, "incomingmail_workflow")
|
||||
folder_path = '/'.join(api.portal.get()['documents'].getPhysicalPath())
|
||||
refresh_workflow_permissions(context, "incomingmail_workflow", folder_path)
|
||||
|
||||
|
||||
def update_saved_search_workflow(context):
|
||||
refresh_workflow_permissions(context, "private_public_workflow")
|
||||
|
||||
# publish the communal searches in /Members
|
||||
query = {
|
||||
'path': {
|
||||
'query': '/'.join(api.portal.get().Members.getPhysicalPath()),
|
||||
'depth': 1,
|
||||
},
|
||||
'portal_type': 'pfwbgedcollection',
|
||||
'review_state': 'private',
|
||||
}
|
||||
portal_catalog = api.portal.get_tool('portal_catalog')
|
||||
for brain in portal_catalog.unrestrictedSearchResults(query):
|
||||
api.content.transition(brain.getObject(), 'publish')
|
||||
|
|
Reference in New Issue