跳转到主要内容

Plone的活动流。

项目描述

ftw.activity

ftw.activity 为Plone提供了一个包含活动流的视图。

https://raw.githubusercontent.com/4teamwork/ftw.activity/master/docs/screenshot.png

工作原理

活动通过事件处理程序存储到自定义的 souper 目录中。然后活动视图使用活动渲染器递归地渲染每个上下文的活动。

支持的事件

默认事件处理程序适用于 Archetypes 和 Dexterity 对象。

  • 对象添加

  • 对象更改

  • 对象删除

  • 对象复制

  • 对象移动

  • 工作流转换

用法

  • ftw.activity 作为依赖项添加到您的包(setup.py)或构建配置中

[instance]
eggs +=
    ftw.activity
  • 在Plone的插件控制面板中安装通用导入配置文件。

安装包后,将没有到视图的链接。视图可在任何上下文中作为 /activity 使用,因此您可能希望将其放在任何需要的位置或添加操作。

ftw.activity 还注册了一个名为 tabbedview_view-activityftw.tabbedview 选项卡。

自定义活动

自定义活动可以轻松地在 souper 目录中注册,并自动渲染

from ftw.activity.catalog import ActivityRecord
from ftw.activity.catalog import get_activity_soup

record = ActivityRecord(context, 'downloaded')
get_activity_soup().add(record)

活动渲染器

默认活动渲染器使用链接到对象(除非已删除)、事件和行动者渲染活动。

但是,如果您想更改活动渲染方式,您可以使用自定义渲染器轻松地做到这一点。活动渲染器是一个命名多适配器。

请注意,渲染器适应的是活动视图渲染的上下文,而不是活动发生的对象。原因在于该对象可能已不存在。

渲染器必须实现三个方法,positionmatchrender。由于可能存在多个可以渲染活动的适配器,因此使用position来决定哪个渲染器先执行。使用match方法来询问渲染器是否希望渲染某个活动。如果活动匹配,则使用render方法进行渲染。

警告 请注意,当对象被删除时,传递给match和render的对象可能是None

示例 ZCML 注册

<adapter factory=".activity.CustomActivityRenderer" name="my.package-renderer" />

