我们有一个实用程序(collective.contentalerts),用于检查对象(例如文章)的内容是否足够(不包含坏词)。
到目前为止,我们一直在与plone.app.contentrules
一起使用它来发送电子邮件。
现在我们想更进一步:
普通用户仍然可以创建他们的文章,但是当他们试图将其公开时,如果该实用程序在其上发现了可疑内容,则应将它们置于另一种状态(即改为进行另一个工作流转换)。
所以问题是:有没有办法拦截工作流转换,并且给定一些逻辑(我们的实用程序)将预期的工作流转换为另一个?
额外的好处是普通用户不应该在工作流转换下拉列表中看到这种向审核状态的转换。
答案 0 :(得分:7)
我认为没有必要拦截转换:向用户显示转换“发布”,将对象发送到状态“needs_review”
使用从“needs_review”状态到“public”的自动转换,该视图通过视图检查文章是否正常(不包含黑名单中的单词等)
这样用户就可以看到“发布”转换(而不是“发送到审核”)。
有关如何配置保护表达式的示例,请参见Poi add-on。
想想这样的事情:
<guard-expression>here/@@myview</guard-expression>
其中myview
可以是执行所有必需检查并返回True / False的公共视图。
转换的触发类型必须是自动的,而不是“由用户启动”(参见屏幕截图)
如果您按照表达式字段旁边的[?] questionmark链接获取有关可用变量的更多信息。