Plone:拦截工作流转换并以编程方式将其更改为另一个

gfo*_*ada 3 python workflow plone

我们有一个实用程序(collective.contentalerts),用于检查对象(比如文章)的内容是否足够(不包含坏词).

到目前为止,我们一直在使用它plone.app.contentrules来发送电子邮件.

现在我们想更进一步:

普通用户仍然可以创建他们的文章,但是当他们试图将它们公开时,如果该实用程序在其上发现了可疑内容,则应将它们置于另一种状态(即改为进行另一个工作流转换).

所以问题是:有没有办法拦截工作流转换,并且给定一些逻辑(我们的实用程序)将预期的工作流转换到另一个?

额外的好处是,常规用户不应该在工作流转换下拉列表中看到这种向审核状态的转换.

fRi*_*iSi 7

我认为没有必要拦截转换:向用户显示转换"发布",将对象发送到状态"needs_review"

使用从"needs_review"状态到"public"的自动转换,该视图通过视图检查文章是否正常(不包含黑名单中的单词等)

这样用户就可以看到"发布"转换(而不是"发送到审核").

可以在Poi插件上找到有关如何配置保护表达式的示例.

想想这样的事情:

<guard-expression>here/@@myview</guard-expression>
Run Code Online (Sandbox Code Playgroud)

哪里myview可以是公共视图,执行所有需要的检查并返回True/False.

转换的触发类型必须是自动的,而不是"由用户启动"(参见屏幕截图)

转换配置的屏幕截图

如果您按照表达式字段旁边的[?] questionmark链接,则可以获得有关可用变量的更多信息.