工作流程有效范围(Plone/Dexterity)
项目描述
一旦到达有效日期范围,将执行自动工作流程转换并更改工作流程状态及其管理的权限。
这旨在作为Dexterity IPublication行为的替代实现。
动机
由于Plone默认的发布和过期功能在安全性方面存在不足,我们决定创建此插件。
例如:在默认的Plone中,如果内容的发布日期未到,它不会显示在导航、搜索等地方。但它仍然可以通过输入URL、通过JSON请求或许多其他方式直接访问。过期内容也是如此。
对于需要更多安全性的内容,我们希望使用zopes访问控制机制和CMF/plones工作流功能进行适当的安全处理。
安装
在你的buildout或setup.py中依赖于collective.wfeffectiverange。
运行buildout。
在你的配置文件metadata.xml中依赖于profile-collective.wfeffectiverange:default或手动在Plone控制面板的插件部分激活它。
在你的内容类型的GenericSetup XML文件中将<element value="plone.app.dexterity.behaviors.metadata.IDublinCore"/>替换为
<element value="plone.app.dexterity.behaviors.metadata.IBasic"/> <element value="collective.wfeffectiverange.behaviors.IWFEffectiveRange"/> <element value="plone.app.dexterity.behaviors.metadata.ICategorization"/> <element value="plone.app.dexterity.behaviors.metadata.IOwnership"/>
或者——当在TTW(通过表单编辑)工作时——在Dexterity内容类型控制面板的“行为”选项卡中做同样的事情。
配置一个clock-server作业,方法为@@wfeffectiverange-ticker。如何设置clock-server http://docs.plone.org/develop/plone/misc/asyncronoustasks.html
用例
在发布时
用户创建了一个未发布的内内容项。
用户设置一个将来的发布日期和时间。他必须使用此日期选择一个有效的工怍流转换。
有效意味着,这是可以从Plone默认工怍流菜单中选择的一个工怍流转换。
所选转换将在指定的日期和时间自动执行。
在过期时
首先用户创建并发布内容。
然后用户再次编辑并设置一个将来的过期日期和时间。他必须使用此日期选择一个有效的工怍流转换。
有效意味着,这是可以从Plone默认工怍流菜单中选择的一个工怍流转换。
所选转换将在指定的日期和时间自动执行。
两者都
用户创建了一个未发布的内内容。
然后用户设置一个将来的发布日期和时间。他必须使用此日期选择一个有效的工怍流转换。
有效意味着,这是可以从Plone默认工怍流菜单中选择的一个工怍流转换。
然后他还设置了一个在发布日期之后的将来日期和时间,作为过期日期。
他必须使用此日期选择一个有效的工怍流转换。
这里有效意味着,是一个与发布关联的转换的目标状态中的工怍流转换。
所选转换将在指定的日期和时间自动执行。
中止手动设置转换
用户设置了如用例1、2或3中的发布或过期日期。
用户从Plone默认工怍流菜单中选择工怍流,或以其他方式调用它。
工怍流转换将被中止,并显示错误消息。
发布日期在过去
用户在发布日期和转换执行之后编辑了用例1创建的内容。
现在发布转换字段为空,无法设置,因为发布日期在过去。
重新编辑
用户在发布日期和转换执行之后编辑了用例1创建的内容。
然后用户可以遵循用例2。
实现
用例是通过提供dexterity行为、zope cronjob和工作流订阅者来实现的。
对于设置了此行为的每个内容类型,它将查找工怍流,获取可能的转换,并将它们作为zope词汇表提供。它还将检查所选转换之间是否相互干扰。
在编辑部分,日期选项卡将被替换。此行为将替换日期选项卡中的发布/过期字段,并添加一个选择目标工怍流转换的字段,包括词汇表、验证和不变性。
服务器端JSON视图在设置发布日期后提供过期日期的转换,以便提供适当的词汇。
为了使其工作,您必须配置一个cron作业来检查是否满足所需的流程转换日期。请参阅安装部分
限制
不支持内容类型有两个工作流的情况。
源代码和贡献
如果您想帮助开发(报告、改进、更新、错误修复等)collective.wfeffectiverange,这是一个好主意!
请在问题跟踪器处提交任何问题或增强建议。
代码位于github collective。
您可以克隆它或获取对github-collective的访问权限并直接在项目上工作。
维护者是Jens Klein和BlueDynamics Alliance开发者团队。我们感谢任何贡献,如果需要在pypi上发布版本,请联系我们中的任何一位dev@bluedynamics dot com
贡献者
Benjamin Stefaner <bs@kleinundpartner.at> - 开发
Jens W. Klein <jens@bluedynamics.com> - 开发
Peter Holzer <peter.holzer@agitator.com> - 用例,开发
变更
2.0.0 (2016-12-08)
为Plone5/Plone4兼容性升级[agitator]
1.8.2 (未发布)
尚未有任何更改。
1.8.1 (2016-12-08)
修复 #3: 在行为标签内未选择任何内容时,修复KeyError: u'--NOVALUE--'。[jensens]
1.8.0 (2016-11-24)
修复:重构词汇表以使其更简单,并考虑提交的表单数据。[jensens]
修复:翻译转换[jensens]
修复:addform使用了父级转换词汇表。[jensens]
移除了plone4cron依赖[jensens]
代码重写[jensens]
1.7.1 (2015-11-30)
修复:使用plone4.csrffixes修复目标状态词汇的重新加载
1.7 (2015-10-30)
支持plone.protect和plone4.csrffixes[agitator]
仅对认证用户加载js[agitator]
1.6 (2015-02-04)
支持plone.app.multilingual的翻译
禁用干扰的行内验证[agitator]
1.5 (2014-12-18)
添加德语翻译
修复现有过期转换的js
对于ajax reload-vocab没有缓存/合并[jensens]
1.4 (2014-10-20)
错误修复:订阅者同时设置了两个转换有问题。[jensens, 2014-10-20]
1.3 (2014-10-20)
错误修复:在更改后行为上的标记接口缺失,因此索引器无法工作。由于plone.app.dexterity本身的错误,我们无法提供标记。因此,我们将索引器绑定到一个通用接口。[jensens, 2014-10-20]
1.2 (2014-10-18)
错误修复:如果没有设置初始转换,则设置默认值以防止失败。[jensens, 2014-10-18]
1.1 (2014-09-23)
修复:在表单验证错误后保持转换。尊重base_url进行视图调用。修复了词汇获取。[benniboy, 2014-09-23]
1.0.1 (2014-09-22)
修复:ticker视图名称错误。[jensens, 2014-09-22]
1.0 (2014-09-22)
初始实现。[jensens, benniboy, 2014-09-22]
许可证
版权所有(c)2014,BlueDynamics Alliance,奥地利,瑞士,德国
GNU通用公共许可证
复制、分发和修改的条款和条件
本许可证适用于任何包含版权所有者放置的通知,表明它可以根据本通用公共许可证的条款进行分发的程序或其他作品。以下“程序”指任何此类程序或作品,“基于程序的作品”指任何此类程序或作品,或者根据版权法下的衍生作品:也就是说,包含程序或其部分的作品,无论是原文还是经过修改和/或翻译成另一种语言。(以下,翻译包括在“修改”一词中,不限于此。)每个许可证持有人均称为“您”。
本许可证不涵盖除复制、分发和修改以外的活动;它们超出了其范围。运行程序的行为不受限制,只有当程序的内容构成基于程序的作品(不取决于是否通过运行程序来制作)时,程序输出的内容才受本许可证的保护。这究竟是不是真的取决于程序做什么。
您可以将程序源代码的原始文本复制并分发,在任何媒介上,前提是您在每个副本上明显且适当地发布适当的版权声明和免责声明;保持所有提及本许可证和任何保证不存在的内容完整;并且向程序的其他接收者提供本许可证的副本以及程序。
您可以为转移副本的物理行为收取费用,并且您可以选择以费用为交换条件提供保证。
- 2 您可以修改程序或其任何部分的副本
,从而形成基于程序的成果,并根据上述第1节的规定复制和分发此类修改或成果,前提是您也满足以下所有条件
a) 您必须使修改后的文件包含显眼的声明,说明您已更改文件以及任何更改的日期。
b) 您必须使您分发或发布的任何作品,无论是全部还是部分包含或源自程序或其任何部分,在无费用情况下根据本许可证的条款整体许可给所有第三方。
c) 如果修改后的程序在运行时通常交互式地读取命令,则在以最普通的方式启动进行此类交互式使用时,必须使其打印或显示包含适当的版权声明和声明没有保证(或者,如果说明您提供保证),用户可以在此条件下重新分发程序,并告诉用户如何查看本许可证的副本。(例外:如果程序本身是交互式的但通常不打印此类公告,则您的基于程序的成果不需要打印公告。)
这些要求适用于整个修改后的成果。如果该成果的可识别部分不是源自程序,并且可以合理地视为独立且单独的作品,那么当您将它们作为单独的作品分发时,本许可证及其条款不适用于这些部分。但是,当您将相同的部分作为整体的一部分分发,该整体是基于程序的作品时,整体的分发必须符合本许可证的条款,其许可权延伸到整个整体,因此延伸到每个和每一个部分,无论谁编写。
因此,本节的目的不是声称权利或争议您对完全由您编写的作品的权益;相反,目的是行使控制基于程序派生或集体作品分发的权利。
此外,将另一作品(该作品不是基于程序的)与程序(或与基于程序的作品)在存储或分发媒介的卷上简单地聚合,不会将其他作品纳入本许可证的范围内。
您可以在上述第1节和第2节的条款下以目标代码或可执行形式复制和分发程序(或根据第2节基于它的作品),前提是您还做以下之一
a) 伴随它完整的相应机器可读源代码,该源代码必须按照上述第1节和第2节的条款在通常用于软件交换的媒介上分发;或
b) 伴随一个书面要约,有效期为至少三年,向任何第三方提供完整的机器可读源代码的副本,费用不超过您物理执行源代码分发的成本,按照上述第1节和第2节的条款在通常用于软件交换的媒介上分发;或
c) 伴随您收到的关于分发相应源代码的要约信息。(此替代方案仅适用于非商业分发,并且仅在您根据上述b节收到以目标代码或可执行形式提供此类要约的程序时才允许。)
作品的源代码是指对该作品进行修改时首选的形式。对于可执行作品,完整的源代码意味着包含所有模块的源代码,以及任何相关的接口定义文件,以及用于控制编译和安装可执行文件的脚本。然而,作为一个特殊例外,分发的源代码不必包括通常与操作系统的主要组件(编译器、内核等)一起分发的任何内容,除非该组件本身伴随可执行文件。
如果通过提供从指定地点复制的方式分发可执行代码或对象代码,那么提供从同一地点复制源代码的等效访问权限也视为源代码的分发,即使第三方没有被要求与对象代码一起复制源代码。
您不得复制、修改、再许可或分发该程序,除非本许可证明确允许。任何其他方式的复制、修改、再许可或分发该程序都是无效的,并将自动终止您根据本许可证享有的权利。然而,根据本许可证从您那里收到副本或权利的各方,只要这些方保持完全遵守,他们的许可证不会终止。
您不需要接受此许可证,因为您没有签署它。然而,没有其他东西授予您修改或分发程序或其衍生作品的权利。如果您不接受此许可证,这些行为将受到法律的禁止。因此,通过修改或分发程序(或基于程序的任何作品),您表明您接受此许可证来这样做,并接受所有复制、分发或修改程序或基于该程序的作品的条款和条件。
每次您重新分发程序(或基于程序的任何作品),接收方自动从原始许可方获得一个许可证,以根据这些条款和条件复制、分发或修改程序。您不得对受让人行使本许可证授予的权利施加任何进一步的限制。您不负责强制第三方遵守本许可证。
如果由于法院判决、专利侵权指控或其他原因(不仅限于专利问题),对您施加的条件(无论是由法院命令、协议还是其他方式)与本许可证的条件相矛盾,则这些条件不能免除您遵守本许可证的条件。如果您不能以同时满足本许可证和任何其他相关义务的方式分发,那么作为后果,您可能根本不能分发程序。例如,如果专利许可不会允许所有直接或间接通过您获得副本的人免费重新分发程序,那么满足这两个条件的方法就是完全停止分发程序。
如果在本节任何部分在特定情况下被认定为无效或不可执行,则本节其余部分应适用,并且本节整体应在其他情况下适用。
本节的目的不是诱使您侵犯任何专利或其他财产权主张或质疑此类主张的有效性;本节的目的仅在于保护免费软件分发系统的完整性,该系统通过公共许可实践实现。许多人已通过该系统对广泛分发的软件做出了慷慨的贡献,他们依赖该系统的一致性应用;作者/捐赠者决定是否愿意通过任何其他系统分发软件,而许可方不能强加这种选择。
本节旨在彻底阐明据信是本许可证其余部分后果的内容。
如果由于专利或版权接口而限制某些国家对程序的分发和使用,将程序置于本许可证之下的原始版权所有者可以明确地添加地理分发限制,排除这些国家,以便只在或在这些未被排除的国家内分发。在这种情况下,本许可证将包含此限制,就像它写入本许可证正文一样。
自由软件基金会可能会不时发布通用公共许可证的修订版和新版本。这些新版本的精神将与当前版本相似,但可能在不同细节上有所不同,以解决新问题或关注点。
每个版本都有一个区分性的版本号。如果程序指定了适用于它的本许可证的版本号以及“任何后续版本”,您可以选择遵守该版本或自由软件基金会发布的任何后续版本的条款和条件。如果程序没有指定本许可证的版本号,您可以选择自由软件基金会发布的任何版本。
如果您希望将程序的部分内容纳入其他分发条件不同的免费程序中,请写信给作者请求许可。对于由自由软件基金会拥有的版权软件,请写信给自由软件基金会;我们有时会为此做出例外。我们的决定将受两个目标的指导:保护我们免费软件的所有派生作品的免费状态,以及促进软件的共享和重用。
无保证
由于程序免费许可,根据适用法律允许的程度,程序没有保证。除非在书面文件中另有说明,否则版权所有者以及/或提供程序“按原样”的任何其他方(无论明示还是暗示)不提供任何类型的保证,包括但不限于适销性和针对特定目的的适用性隐含保证。程序的质量和性能的全部风险由您承担。如果程序被发现有缺陷,您将承担所有必要服务、维修或纠正的费用。
除非适用法律要求或书面同意,否则在任何情况下,版权所有者或任何其他可能根据上述许可修改和/或重新分发程序的方都不会对您承担损害赔偿责任,包括但不限于因使用或无法使用程序(包括但不限于数据丢失或数据被错误处理或您或第三方遭受的损失或程序与任何其他程序无法协同工作)而产生的任何一般性、特殊性、偶然性或后果性损害,即使该持有人或其他方已被告知可能发生此类损害。
条款和条件结束
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。