实现适配器(activity.py

from ftw.activity.interfaces import IActivityRenderer
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.component import adapts
from zope.interface import implements
from zope.interface import Interface


class CustomActivityRenderer(object):
    implements(IActivityRenderer)
    adapts(Interface, Interface, Interface)

    index = ViewPageTemplateFile('templates/activity_renderer.pt')

    def __init__(self, context, request, view):
        self.context = context
        self.request = request
        self.view = view
        self.items = []

    def position(self):
        # The position of the default renderer is 1000
        return 500

    def match(self, activity, obj):
        return activity.attrs['portal_type'] == 'MyType'

    def render(self, activity, obj):
        return self.index(activity=activity, obj=obj)

在模板(templates/activity_renderer.pt)中,您可能想使用默认的活动宏并扩展它

<metal:wrapper use-macro="context/@@activity_macros/macros/event">
  <metal:CONTENT fill-slot="body-content"
                 tal:define="activity nocall:activity|nocall:options/activity">

    <div tal:attributes="class string:activity-icon-{$activity/action}"></div>

  </metal:CONTENT>
</metal:wrapper>

在活动中存储额外的信息

通过事件处理器可以轻松扩展存储在活动记录上的元数据

<subscriber
    for="ftw.activity.interfaces.IActivityCreatedEvent"
    handler=".subscribers.enhance_activity_record"
    />
def enhance_activity_record(event):
    record = event.activity
    obj = event.object
    record.attrs['creator'] = obj.Creator()

活动过滤器

可能存在各种自定义用例,这些用例需要在渲染活动视图时丢弃活动。例如,系统活动是为了内部目的而记录的,不应出现在活动流中。

可以通过注册一个IActivityFilter适配器轻松过滤活动

<adapter factory=".activity.CustomActivityFilter" name="my.package-filter" />
from ftw.activity.interfaces import IActivityFilter
from zope.component import adapts
from zope.interface import implements
from zope.interface import Interface


class CustomActivityFilter(object):
    implements(IActivityFilter)
    adapts(Interface, Interface, Interface)

    def __init__(self, context, request, view):
        self.context = context
        self.request = request
        self.view = view

    def position(self):
        return 500

    def process(self, activities):
        for activity in activities:
            if activity.attrs['action'] == 'custom-action':
                continue

            yield activity

存在一个默认的FilterCloseChanges过滤器,它移除发生在同一对象上的连续“更改”活动,这些活动之间的时间间隔小于1分钟。当用户在短时间内大量编辑同一对象时(例如使用外部编辑器),这会从活动流中移除噪音。

本地活动视图

@@local-activity视图在任何上下文中都可用,并且仅显示当前上下文的活动,而不显示其子上下文的活动。

有关使用 ftw.testing.freeze 进行 Plone 5.1 测试的提示

由于某种原因,在使用 freeze(contextmanager)之前需要执行 transaction.commit()。有关详细信息,请参阅https://github.com/plone/plone.restapi/pull/747我认为这是一个类似的问题,也许在使用 freeze contextmanager 之前执行 transaction.commit() 可以意外地绕过问题。

变更日志

2.5.2 (2021-02-26)

  • 在活动视图中显示 plone 工具栏 [Nachtalb]

2.5.1 (2019-12-14)

  • 提供预编译的捆绑包。 [tinagerber]

2.5.0 (2019-11-11)

  • 升级到 ftw.theming(也修复了 plone 5 中缺少的 css)[Nachtalb]

2.4.0 (2019-10-29)

  • 支持 Plone 5.1 [mathias.leimgruber]

  • 忽略移动 plone 站点时触发的事件 [raphael-s]

2.3.2 (2017-07-03)

  • 调整 readme 中的图像大小以修复其在 pypi 上的大小问题 [raphael-s]

  • 忽略没有 UIDs 的对象的触发事件,以避免错误。 [raphael-s]

2.3.1 (2017-06-19)

  • 为 node.ext.zodb <= 1.0.1 添加版本约束以避免拉取 ZODB 5。 [lgraf]

2.3.0 (2016-11-23)

  • 存储添加/删除 p.a.discussion 评论的活动。 [jone]

2.2.2 (2016-11-15)

  • 修复检测最后事件(更多按钮)中的错误 [jone]

2.2.1 (2016-11-15)

  • 当没有更多事件时隐藏“更多”按钮 [jone]

  • 当没有事件时隐藏“更多”按钮 [jone]

2.2.0 (2016-06-01)

  • 通过存储时间戳优化日期索引的性能 [jone]

2.1.0 (2016-03-21)

  • 修复在太早索引对象时与 collective.geo 相关的 bug [jone]

  • 修复了在Plone站点中移动对象时出现的错误。[mbaechtold]

  • 修复了在tabbedview标签页中抓取的问题。[jone]

  • 添加了活动面板。[elioschmutz]

2.0.0 (2015-09-30)

  • 实现了基于souper的定制目录,用于单独记录所有活动。这允许我们跟踪删除活动。渲染已完全改变:必须将自定义表示重写为新的渲染适配器。[jone]

  • 移除了对集合的支持。因为活动流将不再基于目录。[jone]

1.1.5 (2015-05-18)

  • 修复了在抓取更多事件时出现的diazo错误。[jone]

  • 禁用ajax响应的diazo主题。[jone]

1.1.4 (2015-03-25)

  • 修复了过宽图片的宽度。[Kevin Bieri]

1.1.3 (2014-11-18)

  • 修复了一个错误,当修改用户不再可用时,活动视图会崩溃。[mbaechtold]

1.1.2 (2014-09-24)

  • 忽略活动视图中的注释。修复了在添加注释时活动视图崩溃的错误。[jone]

1.1.1 (2014-09-24)

  • 空的棕色纸袋发布。

1.1.0 (2014-09-04)

  • 添加了对集合的支持。[jone]

1.0.0 (2014-09-03)

  • 初始实现。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

ftw.activity-2.5.2.tar.gz (79.7 kB 查看哈希值)

上传时间