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

Plone: intercept a workflow transition and change it to another one programmatically

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

到目前为止,我们一直在将它与 plone.app.contentrules 一起使用,以便在发生这种情况时发送电子邮件。

现在我们要更进一步:

普通用户仍然可以创建他们的文章,但每当他们尝试创建它们时 public,如果该实用程序发现其中有可疑内容,它应该将它们置于另一种状态(即进行另一个工作流转换) .

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

普通用户不应在工作流转换下拉列表中看到这种到审核状态的转换。

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

的转换 "publish"

使用从状态 "needs_review" 到 "public" 的自动转换,该转换受保护以检查文章是否正常(不包含黑名单中的字词等)

这样用户会看到 "publish" 转换(而不是 "send to moderation")。

可以在 Poi add-on.

上找到有关如何配置保护表达式的示例

想想这样的事情:

<guard-expression>here/@@myview</guard-expression>

其中 myview 可以是执行所有需要的检查的 public 视图和 return True/False.

转换的触发类型必须是自动而不是 "initiated by user"(见屏幕截图)

如果您遵循表达式字段旁边的 [?] 问号 link,您将获得有关可用变量的更多信息。