icap / notification-bundle
Claroline Connect 的通知包。请参阅 https://github.com/claroline/Claroline
Requires
- php: >=5.4.1
- claroline/core-bundle: ~6.0
README
警告
开发已迁移到 claroline/Distribution。此存储库不再维护。
Claroline Connect 的通知包。请参阅 https://github.com/claroline/Claroline
这里 是对通知系统功能的分析。
安装
此包完成核心包的功能。它是必需的,以便系统能够生成通知。
通过 composer
composer require icap/notification-bundle "dev-master"
配置
- 安装后,已添加一个通知配置管理工具,允许设置以下内容
- 通知列表页面每页的最大通知数(默认 50)
- 下拉列表中的通知数(默认 10)
- 激活自动清理通知项,在 x 天后
- 通知删除后的天数
在插件中使用
为了在 Claroline connect 插件中集成和启用通知,您需要遵循以下步骤
-
在您的界面中添加
{% render controller('IcapNotificationBundle:FollowerResource:renderForm', {'resourceId': _resource.resourceNode.id, 'resourceClass': _resource.resourceNode.class}) %}
以渲染允许用户启用和禁用资源通知的按钮。如您所见,需要两个参数,即资源节点 ID 和资源节点类。 -
您想要生成通知的任何事件都需要实现 NotifiableInterface。此接口有 9 个方法。
- getSendToFollowers() : 返回布尔值,表示事件是否可以通知资源的关注者
- getIncludeUserIds() : 返回将收到通知的用户 ID 列表(额外用户,不一定在关注者列表中)
- getExcludeUserIds() : 返回不应收到通知的用户 ID 列表(这些用户可以是关注者列表或 includeUsers 列表中的)
- getDoer() : 返回触发通知的用户(此方法已存在于 LogGenericEvent 类中)
- getActionKey() : 返回包含执行动作名称/键的字符串
- getIconKey() : 返回字符串,通常是资源类型的名称,例如 "wiki",并用于为具有相同图标名称的每个通知生成颜色。此颜色是迷你图标的背景颜色,而文本内容用于此图标则是图标键的首字母。
- getResource() : 返回执行动作的资源(此方法已存在于 LogGenericEvent 类中)
- getNotificationDetails() : 返回包含有关资源名称、ID 和类型以及其他信息的数组(数据库中的 JsonArray),这些信息对于渲染通知文本是必要的。有关 "doer" 的所有信息都由通知插件自动添加。其余(资源等)需要手动添加。
- isAllowedToNotify() : 返回 true 或 false,并通知 CoreBundle 该事件是否引发通知。它可以测试一个条件,如果这个条件失败,则不会创建或发送通知;否则,如果条件满足,则会创建并发送通知给用户。
您可以使用 WikiBundle 中的 LogContributionCreateEvent 示例来指导您。
-
在 translations 文件夹下创建一个翻译域,命名格式为
notification.lang.yml
-
在 views 文件夹下创建一个
Notification
文件夹,并将所有与通知显示/渲染相关的视图存储在其中。建议创建一个通用的 twig 文件,例如notification_item.html.twig
,它将扩展IcapNotificationBundle:Templates:notification.html.twig
模板,将渲染所有公共元素,并根据操作类型包含任何其他必要的模板。示例 在这里 -
创建监听器,例如
NotificationListener
,以及服务 e.g.listeners.yml
是 WikiBundle 的示例 -
*new
创建监听器,NotificationUserParametersListener
以启用用户激活和停用通知的显示
您可以在 iCAPLyon1/WikiBundle 中找到这些步骤的完整示例
请只为通知内容创建/添加的事件启用通知。不要为内容删除启用。否则,用户可能会陷入“通知过载”。
在插件中集成用户标记
如果您想允许用户标记和通知其他用户,则应遵循以下步骤
-
对于您的插件中包含文本的每个实体,由 tinymce 编辑器实现(例如博客中的帖子、维基中的贡献等),您需要创建
-
一个受保护的变量来存储用户选择器对象(包含有关原始文本、最终文本以及标记用户列表的信息)
protected $userPicker = null;
-
开发一个
@ORM\PrePersist
方法,实例化用户选择器并将原始文本与最终文本交换。/** * @ORM\PrePersist */ public function createUserPicker(LifecycleEventArgs $event){ if ($this->getText() != null) { $userPicker = new UserPickerContent($this->getText()); $this->setUserPicker($userPicker); $this->setText($userPicker->getFinalText()); } }
-
创建一个实体监听器类并将其与您的实体关联。以下是一个示例(对于 WikiBundle 中的贡献实体)
@ORM\EntityListeners({"Icap\WikiBundle\Listener\ContributionListener"})
此实体监听器负责在实体的 postPersist 事件上创建通知并通知每个标记的用户。这里 是贡献监听器的示例。
-
-
在
listeners.yml
文件中添加一行用于新事件。示例- { name: kernel.event_listener, event: create_notification_item_resource-icap_wiki-user_tagged, method: onCreateNotificationItem }
-
处理新通知事件的渲染。(创建专用视图等。)这里 是维基包的此视图,这里 是修改后的 notification_item 视图,以包含新事件。